snipe-it/tests/Feature/Api/Users/UsersForSelectListTest.php

109 lines
3.6 KiB
PHP
Raw Normal View History

<?php
namespace Tests\Feature\Api\Users;
2023-02-02 17:41:32 -08:00
use App\Models\Company;
use App\Models\Setting;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Testing\Fluent\AssertableJson;
use Laravel\Passport\Passport;
use Tests\TestCase;
class UsersForSelectListTest extends TestCase
{
use RefreshDatabase;
public function testUsersAreReturned()
{
Setting::factory()->create();
$actor = User::factory()->firstAdmin()->create();
User::factory()->count(3)->create();
Passport::actingAs($actor);
2023-02-02 17:57:24 -08:00
$response = $this->getJson(route('api.users.selectlist'))->assertOk();
$response->assertJsonStructure([
'results',
'pagination',
'total_count',
'page',
'page_count',
]);
$response->assertJson(fn(AssertableJson $json) => $json->has('results', 4)->etc());
}
public function testUsersScopedToCompanyWhenMultipleFullCompanySupportEnabled()
{
2023-02-02 17:41:32 -08:00
Setting::factory()->withMultipleFullCompanySupport()->create();
2023-02-02 17:41:32 -08:00
[$jedi, $sith] = Company::factory()->count(2)->create();
User::factory()
->for($sith)
->create(['first_name' => 'Darth', 'last_name' => 'Vader']);
User::factory()
->for($jedi)
->count(3)
->sequence(
['first_name' => 'Luke', 'last_name' => 'Skywalker'],
['first_name' => 'Obi-Wan', 'last_name' => 'Kenobi'],
['first_name' => 'Anakin', 'last_name' => 'Skywalker'],
)
->create();
Passport::actingAs($jedi->users->first());
2023-02-02 17:57:24 -08:00
$response = $this->getJson(route('api.users.selectlist'))->assertOk();
2023-02-02 17:41:32 -08:00
$results = collect($response->json('results'));
$this->assertEquals($jedi->users->count(), $results->count());
$this->assertTrue(
$results->pluck('text')->contains(fn($text) => str_contains($text, $jedi->users->first()->first_name))
);
$this->assertFalse(
$results->pluck('text')->contains(fn($text) => str_contains($text, $sith->users->first()->first_name))
);
}
public function testUsersScopedToCompanyDuringSearchWhenMultipleFullCompanySupportEnabled()
{
2023-02-02 17:57:24 -08:00
Setting::factory()->withMultipleFullCompanySupport()->create();
[$jedi, $sith] = Company::factory()->count(2)->create();
User::factory()
->for($sith)
->create(['first_name' => 'Darth', 'last_name' => 'Vader', 'username' => 'dvader']);
User::factory()
->for($jedi)
->count(3)
->sequence(
['first_name' => 'Luke', 'last_name' => 'Skywalker', 'username' => 'lskywalker'],
['first_name' => 'Obi-Wan', 'last_name' => 'Kenobi', 'username' => 'okenobi'],
['first_name' => 'Anakin', 'last_name' => 'Skywalker', 'username' => 'askywalker'],
)
->create();
Passport::actingAs($jedi->users->first());
$response = $this->getJson(route('api.users.selectlist', ['search' => 'a']))->assertOk();
$results = collect($response->json('results'));
$this->assertEquals(3, $results->count());
$this->assertTrue($results->pluck('text')->contains(fn($text) => str_contains($text, 'Luke')));
$this->assertTrue($results->pluck('text')->contains(fn($text) => str_contains($text, 'Anakin')));
$response = $this->getJson(route('api.users.selectlist', ['search' => 'v']))->assertOk();
$results = collect($response->json('results'));
$this->assertEquals(0, $results->count());
}
}