From effd96928485cd342608d419e90dcaa2501e8dc3 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 21 Jun 2023 17:15:02 -0700 Subject: [PATCH] Scaffold test before removing scopeCompanyables call from AssetsController@selectlist --- .../Api/Assets/AssetsForSelectListTest.php | 81 +++++++++++++++++++ tests/Support/InteractsWithResponses.php | 14 ++++ 2 files changed, 95 insertions(+) create mode 100644 tests/Feature/Api/Assets/AssetsForSelectListTest.php diff --git a/tests/Feature/Api/Assets/AssetsForSelectListTest.php b/tests/Feature/Api/Assets/AssetsForSelectListTest.php new file mode 100644 index 000000000..625d623b7 --- /dev/null +++ b/tests/Feature/Api/Assets/AssetsForSelectListTest.php @@ -0,0 +1,81 @@ +create(['asset_tag' => '0001']); + Asset::factory()->create(['asset_tag' => '0002']); + + Passport::actingAs(User::factory()->create()); + + $response = $this->getJson(route('assets.selectlist', ['search' => '000']))->assertOk(); + + $results = collect($response->json('results')); + + $this->assertEquals(2, $results->count()); + $this->assertTrue($results->pluck('text')->contains(fn($text) => str_contains($text, '0001'))); + $this->assertTrue($results->pluck('text')->contains(fn($text) => str_contains($text, '0002'))); + } + + public function testAssetsAreScopedToCompanyWhenMultipleCompanySupportEnabled() + { + $this->markTestIncomplete(); + + [$companyA, $companyB] = Company::factory()->count(2)->create(); + + $assetA = Asset::factory()->for($companyA)->create(['asset_tag' => '0001']); + $assetB = Asset::factory()->for($companyB)->create(['asset_tag' => '0002']); + + $superUser = $companyA->users()->save(User::factory()->superuser()->make()); + $userInCompanyA = $companyA->users()->save(User::factory()->viewAssets()->make()); + $userInCompanyB = $companyB->users()->save(User::factory()->viewAssets()->make()); + + $this->settings->disableMultipleFullCompanySupport(); + + Passport::actingAs($superUser); + $response = $this->getJson(route('assets.selectlist', ['search' => '000'])); + $this->assertResponseContainsInResults($response, $assetA); + $this->assertResponseContainsInResults($response, $assetB); + + Passport::actingAs($userInCompanyA); + $response = $this->getJson(route('assets.selectlist', ['search' => '000'])); + $this->assertResponseContainsInResults($response, $assetA); + $this->assertResponseContainsInResults($response, $assetB); + + Passport::actingAs($userInCompanyB); + $response = $this->getJson(route('assets.selectlist', ['search' => '000'])); + $this->assertResponseContainsInResults($response, $assetA); + $this->assertResponseContainsInResults($response, $assetB); + + $this->settings->enableMultipleFullCompanySupport(); + + Passport::actingAs($superUser); + $response = $this->getJson(route('assets.selectlist', ['search' => '000'])); + $this->assertResponseContainsInResults($response, $assetA); + $this->assertResponseContainsInResults($response, $assetB); + + Passport::actingAs($userInCompanyA); + $response = $this->getJson(route('assets.selectlist', ['search' => '000'])); + $this->assertResponseContainsInResults($response, $assetA); + $this->assertResponseDoesNotContainInResults($response, $assetB); + + Passport::actingAs($userInCompanyB); + $response = $this->getJson(route('assets.selectlist', ['search' => '000'])); + $this->assertResponseDoesNotContainInResults($response, $assetA); + $this->assertResponseContainsInResults($response, $assetB); + } +} diff --git a/tests/Support/InteractsWithResponses.php b/tests/Support/InteractsWithResponses.php index 9a1965eef..1fb6f311b 100644 --- a/tests/Support/InteractsWithResponses.php +++ b/tests/Support/InteractsWithResponses.php @@ -22,6 +22,20 @@ trait InteractsWithResponses $this->assertFalse(collect($response['rows'])->pluck($property)->contains($model->{$property})); } + protected function assertResponseContainsInResults(TestResponse $response, Model $model, string $property = 'id') + { + $this->guardAgainstNullProperty($model, $property); + + $this->assertTrue(collect($response->json('results'))->pluck('id')->contains($model->{$property})); + } + + protected function assertResponseDoesNotContainInResults(TestResponse $response, Model $model, string $property = 'id') + { + $this->guardAgainstNullProperty($model, $property); + + $this->assertFalse(collect($response->json('results'))->pluck('id')->contains($model->{$property})); + } + private function guardAgainstNullProperty(Model $model, string $property): void { if (is_null($model->{$property})) {