Commanded.Assertions.EventAssertions (Commanded v1.3.1) View Source

Provides test assertion and wait for event functions to help test applications built using Commanded.

The default assert and refute receive timeouts are one second.

You can override the default timeout in config (e.g. config/test.exs):

config :commanded,
  assert_receive_event_timeout: 1_000,
  refute_receive_event_timeout: 1_000

Link to this section Summary

Functions

Assert that events matching their respective predicates have a matching correlation id.

Assert that an event of the given event type is published. Verify that event using the assertion function.

Assert that an event of the given event type, matching the predicate, is published. Verify that event using the assertion function.

Refute that an event of the given type has been received.

Wait for an event of the given event type to be published.

Wait for an event of the given event type, matching the predicate, to be published.

Link to this section Functions

Link to this function

assert_correlated(application, event_type_a, predicate_a, event_type_b, predicate_b)

View Source

Assert that events matching their respective predicates have a matching correlation id.

Useful when there is a chain of events that is connected through event handlers.

Example

assert_correlated(
  BankApp,
  BankAccountOpened, fn opened -> opened.id == 1 end,
  InitialAmountDeposited, fn deposited -> deposited.id == 2 end
)
Link to this function

assert_receive_event(application, event_type, assertion_fn)

View Source

Assert that an event of the given event type is published. Verify that event using the assertion function.

Example

assert_receive_event(BankApp, BankAccountOpened, fn opened ->
  assert opened.account_number == "ACC123"
end)
Link to this function

assert_receive_event(application, event_type, predicate_fn, assertion_fn)

View Source

Assert that an event of the given event type, matching the predicate, is published. Verify that event using the assertion function.

Example

assert_receive_event(BankApp, BankAccountOpened,
  fn opened -> opened.account_number == "ACC123" end,
  fn opened ->
    assert opened.balance == 1_000
  end)
Link to this function

refute_receive_event(application, event_type, refute_fn, opts \\ [])

View Source

Refute that an event of the given type has been received.

An optional predicate may be provided to filter events matching the refuted type.

Examples

Refute that ExampleEvent is produced by given anonymous function:

refute_receive_event(ExampleApp, ExampleEvent, fn ->

:ok = MyApp.dispatch(command)

end)

Refute that ExampleEvent is produced by some_func/0 function:

refute_receive_event(ExampleApp, ExampleEvent, &some_func/0)

Refute that ExampleEvent matching given event_matches?/1 predicate funtion is produced by some_func/0 function:

refute_receive_event(ExampleApp, ExampleEvent, &some_func/0,
  predicate: &event_matches?/1
)

Refute that ExampleEvent matching given anonymous predicate funtion is produced by some_func/0 function:

refute_receive_event(ExampleApp, ExampleEvent, &some_func/0,
  predicate: fn event -> event.value == 1 end
)

Refute that ExampleEvent produced by some_func/0 function is published to a given stream:

refute_receive_event(ExampleApp, ExampleEvent, &some_func/0,
  predicate: fn event -> event.value == 1 end,
  stream: "foo-1234"
)
Link to this function

wait_for_event(application, event_type)

View Source

Wait for an event of the given event type to be published.

Examples

wait_for_event(BankApp, BankAccountOpened)
Link to this function

wait_for_event(application, event_type, predicate_fn)

View Source

Wait for an event of the given event type, matching the predicate, to be published.

Examples

wait_for_event(BankApp, BankAccountOpened, fn opened ->
  opened.account_number == "ACC123"
end)