Skip to content

Commit 393d3ca

Browse files
committed
Add unit tests
1 parent c969fe6 commit 393d3ca

1 file changed

Lines changed: 169 additions & 0 deletions

File tree

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
package messages
2+
3+
import (
4+
"testing"
5+
6+
"github.com/ActiveState/cli/internal/graph"
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestNewQueue(t *testing.T) {
11+
q := NewQueue()
12+
assert.NotNil(t, q)
13+
assert.Empty(t, q.queue)
14+
}
15+
16+
func TestQueue_Queue(t *testing.T) {
17+
tests := []struct {
18+
name string
19+
messages []graph.Message
20+
want map[string]int // topic -> expected message count
21+
}{
22+
{
23+
name: "queue first message",
24+
messages: []graph.Message{
25+
{Topic: "topic1", Message: "message1"},
26+
},
27+
want: map[string]int{"topic1": 1},
28+
},
29+
{
30+
name: "queue second message in same topic",
31+
messages: []graph.Message{
32+
{Topic: "topic1", Message: "message1"},
33+
{Topic: "topic1", Message: "message2"},
34+
},
35+
want: map[string]int{"topic1": 2},
36+
},
37+
{
38+
name: "queue message in different topic",
39+
messages: []graph.Message{
40+
{Topic: "topic1", Message: "message1"},
41+
{Topic: "topic2", Message: "message3"},
42+
},
43+
want: map[string]int{"topic1": 1, "topic2": 1},
44+
},
45+
}
46+
47+
for _, tt := range tests {
48+
t.Run(tt.name, func(t *testing.T) {
49+
q := NewQueue()
50+
51+
for _, m := range tt.messages {
52+
err := q.Queue(m.Topic, m.Message)
53+
assert.NoError(t, err)
54+
}
55+
56+
for topic, count := range tt.want {
57+
assert.Len(t, q.queue[topic], count)
58+
}
59+
})
60+
}
61+
}
62+
63+
func TestQueue_Messages(t *testing.T) {
64+
tests := []struct {
65+
name string
66+
messages []graph.Message
67+
wantCount int
68+
}{
69+
{
70+
name: "empty queue",
71+
messages: nil,
72+
wantCount: 0,
73+
},
74+
{
75+
name: "single message",
76+
messages: []graph.Message{
77+
{Topic: "topic1", Message: "message1"},
78+
},
79+
wantCount: 1,
80+
},
81+
{
82+
name: "multiple messages across topics",
83+
messages: []graph.Message{
84+
{Topic: "topic1", Message: "message1"},
85+
{Topic: "topic1", Message: "message2"},
86+
{Topic: "topic2", Message: "message3"},
87+
},
88+
wantCount: 3,
89+
},
90+
}
91+
92+
for _, tt := range tests {
93+
t.Run(tt.name, func(t *testing.T) {
94+
q := NewQueue()
95+
96+
for _, m := range tt.messages {
97+
err := q.Queue(m.Topic, m.Message)
98+
assert.NoError(t, err)
99+
}
100+
101+
msgs, err := q.Messages()
102+
assert.NoError(t, err)
103+
assert.Len(t, msgs, tt.wantCount)
104+
})
105+
}
106+
}
107+
108+
func TestQueue_Dequeue(t *testing.T) {
109+
tests := []struct {
110+
name string
111+
messages []graph.Message
112+
dequeueIDs []string
113+
wantRemaining int
114+
}{
115+
{
116+
name: "dequeue single message",
117+
messages: []graph.Message{
118+
{Topic: "topic1", Message: "message1"},
119+
},
120+
dequeueIDs: nil, // Will be populated during test with actual message ID
121+
wantRemaining: 0,
122+
},
123+
{
124+
name: "dequeue multiple messages",
125+
messages: []graph.Message{
126+
{Topic: "topic1", Message: "message1"},
127+
{Topic: "topic2", Message: "message2"},
128+
},
129+
dequeueIDs: nil, // Will be populated during test with actual message IDs
130+
wantRemaining: 0,
131+
},
132+
{
133+
name: "dequeue non-existent message",
134+
messages: []graph.Message{
135+
{Topic: "topic1", Message: "message1"},
136+
},
137+
dequeueIDs: []string{"non-existent-id"},
138+
wantRemaining: 1,
139+
},
140+
}
141+
142+
for _, tt := range tests {
143+
t.Run(tt.name, func(t *testing.T) {
144+
q := NewQueue()
145+
146+
for _, m := range tt.messages {
147+
err := q.Queue(m.Topic, m.Message)
148+
assert.NoError(t, err)
149+
}
150+
151+
if tt.dequeueIDs == nil {
152+
msgs, err := q.Messages()
153+
assert.NoError(t, err)
154+
155+
tt.dequeueIDs = make([]string, len(msgs))
156+
for i, msg := range msgs {
157+
tt.dequeueIDs[i] = msg.ID
158+
}
159+
}
160+
161+
err := q.Dequeue(tt.dequeueIDs)
162+
assert.NoError(t, err)
163+
164+
remaining, err := q.Messages()
165+
assert.NoError(t, err)
166+
assert.Len(t, remaining, tt.wantRemaining)
167+
})
168+
}
169+
}

0 commit comments

Comments
 (0)