new_malcomm_oline/tests/Feature/VehicleTest.php

132 lines
4.3 KiB
PHP

<?php
use App\Models\User;
use App\Models\Vehicle;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
beforeEach(function () {
Permission::firstOrCreate(['name' => 'flota_access']);
});
function createFleetUser(string $roleName = 'pracownik'): User
{
$user = User::factory()->create();
$role = Role::firstOrCreate(['name' => $roleName]);
$role->givePermissionTo('flota_access');
$user->assignRole($role);
return $user;
}
test('manager sees all vehicles and employee sees only assigned vehicles', function () {
$manager = createFleetUser('kierownik');
$employee = createFleetUser('pracownik');
$assignedVehicle = Vehicle::create([
'brand' => 'Toyota',
'registration_number' => 'DW1234A',
'user_id' => $employee->id,
'year' => 2020,
'purchase_date' => '2020-06-01',
'oc_expiry_date' => '2027-06-01',
'oil_change_km' => 10000,
'insurance_provider' => 'Warta',
'technical_inspection_date' => '2026-09-15',
'mileage_km' => 120000,
'status' => 'używany',
]);
$otherVehicle = Vehicle::create([
'brand' => 'Ford',
'registration_number' => 'WA9876Z',
'user_id' => $manager->id,
'year' => 2018,
'purchase_date' => '2018-03-01',
'oc_expiry_date' => '2027-03-01',
'oil_change_km' => 8000,
'insurance_provider' => 'PZU',
'technical_inspection_date' => '2026-10-01',
'mileage_km' => 180000,
'status' => 'używany',
]);
$managerResponse = $this->actingAs($manager)->get(route('flota'));
$managerResponse->assertOk();
$managerResponse->assertSee('Toyota');
$managerResponse->assertSee('Ford');
$employeeResponse = $this->actingAs($employee)->get(route('flota'));
$employeeResponse->assertOk();
$employeeResponse->assertSee('Toyota');
$employeeResponse->assertDontSee('Ford');
$this->assertDatabaseHas('vehicles', ['id' => $assignedVehicle->id, 'brand' => 'Toyota']);
$this->assertDatabaseHas('vehicles', ['id' => $otherVehicle->id, 'brand' => 'Ford']);
});
test('manager can create and edit a vehicle', function () {
$manager = createFleetUser('kierownik');
$user = User::factory()->create();
$createResponse = $this->actingAs($manager)->post(route('flota.store'), [
'brand' => 'BMW',
'registration_number' => 'PO1111A',
'user_id' => $user->id,
'year' => 2022,
'purchase_date' => '2022-02-10',
'oc_expiry_date' => '2027-02-10',
'oil_change_km' => 15000,
'insurance_provider' => 'PZU',
'technical_inspection_date' => '2026-11-20',
'mileage_km' => 50000,
'status' => 'używany',
]);
$createResponse->assertRedirect(route('flota'));
$this->assertDatabaseHas('vehicles', ['registration_number' => 'PO1111A', 'brand' => 'BMW']);
$vehicle = Vehicle::where('registration_number', 'PO1111A')->first();
$editResponse = $this->actingAs($manager)->put(route('flota.update', $vehicle), [
'brand' => 'BMW',
'registration_number' => 'PO1111A',
'user_id' => $user->id,
'year' => 2023,
'purchase_date' => '2022-02-10',
'oc_expiry_date' => '2028-02-10',
'oil_change_km' => 15000,
'insurance_provider' => 'Warta',
'technical_inspection_date' => '2027-11-20',
'mileage_km' => 60000,
'status' => 'sprzedany',
]);
$editResponse->assertRedirect(route('flota'));
$this->assertDatabaseHas('vehicles', ['id' => $vehicle->id, 'year' => 2023, 'status' => 'sprzedany']);
});
test('manager can delete a vehicle', function () {
$manager = createFleetUser('kierownik');
$user = User::factory()->create();
$vehicle = Vehicle::create([
'brand' => 'Audi',
'registration_number' => 'KR9999X',
'user_id' => $user->id,
'year' => 2019,
'purchase_date' => '2019-01-01',
'oc_expiry_date' => '2027-01-01',
'oil_change_km' => 12000,
'insurance_provider' => 'Warta',
'technical_inspection_date' => '2026-12-01',
'mileage_km' => 99000,
'status' => 'używany',
]);
$response = $this->actingAs($manager)->delete(route('flota.destroy', $vehicle));
$response->assertRedirect(route('flota'));
$this->assertDatabaseMissing('vehicles', ['id' => $vehicle->id]);
});