package classes import ( "context" "testing" "git.golem15.com/golem15/sm-user-plugin/models" "git.golem15.com/golem15/summercms/modules/festival" ) func TestGetApiArrayEventMerge(t *testing.T) { bus := festival.New() bus.ListenPriority[*GetApiArrayEvent]("first", 0, func(_ context.Context, e *GetApiArrayEvent) error { e.Collected()["organisation_id"] = 1 e.Collected()["kept"] = "a" return nil }) bus.ListenPriority[*GetApiArrayEvent]("second", 0, func(_ context.Context, e *GetApiArrayEvent) error { e.Collected()["organisation_id"] = 2 return nil }) got, err := bus.Collect(context.Background(), &GetApiArrayEvent{User: &models.User{}}) if err != nil { t.Fatal(err) } if got["organisation_id"] != 2 { t.Fatalf("later listener lost: %#v", got["organisation_id"]) } if got["kept"] != "a" { t.Fatalf("non-colliding key dropped: %#v", got) } } func TestRegisterEventFires(t *testing.T) { bus := festival.New() var seen *models.User bus.Listen[*RegisterEvent]("golem15.user", func(_ context.Context, e *RegisterEvent) error { seen = e.User return nil }) user := &models.User{ID: 4, Email: "evt@example.test"} if err := bus.Fire(context.Background(), &RegisterEvent{User: user}); err != nil { t.Fatal(err) } if seen == nil || seen.Email != user.Email { t.Fatalf("event user = %#v", seen) } } func TestCreatedEventFires(t *testing.T) { if CreatedEventName != "user.Created" { t.Fatalf("CreatedEventName = %q, want user.Created", CreatedEventName) } bus := festival.New() var seen *models.User bus.Listen[*CreatedEvent]("golem15.user", func(_ context.Context, e *CreatedEvent) error { seen = e.User return nil }) user := &models.User{ID: 9, Email: "created@example.test"} if err := bus.Fire(context.Background(), &CreatedEvent{User: user}); err != nil { t.Fatal(err) } if seen == nil || seen.Email != user.Email { t.Fatalf("created event user = %#v", seen) } } func TestDeletingEventFires(t *testing.T) { if DeletingEventName != "user.Deleting" { t.Fatalf("DeletingEventName = %q, want user.Deleting", DeletingEventName) } bus := festival.New() var seen *models.User bus.Listen[*DeletingEvent]("golem15.user", func(_ context.Context, e *DeletingEvent) error { seen = e.User return nil }) user := &models.User{ID: 9, Email: "gone@example.test"} if err := bus.Fire(context.Background(), &DeletingEvent{User: user}); err != nil { t.Fatal(err) } if seen == nil || seen.Email != user.Email { t.Fatalf("deleting event user = %#v", seen) } }