155 lines
6.4 KiB
PHP
155 lines
6.4 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Users\Ui;
|
|
|
|
use App\Models\Accessory;
|
|
use App\Models\Asset;
|
|
use App\Models\Company;
|
|
use App\Models\Consumable;
|
|
use App\Models\Group;
|
|
use App\Models\LicenseSeat;
|
|
use App\Models\Location;
|
|
use App\Models\User;
|
|
use Tests\TestCase;
|
|
|
|
class ExportUsersTest extends TestCase
|
|
{
|
|
public function test_requires_permission()
|
|
{
|
|
$this->actingAs(User::factory()->create())
|
|
->get(route('users.export'))
|
|
->assertForbidden();
|
|
}
|
|
|
|
public function test_can_export_users_to_csv()
|
|
{
|
|
$creator = User::factory()->create(['first_name' => 'Han', 'last_name' => 'Solo']);
|
|
$deptManager = User::factory()->create(['first_name' => 'Mace', 'last_name' => 'Windu']);
|
|
|
|
$luke = User::factory()
|
|
->forCompany(['name' => 'Jedi'])
|
|
->forManager(['first_name' => 'Ben', 'last_name' => 'Kenobi'])
|
|
->forLocation(['name' => 'Space'])
|
|
->forDepartment(['name' => 'Lightsaber Fighting Dept', 'manager_id' => $deptManager->id])
|
|
->create([
|
|
'jobtitle' => 'Jedi Master',
|
|
'employee_num' => '789',
|
|
'first_name' => 'Luke',
|
|
'last_name' => 'Skywalker',
|
|
'display_name' => 'Master Luke',
|
|
'username' => 'lskywalker',
|
|
'email' => 'skywalker@jedi.com',
|
|
'phone' => '555-1234',
|
|
'mobile' => '555-5678',
|
|
'website' => 'https://jedi.com',
|
|
'address' => '123 Moisture Farm',
|
|
'city' => 'Anchorhead',
|
|
'state' => 'TA',
|
|
'country' => 'Outer Rim',
|
|
'zip' => '12345',
|
|
'notes' => 'Nice guy...',
|
|
'vip' => 1,
|
|
'remote' => 1,
|
|
'autoassign_licenses' => 1,
|
|
'ldap_import' => 1,
|
|
'start_date' => '2020-01-01',
|
|
'end_date' => '2030-12-31',
|
|
'created_by' => $creator->id,
|
|
]);
|
|
|
|
$luke->groups()->sync(
|
|
Group::factory()->count(2)->sequence(
|
|
['name' => 'Jedi'],
|
|
['name' => 'Jedi Dance Crew'],
|
|
)->create()
|
|
);
|
|
|
|
Asset::factory()->assignedToUser($luke)->count(2)->create();
|
|
LicenseSeat::factory()->assignedToUser($luke)->count(2)->create();
|
|
Accessory::factory()->checkedOutToUser($luke)->count(2)->create();
|
|
Consumable::factory()->checkedOutToUser($luke)->count(2)->create();
|
|
User::factory()->count(3)->create(['manager_id' => $luke->id]);
|
|
Location::factory()->count(2)->create(['manager_id' => $luke->id]);
|
|
|
|
$this->actingAs(User::factory()->viewUsers()->create())
|
|
->get(route('users.export'))
|
|
->assertOk()
|
|
->assertCsvHeader()
|
|
->assertSeeTextInStreamedResponse([
|
|
'Jedi',
|
|
'Jedi Master',
|
|
'789',
|
|
'Luke',
|
|
'Skywalker',
|
|
'Luke Skywalker',
|
|
'lskywalker',
|
|
'skywalker@jedi.com',
|
|
'Ben Kenobi',
|
|
'Space',
|
|
'Lightsaber Fighting Dept',
|
|
'2',
|
|
'Jedi, Jedi Dance Crew',
|
|
trans('general.user'),
|
|
'Nice guy...',
|
|
trans('general.yes'),
|
|
])
|
|
->assertSeePairsInStreamedResponse([
|
|
trans('admin/users/table.first_name') => 'Luke',
|
|
trans('admin/users/table.last_name') => 'Skywalker',
|
|
trans('admin/users/table.display_name') => 'Master Luke',
|
|
trans('admin/users/table.username') => 'lskywalker',
|
|
trans('admin/users/table.email') => 'skywalker@jedi.com',
|
|
trans('admin/companies/table.title') => 'Jedi',
|
|
trans('general.groups') => 'Jedi, Jedi Dance Crew',
|
|
trans('admin/users/table.title') => 'Jedi Master',
|
|
trans('general.employee_number') => '789',
|
|
trans('admin/users/table.manager') => 'Ben Kenobi',
|
|
trans('admin/users/table.location') => 'Space',
|
|
trans('general.department') => 'Lightsaber Fighting Dept',
|
|
trans('general.assets') => '2',
|
|
trans('general.accessories') => '2',
|
|
trans('general.consumables') => '2',
|
|
trans('general.licenses') => '2',
|
|
trans('general.notes') => 'Nice guy...',
|
|
trans('admin/users/table.phone') => '555-1234',
|
|
trans('admin/users/table.mobile') => '555-5678',
|
|
trans('general.website') => 'https://jedi.com',
|
|
trans('general.address') => '123 Moisture Farm',
|
|
trans('general.city') => 'Anchorhead',
|
|
trans('general.state') => 'TA',
|
|
trans('general.country') => 'Outer Rim',
|
|
trans('general.zip') => '12345',
|
|
trans('general.importer.vip') => trans('general.yes'),
|
|
trans('admin/users/general.remote') => trans('general.yes'),
|
|
trans('general.autoassign_licenses') => trans('general.yes'),
|
|
trans('general.ldap_sync') => trans('general.yes'),
|
|
trans('admin/users/table.managed_users') => '3',
|
|
trans('admin/users/table.managed_locations') => '2',
|
|
trans('admin/users/general.department_manager') => 'Mace Windu',
|
|
trans('general.created_by') => 'Han Solo',
|
|
trans('general.start_date') => '2020-01-01',
|
|
trans('general.end_date') => '2030-12-31',
|
|
]);
|
|
}
|
|
|
|
public function test_multi_company_user_exports_pipe_separated_company_names()
|
|
{
|
|
[$companyA, $companyB] = Company::factory()->sequence(
|
|
['name' => 'Rebel Alliance'],
|
|
['name' => 'Galactic Senate'],
|
|
)->count(2)->create();
|
|
|
|
$user = User::factory()->create(['company_id' => $companyA->id]);
|
|
$user->companies()->sync([$companyA->id, $companyB->id]);
|
|
|
|
$this->actingAs(User::factory()->viewUsers()->create())
|
|
->get(route('users.export'))
|
|
->assertOk()
|
|
->assertCsvHeader()
|
|
->assertSeePairsInStreamedResponse([
|
|
trans('admin/users/table.first_name') => $user->first_name,
|
|
trans('admin/companies/table.title') => 'Rebel Alliance|Galactic Senate',
|
|
]);
|
|
}
|
|
}
|