Skip to content

Commit e2dd917

Browse files
authored
Add some more test suites (#108)
1 parent a244348 commit e2dd917

File tree

11 files changed

+1790
-51
lines changed

11 files changed

+1790
-51
lines changed

.github/workflows/go-build.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,9 @@ jobs:
3535

3636
- name: Run Tests and Generate Coverage
3737
run: go test -v -coverprofile=coverage.out ./...
38+
39+
- name: Upload Coverage Report
40+
uses: actions/upload-artifact@v3
41+
with:
42+
name: coverage-report
43+
path: coverage.out

internal/repos/label/label_test.go

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
package repos
2+
3+
import (
4+
"context"
5+
"testing"
6+
"time"
7+
8+
"dkhalife.com/tasks/core/internal/models"
9+
"dkhalife.com/tasks/core/internal/utils/test"
10+
"github.com/stretchr/testify/suite"
11+
)
12+
13+
type LabelTestSuite struct {
14+
test.DatabaseTestSuite
15+
repo *LabelRepository
16+
testUser *models.User
17+
}
18+
19+
func TestLabelTestSuite(t *testing.T) {
20+
suite.Run(t, new(LabelTestSuite))
21+
}
22+
23+
func (s *LabelTestSuite) SetupTest() {
24+
s.DatabaseTestSuite.SetupTest()
25+
s.repo = &LabelRepository{db: s.DB}
26+
27+
s.testUser = &models.User{
28+
ID: 1,
29+
Email: "test@example.com",
30+
Password: "hashedpassword",
31+
CreatedAt: time.Now(),
32+
}
33+
34+
err := s.DB.Create(s.testUser).Error
35+
s.Require().NoError(err)
36+
}
37+
38+
func (s *LabelTestSuite) TestGetUserLabels() {
39+
ctx := context.Background()
40+
41+
testLabels := []*models.Label{
42+
{Name: "Work", Color: "#FF0000", CreatedBy: s.testUser.ID},
43+
{Name: "Personal", Color: "#00FF00", CreatedBy: s.testUser.ID},
44+
}
45+
46+
err := s.DB.Create(&testLabels).Error
47+
s.Require().NoError(err)
48+
49+
labels, err := s.repo.GetUserLabels(ctx, s.testUser.ID)
50+
s.Require().NoError(err)
51+
s.Require().Len(labels, 2)
52+
s.Equal("Work", labels[0].Name)
53+
s.Equal("#FF0000", labels[0].Color)
54+
s.Equal("Personal", labels[1].Name)
55+
s.Equal("#00FF00", labels[1].Color)
56+
}
57+
58+
func (s *LabelTestSuite) TestCreateLabels() {
59+
ctx := context.Background()
60+
61+
testLabels := []*models.Label{
62+
{Name: "Work", Color: "#FF0000", CreatedBy: s.testUser.ID},
63+
{Name: "Personal", Color: "#00FF00", CreatedBy: s.testUser.ID},
64+
}
65+
66+
err := s.repo.CreateLabels(ctx, testLabels)
67+
s.Require().NoError(err)
68+
69+
var count int64
70+
err = s.DB.Model(&models.Label{}).Where("created_by = ?", s.testUser.ID).Count(&count).Error
71+
s.Require().NoError(err)
72+
s.Equal(int64(2), count)
73+
}
74+
75+
func (s *LabelTestSuite) TestAreLabelsAssignableByUser() {
76+
ctx := context.Background()
77+
78+
testLabels := []*models.Label{
79+
{Name: "Work", Color: "#FF0000", CreatedBy: s.testUser.ID},
80+
{Name: "Personal", Color: "#00FF00", CreatedBy: s.testUser.ID},
81+
}
82+
83+
err := s.DB.Create(&testLabels).Error
84+
s.Require().NoError(err)
85+
86+
anotherUser := &models.User{Email: "another@example.com", Password: "hashedpassword"}
87+
err = s.DB.Create(anotherUser).Error
88+
s.Require().NoError(err)
89+
90+
otherLabel := &models.Label{Name: "Other", Color: "#0000FF", CreatedBy: anotherUser.ID}
91+
err = s.DB.Create(otherLabel).Error
92+
s.Require().NoError(err)
93+
94+
labelIDs := []int{testLabels[0].ID, testLabels[1].ID}
95+
result := s.repo.AreLabelsAssignableByUser(ctx, s.testUser.ID, labelIDs)
96+
s.True(result)
97+
98+
labelIDs = []int{testLabels[0].ID, otherLabel.ID}
99+
result = s.repo.AreLabelsAssignableByUser(ctx, s.testUser.ID, labelIDs)
100+
s.False(result)
101+
}
102+
103+
func (s *LabelTestSuite) TestAssignLabelsToTask() {
104+
ctx := context.Background()
105+
106+
testLabels := []*models.Label{
107+
{Name: "Work", Color: "#FF0000", CreatedBy: s.testUser.ID},
108+
{Name: "Personal", Color: "#00FF00", CreatedBy: s.testUser.ID},
109+
}
110+
111+
err := s.DB.Create(&testLabels).Error
112+
s.Require().NoError(err)
113+
114+
task := &models.Task{
115+
Title: "Test Task",
116+
CreatedBy: s.testUser.ID,
117+
}
118+
119+
err = s.DB.Create(task).Error
120+
s.Require().NoError(err)
121+
122+
labelIDs := []int{testLabels[0].ID, testLabels[1].ID}
123+
err = s.repo.AssignLabelsToTask(ctx, task.ID, s.testUser.ID, labelIDs)
124+
s.Require().NoError(err)
125+
126+
var count int64
127+
err = s.DB.Model(&models.TaskLabel{}).Where("task_id = ?", task.ID).Count(&count).Error
128+
s.Require().NoError(err)
129+
s.Equal(int64(2), count)
130+
}
131+
132+
func (s *LabelTestSuite) TestDeleteLabel() {
133+
ctx := context.Background()
134+
135+
testLabel := &models.Label{
136+
Name: "Work",
137+
Color: "#FF0000",
138+
CreatedBy: s.testUser.ID,
139+
}
140+
141+
err := s.DB.Create(testLabel).Error
142+
s.Require().NoError(err)
143+
144+
err = s.repo.DeleteLabel(ctx, s.testUser.ID, testLabel.ID)
145+
s.Require().NoError(err)
146+
147+
var count int64
148+
err = s.DB.Model(&models.Label{}).Where("id = ?", testLabel.ID).Count(&count).Error
149+
s.Require().NoError(err)
150+
s.Equal(int64(0), count)
151+
152+
anotherUser := &models.User{Email: "another@example.com", Password: "hashedpassword"}
153+
err = s.DB.Create(anotherUser).Error
154+
s.Require().NoError(err)
155+
156+
otherLabel := &models.Label{Name: "Other", Color: "#0000FF", CreatedBy: anotherUser.ID}
157+
err = s.DB.Create(otherLabel).Error
158+
s.Require().NoError(err)
159+
160+
err = s.repo.DeleteLabel(ctx, s.testUser.ID, otherLabel.ID)
161+
s.Error(err)
162+
}
163+
164+
func (s *LabelTestSuite) TestUpdateLabel() {
165+
ctx := context.Background()
166+
167+
testLabel := &models.Label{
168+
Name: "Work",
169+
Color: "#FF0000",
170+
CreatedBy: s.testUser.ID,
171+
}
172+
173+
err := s.DB.Create(testLabel).Error
174+
s.Require().NoError(err)
175+
176+
testLabel.Name = "Updated Work"
177+
testLabel.Color = "#FF5500"
178+
179+
err = s.repo.UpdateLabel(ctx, s.testUser.ID, testLabel)
180+
s.Require().NoError(err)
181+
182+
var updatedLabel models.Label
183+
err = s.DB.First(&updatedLabel, testLabel.ID).Error
184+
s.Require().NoError(err)
185+
s.Equal("Updated Work", updatedLabel.Name)
186+
s.Equal("#FF5500", updatedLabel.Color)
187+
}

0 commit comments

Comments
 (0)