From 38b9f4a43893f8c86e75d141a2ec41a7c2f90758 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Mon, 16 Sep 2024 10:29:20 -0700 Subject: [PATCH] Add tests for delete departments endpoint --- database/factories/UserFactory.php | 5 ++ .../Companies/Api/DeleteCompaniesTest.php | 1 - .../Departments/Api/DeleteDepartmentTest.php | 65 +++++++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 tests/Feature/Departments/Api/DeleteDepartmentTest.php diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index c82cabcc49..f30733854f 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -206,6 +206,11 @@ class UserFactory extends Factory return $this->appendPermission(['consumables.checkout' => '1']); } + public function deleteDepartments() + { + return $this->appendPermission(['departments.delete' => '1']); + } + public function viewDepartments() { return $this->appendPermission(['departments.view' => '1']); diff --git a/tests/Feature/Companies/Api/DeleteCompaniesTest.php b/tests/Feature/Companies/Api/DeleteCompaniesTest.php index 7b3224c987..64421b47d4 100644 --- a/tests/Feature/Companies/Api/DeleteCompaniesTest.php +++ b/tests/Feature/Companies/Api/DeleteCompaniesTest.php @@ -2,7 +2,6 @@ namespace Tests\Feature\Companies\Api; -use App\Models\Asset; use App\Models\Company; use App\Models\User; use Tests\Concerns\TestsPermissionsRequirement; diff --git a/tests/Feature/Departments/Api/DeleteDepartmentTest.php b/tests/Feature/Departments/Api/DeleteDepartmentTest.php new file mode 100644 index 0000000000..d8d2045af7 --- /dev/null +++ b/tests/Feature/Departments/Api/DeleteDepartmentTest.php @@ -0,0 +1,65 @@ +create(); + + $this->actingAsForApi(User::factory()->create()) + ->deleteJson(route('api.departments.destroy', $department)) + ->assertForbidden(); + } + + public function testCanDeleteDepartment() + { + $department = Department::factory()->create(); + + $this->actingAsForApi(User::factory()->deleteDepartments()->create()) + ->deleteJson(route('api.departments.destroy', $department)) + ->assertStatusMessageIs('success'); + + $this->assertDatabaseMissing('departments', ['id' => $department->id]); + } + + public function testAdheresToMultipleFullCompanySupportScoping() + { + [$companyA, $companyB] = Company::factory()->count(2)->create(); + + $departmentA = Department::factory()->for($companyA)->create(); + $departmentB = Department::factory()->for($companyB)->create(); + $departmentC = Department::factory()->for($companyB)->create(); + + $superUser = $companyA->users()->save(User::factory()->superuser()->make()); + $userInCompanyA = $companyA->users()->save(User::factory()->deleteDepartments()->make()); + $userInCompanyB = $companyB->users()->save(User::factory()->deleteDepartments()->make()); + + $this->settings->enableMultipleFullCompanySupport(); + + $this->actingAsForApi($userInCompanyA) + ->deleteJson(route('api.departments.destroy', $departmentB)) + ->assertStatusMessageIs('error'); + + $this->actingAsForApi($userInCompanyB) + ->deleteJson(route('api.departments.destroy', $departmentA)) + ->assertStatusMessageIs('error'); + + $this->actingAsForApi($superUser) + ->deleteJson(route('api.departments.destroy', $departmentC)) + ->assertStatusMessageIs('success'); + + $this->assertNotNull($departmentA->fresh(), 'Department unexpectedly deleted'); + $this->assertNotNull($departmentB->fresh(), 'Department unexpectedly deleted'); + $this->assertNull($departmentC->fresh(), 'Department was not deleted'); + } +}