diff --git a/tests/Feature/Events/TransactionListenerRegistrationTest.php b/tests/Feature/Events/TransactionListenerRegistrationTest.php new file mode 100644 index 00000000..c5e47067 --- /dev/null +++ b/tests/Feature/Events/TransactionListenerRegistrationTest.php @@ -0,0 +1,33 @@ +filter(fn (CallQueuedListener $job): bool => $job->class === $listener) + ->count(); +} + +it('registers each transaction listener exactly once', function (string $event, string $listener): void { + $user = User::factory()->onboarded()->create(); + $transaction = Transaction::factory()->plaintext()->create(['user_id' => $user->id]); + + Queue::fake(); + + event(new $event($transaction)); + + expect(queuedListenerCount($listener))->toBe(1); +})->with([ + 'created dispatches budget assignment once' => [TransactionCreated::class, AssignTransactionToBudget::class], + 'updated dispatches budget assignment once' => [TransactionUpdated::class, AssignTransactionToBudget::class], + 'deleted dispatches budget unassignment once' => [TransactionDeleted::class, UnassignTransactionFromBudget::class], +]);