main
1package event
2
3import (
4 "testing"
5
6 "github.com/stretchr/testify/assert"
7 "github.com/xlgmokha/x/pkg/x"
8)
9
10func TestAggregator(t *testing.T) {
11 t.Run("Publish", func(t *testing.T) {
12 t.Run("without any subscribers", func(t *testing.T) {
13 aggregator := x.New(WithDefaults())
14
15 aggregator.Publish("announcements.engineering", "Business, Business, Business... Numbers!")
16 })
17
18 t.Run("with a single subscriber", func(t *testing.T) {
19 aggregator := x.New(WithDefaults())
20 called := false
21
22 aggregator.Subscribe("announcement", func(message any) {
23 called = true
24 assert.Equal(t, "Hello", message)
25 })
26
27 aggregator.Publish("announcement", "Hello")
28
29 assert.True(t, called)
30 })
31
32 t.Run("with multiple subscribers", func(t *testing.T) {
33 aggregator := x.New(WithDefaults())
34 called := map[int]bool{}
35
36 aggregator.Subscribe("announcement", func(message any) {
37 called[0] = true
38 assert.Equal(t, "Greetings", message)
39 })
40
41 aggregator.Subscribe("announcement", func(message any) {
42 called[1] = true
43 assert.Equal(t, "Greetings", message)
44 })
45
46 aggregator.Publish("announcement", "Greetings")
47
48 assert.Equal(t, 2, len(called))
49 assert.True(t, called[0])
50 assert.True(t, called[1])
51 })
52 })
53}