admin = User::factory()->create([ 'user_type' => 'admin', ]); } public function test_can_view_resources_index_page(): void { LaborRate::create([ 'trade_name' => 'Carpenter Master', 'hourly_rate' => 175.00, 'status' => 'active', ]); EquipmentRate::create([ 'equipment_name' => 'Bulldozer 500', 'hourly_rate' => 2500.00, 'status' => 'active', ]); $response = $this->actingAs($this->admin)->get(route('resources.index')); $response->assertStatus(200); $response->assertInertia(fn ($page) => $page ->component('MasterData::Resources/Index') ->has('laborRates', 1) ->has('equipmentRates', 1) ->has('teams') ->has('employees') ); } public function test_can_store_update_and_destroy_labor_rate(): void { // Store $response = $this->actingAs($this->admin)->post(route('resources.labor.store'), [ 'trade_name' => 'Master Welder', 'hourly_rate' => 220.50, 'status' => 'active', ]); $response->assertRedirect(); $this->assertDatabaseHas('labor_rates', [ 'trade_name' => 'Master Welder', 'hourly_rate' => 220.50, ]); $labor = LaborRate::where('trade_name', 'Master Welder')->firstOrFail(); // Update $response = $this->actingAs($this->admin)->put(route('resources.labor.update', $labor), [ 'trade_name' => 'Senior Welder Expert', 'hourly_rate' => 250.00, 'status' => 'active', ]); $response->assertRedirect(); $this->assertDatabaseHas('labor_rates', [ 'trade_name' => 'Senior Welder Expert', 'hourly_rate' => 250.00, ]); // Destroy $response = $this->actingAs($this->admin)->delete(route('resources.labor.destroy', $labor)); $response->assertRedirect(); $this->assertDatabaseMissing('labor_rates', [ 'id' => $labor->id, ]); } public function test_can_store_update_and_destroy_equipment_rate(): void { // Store $response = $this->actingAs($this->admin)->post(route('resources.equipment.store'), [ 'equipment_name' => 'Concrete Pump Truck', 'hourly_rate' => 3200.00, 'status' => 'active', ]); $response->assertRedirect(); $this->assertDatabaseHas('equipment_rates', [ 'equipment_name' => 'Concrete Pump Truck', 'hourly_rate' => 3200.00, ]); $equip = EquipmentRate::where('equipment_name', 'Concrete Pump Truck')->firstOrFail(); // Update $response = $this->actingAs($this->admin)->put(route('resources.equipment.update', $equip), [ 'equipment_name' => 'Concrete Pump Truck High Capacity', 'hourly_rate' => 3500.00, 'status' => 'active', ]); $response->assertRedirect(); $this->assertDatabaseHas('equipment_rates', [ 'equipment_name' => 'Concrete Pump Truck High Capacity', 'hourly_rate' => 3500.00, ]); // Destroy $response = $this->actingAs($this->admin)->delete(route('resources.equipment.destroy', $equip)); $response->assertRedirect(); $this->assertDatabaseMissing('equipment_rates', [ 'id' => $equip->id, ]); } public function test_can_store_update_and_destroy_team(): void { $worker = User::factory()->create([ 'name' => 'Juan Dela Cruz', ]); // Store $response = $this->actingAs($this->admin)->post(route('resources.teams.store'), [ 'name' => 'Electrical Division Alpha', 'description' => 'Handles high voltage installation', 'status' => 'active', 'user_ulids' => [$worker->ulid], ]); $response->assertRedirect(); $this->assertDatabaseHas('teams', [ 'name' => 'Electrical Division Alpha', ]); $team = Team::where('name', 'Electrical Division Alpha')->firstOrFail(); $this->assertTrue($team->users->contains('id', $worker->id)); // Update $response = $this->actingAs($this->admin)->put(route('resources.teams.update', $team), [ 'name' => 'Electrical Division Alpha - Enhanced', 'description' => 'Updated scope', 'status' => 'inactive', 'user_ulids' => [], ]); $response->assertRedirect(); $this->assertDatabaseHas('teams', [ 'name' => 'Electrical Division Alpha - Enhanced', 'status' => 'inactive', ]); // Destroy $response = $this->actingAs($this->admin)->delete(route('resources.teams.destroy', $team)); $response->assertRedirect(); $this->assertDatabaseMissing('teams', [ 'id' => $team->id, ]); } }