From 0ba938be219ed7bf396631c443576ddac1542b06 Mon Sep 17 00:00:00 2001 From: Alex <$(pass /github/email)> Date: Fri, 28 Feb 2025 12:26:13 +0100 Subject: [PATCH] backend: add: licencecontroller_test --- go-backend/go.mod | 1 + .../controllers/licenceController_test.go | 94 +++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 go-backend/internal/controllers/licenceController_test.go diff --git a/go-backend/go.mod b/go-backend/go.mod index dc52b77..0e96648 100644 --- a/go-backend/go.mod +++ b/go-backend/go.mod @@ -25,6 +25,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/objx v0.5.2 // indirect ) require ( diff --git a/go-backend/internal/controllers/licenceController_test.go b/go-backend/internal/controllers/licenceController_test.go new file mode 100644 index 0000000..55125bb --- /dev/null +++ b/go-backend/internal/controllers/licenceController_test.go @@ -0,0 +1,94 @@ +package controllers + +import ( + "errors" + "net/http" + "net/http/httptest" + "testing" + + "GoMembership/internal/models" + "GoMembership/internal/services" + + "github.com/gin-gonic/gin" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" +) + +// Mock Repository +type MockLicenceRepo struct { + mock.Mock +} + +func (m *MockLicenceRepo) GetAllCategories() ([]models.Category, error) { + args := m.Called() + categories, _ := args.Get(0).([]models.Category) // Safe type assertion + return categories, args.Error(1) +} + +func (r *MockLicenceRepo) FindCategoriesByIDs(ids []uint) ([]models.Category, error) { + return []models.Category{}, nil +} + +func (r *MockLicenceRepo) FindCategoryByName(categoryName string) (models.Category, error) { + return models.Category{}, nil +} + +func TestGetAllCategories_Success(t *testing.T) { + gin.SetMode(gin.TestMode) + + // Mock repository + mockRepo := new(MockLicenceRepo) + expectedCategories := []models.Category{ + {ID: 1, Name: "Category A"}, + {ID: 2, Name: "Category B"}, + } + mockRepo.On("GetAllCategories").Return(expectedCategories, nil) + + // Create LicenceService with mocked repository + service := &services.LicenceService{Repo: mockRepo} + + // Create controller with service + lc := &LicenceController{Service: *service} + + // Setup router and request + router := gin.Default() + router.GET("/licence/categories", lc.GetAllCategories) + + w := httptest.NewRecorder() + req, _ := http.NewRequest(http.MethodGet, "/licence/categories", nil) + router.ServeHTTP(w, req) + + // Assertions + assert.Equal(t, http.StatusOK, w.Code) + assert.JSONEq(t, `{"licence_categories":[{"id":1,"category":"Category A"},{"id":2,"category":"Category B"}]}`, w.Body.String()) + + mockRepo.AssertExpectations(t) +} + +func TestGetAllCategories_Error(t *testing.T) { + gin.SetMode(gin.TestMode) + + // Mock repository + mockRepo := new(MockLicenceRepo) + mockRepo.On("GetAllCategories").Return(nil, errors.New("database error")) + + // Create LicenceService with mocked repository + service := &services.LicenceService{Repo: mockRepo} + + // Create controller with service + lc := &LicenceController{Service: *service} + + // Setup router and request + router := gin.Default() + router.GET("/licence/categories", lc.GetAllCategories) + + w := httptest.NewRecorder() + req, _ := http.NewRequest(http.MethodGet, "/licence/categories", nil) + router.ServeHTTP(w, req) + + // Assertions + assert.Equal(t, http.StatusInternalServerError, w.Code) + assert.Contains(t, w.Body.String(), "server.error.internal_server_error") + + mockRepo.AssertExpectations(t) +}