package events_test import ( "fmt" "sync" "testing" "git.apihub24.de/admin/events" ) const ( NameEventType events.EventType = "name" GreetEventType events.EventType = "greet" ) type ( NameEventData struct { Name string } GreetEventData struct { Greeting string } ) func Test_EventHandler_ShouldHandleSubscriptions(t *testing.T) { handler := events.NewEventHandler() nameEvent := events.NewEvent(NameEventType, NameEventData{Name: "Tom"}) wg := sync.WaitGroup{} wg.Add(2) handler.Subscribe(NameEventType, func(event events.IEvent) { var data NameEventData err := event.Data(&data) if err != nil { t.Error(err) } err = handler.Publish(events.NewEvent(GreetEventType, GreetEventData{Greeting: fmt.Sprintf("Hello, %s", data.Name)})) if err != nil { t.Error(err) } wg.Done() }) handler.Subscribe(GreetEventType, func(event events.IEvent) { var data GreetEventData err := event.Data(&data) if err != nil { t.Error(err) } if data.Greeting != "Hello, Tom" { t.Errorf("expect greeting 'Hello, Tom' but get '%s'", data.Greeting) } wg.Done() }) err := handler.Publish(nameEvent) if err != nil { t.Error(err) } wg.Wait() }