Skip to content

Commit c7ae9d9

Browse files
committed
Add tests for delete accessory endpoint
1 parent 8774da3 commit c7ae9d9

File tree

2 files changed

+64
-1
lines changed

2 files changed

+64
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace Tests\Concerns;
4+
5+
interface TestsMultipleFullCompanySupport
6+
{
7+
public function testAdheresToMultipleFullCompanySupportScoping();
8+
}

tests/Feature/Accessories/Api/DeleteAccessoryTest.php

+56-1
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
namespace Tests\Feature\Accessories\Api;
44

55
use App\Models\Accessory;
6+
use App\Models\Company;
67
use App\Models\User;
8+
use Tests\Concerns\TestsMultipleFullCompanySupport;
79
use Tests\TestCase;
810

9-
class DeleteAccessoryTest extends TestCase
11+
class DeleteAccessoryTest extends TestCase implements TestsMultipleFullCompanySupport
1012
{
1113
public function testPermissionRequiredToDeleteAccessory()
1214
{
@@ -16,4 +18,57 @@ public function testPermissionRequiredToDeleteAccessory()
1618
->deleteJson(route('api.accessories.destroy', $accessory))
1719
->assertForbidden();
1820
}
21+
22+
public function testCanDeleteAccessory()
23+
{
24+
$accessory = Accessory::factory()->create();
25+
26+
$this->actingAsForApi(User::factory()->deleteAccessories()->create())
27+
->deleteJson(route('api.accessories.destroy', $accessory))
28+
->assertStatusMessageIs('success');
29+
30+
$this->assertTrue($accessory->fresh()->trashed());
31+
}
32+
33+
public function testCannotDeleteAccessoryThatHasCheckouts()
34+
{
35+
$accessory = Accessory::factory()->checkedOutToUser()->create();
36+
37+
$this->actingAsForApi(User::factory()->deleteAccessories()->create())
38+
->deleteJson(route('api.accessories.destroy', $accessory))
39+
->assertStatusMessageIs('error');
40+
41+
$this->assertFalse($accessory->fresh()->trashed());
42+
}
43+
44+
public function testAdheresToMultipleFullCompanySupportScoping()
45+
{
46+
[$companyA, $companyB] = Company::factory()->count(2)->create();
47+
48+
$accessoryA = Accessory::factory()->for($companyA)->create();
49+
$accessoryB = Accessory::factory()->for($companyB)->create();
50+
$accessoryC = Accessory::factory()->for($companyB)->create();
51+
52+
$superUser = $companyA->users()->save(User::factory()->superuser()->make());
53+
$userInCompanyA = $companyA->users()->save(User::factory()->deleteAccessories()->make());
54+
$userInCompanyB = $companyB->users()->save(User::factory()->deleteAccessories()->make());
55+
56+
$this->settings->enableMultipleFullCompanySupport();
57+
58+
$this->actingAsForApi($userInCompanyA)
59+
->deleteJson(route('api.accessories.destroy', $accessoryB))
60+
->assertStatusMessageIs('error');
61+
62+
$this->actingAsForApi($userInCompanyB)
63+
->deleteJson(route('api.accessories.destroy', $accessoryA))
64+
->assertStatusMessageIs('error');
65+
66+
$this->actingAsForApi($superUser)
67+
->deleteJson(route('api.accessories.destroy', $accessoryC))
68+
->assertStatusMessageIs('success');
69+
70+
$this->assertNull($accessoryA->fresh()->deleted_at, 'Accessory unexpectedly deleted');
71+
$this->assertNull($accessoryB->fresh()->deleted_at, 'Accessory unexpectedly deleted');
72+
$this->assertNotNull($accessoryC->fresh()->deleted_at, 'Accessory was not deleted');
73+
}
1974
}

0 commit comments

Comments
 (0)