create(); $document = DocumentationDocument::query()->create([ 'title' => 'Archive me', 'slug' => 'archive-me', 'status' => DocumentationDocument::STATUS_PUBLISHED, 'version' => '1.0.0', 'attachment_disk' => 'public', 'attachment_path' => 'documentation/primary.pdf', 'attachment_name' => 'primary.pdf', ]); Storage::disk('public')->put('documentation/primary.pdf', 'primary'); $attachment = $document->attachments()->create([ 'disk' => 'public', 'path' => 'documentation/support.pdf', 'original_name' => 'support.pdf', ]); Storage::disk('public')->put($attachment->path, 'support'); $this->actingAs($user) ->delete(route('documentation.documents.destroy', $document)) ->assertRedirect(route('documentation.documents.index')); $this->assertSoftDeleted('documentation_documents', ['id' => $document->id]); Storage::disk('public')->assertExists('documentation/primary.pdf'); Storage::disk('public')->assertExists('documentation/support.pdf'); $this->assertDatabaseHas('documentation_attachments', ['id' => $attachment->id]); } public function test_archived_document_can_be_restored_as_draft(): void { $user = User::factory()->create(); $document = DocumentationDocument::query()->create([ 'title' => 'Restore me', 'slug' => 'restore-me', 'status' => DocumentationDocument::STATUS_ARCHIVED, 'version' => '1.0.0', ]); $document->delete(); $this->actingAs($user) ->patch(route('documentation.documents.restore', $document->id)) ->assertRedirect(route('documentation.documents.archived')); $restored = DocumentationDocument::query()->findOrFail($document->id); $this->assertSame(DocumentationDocument::STATUS_DRAFT, $restored->status); $this->assertNull($restored->deleted_at); } public function test_permanent_delete_removes_archived_record_and_files(): void { Storage::fake('public'); $user = User::factory()->create(); $document = DocumentationDocument::query()->create([ 'title' => 'Delete me', 'slug' => 'delete-me', 'status' => DocumentationDocument::STATUS_ARCHIVED, 'version' => '1.0.0', 'attachment_disk' => 'public', 'attachment_path' => 'documentation/primary.pdf', 'attachment_name' => 'primary.pdf', ]); Storage::disk('public')->put('documentation/primary.pdf', 'primary'); $document->attachments()->create([ 'disk' => 'public', 'path' => 'documentation/support.pdf', 'original_name' => 'support.pdf', ]); Storage::disk('public')->put('documentation/support.pdf', 'support'); $document->delete(); $this->actingAs($user) ->delete(route('documentation.documents.force-destroy', $document->id)) ->assertRedirect(route('documentation.documents.archived')); $this->assertDatabaseMissing('documentation_documents', ['id' => $document->id]); Storage::disk('public')->assertMissing('documentation/primary.pdf'); Storage::disk('public')->assertMissing('documentation/support.pdf'); } }