|
|
@@ -113,6 +113,105 @@ class ScheduleControllerTest extends TestCase
|
|
|
$response->assertStatus(200);
|
|
|
}
|
|
|
|
|
|
+ public function test_brigadier_sees_only_visible_platform_and_reclamation_schedules(): void
|
|
|
+ {
|
|
|
+ $otherBrigadier = User::factory()->create(['role' => Role::BRIGADIER]);
|
|
|
+
|
|
|
+ $visibleOrder = Order::factory()->create([
|
|
|
+ 'brigadier_id' => $this->brigadierUser->id,
|
|
|
+ 'order_status_id' => Order::STATUS_IN_MOUNT,
|
|
|
+ 'object_address' => 'ул. Площадка видимая, д. 1',
|
|
|
+ ]);
|
|
|
+ $hiddenOrder = Order::factory()->create([
|
|
|
+ 'brigadier_id' => $this->brigadierUser->id,
|
|
|
+ 'order_status_id' => Order::STATUS_HANDED_OVER,
|
|
|
+ 'object_address' => 'ул. Площадка скрытая, д. 2',
|
|
|
+ ]);
|
|
|
+ $visibleReclamation = Reclamation::factory()->create([
|
|
|
+ 'order_id' => $visibleOrder->id,
|
|
|
+ 'brigadier_id' => $this->brigadierUser->id,
|
|
|
+ 'status_id' => Reclamation::STATUS_IN_WORK,
|
|
|
+ 'reason' => 'Рекламация видимая',
|
|
|
+ ]);
|
|
|
+ $hiddenReclamation = Reclamation::factory()->create([
|
|
|
+ 'order_id' => $hiddenOrder->id,
|
|
|
+ 'brigadier_id' => $this->brigadierUser->id,
|
|
|
+ 'status_id' => Reclamation::STATUS_DONE,
|
|
|
+ 'reason' => 'Рекламация скрытая',
|
|
|
+ ]);
|
|
|
+ $foreignOrder = Order::factory()->create([
|
|
|
+ 'brigadier_id' => $otherBrigadier->id,
|
|
|
+ 'order_status_id' => Order::STATUS_IN_MOUNT,
|
|
|
+ 'object_address' => 'ул. Чужая площадка, д. 3',
|
|
|
+ ]);
|
|
|
+ $foreignReclamation = Reclamation::factory()->create([
|
|
|
+ 'order_id' => $foreignOrder->id,
|
|
|
+ 'brigadier_id' => $otherBrigadier->id,
|
|
|
+ 'status_id' => Reclamation::STATUS_IN_WORK,
|
|
|
+ 'reason' => 'Чужая рекламация',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ Schedule::factory()->create([
|
|
|
+ 'source' => 'Площадки',
|
|
|
+ 'order_id' => $visibleOrder->id,
|
|
|
+ 'brigadier_id' => $this->brigadierUser->id,
|
|
|
+ 'installation_date' => '2026-03-16',
|
|
|
+ 'object_address' => $visibleOrder->object_address,
|
|
|
+ ]);
|
|
|
+ Schedule::factory()->create([
|
|
|
+ 'source' => 'Площадки',
|
|
|
+ 'order_id' => $hiddenOrder->id,
|
|
|
+ 'brigadier_id' => $this->brigadierUser->id,
|
|
|
+ 'installation_date' => '2026-03-16',
|
|
|
+ 'object_address' => $hiddenOrder->object_address,
|
|
|
+ ]);
|
|
|
+ Schedule::factory()->create([
|
|
|
+ 'source' => 'Рекламации',
|
|
|
+ 'address_code' => 'РЕКЛ-' . $visibleReclamation->id,
|
|
|
+ 'order_id' => $visibleOrder->id,
|
|
|
+ 'brigadier_id' => $this->brigadierUser->id,
|
|
|
+ 'installation_date' => '2026-03-17',
|
|
|
+ 'object_address' => $visibleOrder->object_address,
|
|
|
+ 'object_type' => $visibleReclamation->reason,
|
|
|
+ ]);
|
|
|
+ Schedule::factory()->create([
|
|
|
+ 'source' => 'Рекламации',
|
|
|
+ 'address_code' => 'РЕКЛ-' . $hiddenReclamation->id,
|
|
|
+ 'order_id' => $hiddenOrder->id,
|
|
|
+ 'brigadier_id' => $this->brigadierUser->id,
|
|
|
+ 'installation_date' => '2026-03-18',
|
|
|
+ 'object_address' => $hiddenOrder->object_address,
|
|
|
+ 'object_type' => $hiddenReclamation->reason,
|
|
|
+ ]);
|
|
|
+ Schedule::factory()->create([
|
|
|
+ 'source' => 'Площадки',
|
|
|
+ 'order_id' => $foreignOrder->id,
|
|
|
+ 'brigadier_id' => $otherBrigadier->id,
|
|
|
+ 'installation_date' => '2026-03-19',
|
|
|
+ 'object_address' => $foreignOrder->object_address,
|
|
|
+ ]);
|
|
|
+ Schedule::factory()->create([
|
|
|
+ 'source' => 'Рекламации',
|
|
|
+ 'address_code' => 'РЕКЛ-' . $foreignReclamation->id,
|
|
|
+ 'order_id' => $foreignOrder->id,
|
|
|
+ 'brigadier_id' => $otherBrigadier->id,
|
|
|
+ 'installation_date' => '2026-03-20',
|
|
|
+ 'object_address' => $foreignOrder->object_address,
|
|
|
+ 'object_type' => $foreignReclamation->reason,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $response = $this->actingAs($this->brigadierUser)
|
|
|
+ ->get(route('schedule.index', ['year' => 2026, 'week' => 12]));
|
|
|
+
|
|
|
+ $response->assertStatus(200);
|
|
|
+ $response->assertSee($visibleOrder->object_address);
|
|
|
+ $response->assertSee($visibleReclamation->reason);
|
|
|
+ $response->assertDontSee($hiddenOrder->object_address);
|
|
|
+ $response->assertDontSee($hiddenReclamation->reason);
|
|
|
+ $response->assertDontSee($foreignOrder->object_address);
|
|
|
+ $response->assertDontSee($foreignReclamation->reason);
|
|
|
+ }
|
|
|
+
|
|
|
// ==================== Update (create manual schedule) ====================
|
|
|
|
|
|
public function test_admin_can_create_manual_schedule(): void
|