createOne(); $member = Artist::factory()->createOne(); $artist->members()->attach($member); Event::assertDispatched(ArtistMemberCreated::class); } /** * When an Artist is detached from a Member or vice versa, an ArtistMemberDeleted event shall be dispatched. * * @return void */ public function testArtistMemberDeletedEventDispatched(): void { $artist = Artist::factory()->createOne(); $member = Artist::factory()->createOne(); $artist->members()->attach($member); $artist->members()->detach($member); Event::assertDispatched(ArtistMemberDeleted::class); } /** * When an Artist Member pivot is updated, an ArtistMemberUpdated event shall be dispatched. * * @return void */ public function testArtistMemberUpdatedEventDispatched(): void { $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(); $artistMember->fill($changes->getAttributes()); $artistMember->save(); Event::assertDispatched(ArtistMemberUpdated::class); } /** * The ArtistMemberUpdated event shall contain embed fields. * * @return void */ public function testArtistMemberUpdatedEventEmbedFields(): void { $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(); $artistMember->fill($changes->getAttributes()); $artistMember->save(); Event::assertDispatched(ArtistMemberUpdated::class, function (ArtistMemberUpdated $event) { $message = $event->getDiscordMessage(); return ! empty(Arr::get($message->embed, 'fields')); }); } }