Skip to content

Commit 76f7495

Browse files
authored
separated dead letter test into two (#21)
1 parent f356a80 commit 76f7495

File tree

3 files changed

+116
-25
lines changed

3 files changed

+116
-25
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ You can find all the working examples under the `tests` folder.
4747

4848
### Consumer
4949

50-
https://github.com/pmorelli92/bunnify/blob/aa8f63943345a8e3d092e98b9cd69cf73e7a0ec9/tests/consumer_publish_test.go#L38-L59
50+
https://github.com/pmorelli92/bunnify/blob/f356a80625d9dcdaec12d05953447ebcc24a1b13/tests/consumer_publish_test.go#L38-L61
5151

5252
### Dead letter consumer
5353

tests/consumer_publish_test.go

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package tests
22

33
import (
44
"context"
5+
"encoding/json"
56
"fmt"
67
"testing"
78
"time"
@@ -110,3 +111,99 @@ func TestConsumerPublisher(t *testing.T) {
110111

111112
goleak.VerifyNone(t)
112113
}
114+
115+
func TestConsumerDefaultHandler(t *testing.T) {
116+
// Setup
117+
queueName := uuid.NewString()
118+
119+
type orderCreated struct {
120+
ID string `json:"id"`
121+
}
122+
123+
type orderUpdated struct {
124+
ID string `json:"id"`
125+
UpdatedAt time.Time `json:"updatedAt"`
126+
}
127+
128+
connection := bunnify.NewConnection()
129+
if err := connection.Start(); err != nil {
130+
t.Fatal(err)
131+
}
132+
133+
var consumedEvents []bunnify.ConsumableEvent[json.RawMessage]
134+
eventHandler := func(ctx context.Context, event bunnify.ConsumableEvent[json.RawMessage]) error {
135+
consumedEvents = append(consumedEvents, event)
136+
return nil
137+
}
138+
139+
// Bind only to queue received messages
140+
consumer := connection.NewConsumer(
141+
queueName,
142+
bunnify.WithDefaultHandler(eventHandler))
143+
144+
if err := consumer.Consume(); err != nil {
145+
t.Fatal(err)
146+
}
147+
148+
orderCreatedEvent := orderCreated{ID: uuid.NewString()}
149+
orderUpdatedEvent := orderUpdated{ID: uuid.NewString(), UpdatedAt: time.Now()}
150+
publisher := connection.NewPublisher()
151+
152+
// Publish directly to the queue, without routing key
153+
err := publisher.Publish(
154+
context.TODO(),
155+
"",
156+
queueName,
157+
bunnify.NewPublishableEvent(orderCreatedEvent))
158+
if err != nil {
159+
t.Fatal(err)
160+
}
161+
162+
// Publish directly to the queue, without routing key
163+
err = publisher.Publish(
164+
context.TODO(),
165+
"",
166+
queueName,
167+
bunnify.NewPublishableEvent(orderUpdatedEvent))
168+
if err != nil {
169+
t.Fatal(err)
170+
}
171+
172+
time.Sleep(50 * time.Millisecond)
173+
174+
if err := connection.Close(); err != nil {
175+
t.Fatal(err)
176+
}
177+
178+
// Assert
179+
if len(consumedEvents) != 2 {
180+
t.Fatalf("expected 2 events, got %d", len(consumedEvents))
181+
}
182+
183+
// First event should be orderCreated
184+
var receivedOrderCreated orderCreated
185+
err = json.Unmarshal(consumedEvents[0].Payload, &receivedOrderCreated)
186+
if err != nil {
187+
t.Fatal(err)
188+
}
189+
190+
if orderCreatedEvent.ID != receivedOrderCreated.ID {
191+
t.Fatalf("expected created order ID to be %s got %s", orderCreatedEvent.ID, receivedOrderCreated.ID)
192+
}
193+
194+
var receivedOrderUpdated orderUpdated
195+
err = json.Unmarshal(consumedEvents[1].Payload, &receivedOrderUpdated)
196+
if err != nil {
197+
t.Fatal(err)
198+
}
199+
200+
if orderUpdatedEvent.ID != receivedOrderUpdated.ID {
201+
t.Fatalf("expected updated order ID to be %s got %s", orderUpdatedEvent.ID, receivedOrderUpdated.ID)
202+
}
203+
204+
if !orderUpdatedEvent.UpdatedAt.Equal(receivedOrderUpdated.UpdatedAt) {
205+
t.Fatalf("expected updated order time to be %s got %s", orderUpdatedEvent.UpdatedAt, receivedOrderUpdated.UpdatedAt)
206+
}
207+
208+
goleak.VerifyNone(t)
209+
}

tests/dead_letter_receives_event_test.go

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package tests
22

33
import (
44
"context"
5-
"encoding/json"
65
"fmt"
76
"testing"
87
"time"
@@ -36,9 +35,9 @@ func TestDeadLetterReceivesEvent(t *testing.T) {
3635
return fmt.Errorf("error, this event will go to dead-letter")
3736
}
3837

39-
var eventFromDeadLetter bunnify.ConsumableEvent[json.RawMessage]
40-
defaultHandler := func(ctx context.Context, event bunnify.ConsumableEvent[json.RawMessage]) error {
41-
eventFromDeadLetter = event
38+
var deadEvent bunnify.ConsumableEvent[orderCreated]
39+
deadEventHandler := func(ctx context.Context, event bunnify.ConsumableEvent[orderCreated]) error {
40+
deadEvent = event
4241
return nil
4342
}
4443

@@ -61,7 +60,7 @@ func TestDeadLetterReceivesEvent(t *testing.T) {
6160

6261
deadLetterConsumer := connection.NewConsumer(
6362
deadLetterQueueName,
64-
bunnify.WithDefaultHandler(defaultHandler))
63+
bunnify.WithHandler(routingKey, deadEventHandler))
6564

6665
if err := deadLetterConsumer.Consume(); err != nil {
6766
t.Fatal(err)
@@ -81,32 +80,27 @@ func TestDeadLetterReceivesEvent(t *testing.T) {
8180
}
8281

8382
// Assert
84-
if publishedEvent.ID != eventFromDeadLetter.ID {
85-
t.Fatalf("expected event ID %s, got %s", publishedEvent.ID, eventFromDeadLetter.ID)
83+
if publishedEvent.ID != deadEvent.ID {
84+
t.Fatalf("expected event ID %s, got %s", publishedEvent.ID, deadEvent.ID)
8685
}
87-
if publishedEvent.CorrelationID != eventFromDeadLetter.CorrelationID {
88-
t.Fatalf("expected correlation ID %s, got %s", publishedEvent.CorrelationID, eventFromDeadLetter.CorrelationID)
86+
if publishedEvent.CorrelationID != deadEvent.CorrelationID {
87+
t.Fatalf("expected correlation ID %s, got %s", publishedEvent.CorrelationID, deadEvent.CorrelationID)
8988
}
90-
if !publishedEvent.Timestamp.Equal(eventFromDeadLetter.Timestamp) {
91-
t.Fatalf("expected timestamp %s, got %s", publishedEvent.Timestamp, eventFromDeadLetter.Timestamp)
89+
if !publishedEvent.Timestamp.Equal(deadEvent.Timestamp) {
90+
t.Fatalf("expected timestamp %s, got %s", publishedEvent.Timestamp, deadEvent.Timestamp)
9291
}
9392

94-
var jsonData map[string]interface{}
95-
if err = json.Unmarshal(eventFromDeadLetter.Payload, &jsonData); err != nil {
96-
t.Fatal(err)
97-
}
98-
99-
if publishedOrderCreated.ID != jsonData["id"].(string) {
100-
t.Fatalf("expected order created ID %s, got %s", publishedOrderCreated.ID, jsonData["id"].(string))
93+
if publishedOrderCreated.ID != deadEvent.Payload.ID {
94+
t.Fatalf("expected order created ID %s, got %s", publishedOrderCreated.ID, deadEvent.Payload.ID)
10195
}
102-
if exchangeName != eventFromDeadLetter.DeliveryInfo.Exchange {
103-
t.Fatalf("expected exchange %s, got %s", exchangeName, eventFromDeadLetter.DeliveryInfo.Exchange)
96+
if exchangeName != deadEvent.DeliveryInfo.Exchange {
97+
t.Fatalf("expected exchange %s, got %s", exchangeName, deadEvent.DeliveryInfo.Exchange)
10498
}
105-
if queueName != eventFromDeadLetter.DeliveryInfo.Queue {
106-
t.Fatalf("expected queue %s, got %s", queueName, eventFromDeadLetter.DeliveryInfo.Queue)
99+
if queueName != deadEvent.DeliveryInfo.Queue {
100+
t.Fatalf("expected queue %s, got %s", queueName, deadEvent.DeliveryInfo.Queue)
107101
}
108-
if routingKey != eventFromDeadLetter.DeliveryInfo.RoutingKey {
109-
t.Fatalf("expected routing key %s, got %s", routingKey, eventFromDeadLetter.DeliveryInfo.RoutingKey)
102+
if routingKey != deadEvent.DeliveryInfo.RoutingKey {
103+
t.Fatalf("expected routing key %s, got %s", routingKey, deadEvent.DeliveryInfo.RoutingKey)
110104
}
111105

112106
goleak.VerifyNone(t)

0 commit comments

Comments
 (0)