package services import ( "context" "testing" "github.com/DATA-DOG/go-sqlmock" "github.com/stretchr/testify/assert" "edge-infra.dev/pkg/edge/api/graph/model" sqlquery "edge-infra.dev/pkg/edge/api/sql" ) var ( ownerID = "f1509671-ba57-42c6-a68e-c72bf7256cd7" expireTime = "4320h" ) func TestCreateProviderSettings(t *testing.T) { ctx := context.Background() providerInput := createProvider() db, mock, err1 := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual)) if err1 != nil { t.Fatalf("an error '%s' was not expected when opening a stub database connection", err1) } defer db.Close() mock.ExpectBegin() mock.ExpectQuery(sqlquery.GetProviderOwner). WithArgs("f1509671-ba57-42c6-a68e-c72bf7256cd7") mock.ExpectQuery(sqlquery.InsertProviderSettings). WithArgs(*providerInput.PinAttempts, *providerInput.PinExpire, *providerInput.PinHistory, *providerInput.PinLength, *providerInput.BarcodeExpire, *providerInput.BarcodePrefix, *providerInput.BarcodeLength, *providerInput.BcryptCost, *providerInput.ProfileExpire). WillReturnRows(sqlmock.NewRows([]string{"providerSettingsID"}).AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7")) mock.ExpectExec(sqlquery.InsertProviderOwner). WithArgs(ownerID, "f1509671-ba57-42c6-a68e-c72bf7256cd7"). WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectCommit() mock.ExpectQuery(sqlquery.GetProviderOwner). WithArgs("f1509671-ba57-42c6-a68e-c72bf7256cd7"). WillReturnRows(sqlmock.NewRows([]string{"providerSettingsID"}).AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7")) mock.ExpectQuery(sqlquery.GetProviderSettings). WithArgs("f1509671-ba57-42c6-a68e-c72bf7256cd7"). WillReturnRows(sqlmock.NewRows([]string{"providerSettingsID"}).AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7")) iamsettingservice := NewIAMSettingsService(db) providerSetting, _ := iamsettingservice.CreateSettings(ctx, ownerID, providerInput) assert.Nil(t, providerSetting) } func TestDeleteProviderSettings(t *testing.T) { ctx := context.Background() db, mock, err1 := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual)) if err1 != nil { t.Fatalf("an error '%s' was not expected when opening a stub database connection", err1) } defer db.Close() mock.ExpectQuery(sqlquery.GetProviderOwner). WithArgs("f1509671-ba57-42c6-a68e-c72bf7256cd7"). WillReturnRows(sqlmock.NewRows([]string{"providerSettingsID"}).AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7")) mock.ExpectQuery(sqlquery.GetProviderSettings). WithArgs("f1509671-ba57-42c6-a68e-c72bf7256cd7"). WillReturnRows(sqlmock.NewRows([]string{"providerSettingsID"}).AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7")) mock.ExpectQuery(sqlquery.GetProviderOwner). WithArgs("f1509671-ba57-42c6-a68e-c72bf7256cd7"). WillReturnRows(sqlmock.NewRows([]string{"providerSettingsID"}).AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7")) mock.ExpectQuery(sqlquery.DeleteProviderSettings). WithArgs("f1509671-ba57-42c6-a68e-c72bf7256cd7"). WillReturnRows(sqlmock.NewRows([]string{"providerSettingsID"}).AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7")) mock.ExpectQuery(sqlquery.DeleteProviderOwner). WithArgs("f1509671-ba57-42c6-a68e-c72bf7256cd7"). WillReturnRows(sqlmock.NewRows([]string{"providerSettingsID"}).AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7")) iamsettingservice := NewIAMSettingsService(db) deleteSetting, _ := iamsettingservice.DeleteSettings(ctx, ownerID) assert.Nil(t, deleteSetting) } func TestUpdateProviderSettings(t *testing.T) { ctx := context.Background() providerInput := createProvider() db, mock, err1 := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual)) if err1 != nil { t.Fatalf("an error '%s' was not expected when opening a stub database connection", err1) } defer db.Close() providerSettingsRows := sqlmock.NewRows([]string{"provider_settings_edge_id", "pin_attempts", "pin_expire", "pin_history", "pin_length", "barcode_expire", "barcode_prefix", "barcode_length", "bcrypt_cost", "profile_expire"}).AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7", 6, "4320h", 6, 6, "4320h", "temp", 12, 5, "4320h") providerOwnerRows := sqlmock.NewRows([]string{"provider_owner_edge_id", "tenant_edge_id", "banner_edge_id", "provider_settings_edge_id"}).AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7", "f1509671-ba57-42c6-a68e-c72bf7256cd7", ownerID, "f1509671-ba57-42c6-a68e-c72bf7256cd7") mock.ExpectQuery(sqlquery.GetProviderOwner). WithArgs(ownerID). WillReturnRows(providerOwnerRows) mock.ExpectExec(sqlquery.UpdatePinAttempts). WithArgs(9, "f1509671-ba57-42c6-a68e-c72bf7256cd7"). WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectQuery(sqlquery.GetProviderOwner). WithArgs(ownerID). WillReturnRows(providerOwnerRows) mock.ExpectQuery(sqlquery.GetProviderSettings). WithArgs(ownerID). WillReturnRows(providerSettingsRows.AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7", 9, "4320h", 6, 6, "4320h", "temp", 12, 5, "4320h")) iamsettingservice := NewIAMSettingsService(db) updateSetting, _ := iamsettingservice.UpdateSettings(ctx, ownerID, providerInput) assert.Nil(t, updateSetting) } func TestGetProviderSettings(t *testing.T) { ctx := context.Background() db, mock, err1 := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual)) if err1 != nil { t.Fatalf("an error '%s' was not expected when opening a stub database connection", err1) } defer db.Close() providerSettingsRows := sqlmock.NewRows([]string{"provider_settings_edge_id", "pin_attempts", "pin_expire", "pin_history", "pin_length", "barcode_expire", "barcode_prefix", "barcode_length", "bcrypt_cost", "profile_expire"}) mock.ExpectQuery(sqlquery.GetProviderOwner). WithArgs(ownerID). WillReturnRows(sqlmock.NewRows([]string{"providerSettingsID"}).AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7")) mock.ExpectQuery(sqlquery.GetProviderSettings). WithArgs(ownerID). WillReturnRows(providerSettingsRows.AddRow("f1509671-ba57-42c6-a68e-c72bf7256cd7", 9, "4320h", 6, 6, "4320h", "temp", 12, 5, "4320h")) iamsettingservice := NewIAMSettingsService(db) providerSetting, _ := iamsettingservice.GetSettings(ctx, ownerID) assert.NotNil(t, providerSetting) } func createProvider() model.ProviderInput { pinAttempts := 6 pinExpire := expireTime pinHistory := 6 pinLength := 6 barcodeExpire := expireTime barcodePrefix := "temp" barcodeLength := 12 bcryptCost := 5 profileExpire := expireTime providerInput := model.ProviderInput{ PinAttempts: &pinAttempts, PinExpire: &pinExpire, PinHistory: &pinHistory, PinLength: &pinLength, BarcodeExpire: &barcodeExpire, BarcodePrefix: &barcodePrefix, BarcodeLength: &barcodeLength, BcryptCost: &bcryptCost, ProfileExpire: &profileExpire, } return providerInput }