'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]); }); test('dashboard shows vehicles with upcoming technical inspection or oc expiry within 14 days', function () { $manager = createFleetUser('kierownik'); $user = User::factory()->create(); $urgentVehicle = Vehicle::create([ 'brand' => 'Toyota', 'model' => 'Corolla', 'registration_number' => 'DW1234A', 'user_id' => $user->id, 'year' => 2021, 'purchase_date' => '2021-05-12', 'oc_expiry_date' => now()->addDays(10)->toDateString(), 'oil_change_km' => 12000, 'insurance_provider' => 'PZU', 'technical_inspection_date' => now()->addDays(20)->toDateString(), 'mileage_km' => 95000, 'status' => 'używany', ]); $safeVehicle = Vehicle::create([ 'brand' => 'Ford', 'model' => 'Transit', 'registration_number' => 'WA9876Z', 'user_id' => $user->id, 'year' => 2019, 'purchase_date' => '2019-07-20', 'oc_expiry_date' => now()->addDays(30)->toDateString(), 'oil_change_km' => 8000, 'insurance_provider' => 'Warta', 'technical_inspection_date' => now()->addDays(40)->toDateString(), 'mileage_km' => 175000, 'status' => 'aktywny', ]); $response = $this->actingAs($manager)->get(route('dashboard')); $response->assertOk(); $response->assertSee('Samochody do uwagi'); $response->assertSee($urgentVehicle->brand); $response->assertSee('OC'); $response->assertDontSee($safeVehicle->brand); }); test('employee profile shows assigned vehicle with expire dates and insurance details', function () { Permission::firstOrCreate(['name' => 'users_access']); $manager = User::factory()->create(); $managerRole = Role::firstOrCreate(['name' => 'kierownik']); $managerRole->givePermissionTo(['users_access', 'flota_access']); $manager->assignRole($managerRole); $user = User::factory()->create(); $vehicle = Vehicle::create([ 'brand' => 'BMW', 'model' => 'X5', 'registration_number' => 'PO1111A', 'user_id' => $user->id, 'year' => 2022, 'purchase_date' => '2022-02-10', 'oc_expiry_date' => now()->addDays(9)->toDateString(), 'oil_change_km' => 12000, 'insurance_provider' => 'PZU', 'technical_inspection_date' => now()->addDays(12)->toDateString(), 'mileage_km' => 55000, 'status' => 'używany', ]); $response = $this->actingAs($manager)->get(route('users.show', $user)); $response->assertOk(); $response->assertSee('Przypisany pojazd'); $response->assertSee($vehicle->brand); $response->assertSee('PZU'); $response->assertSee('OC'); $response->assertSee('Przegląd'); });