diff --git a/pkg/events/events.go b/pkg/events/events.go index 7bac20188..6852b596f 100644 --- a/pkg/events/events.go +++ b/pkg/events/events.go @@ -80,6 +80,7 @@ func InitEvents() (err error) { func Publish(event Event) error { if isUnderTest { + dispatchedTestEvents = append(dispatchedTestEvents, event) return nil } diff --git a/pkg/events/testing.go b/pkg/events/testing.go index 500a5cf87..b91409450 100644 --- a/pkg/events/testing.go +++ b/pkg/events/testing.go @@ -16,11 +16,33 @@ package events -var isUnderTest bool +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +var ( + isUnderTest bool + dispatchedTestEvents []Event +) // Fake sets up the "test mode" of the events package. Typically you'd call this function in the TestMain function // in the package you're testing. It will prevent any events from being fired, instead they will be recorded and be // available for assertions. func Fake() { isUnderTest = true + dispatchedTestEvents = nil +} + +// AssertDispatched asserts an event has been dispatched. +func AssertDispatched(t *testing.T, event Event) { + var found bool + for _, testEvent := range dispatchedTestEvents { + if event.TopicName() == testEvent.TopicName() { + found = true + break + } + } + + assert.True(t, found, "Failed to assert "+event.TopicName()+" has been dispatched.") } diff --git a/pkg/models/tasks_test.go b/pkg/models/tasks_test.go index f37817c8e..722478b61 100644 --- a/pkg/models/tasks_test.go +++ b/pkg/models/tasks_test.go @@ -17,6 +17,7 @@ package models import ( + "code.vikunja.io/api/pkg/events" "testing" "time" @@ -65,6 +66,7 @@ func TestTask_Create(t *testing.T) { "bucket_id": 1, }, false) + events.AssertDispatched(t, &TaskCreatedEvent{}) }) t.Run("empty title", func(t *testing.T) { db.LoadAndAssertFixtures(t)