createOne(); $resource = ExternalResource::factory()->createOne(); Feature::activate(FeatureConstants::ALLOW_DISCORD_NOTIFICATIONS); Bus::fake(SendDiscordNotificationJob::class); Event::fakeExcept(StudioResourceCreated::class); $studio->resources()->attach($resource); Bus::assertDispatched(SendDiscordNotificationJob::class); } /** * When a Studio is detached from a Resource or vice versa, a SendDiscordNotification job shall be dispatched. * * @return void */ public function testStudioResourceDeletedSendsDiscordNotification(): void { $studio = Studio::factory()->createOne(); $resource = ExternalResource::factory()->createOne(); $studio->resources()->attach($resource); Feature::activate(FeatureConstants::ALLOW_DISCORD_NOTIFICATIONS); Bus::fake(SendDiscordNotificationJob::class); Event::fakeExcept(StudioResourceDeleted::class); $studio->resources()->detach($resource); Bus::assertDispatched(SendDiscordNotificationJob::class); } /** * When a Studio Resource pivot is updated, a SendDiscordNotification job will be dispatched. * * @return void */ public function testStudioResourceUpdatedSendsDiscordNotification(): 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(); Feature::activate(FeatureConstants::ALLOW_DISCORD_NOTIFICATIONS); Bus::fake(SendDiscordNotificationJob::class); Event::fakeExcept(StudioResourceUpdated::class); $studioResource->fill($changes->getAttributes()); $studioResource->save(); Bus::assertDispatched(SendDiscordNotificationJob::class); } }