From e0e08f284e3937c18f777a39295761c6a65789c6 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Thu, 27 Mar 2025 10:54:42 -0700 Subject: [PATCH 1/3] Add tests for creating and patching companies via api --- database/factories/UserFactory.php | 5 ++ .../Companies/Api/CreateCompaniesTest.php | 44 ++++++++++++++++ .../Companies/Api/UpdateCompaniesTest.php | 50 +++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 tests/Feature/Companies/Api/CreateCompaniesTest.php create mode 100644 tests/Feature/Companies/Api/UpdateCompaniesTest.php diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index 604666eda4..bb89d35241 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -295,6 +295,11 @@ class UserFactory extends Factory return $this->appendPermission(['companies.delete' => '1']); } + public function editCompanies() + { + return $this->appendPermission(['companies.edit' => '1']); + } + public function viewUsers() { return $this->appendPermission(['users.view' => '1']); diff --git a/tests/Feature/Companies/Api/CreateCompaniesTest.php b/tests/Feature/Companies/Api/CreateCompaniesTest.php new file mode 100644 index 0000000000..ab9c0eecb1 --- /dev/null +++ b/tests/Feature/Companies/Api/CreateCompaniesTest.php @@ -0,0 +1,44 @@ +actingAsForApi(User::factory()->create()) + ->postJson(route('api.companies.store')) + ->assertForbidden(); + } + + public function testValidationForCreatingCompany() + { + $this->actingAsForApi(User::factory()->createCompanies()->create()) + ->postJson(route('api.companies.store')) + ->assertStatus(200) + ->assertStatusMessageIs('error') + ->assertJsonStructure([ + 'messages' => [ + 'name', + ], + ]); + } + + public function testCanCreateCompany() + { + $this->actingAsForApi(User::factory()->createCompanies()->create()) + ->postJson(route('api.companies.store'), [ + 'name' => 'My Cool Company', + ]) + ->assertStatus(200) + ->assertStatusMessageIs('success'); + + $this->assertDatabaseHas('companies', [ + 'name' => 'My Cool Company', + ]); + } +} diff --git a/tests/Feature/Companies/Api/UpdateCompaniesTest.php b/tests/Feature/Companies/Api/UpdateCompaniesTest.php new file mode 100644 index 0000000000..000bca1133 --- /dev/null +++ b/tests/Feature/Companies/Api/UpdateCompaniesTest.php @@ -0,0 +1,50 @@ +create(); + + $this->actingAsForApi(User::factory()->create()) + ->patchJson(route('api.companies.update', $company)) + ->assertForbidden(); + } + + public function testValidationForPatchingCompany() + { + $company = Company::factory()->create(); + + $this->actingAsForApi(User::factory()->editCompanies()->create()) + ->patchJson(route('api.companies.update', ['company' => $company->id]), [ + 'name' => '', + ]) + ->assertStatus(200) + ->assertStatusMessageIs('error') + ->assertJsonStructure([ + 'messages' => [ + 'name', + ], + ]); + } + + public function testCanPatchCompany() + { + $company = Company::factory()->create(); + + $this->actingAsForApi(User::factory()->editCompanies()->create()) + ->patchJson(route('api.companies.update', ['company' => $company->id]), [ + 'name' => 'A Changed Name', + ]) + ->assertStatus(200) + ->assertStatusMessageIs('success'); + + $this->assertEquals('A Changed Name', $company->fresh()->name); + } +} From c095f330e1595df3a41628b8cfbccdbc175fbebb Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Thu, 27 Mar 2025 10:56:33 -0700 Subject: [PATCH 2/3] Add failing tests --- tests/Feature/Companies/Api/CreateCompaniesTest.php | 2 ++ tests/Feature/Companies/Api/UpdateCompaniesTest.php | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/Feature/Companies/Api/CreateCompaniesTest.php b/tests/Feature/Companies/Api/CreateCompaniesTest.php index ab9c0eecb1..3c7c1f4e06 100644 --- a/tests/Feature/Companies/Api/CreateCompaniesTest.php +++ b/tests/Feature/Companies/Api/CreateCompaniesTest.php @@ -33,12 +33,14 @@ class CreateCompaniesTest extends TestCase implements TestsPermissionsRequiremen $this->actingAsForApi(User::factory()->createCompanies()->create()) ->postJson(route('api.companies.store'), [ 'name' => 'My Cool Company', + 'notes' => 'A Cool Note', ]) ->assertStatus(200) ->assertStatusMessageIs('success'); $this->assertDatabaseHas('companies', [ 'name' => 'My Cool Company', + 'notes' => 'A Cool Note', ]); } } diff --git a/tests/Feature/Companies/Api/UpdateCompaniesTest.php b/tests/Feature/Companies/Api/UpdateCompaniesTest.php index 000bca1133..07a7e42117 100644 --- a/tests/Feature/Companies/Api/UpdateCompaniesTest.php +++ b/tests/Feature/Companies/Api/UpdateCompaniesTest.php @@ -41,10 +41,13 @@ class UpdateCompaniesTest extends TestCase $this->actingAsForApi(User::factory()->editCompanies()->create()) ->patchJson(route('api.companies.update', ['company' => $company->id]), [ 'name' => 'A Changed Name', + 'notes' => 'A Changed Note', ]) ->assertStatus(200) ->assertStatusMessageIs('success'); - $this->assertEquals('A Changed Name', $company->fresh()->name); + $company->refresh(); + $this->assertEquals('A Changed Name', $company->name); + $this->assertEquals('A Changed Note', $company->notes); } } From bc77c8c88542eb0445236c2b5d8165861fe1da5d Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Thu, 27 Mar 2025 10:57:34 -0700 Subject: [PATCH 3/3] Add notes to $fillable --- app/Models/Company.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Models/Company.php b/app/Models/Company.php index 8886da77f6..43fd396069 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -67,7 +67,8 @@ final class Company extends SnipeModel 'phone', 'fax', 'email', - 'created_by' + 'created_by', + 'notes', ]; private static function isFullMultipleCompanySupportEnabled()