Files
GSB-Construction/Modules/MasterData/tests/Feature/ResourceMasterTest.php

172 lines
5.4 KiB
PHP

<?php
namespace Modules\MasterData\Tests\Feature;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Modules\MasterData\Models\LaborRate;
use Modules\MasterData\Models\EquipmentRate;
use Modules\MasterData\Models\Team;
use Tests\TestCase;
class ResourceMasterTest extends TestCase
{
use RefreshDatabase;
protected User $admin;
protected function setUp(): void
{
parent::setUp();
$this->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,
]);
}
}