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}