package eventbus_test import ( "testing" "time" "go.neonxp.ru/eventbus" ) type testEvent struct { name string } func (e testEvent) Event() string { return e.name } func TestBusPublish(t *testing.T) { bus := eventbus.New() // Подписываемся на событие ch := bus.Subscribe(t.Context(), "test.event") // Создаем канал для проверки получения события received := make(chan bool, 1) // Запускаем горутину для прослушивания канала go func() { select { case ev := <-ch: if ev.Event() == "test.event" { received <- true } case <-time.After(100 * time.Millisecond): received <- false } }() // Отправляем событие bus.Publish(testEvent{name: "test.event"}) // Проверяем получение события select { case got := <-received: if !got { t.Error("Event was not received") } case <-time.After(200 * time.Millisecond): t.Error("Timeout waiting for event") } } func TestBusPublishWithWildcard(t *testing.T) { bus := eventbus.New(eventbus.NameSeparator("/"), eventbus.Wildcard("#"), eventbus.Capacity(32)) defer bus.Close() // Подписываемся на wildcard событие ch := bus.Subscribe(t.Context(), "/test/#") // Создаем канал для проверки получения события received := make(chan bool, 1) // Запускаем горутину для прослушивания канала go func() { select { case ev := <-ch: if ev.Event() == "/test/event" { received <- true } case <-time.After(100 * time.Millisecond): received <- false } }() // Отправляем событие bus.Publish(testEvent{name: "/test/event"}) // Проверяем получение события select { case got := <-received: if !got { t.Error("Event was not received") } case <-time.After(200 * time.Millisecond): t.Error("Timeout waiting for event") } }