Skip to content

Commit dddc027

Browse files
anirudhaCodesmaaslalani
authored andcommitted
Add paginator test
1 parent 9ef5a10 commit dddc027

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed

paginator/paginator_test.go

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
package paginator
2+
3+
import (
4+
"testing"
5+
6+
tea "github.com/charmbracelet/bubbletea"
7+
)
8+
9+
func TestSetTotalPages(t *testing.T) {
10+
tests := []struct {
11+
name string
12+
items int // total no of items to be set
13+
initialTotal int // intital total pages for the testcase
14+
expected int // expected value after SetTotalPages function call
15+
}{
16+
{"Less than one page", 5, 1, 5},
17+
{"Exactly one page", 10, 1, 10},
18+
{"More than one page", 15, 1, 15},
19+
{"negative value for page", -10, 1, 1},
20+
}
21+
22+
for _, tt := range tests {
23+
t.Run(tt.name, func(t *testing.T) {
24+
model := New()
25+
if model.TotalPages != tt.initialTotal {
26+
model.SetTotalPages(tt.initialTotal)
27+
}
28+
model.SetTotalPages(tt.items)
29+
if model.TotalPages != tt.expected {
30+
t.Errorf("TotalPages = %d, expected %d", model.TotalPages, tt.expected)
31+
}
32+
})
33+
}
34+
}
35+
36+
func TestPrevPage(t *testing.T) {
37+
tests := []struct {
38+
name string
39+
totalPages int // Total pages to be set for the testcase
40+
page int // intital page for test
41+
expected int
42+
}{
43+
{"Go to previous page", 10, 1, 0},
44+
{"Stay on first page", 5, 0, 0},
45+
}
46+
47+
for _, tt := range tests {
48+
t.Run(tt.name, func(t *testing.T) {
49+
model := New()
50+
model.SetTotalPages(tt.totalPages)
51+
model.Page = tt.page
52+
53+
model, _ = model.Update(tea.KeyMsg{Type: tea.KeyLeft, Alt: false, Runes: []rune{}})
54+
if model.Page != tt.expected {
55+
t.Errorf("PrevPage() = %d, expected %d", model.Page, tt.expected)
56+
}
57+
})
58+
}
59+
}
60+
61+
func TestNextPage(t *testing.T) {
62+
tests := []struct {
63+
name string
64+
totalPages int
65+
page int
66+
expected int
67+
}{
68+
{"Go to next page", 2, 0, 1},
69+
{"Stay on last page", 2, 1, 1},
70+
}
71+
72+
for _, tt := range tests {
73+
t.Run(tt.name, func(t *testing.T) {
74+
model := New()
75+
model.SetTotalPages(tt.totalPages)
76+
model.Page = tt.page
77+
78+
model, _ = model.Update(tea.KeyMsg{Type: tea.KeyRight, Alt: false, Runes: []rune{}})
79+
if model.Page != tt.expected {
80+
t.Errorf("NextPage() = %d, expected %d", model.Page, tt.expected)
81+
}
82+
})
83+
}
84+
}
85+
86+
func TestOnLastPage(t *testing.T) {
87+
tests := []struct {
88+
name string
89+
page int
90+
totalPages int
91+
expected bool
92+
}{
93+
{"On last page", 1, 2, true},
94+
{"Not on last page", 0, 2, false},
95+
}
96+
97+
for _, tt := range tests {
98+
t.Run(tt.name, func(t *testing.T) {
99+
model := New()
100+
model.SetTotalPages(tt.totalPages)
101+
model.Page = tt.page
102+
103+
if result := model.OnLastPage(); result != tt.expected {
104+
t.Errorf("OnLastPage() = %t, expected %t", result, tt.expected)
105+
}
106+
})
107+
}
108+
}
109+
110+
func TestOnFirstPage(t *testing.T) {
111+
tests := []struct {
112+
name string
113+
page int
114+
totalPages int
115+
expected bool
116+
}{
117+
{"On first page", 0, 2, true},
118+
{"Not on first page", 1, 2, false},
119+
}
120+
121+
for _, tt := range tests {
122+
t.Run(tt.name, func(t *testing.T) {
123+
model := New()
124+
model.SetTotalPages(tt.totalPages)
125+
model.Page = tt.page
126+
127+
if result := model.OnFirstPage(); result != tt.expected {
128+
t.Errorf("OnFirstPage() = %t, expected %t", result, tt.expected)
129+
}
130+
})
131+
}
132+
}
133+
134+
func TestItemsOnPage(t *testing.T) {
135+
testCases := []struct {
136+
currentPage int // current page to be set for the testcase
137+
totalPages int // Total pages to be set for the testcase
138+
totalItems int // Total items
139+
expectedItems int // expected items on current page
140+
}{
141+
{1, 10, 10, 1},
142+
{3, 10, 10, 1},
143+
{7, 10, 10, 1},
144+
}
145+
146+
for _, tc := range testCases {
147+
model := New()
148+
model.Page = tc.currentPage
149+
model.SetTotalPages(tc.totalPages)
150+
if actualItems := model.ItemsOnPage(tc.totalItems); actualItems != tc.expectedItems {
151+
t.Errorf("ItemsOnPage() returned %d, expected %d for total items %d", actualItems, tc.expectedItems, tc.totalItems)
152+
}
153+
}
154+
}

0 commit comments

Comments
 (0)