172 lines
5.4 KiB
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,
|
|
]);
|
|
}
|
|
}
|