createOne(); $resource = ExternalResource::factory()->createOne(); $studio->resources()->attach($resource); Event::assertDispatched(StudioResourceCreated::class); } /** * When a Studio is detached to a Resource or vice versa, a StudioResourceDeleted event shall be dispatched. * * @return void */ public function testStudioResourceDeletedEventDispatched(): void { $studio = Studio::factory()->createOne(); $resource = ExternalResource::factory()->createOne(); $studio->resources()->attach($resource); $studio->resources()->detach($resource); Event::assertDispatched(StudioResourceDeleted::class); } /** * When a Studio Resource pivot is updated, a StudioResourceUpdated event shall be dispatched. * * @return void */ public function testStudioResourceUpdatedEventDispatched(): void { $studio = Studio::factory()->createOne(); $resource = ExternalResource::factory()->createOne(); $studioResource = StudioResource::factory() ->for($studio, 'studio') ->for($resource, 'resource') ->createOne(); $changes = StudioResource::factory() ->for($studio, 'studio') ->for($resource, 'resource') ->makeOne(); $studioResource->fill($changes->getAttributes()); $studioResource->save(); Event::assertDispatched(StudioResourceUpdated::class); } /** * The StudioResourceUpdated event shall contain embed fields. * * @return void */ public function testStudioResourceUpdatedEventEmbedFields(): void { $studio = Studio::factory()->createOne(); $resource = ExternalResource::factory()->createOne(); $studioResource = StudioResource::factory() ->for($studio, 'studio') ->for($resource, 'resource') ->createOne(); $changes = StudioResource::factory() ->for($studio, 'studio') ->for($resource, 'resource') ->makeOne(); $studioResource->fill($changes->getAttributes()); $studioResource->save(); Event::assertDispatched(StudioResourceUpdated::class, function (StudioResourceUpdated $event) { $message = $event->getDiscordMessage(); return ! empty(Arr::get($message->embed, 'fields')); }); } }