github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/domain/bundleinstanceauth/fixtures_test.go (about)

     1  package bundleinstanceauth_test
     2  
     3  import (
     4  	"database/sql"
     5  	"database/sql/driver"
     6  	"encoding/json"
     7  	"errors"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/kyma-incubator/compass/components/director/pkg/str"
    12  
    13  	"github.com/kyma-incubator/compass/components/director/pkg/graphql"
    14  
    15  	"github.com/DATA-DOG/go-sqlmock"
    16  	"github.com/kyma-incubator/compass/components/director/internal/domain/bundleinstanceauth"
    17  
    18  	"github.com/stretchr/testify/require"
    19  
    20  	"github.com/kyma-incubator/compass/components/director/internal/model"
    21  )
    22  
    23  var (
    24  	testID             = "foo"
    25  	testBundleID       = "bar"
    26  	testRuntimeID      = "d05fb90c-3084-4349-9deb-af23a4ce76be"
    27  	testTenant         = "b91b59f7-2563-40b2-aba9-fef726037aa3"
    28  	testExternalTenant = "foobaz"
    29  	testContext        = `{"foo": "bar"}`
    30  	testInputParams    = `{"bar": "baz"}`
    31  	testError          = errors.New("test")
    32  	testTime           = time.Now()
    33  	testTableColumns   = []string{"id", "owner_id", "bundle_id", "context", "input_params", "auth_value", "status_condition", "status_timestamp", "status_message", "status_reason", "runtime_id", "runtime_context_id"}
    34  )
    35  
    36  func fixModelBundleInstanceAuth(id, bundleID, tenant string, auth *model.Auth, status *model.BundleInstanceAuthStatus, runtimeID *string) *model.BundleInstanceAuth {
    37  	pia := fixModelBundleInstanceAuthWithoutContextAndInputParams(id, bundleID, tenant, auth, status, runtimeID)
    38  	pia.Context = &testContext
    39  	pia.InputParams = &testInputParams
    40  
    41  	return pia
    42  }
    43  
    44  func fixModelBundleInstanceAuthWithoutContextAndInputParams(id, bundleID, tenant string, auth *model.Auth, status *model.BundleInstanceAuthStatus, runtimeID *string) *model.BundleInstanceAuth {
    45  	return &model.BundleInstanceAuth{
    46  		ID:        id,
    47  		BundleID:  bundleID,
    48  		RuntimeID: runtimeID,
    49  		Owner:     tenant,
    50  		Auth:      auth,
    51  		Status:    status,
    52  	}
    53  }
    54  
    55  func fixGQLBundleInstanceAuth(id string, auth *graphql.Auth, status *graphql.BundleInstanceAuthStatus, runtimeID *string) *graphql.BundleInstanceAuth {
    56  	context := graphql.JSON(testContext)
    57  	inputParams := graphql.JSON(testInputParams)
    58  
    59  	out := fixGQLBundleInstanceAuthWithoutContextAndInputParams(id, auth, status, runtimeID)
    60  	out.Context = &context
    61  	out.InputParams = &inputParams
    62  
    63  	return out
    64  }
    65  
    66  func fixGQLBundleInstanceAuthWithoutContextAndInputParams(id string, auth *graphql.Auth, status *graphql.BundleInstanceAuthStatus, runtimeID *string) *graphql.BundleInstanceAuth {
    67  	return &graphql.BundleInstanceAuth{
    68  		ID:        id,
    69  		Auth:      auth,
    70  		Status:    status,
    71  		RuntimeID: runtimeID,
    72  	}
    73  }
    74  
    75  func fixModelStatusSucceeded() *model.BundleInstanceAuthStatus {
    76  	return &model.BundleInstanceAuthStatus{
    77  		Condition: model.BundleInstanceAuthStatusConditionSucceeded,
    78  		Timestamp: testTime,
    79  		Message:   "Credentials were provided.",
    80  		Reason:    "CredentialsProvided",
    81  	}
    82  }
    83  
    84  func fixModelStatusPending() *model.BundleInstanceAuthStatus {
    85  	return &model.BundleInstanceAuthStatus{
    86  		Condition: model.BundleInstanceAuthStatusConditionPending,
    87  		Timestamp: testTime,
    88  		Message:   "Credentials were not yet provided.",
    89  		Reason:    "CredentialsNotProvided",
    90  	}
    91  }
    92  
    93  func fixGQLStatusSucceeded() *graphql.BundleInstanceAuthStatus {
    94  	return &graphql.BundleInstanceAuthStatus{
    95  		Condition: graphql.BundleInstanceAuthStatusConditionSucceeded,
    96  		Timestamp: graphql.Timestamp(testTime),
    97  		Message:   "Credentials were provided.",
    98  		Reason:    "CredentialsProvided",
    99  	}
   100  }
   101  
   102  func fixGQLStatusPending() *graphql.BundleInstanceAuthStatus {
   103  	return &graphql.BundleInstanceAuthStatus{
   104  		Condition: graphql.BundleInstanceAuthStatusConditionPending,
   105  		Timestamp: graphql.Timestamp(testTime),
   106  		Message:   "Credentials were not yet provided.",
   107  		Reason:    "CredentialsNotProvided",
   108  	}
   109  }
   110  
   111  func fixModelStatusInput(condition model.BundleInstanceAuthSetStatusConditionInput, message, reason string) *model.BundleInstanceAuthStatusInput {
   112  	return &model.BundleInstanceAuthStatusInput{
   113  		Condition: condition,
   114  		Message:   message,
   115  		Reason:    reason,
   116  	}
   117  }
   118  
   119  func fixGQLStatusInput(condition graphql.BundleInstanceAuthSetStatusConditionInput, message, reason string) *graphql.BundleInstanceAuthStatusInput {
   120  	return &graphql.BundleInstanceAuthStatusInput{
   121  		Condition: condition,
   122  		Message:   message,
   123  		Reason:    reason,
   124  	}
   125  }
   126  
   127  func fixModelRequestInput() *model.BundleInstanceAuthRequestInput {
   128  	return &model.BundleInstanceAuthRequestInput{
   129  		Context:     &testContext,
   130  		InputParams: &testInputParams,
   131  	}
   132  }
   133  
   134  func fixModelCreateInput() *model.BundleInstanceAuthCreateInput {
   135  	return &model.BundleInstanceAuthCreateInput{
   136  		Context:     &testContext,
   137  		InputParams: &testInputParams,
   138  		Auth:        fixModelAuthInput(),
   139  		RuntimeID:   &testRuntimeID,
   140  	}
   141  }
   142  
   143  func fixModelUpdateInput() *model.BundleInstanceAuthUpdateInput {
   144  	return &model.BundleInstanceAuthUpdateInput{
   145  		Context:     &testContext,
   146  		InputParams: &testInputParams,
   147  		Auth:        fixModelAuthInput(),
   148  	}
   149  }
   150  
   151  func fixGQLRequestInput() *graphql.BundleInstanceAuthRequestInput {
   152  	context := graphql.JSON(testContext)
   153  	inputParams := graphql.JSON(testInputParams)
   154  
   155  	return &graphql.BundleInstanceAuthRequestInput{
   156  		Context:     &context,
   157  		InputParams: &inputParams,
   158  	}
   159  }
   160  
   161  func fixGQLCreateInput() *graphql.BundleInstanceAuthCreateInput {
   162  	context := graphql.JSON(testContext)
   163  	inputParams := graphql.JSON(testInputParams)
   164  
   165  	return &graphql.BundleInstanceAuthCreateInput{
   166  		Context:     &context,
   167  		InputParams: &inputParams,
   168  		Auth:        fixGQLAuthInput(),
   169  		RuntimeID:   &testRuntimeID,
   170  	}
   171  }
   172  
   173  func fixGQLUpdateInput() *graphql.BundleInstanceAuthUpdateInput {
   174  	context := graphql.JSON(testContext)
   175  	inputParams := graphql.JSON(testInputParams)
   176  
   177  	return &graphql.BundleInstanceAuthUpdateInput{
   178  		Context:     &context,
   179  		InputParams: &inputParams,
   180  		Auth:        fixGQLAuthInput(),
   181  	}
   182  }
   183  
   184  func fixModelSetInput() *model.BundleInstanceAuthSetInput {
   185  	return &model.BundleInstanceAuthSetInput{
   186  		Auth:   fixModelAuthInput(),
   187  		Status: fixModelStatusInput(model.BundleInstanceAuthSetStatusConditionInputSucceeded, "foo", "bar"),
   188  	}
   189  }
   190  
   191  func fixGQLSetInput() *graphql.BundleInstanceAuthSetInput {
   192  	return &graphql.BundleInstanceAuthSetInput{
   193  		Auth:   fixGQLAuthInput(),
   194  		Status: fixGQLStatusInput(graphql.BundleInstanceAuthSetStatusConditionInputSucceeded, "foo", "bar"),
   195  	}
   196  }
   197  
   198  func fixEntityBundleInstanceAuth(t *testing.T, id, bundleID, tenant string, auth *model.Auth, status *model.BundleInstanceAuthStatus, runtimeID *string) *bundleinstanceauth.Entity {
   199  	out := fixEntityBundleInstanceAuthWithoutContextAndInputParams(t, id, bundleID, tenant, auth, status, runtimeID)
   200  	out.Context = sql.NullString{Valid: true, String: testContext}
   201  	out.InputParams = sql.NullString{Valid: true, String: testInputParams}
   202  
   203  	return out
   204  }
   205  
   206  func fixEntityBundleInstanceAuthWithoutContextAndInputParams(t *testing.T, id, bundleID, tenant string, auth *model.Auth, status *model.BundleInstanceAuthStatus, runtimeID *string) *bundleinstanceauth.Entity {
   207  	sqlNullString := sql.NullString{}
   208  	if runtimeID != nil {
   209  		sqlNullString.Valid = true
   210  		sqlNullString.String = *runtimeID
   211  	}
   212  	out := bundleinstanceauth.Entity{
   213  		ID:        id,
   214  		BundleID:  bundleID,
   215  		RuntimeID: sqlNullString,
   216  		OwnerID:   tenant,
   217  	}
   218  
   219  	if auth != nil {
   220  		marshalled, err := json.Marshal(auth)
   221  		require.NoError(t, err)
   222  		out.AuthValue = sql.NullString{
   223  			String: string(marshalled),
   224  			Valid:  true,
   225  		}
   226  	}
   227  
   228  	if status != nil {
   229  		out.StatusCondition = string(status.Condition)
   230  		out.StatusTimestamp = status.Timestamp
   231  		out.StatusMessage = status.Message
   232  		out.StatusReason = status.Reason
   233  	}
   234  
   235  	return &out
   236  }
   237  
   238  func fixModelAuth() *model.Auth {
   239  	return &model.Auth{
   240  		Credential: model.CredentialData{
   241  			Basic: &model.BasicCredentialData{
   242  				Username: "foo",
   243  				Password: "bar",
   244  			},
   245  		},
   246  	}
   247  }
   248  
   249  func fixGQLAuth() *graphql.Auth {
   250  	return &graphql.Auth{
   251  		Credential: &graphql.BasicCredentialData{
   252  			Username: "foo",
   253  			Password: "bar",
   254  		},
   255  	}
   256  }
   257  
   258  func fixModelAuthInput() *model.AuthInput {
   259  	return &model.AuthInput{
   260  		Credential: &model.CredentialDataInput{
   261  			Basic: &model.BasicCredentialDataInput{
   262  				Username: "foo",
   263  				Password: "bar",
   264  			},
   265  		},
   266  	}
   267  }
   268  
   269  func fixGQLAuthInput() *graphql.AuthInput {
   270  	return &graphql.AuthInput{
   271  		Credential: &graphql.CredentialDataInput{
   272  			Basic: &graphql.BasicCredentialDataInput{
   273  				Username: "foo",
   274  				Password: "bar",
   275  			},
   276  		},
   277  	}
   278  }
   279  
   280  type sqlRow struct {
   281  	id               string
   282  	ownerID          string
   283  	bundleID         string
   284  	runtimeID        sql.NullString
   285  	runtimeContextID sql.NullString
   286  	context          sql.NullString
   287  	inputParams      sql.NullString
   288  	authValue        sql.NullString
   289  	statusCondition  string
   290  	statusTimestamp  time.Time
   291  	statusMessage    string
   292  	statusReason     string
   293  }
   294  
   295  func fixSQLRows(rows []sqlRow) *sqlmock.Rows {
   296  	out := sqlmock.NewRows(testTableColumns)
   297  	for _, row := range rows {
   298  		out.AddRow(row.id, row.ownerID, row.bundleID, row.context, row.inputParams, row.authValue, row.statusCondition, row.statusTimestamp, row.statusMessage, row.statusReason, row.runtimeID, row.runtimeContextID)
   299  	}
   300  	return out
   301  }
   302  
   303  func fixSQLRowFromEntity(entity bundleinstanceauth.Entity) sqlRow {
   304  	return sqlRow{
   305  		id:               entity.ID,
   306  		ownerID:          entity.OwnerID,
   307  		bundleID:         entity.BundleID,
   308  		runtimeID:        entity.RuntimeID,
   309  		runtimeContextID: entity.RuntimeContextID,
   310  		context:          entity.Context,
   311  		inputParams:      entity.InputParams,
   312  		authValue:        entity.AuthValue,
   313  		statusCondition:  entity.StatusCondition,
   314  		statusTimestamp:  entity.StatusTimestamp,
   315  		statusMessage:    entity.StatusMessage,
   316  		statusReason:     entity.StatusReason,
   317  	}
   318  }
   319  
   320  func fixCreateArgs(ent bundleinstanceauth.Entity) []driver.Value {
   321  	return []driver.Value{ent.ID, ent.OwnerID, ent.BundleID, ent.Context, ent.InputParams, ent.AuthValue, ent.StatusCondition, ent.StatusTimestamp, ent.StatusMessage, ent.StatusReason, ent.RuntimeID, ent.RuntimeContextID}
   322  }
   323  
   324  func fixSimpleModelBundleInstanceAuth(id string) *model.BundleInstanceAuth {
   325  	return &model.BundleInstanceAuth{
   326  		ID:       id,
   327  		BundleID: testBundleID,
   328  	}
   329  }
   330  
   331  func fixSimpleGQLBundleInstanceAuth(id string) *graphql.BundleInstanceAuth {
   332  	return &graphql.BundleInstanceAuth{
   333  		ID: id,
   334  	}
   335  }
   336  
   337  func fixModelBundle(id string, requestInputSchema *string, defaultAuth *model.Auth) *model.Bundle {
   338  	return &model.Bundle{
   339  		ApplicationID:                  str.Ptr("foo"),
   340  		Name:                           "test-bundle",
   341  		InstanceAuthRequestInputSchema: requestInputSchema,
   342  		DefaultInstanceAuth:            defaultAuth,
   343  		BaseEntity:                     &model.BaseEntity{ID: id},
   344  	}
   345  }