diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index a41813d210..03bc193329 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -246,11 +246,6 @@ class UserFactory extends Factory return $this->appendPermission(['components.view' => '1']); } - public function createCompanies() - { - return $this->appendPermission(['companies.create' => '1']); - } - public function createComponents() { return $this->appendPermission(['components.create' => '1']); @@ -276,6 +271,16 @@ class UserFactory extends Factory return $this->appendPermission(['components.checkout' => '1']); } + public function createCompanies() + { + return $this->appendPermission(['companies.create' => '1']); + } + + public function deleteCompanies() + { + return $this->appendPermission(['companies.delete' => '1']); + } + public function viewUsers() { return $this->appendPermission(['users.view' => '1']); diff --git a/tests/Feature/Companies/Api/DeleteCompaniesTest.php b/tests/Feature/Companies/Api/DeleteCompaniesTest.php new file mode 100644 index 0000000000..7b3224c987 --- /dev/null +++ b/tests/Feature/Companies/Api/DeleteCompaniesTest.php @@ -0,0 +1,49 @@ +create(); + + $this->actingAsForApi(User::factory()->create()) + ->deleteJson(route('api.companies.destroy', $company)) + ->assertForbidden(); + } + + public function testCanDeleteCompany() + { + $company = Company::factory()->create(); + + $this->actingAsForApi(User::factory()->deleteCompanies()->create()) + ->deleteJson(route('api.companies.destroy', $company)) + ->assertStatusMessageIs('success'); + + $this->assertDatabaseMissing('companies', ['id' => $company->id]); + } + + public function testCannotDeleteCompanyThatHasAssociatedItems() + { + $companyWithAssets = Company::factory()->hasAssets()->create(); + $companyWithAccessories = Company::factory()->hasAccessories()->create(); + $companyWithConsumables = Company::factory()->hasConsumables()->create(); + $companyWithComponents = Company::factory()->hasComponents()->create(); + $companyWithUsers = Company::factory()->hasUsers()->create(); + + $actor = $this->actingAsForApi(User::factory()->deleteCompanies()->create()); + + $actor->deleteJson(route('api.companies.destroy', $companyWithAssets))->assertStatusMessageIs('error'); + $actor->deleteJson(route('api.companies.destroy', $companyWithAccessories))->assertStatusMessageIs('error'); + $actor->deleteJson(route('api.companies.destroy', $companyWithConsumables))->assertStatusMessageIs('error'); + $actor->deleteJson(route('api.companies.destroy', $companyWithComponents))->assertStatusMessageIs('error'); + $actor->deleteJson(route('api.companies.destroy', $companyWithUsers))->assertStatusMessageIs('error'); + } +}