makeDraftSubmission(); $this->app->make(FormSubmissionService::class)->submit($submission, null); Event::assertDispatched(FormSubmissionSubmitted::class, 1); } public function test_event_not_dispatched_when_assert_writable_throws(): void { Event::fake([FormSubmissionSubmitted::class]); $schema = FormSchema::factory()->create([ 'purpose' => FormPurpose::EVENT_REGISTRATION->value, 'freeze_on_submit' => true, ]); $submission = FormSubmission::factory()->create([ 'form_schema_id' => $schema->id, 'organisation_id' => $schema->organisation_id, 'status' => FormSubmissionStatus::SUBMITTED->value, ]); try { $this->app->make(FormSubmissionService::class)->submit($submission, null); } catch (\Throwable) { // expected โ€” assertWritable should throw before the transaction } Event::assertNotDispatched(FormSubmissionSubmitted::class); } private function makeDraftSubmission(): FormSubmission { $schema = FormSchema::factory()->create([ 'purpose' => FormPurpose::EVENT_REGISTRATION->value, ]); return FormSubmission::factory()->create([ 'form_schema_id' => $schema->id, 'organisation_id' => $schema->organisation_id, 'status' => FormSubmissionStatus::DRAFT->value, ]); } }