createOne(); $member = Artist::factory()->createOne(); Feature::activate(FeatureConstants::ALLOW_DISCORD_NOTIFICATIONS); Bus::fake(SendDiscordNotificationJob::class); Event::fakeExcept(ArtistMemberCreated::class); $artist->members()->attach($member); Bus::assertDispatched(SendDiscordNotificationJob::class); }); test('artist member deleted sends discord notification', function () { $artist = Artist::factory()->createOne(); $member = Artist::factory()->createOne(); $artist->members()->attach($member); Feature::activate(FeatureConstants::ALLOW_DISCORD_NOTIFICATIONS); Bus::fake(SendDiscordNotificationJob::class); Event::fakeExcept(ArtistMemberDeleted::class); $artist->members()->detach($member); Bus::assertDispatched(SendDiscordNotificationJob::class); }); test('artist member updated sends discord notification', function () { $artist = Artist::factory()->createOne(); $member = Artist::factory()->createOne(); $artistMember = ArtistMember::factory() ->for($artist, 'artist') ->for($member, 'member') ->createOne(); $changes = ArtistMember::factory() ->for($artist, 'artist') ->for($member, 'member') ->makeOne(); Feature::activate(FeatureConstants::ALLOW_DISCORD_NOTIFICATIONS); Bus::fake(SendDiscordNotificationJob::class); Event::fakeExcept(ArtistMemberUpdated::class); $artistMember->fill($changes->getAttributes()); $artistMember->save(); Bus::assertDispatched(SendDiscordNotificationJob::class); });