Add tests around deleting component via ui

This commit is contained in:
Marcus Moore 2024-11-19 16:44:19 -08:00
parent 3fb543bf03
commit 51a0767be9
No known key found for this signature in database

View file

@ -0,0 +1,88 @@
<?php
namespace Tests\Feature\Components\Ui;
use App\Models\Company;
use App\Models\Component;
use App\Models\User;
use Illuminate\Support\Facades\Storage;
use Tests\Concerns\TestsFullMultipleCompaniesSupport;
use Tests\Concerns\TestsPermissionsRequirement;
use Tests\TestCase;
class DeleteComponentTest extends TestCase implements TestsFullMultipleCompaniesSupport, TestsPermissionsRequirement
{
public function testRequiresPermission()
{
$component = Component::factory()->create();
$this->actingAs(User::factory()->create())
->delete(route('components.destroy', $component->id))
->assertForbidden();
}
public function testHandlesNonExistentComponent()
{
$this->actingAs(User::factory()->deleteComponents()->create())
->delete(route('components.destroy', 10000))
->assertSessionHas('error');
}
public function testCanDeleteComponent()
{
$component = Component::factory()->create();
$this->actingAs(User::factory()->deleteComponents()->create())
->delete(route('components.destroy', $component->id))
->assertSessionHas('success')
->assertRedirect(route('components.index'));
$this->assertSoftDeleted($component);
}
public function testDeletingComponentRemovesComponentImage()
{
Storage::fake('public');
$component = Component::factory()->create(['image' => 'component-image.jpg']);
Storage::disk('public')->put('components/component-image.jpg', 'content');
Storage::disk('public')->assertExists('components/component-image.jpg');
$this->actingAs(User::factory()->deleteComponents()->create())->delete(route('components.destroy', $component->id));
Storage::disk('public')->assertMissing('components/component-image.jpg');
}
public function testDeletingComponentIsLogged()
{
$user = User::factory()->deleteComponents()->create();
$component = Component::factory()->create();
$this->actingAs($user)->delete(route('components.destroy', $component->id));
$this->assertDatabaseHas('action_logs', [
'created_by' => $user->id,
'action_type' => 'delete',
'item_type' => Component::class,
'item_id' => $component->id,
]);
}
public function testAdheresToFullMultipleCompaniesSupportScoping()
{
$this->settings->enableMultipleFullCompanySupport();
[$companyA, $companyB] = Company::factory()->count(2)->create();
$userInCompanyA = User::factory()->for($companyA)->create();
$componentForCompanyB = Component::factory()->for($companyB)->create();
$this->actingAs($userInCompanyA)
->delete(route('components.destroy', $componentForCompanyB->id))
->assertSessionHas('error');
$this->assertNotSoftDeleted($componentForCompanyB);
}
}