From 560623788aef6e5f4a42016979e51d419d84158a Mon Sep 17 00:00:00 2001 From: Alex <$(pass /github/email)> Date: Mon, 24 Mar 2025 17:46:11 +0100 Subject: [PATCH] refactor --- .../internal/controllers/controllers_test.go | 94 ++++++++++--------- .../controllers/user_Password_test.go | 3 +- .../internal/controllers/user_controller.go | 12 +-- .../controllers/user_controller_test.go | 27 +++--- 4 files changed, 74 insertions(+), 62 deletions(-) diff --git a/go-backend/internal/controllers/controllers_test.go b/go-backend/internal/controllers/controllers_test.go index a707232..2a4184e 100644 --- a/go-backend/internal/controllers/controllers_test.go +++ b/go-backend/internal/controllers/controllers_test.go @@ -87,7 +87,7 @@ func TestMain(t *testing.T) { log.Fatalf("Error setting environment variable: %v", err) } config.LoadConfig() - db, err := database.Open("test.db", config.Recipients.AdminEmail) + db, err := database.Open("test.db", config.Recipients.AdminEmail, true) if err != nil { log.Fatalf("Failed to create DB: %#v", err) } @@ -120,20 +120,28 @@ func TestMain(t *testing.T) { log.Fatalf("Failed to init Categories: %v", err) } admin := models.User{ - FirstName: "Ad", - LastName: "min", - Email: "admin@example.com", - DateOfBirth: time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC), - Company: "SampleCorp", - Phone: "+123456789", - Address: "123 Main Street", - ZipCode: "12345", - City: "SampleCity", - Status: constants.ActiveStatus, - RoleID: 8, - } + FirstName: "Ad", + LastName: "min", + Email: "admin@example.com", + DateOfBirth: time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC), + Company: "SampleCorp", + Phone: "+123456789", + Address: "123 Main Street", + ZipCode: "12345", + City: "SampleCity", + Status: constants.ActiveStatus, + Password: "", + Notes: "", + RoleID: constants.Roles.Admin, + Consents: nil, + Verifications: nil, + Membership: nil, + BankAccount: nil, + Licence: &models.Licence{ + Status: constants.UnverifiedStatus, + }} admin.SetPassword("securepassword") - database.DB.Create(&admin) + admin.Create(db) validation.SetupValidators(db) t.Run("userController", func(t *testing.T) { testUserController(t) @@ -267,41 +275,39 @@ func GetMockedFormContext(formData url.Values, url string) (*gin.Context, *httpt func getBaseUser() models.User { return models.User{ - DateOfBirth: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC), - FirstName: "John", - LastName: "Doe", - Email: "john.doe@example.com", - Address: "Pablo Escobar Str. 4", - ZipCode: "25474", - City: "Hasloh", - Phone: "01738484993", - BankAccount: models.BankAccount{IBAN: "DE89370400440532013000"}, - Membership: models.Membership{SubscriptionModel: models.SubscriptionModel{Name: "Basic"}}, - Licence: nil, - ProfilePicture: "", - Password: "passw@#$#%$!-ord123", - Company: "", - RoleID: 1, + DateOfBirth: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC), + FirstName: "John", + LastName: "Doe", + Email: "john.doe@example.com", + Address: "Pablo Escobar Str. 4", + ZipCode: "25474", + City: "Hasloh", + Phone: "01738484993", + BankAccount: &models.BankAccount{IBAN: "DE89370400440532013000"}, + Membership: &models.Membership{SubscriptionModel: models.SubscriptionModel{Name: "Basic"}}, + Licence: nil, + Password: "passw@#$#%$!-ord123", + Company: "", + RoleID: 1, } } func getBaseSupporter() models.User { return models.User{ - DateOfBirth: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC), - FirstName: "John", - LastName: "Rich", - Email: "john.supporter@example.com", - Address: "Pablo Escobar Str. 4", - ZipCode: "25474", - City: "Hasloh", - Phone: "01738484993", - BankAccount: models.BankAccount{IBAN: "DE89370400440532013000"}, - Membership: models.Membership{SubscriptionModel: models.SubscriptionModel{Name: "Basic"}}, - Licence: nil, - ProfilePicture: "", - Password: "passw@#$#%$!-ord123", - Company: "", - RoleID: 0, + DateOfBirth: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC), + FirstName: "John", + LastName: "Rich", + Email: "john.supporter@example.com", + Address: "Pablo Escobar Str. 4", + ZipCode: "25474", + City: "Hasloh", + Phone: "01738484993", + BankAccount: &models.BankAccount{IBAN: "DE89370400440532013000"}, + Membership: &models.Membership{SubscriptionModel: models.SubscriptionModel{Name: "Basic"}}, + Licence: nil, + Password: "passw@#$#%$!-ord123", + Company: "", + RoleID: 0, } } func deleteTestDB(dbPath string) error { diff --git a/go-backend/internal/controllers/user_Password_test.go b/go-backend/internal/controllers/user_Password_test.go index bcb9903..7737b68 100644 --- a/go-backend/internal/controllers/user_Password_test.go +++ b/go-backend/internal/controllers/user_Password_test.go @@ -31,8 +31,10 @@ func setupTestContext() (*TestContext, error) { testEmail := "john.doe@example.com" user, err := Uc.Service.FromEmail(&testEmail) if err != nil { + logger.Error.Printf("error fetching user: %#v", err) return nil, err } + logger.Error.Printf("found user: %#v", user) return &TestContext{ router: gin.Default(), response: httptest.NewRecorder(), @@ -60,7 +62,6 @@ func testCreatePasswordHandler(t *testing.T) { req, _ := http.NewRequest("POST", "/password", bytes.NewBuffer(body)) req.AddCookie(AdminCookie) tc.router.ServeHTTP(tc.response, req) - logger.Error.Printf("Test results for %#v", t.Name()) assert.Equal(t, http.StatusAccepted, tc.response.Code) assert.JSONEq(t, `{"message":"password_change_requested"}`, tc.response.Body.String()) err = checkEmailDelivery(tc.user, true) diff --git a/go-backend/internal/controllers/user_controller.go b/go-backend/internal/controllers/user_controller.go index 6c1488d..35ad03f 100644 --- a/go-backend/internal/controllers/user_controller.go +++ b/go-backend/internal/controllers/user_controller.go @@ -137,9 +137,7 @@ func (uc *UserController) DeleteUser(c *gin.Context) { } type deleteData struct { - User struct { - ID uint `json:"id" binding:"required,numeric"` - } `json:"user"` + ID uint `json:"id" binding:"required,numeric"` } var data deleteData @@ -148,13 +146,13 @@ func (uc *UserController) DeleteUser(c *gin.Context) { return } - if !requestUser.HasPrivilege(constants.Priviliges.Delete) && data.User.ID != requestUser.ID { + if !requestUser.HasPrivilege(constants.Priviliges.Delete) && data.ID != requestUser.ID { utils.RespondWithError(c, errors.ErrNotAuthorized, "Not allowed to delete user", http.StatusForbidden, errors.Responses.Fields.User, errors.Responses.Keys.Unauthorized) return } - logger.Error.Printf("Deleting user: %v", data.User) - if err := uc.Service.Delete(&data.User.ID); err != nil { + logger.Error.Printf("Deleting user: %v", data) + if err := uc.Service.Delete(&data.ID); err != nil { utils.HandleDeleteUserError(c, err) return } @@ -291,12 +289,14 @@ func (uc *UserController) RegisterUser(c *gin.Context) { LastName: regData.User.LastName, Email: regData.User.Email, ConsentType: "TermsOfService", + UserID: regData.User.ID, }, { FirstName: regData.User.FirstName, LastName: regData.User.LastName, Email: regData.User.Email, ConsentType: "Privacy", + UserID: regData.User.ID, }, } diff --git a/go-backend/internal/controllers/user_controller_test.go b/go-backend/internal/controllers/user_controller_test.go index d54e95c..ab3be04 100644 --- a/go-backend/internal/controllers/user_controller_test.go +++ b/go-backend/internal/controllers/user_controller_test.go @@ -78,7 +78,6 @@ func testUserController(t *testing.T) { database.DB.Model(&models.User{}).Where("email = ?", "john.doe@example.com").Update("status", constants.ActiveStatus) loginEmail := testLoginHandler(t) testCurrentUserHandler(t, loginEmail) - // creating a admin cookie c, w, _ := GetMockedJSONContext([]byte(`{ "email": "admin@example.com", @@ -402,7 +401,6 @@ func validateUser(assert bool, wantDBData map[string]interface{}) error { if err != nil { return fmt.Errorf("Error in database ops: %#v", err) } - if assert != (len(*users) != 0) { return fmt.Errorf("User entry query didn't met expectation: %v != %#v", assert, *users) } @@ -575,7 +573,7 @@ func testUpdateUser(t *testing.T) { var licenceRepo repositories.LicenceInterface = &repositories.LicenceRepository{} category, err := licenceRepo.FindCategoryByName("B") assert.NoError(t, err) - u.Licence.Categories = []models.Category{category} + u.Licence.Categories = []*models.Category{&category} }, expectedStatus: http.StatusAccepted, }, @@ -594,7 +592,7 @@ func testUpdateUser(t *testing.T) { category, err := licenceRepo.FindCategoryByName("A") category2, err := licenceRepo.FindCategoryByName("BE") assert.NoError(t, err) - u.Licence.Categories = []models.Category{category, category2} + u.Licence.Categories = []*models.Category{&category, &category2} }, expectedStatus: http.StatusAccepted, }, @@ -612,7 +610,7 @@ func testUpdateUser(t *testing.T) { var licenceRepo repositories.LicenceInterface = &repositories.LicenceRepository{} category, err := licenceRepo.FindCategoryByName("A") assert.NoError(t, err) - u.Licence.Categories = []models.Category{category} + u.Licence.Categories = []*models.Category{&category} }, expectedStatus: http.StatusAccepted, }, @@ -627,7 +625,7 @@ func testUpdateUser(t *testing.T) { u.LastName = "Doe Updated" u.Phone = "01738484994" u.Licence.Number = "B072RRE2I50" - u.Licence.Categories = []models.Category{} + u.Licence.Categories = []*models.Category{} }, expectedStatus: http.StatusAccepted, }, @@ -806,11 +804,9 @@ func testUpdateUser(t *testing.T) { assert.Equal(t, updatedUser.Company, updatedUserFromDB.Company, "Company mismatch") assert.Equal(t, updatedUser.Phone, updatedUserFromDB.Phone, "Phone mismatch") assert.Equal(t, updatedUser.Notes, updatedUserFromDB.Notes, "Notes mismatch") - assert.Equal(t, updatedUser.ProfilePicture, updatedUserFromDB.ProfilePicture, "ProfilePicture mismatch") assert.Equal(t, updatedUser.Address, updatedUserFromDB.Address, "Address mismatch") assert.Equal(t, updatedUser.ZipCode, updatedUserFromDB.ZipCode, "ZipCode mismatch") assert.Equal(t, updatedUser.City, updatedUserFromDB.City, "City mismatch") - assert.Equal(t, updatedUser.PaymentStatus, updatedUserFromDB.PaymentStatus, "PaymentStatus mismatch") assert.Equal(t, updatedUser.Status, updatedUserFromDB.Status, "Status mismatch") assert.Equal(t, updatedUser.RoleID, updatedUserFromDB.RoleID, "RoleID mismatch") @@ -839,8 +835,17 @@ func testUpdateUser(t *testing.T) { assert.Equal(t, updatedUser.Licence.IssuingCountry, updatedUserFromDB.Licence.IssuingCountry, "Licence.IssuingCountry mismatch") } - // For slices or more complex nested structures, you might want to use deep equality checks - assert.ElementsMatch(t, updatedUser.Consents, updatedUserFromDB.Consents, "Consents mismatch") + if len(updatedUser.Consents) > 0 { + for i := range updatedUser.Consents { + assert.Equal(t, updatedUser.Consents[i].ConsentType, updatedUserFromDB.Consents[i].ConsentType, "ConsentType mismatch at index %d", i) + assert.Equal(t, updatedUser.Consents[i].Email, updatedUserFromDB.Consents[i].Email, "ConsentEmail mismatch at index %d", i) + assert.Equal(t, updatedUser.Consents[i].FirstName, updatedUserFromDB.Consents[i].FirstName, "ConsentFirstName mismatch at index %d", i) + assert.Equal(t, updatedUser.Consents[i].LastName, updatedUserFromDB.Consents[i].LastName, "ConsentLastName mismatch at index %d", i) + assert.Equal(t, updatedUser.Consents[i].UserID, updatedUserFromDB.Consents[i].UserID, "Consent UserId mismatch at index %d", i) + } + } else { + assert.Emptyf(t, updatedUserFromDB.Licence.Categories, "Categories aren't empty when they should") + } if len(updatedUser.Licence.Categories) > 0 { for i := range updatedUser.Licence.Categories { assert.Equal(t, updatedUser.Licence.Categories[i].Name, updatedUserFromDB.Licence.Categories[i].Name, "Category Category mismatch at index %d", i) @@ -1272,7 +1277,7 @@ func getTestUsers() []RegisterUserTest { { Name: "Correct Licence number, should pass", WantResponse: http.StatusCreated, - WantDBData: map[string]interface{}{"email": "john.correctLicenceNumber@example.com"}, + WantDBData: map[string]interface{}{"email": "john.correctlicencenumber@example.com"}, Assert: true, Input: GenerateInputJSON(customizeInput(func(user models.User) models.User { user.Email = "john.correctLicenceNumber@example.com"