This commit is contained in:
nquidox 2026-03-15 22:22:34 +03:00
parent 0a4112d83f
commit a15b53bf74

View file

@ -264,110 +264,134 @@ func TestGetMerchLabelsSuccess(t *testing.T) {
// Merch // Merch
func TestCreateMerchSuccess(t *testing.T) { func TestCreateMerchSuccess(t *testing.T) {
mockRepo := new(MockRepository) type testCases struct {
name string
inputDTO newMerchDTO
expectOrigins bool
expectedCode int
}
merchExpected := mock.MatchedBy(func(arg any) bool { cases := []testCases{
model, ok := arg.(*Merch) {
if !ok { name: "Success - with origins",
return false inputDTO: newMerchDTO{
} Name: "Test name1",
Links: []originLink{
{Origin: "origin 1", Link: "link1"},
{Origin: "origin 2", Link: "link2"},
{Origin: "origin 3", Link: "link3"},
{Origin: "origin 4", Link: "link4"},
{Origin: "origin 5", Link: "link5"},
{Origin: "origin 6", Link: "link6"},
{Origin: "origin 7", Link: "link7"},
},
},
expectOrigins: true,
expectedCode: 201,
},
if model.CreatedAt.IsZero() { {
return false name: "Success - without origins",
} inputDTO: newMerchDTO{
Name: "Test name2",
if model.UpdatedAt.Valid == false { },
return false expectOrigins: false,
} expectedCode: 201,
if model.UpdatedAt.Time.IsZero() {
return false
}
if model.UpdatedAt.Time.Before(model.CreatedAt) {
return false
}
if model.DeletedAt.Valid != false {
return false
}
if model.MerchUuid == "" || len(model.MerchUuid) != 36 {
return false
}
if model.UserId != userId {
return false
}
return true
})
extraExpected := mock.MatchedBy(func(arg any) bool {
_, ok := arg.([]ExtraData)
if !ok {
return false
}
return true
})
mockRepo.
On("getOrigins", mock.Anything).
Return([]Origin{
{Id: 1, Name: "origin 1"},
{Id: 2, Name: "origin 2"},
{Id: 3, Name: "origin 3"},
{Id: 4, Name: "origin 4"},
{Id: 5, Name: "origin 5"},
{Id: 6, Name: "origin 6"},
{Id: 7, Name: "origin 7"},
}, nil)
mockRepo.
On("createMerch", mock.Anything, merchExpected, extraExpected).
Return(nil)
router := setupTestRouter(mockRepo)
data1 := newMerchDTO{
Name: "Test name1",
Links: []originLink{
{Origin: "origin 1", Link: "link1"},
{Origin: "origin 2", Link: "link2"},
{Origin: "origin 3", Link: "link3"},
{Origin: "origin 4", Link: "link4"},
{Origin: "origin 5", Link: "link5"},
{Origin: "origin 6", Link: "link6"},
{Origin: "origin 7", Link: "link7"},
}, },
} }
data2 := newMerchDTO{ for _, tt := range cases {
Name: "Test name2", t.Run(tt.name, func(t *testing.T) {
mockRepo := new(MockRepository)
if tt.expectOrigins {
mockRepo.
On("getOrigins", mock.Anything).
Return([]Origin{
{Id: 1, Name: "origin 1"},
{Id: 2, Name: "origin 2"},
{Id: 3, Name: "origin 3"},
{Id: 4, Name: "origin 4"},
{Id: 5, Name: "origin 5"},
{Id: 6, Name: "origin 6"},
{Id: 7, Name: "origin 7"},
}, nil)
}
merchExpected := mock.MatchedBy(func(arg any) bool {
model, ok := arg.(*Merch)
if !ok {
return false
}
if model.CreatedAt.IsZero() {
return false
}
if model.UpdatedAt.Valid == false {
return false
}
if model.UpdatedAt.Time.IsZero() {
return false
}
if model.UpdatedAt.Time.Before(model.CreatedAt) {
return false
}
if model.DeletedAt.Valid != false {
return false
}
if model.MerchUuid == "" || len(model.MerchUuid) != 36 {
return false
}
if model.UserId != userId {
return false
}
return true
})
extraExpected := mock.MatchedBy(func(arg any) bool {
_, ok := arg.([]ExtraData)
if !ok {
return false
}
return true
})
mockRepo.
On("createMerch", mock.Anything, merchExpected, extraExpected).
Return(nil)
router := setupTestRouter(mockRepo)
payload, err := json.Marshal(&tt.inputDTO)
if err != nil {
t.Fatal(err)
}
body := bytes.NewBuffer(payload)
req, _ := http.NewRequest("POST", "/merch/create", body)
w := httptest.NewRecorder()
router.ServeHTTP(w, req)
assert.Equal(t, tt.expectedCode, w.Code)
mockRepo.AssertExpectations(t)
})
} }
for _, tt := range []newMerchDTO{data1, data2} {
payload, err := json.Marshal(&tt)
if err != nil {
t.Fatal(err)
}
body := bytes.NewBuffer(payload)
req, _ := http.NewRequest("POST", "/merch/create", body)
w := httptest.NewRecorder()
router.ServeHTTP(w, req)
assert.Equal(t, 201, w.Code)
}
mockRepo.AssertExpectations(t)
} }
func TestGetManySuccess(t *testing.T) { func TestGetManySuccess(t *testing.T) {
type testCase struct { type testCase struct {
caseName string name string
getManyReturn []getMerchInternal getManyReturn []getMerchInternal
expectLabels bool expectLabels bool
labelsReceive []int64 labelsReceive []int64
@ -378,7 +402,7 @@ func TestGetManySuccess(t *testing.T) {
cases := []testCase{ cases := []testCase{
{ {
caseName: "Success with merch", name: "Success with merch",
getManyReturn: []getMerchInternal{ getManyReturn: []getMerchInternal{
{Id: 1, MerchUuid: validUuid, Name: "merch1"}, {Id: 1, MerchUuid: validUuid, Name: "merch1"},
{Id: 2, MerchUuid: validUuid, Name: "merch2"}, {Id: 2, MerchUuid: validUuid, Name: "merch2"},
@ -396,14 +420,14 @@ func TestGetManySuccess(t *testing.T) {
}, },
{ {
caseName: "Success no merch - empty merch", name: "Success no merch - empty merch",
getManyReturn: []getMerchInternal{}, getManyReturn: []getMerchInternal{},
expectLabels: false, expectLabels: false,
expectedCode: 204, expectedCode: 204,
}, },
{ {
caseName: "Success no merch - nil merch", name: "Success no merch - nil merch",
getManyReturn: nil, getManyReturn: nil,
expectLabels: false, expectLabels: false,
expectedCode: 204, expectedCode: 204,
@ -411,39 +435,39 @@ func TestGetManySuccess(t *testing.T) {
} }
for _, tt := range cases { for _, tt := range cases {
t.Log(tt.caseName) t.Run(tt.name, func(t *testing.T) {
mockRepo := new(MockRepository)
mockRepo := new(MockRepository)
mockRepo.
On("getMany", mock.Anything, userId).
Return(tt.getManyReturn, nil)
if tt.expectLabels {
mockRepo. mockRepo.
On("getManyAttachedLabelsByList", mock.Anything, userId, tt.labelsReceive). On("getMany", mock.Anything, userId).
Return(tt.labelsReturn, nil) Return(tt.getManyReturn, nil)
}
router := setupTestRouter(mockRepo) if tt.expectLabels {
mockRepo.
req, _ := http.NewRequest("GET", "/merch/list", nil) On("getManyAttachedLabelsByList", mock.Anything, userId, tt.labelsReceive).
w := httptest.NewRecorder() Return(tt.labelsReturn, nil)
router.ServeHTTP(w, req)
assert.Equal(t, tt.expectedCode, w.Code)
if tt.expectedCode == 200 {
var response []ListResponse
err := json.Unmarshal(w.Body.Bytes(), &response)
if err != nil {
t.Fatal(err)
} }
assert.Equal(t, tt.expectedResult, response) router := setupTestRouter(mockRepo)
}
mockRepo.AssertExpectations(t) req, _ := http.NewRequest("GET", "/merch/list", nil)
w := httptest.NewRecorder()
router.ServeHTTP(w, req)
assert.Equal(t, tt.expectedCode, w.Code)
if tt.expectedCode == 200 {
var response []ListResponse
err := json.Unmarshal(w.Body.Bytes(), &response)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, tt.expectedResult, response)
}
mockRepo.AssertExpectations(t)
})
} }
} }