Skip to content

Commit

Permalink
Merge pull request #15852 from marcusmoore/testing/ui-delete-component
Browse files Browse the repository at this point in the history
Added tests around deleting component via ui
  • Loading branch information
snipe authored Nov 20, 2024
2 parents 5a5f108 + 54f5f46 commit cca7600
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 1 deletion.
2 changes: 1 addition & 1 deletion app/Http/Controllers/Components/ComponentsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ public function destroy($componentId)
$this->authorize('delete', $component);

// Remove the image if one exists
if (Storage::disk('public')->exists('components/'.$component->image)) {
if ($component->image && Storage::disk('public')->exists('components/' . $component->image)) {
try {
Storage::disk('public')->delete('components/'.$component->image);
} catch (\Exception $e) {
Expand Down
88 changes: 88 additions & 0 deletions tests/Feature/Components/Ui/DeleteComponentTest.php
Original file line number Diff line number Diff line change
@@ -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);
}
}

0 comments on commit cca7600

Please sign in to comment.