Added tests
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature\Maintenances\Api;
|
||||
|
||||
use App\Models\Actionlog;
|
||||
use App\Models\Maintenance;
|
||||
use App\Models\User;
|
||||
use Tests\TestCase;
|
||||
|
||||
class CompleteMaintenanceTest extends TestCase
|
||||
{
|
||||
public function test_requires_permission()
|
||||
{
|
||||
$maintenance = Maintenance::factory()->create();
|
||||
|
||||
$this->actingAsForApi(User::factory()->create())
|
||||
->postJson(route('api.maintenances.complete', $maintenance))
|
||||
->assertForbidden();
|
||||
}
|
||||
|
||||
public function test_can_mark_maintenance_complete()
|
||||
{
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$maintenance = Maintenance::factory()->create();
|
||||
|
||||
$this->actingAsForApi($actor)
|
||||
->postJson(route('api.maintenances.complete', $maintenance))
|
||||
->assertOk()
|
||||
->assertStatusMessageIs('success');
|
||||
|
||||
$maintenance->refresh();
|
||||
$this->assertNotNull($maintenance->completed_at);
|
||||
$this->assertEquals($actor->id, $maintenance->completed_by);
|
||||
|
||||
$this->assertHasTheseActionLogs($maintenance, ['create', 'completed']);
|
||||
}
|
||||
|
||||
public function test_marking_complete_does_not_create_update_log()
|
||||
{
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$maintenance = Maintenance::factory()->create();
|
||||
|
||||
$this->actingAsForApi($actor)
|
||||
->postJson(route('api.maintenances.complete', $maintenance));
|
||||
|
||||
$updateLogs = Actionlog::where('item_type', Maintenance::class)
|
||||
->where('item_id', $maintenance->id)
|
||||
->where('action_type', 'update')
|
||||
->count();
|
||||
|
||||
$this->assertEquals(0, $updateLogs);
|
||||
}
|
||||
|
||||
public function test_cannot_mark_already_completed_maintenance_complete()
|
||||
{
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$maintenance = Maintenance::factory()->create(['completed_at' => now()->subDay(), 'completed_by' => $actor->id]);
|
||||
|
||||
$this->actingAsForApi($actor)
|
||||
->postJson(route('api.maintenances.complete', $maintenance))
|
||||
->assertStatusMessageIs('error');
|
||||
|
||||
$this->assertHasTheseActionLogs($maintenance, ['create']);
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ namespace Tests\Feature\Maintenances\Api;
|
||||
|
||||
use App\Models\Asset;
|
||||
use App\Models\Maintenance;
|
||||
use App\Models\MaintenanceType;
|
||||
use App\Models\Supplier;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
@@ -27,13 +28,14 @@ class CreateMaintenanceTest extends TestCase
|
||||
|
||||
$asset = Asset::factory()->create();
|
||||
$supplier = Supplier::factory()->create();
|
||||
$type = MaintenanceType::factory()->create();
|
||||
|
||||
$response = $this->actingAsForApi($actor)
|
||||
->postJson(route('api.maintenances.store'), [
|
||||
'name' => 'Test Maintenance',
|
||||
'asset_id' => $asset->id,
|
||||
'supplier_id' => $supplier->id,
|
||||
'asset_maintenance_type' => 'Maintenance',
|
||||
'maintenance_type_id' => $type->id,
|
||||
'start_date' => '2021-01-01',
|
||||
'completion_date' => '2021-01-10',
|
||||
'is_warranty' => '1',
|
||||
@@ -54,7 +56,8 @@ class CreateMaintenanceTest extends TestCase
|
||||
$this->assertDatabaseHas('maintenances', [
|
||||
'asset_id' => $asset->id,
|
||||
'supplier_id' => $supplier->id,
|
||||
'asset_maintenance_type' => 'Maintenance',
|
||||
'maintenance_type_id' => $type->id,
|
||||
'asset_maintenance_type' => $type->name,
|
||||
'name' => 'Test Maintenance',
|
||||
'is_warranty' => 1,
|
||||
'start_date' => '2021-01-01',
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace Tests\Feature\Maintenances\Api;
|
||||
use App\Models\Actionlog;
|
||||
use App\Models\Company;
|
||||
use App\Models\Maintenance;
|
||||
use App\Models\MaintenanceType;
|
||||
use App\Models\Supplier;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
@@ -26,13 +27,14 @@ class EditMaintenanceTest extends TestCase
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$supplier = Supplier::factory()->create();
|
||||
$maintenance = Maintenance::factory()->create();
|
||||
$type = MaintenanceType::factory()->create();
|
||||
|
||||
$response = $this->actingAs($actor)
|
||||
->followingRedirects()
|
||||
->patch(route('maintenances.update', $maintenance), [
|
||||
'name' => 'Test Maintenance',
|
||||
'supplier_id' => $supplier->id,
|
||||
'asset_maintenance_type' => 'Maintenance',
|
||||
'maintenance_type_id' => $type->id,
|
||||
'start_date' => '2021-01-01',
|
||||
'completion_date' => '2021-01-10',
|
||||
'is_warranty' => '1',
|
||||
@@ -50,7 +52,8 @@ class EditMaintenanceTest extends TestCase
|
||||
|
||||
$this->assertDatabaseHas('maintenances', [
|
||||
'supplier_id' => $supplier->id,
|
||||
'asset_maintenance_type' => 'Maintenance',
|
||||
'maintenance_type_id' => $type->id,
|
||||
'asset_maintenance_type' => $type->name,
|
||||
'name' => 'Test Maintenance',
|
||||
'is_warranty' => 1,
|
||||
'start_date' => '2021-01-01',
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature\Maintenances\Api;
|
||||
|
||||
use App\Models\MaintenanceType;
|
||||
use App\Models\User;
|
||||
use Tests\TestCase;
|
||||
|
||||
class MaintenanceTypesTest extends TestCase
|
||||
{
|
||||
public function test_index_requires_permission()
|
||||
{
|
||||
$this->actingAsForApi(User::factory()->create())
|
||||
->getJson(route('api.maintenance-types.index'))
|
||||
->assertForbidden();
|
||||
}
|
||||
|
||||
public function test_can_list_maintenance_types()
|
||||
{
|
||||
MaintenanceType::factory()->count(3)->create();
|
||||
|
||||
$this->actingAsForApi(User::factory()->superuser()->create())
|
||||
->getJson(route('api.maintenance-types.index'))
|
||||
->assertOk()
|
||||
->assertJsonStructure(['total', 'rows']);
|
||||
}
|
||||
|
||||
public function test_can_show_maintenance_type()
|
||||
{
|
||||
$type = MaintenanceType::factory()->create();
|
||||
|
||||
$this->actingAsForApi(User::factory()->superuser()->create())
|
||||
->getJson(route('api.maintenance-types.show', $type))
|
||||
->assertOk()
|
||||
->assertJsonFragment(['name' => $type->name]);
|
||||
}
|
||||
|
||||
public function test_can_create_maintenance_type()
|
||||
{
|
||||
$this->actingAsForApi(User::factory()->superuser()->create())
|
||||
->postJson(route('api.maintenance-types.store'), ['name' => 'My Custom Type'])
|
||||
->assertOk()
|
||||
->assertStatusMessageIs('success');
|
||||
|
||||
$this->assertDatabaseHas('maintenance_types', ['name' => 'My Custom Type']);
|
||||
}
|
||||
|
||||
public function test_create_requires_name()
|
||||
{
|
||||
$this->actingAsForApi(User::factory()->superuser()->create())
|
||||
->postJson(route('api.maintenance-types.store'), [])
|
||||
->assertStatusMessageIs('error');
|
||||
}
|
||||
|
||||
public function test_can_update_maintenance_type()
|
||||
{
|
||||
$type = MaintenanceType::factory()->create(['name' => 'Old Name']);
|
||||
|
||||
$this->actingAsForApi(User::factory()->superuser()->create())
|
||||
->putJson(route('api.maintenance-types.update', $type), ['name' => 'New Name'])
|
||||
->assertOk()
|
||||
->assertStatusMessageIs('success');
|
||||
|
||||
$this->assertDatabaseHas('maintenance_types', ['id' => $type->id, 'name' => 'New Name']);
|
||||
}
|
||||
|
||||
public function test_can_delete_maintenance_type()
|
||||
{
|
||||
$type = MaintenanceType::factory()->create();
|
||||
|
||||
$this->actingAsForApi(User::factory()->superuser()->create())
|
||||
->deleteJson(route('api.maintenance-types.destroy', $type))
|
||||
->assertOk()
|
||||
->assertStatusMessageIs('success');
|
||||
|
||||
$this->assertSoftDeleted($type);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature\Maintenances\Ui;
|
||||
|
||||
use App\Models\Actionlog;
|
||||
use App\Models\Maintenance;
|
||||
use App\Models\User;
|
||||
use Tests\TestCase;
|
||||
|
||||
class CompleteMaintenanceTest extends TestCase
|
||||
{
|
||||
public function test_requires_permission()
|
||||
{
|
||||
$maintenance = Maintenance::factory()->create();
|
||||
|
||||
$this->actingAs(User::factory()->create())
|
||||
->post(route('maintenances.complete', $maintenance))
|
||||
->assertForbidden();
|
||||
|
||||
$this->assertDatabaseMissing('maintenances', [
|
||||
'id' => $maintenance->id,
|
||||
'completed_at' => now(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function test_can_mark_maintenance_complete()
|
||||
{
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$maintenance = Maintenance::factory()->create();
|
||||
|
||||
$this->actingAs($actor)
|
||||
->post(route('maintenances.complete', $maintenance))
|
||||
->assertSessionHasNoErrors()
|
||||
->assertRedirect();
|
||||
|
||||
$maintenance->refresh();
|
||||
$this->assertNotNull($maintenance->completed_at);
|
||||
$this->assertEquals($actor->id, $maintenance->completed_by);
|
||||
|
||||
$this->assertHasTheseActionLogs($maintenance, ['create', 'completed']);
|
||||
}
|
||||
|
||||
public function test_marking_complete_does_not_create_update_log()
|
||||
{
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$maintenance = Maintenance::factory()->create();
|
||||
|
||||
$this->actingAs($actor)
|
||||
->post(route('maintenances.complete', $maintenance));
|
||||
|
||||
$updateLogs = Actionlog::where('item_type', Maintenance::class)
|
||||
->where('item_id', $maintenance->id)
|
||||
->where('action_type', 'update')
|
||||
->count();
|
||||
|
||||
$this->assertEquals(0, $updateLogs);
|
||||
}
|
||||
|
||||
public function test_cannot_mark_already_completed_maintenance_complete()
|
||||
{
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$maintenance = Maintenance::factory()->create(['completed_at' => now()->subDay(), 'completed_by' => $actor->id]);
|
||||
|
||||
$this->actingAs($actor)
|
||||
->post(route('maintenances.complete', $maintenance))
|
||||
->assertRedirect()
|
||||
->assertSessionHas('warning');
|
||||
|
||||
$this->assertHasTheseActionLogs($maintenance, ['create']);
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ namespace Tests\Feature\Maintenances\Ui;
|
||||
use App\Models\Actionlog;
|
||||
use App\Models\Asset;
|
||||
use App\Models\Maintenance;
|
||||
use App\Models\MaintenanceType;
|
||||
use App\Models\Supplier;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
@@ -34,13 +35,14 @@ class CreateMaintenanceTest extends TestCase
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$asset = Asset::factory()->create();
|
||||
$supplier = Supplier::factory()->create();
|
||||
$type = MaintenanceType::factory()->create();
|
||||
|
||||
$this->actingAs($actor)
|
||||
->post(route('maintenances.store'), [
|
||||
'name' => 'Test Maintenance',
|
||||
'selected_assets' => [$asset->id],
|
||||
'supplier_id' => $supplier->id,
|
||||
'asset_maintenance_type' => 'Maintenance',
|
||||
'maintenance_type_id' => $type->id,
|
||||
'start_date' => '2021-01-01',
|
||||
'completion_date' => '2021-01-10',
|
||||
'is_warranty' => '1',
|
||||
@@ -72,7 +74,8 @@ class CreateMaintenanceTest extends TestCase
|
||||
$this->assertDatabaseHas('maintenances', [
|
||||
'asset_id' => $asset->id,
|
||||
'supplier_id' => $supplier->id,
|
||||
'asset_maintenance_type' => 'Maintenance',
|
||||
'maintenance_type_id' => $type->id,
|
||||
'asset_maintenance_type' => $type->name,
|
||||
'name' => 'Test Maintenance',
|
||||
'is_warranty' => 1,
|
||||
'start_date' => '2021-01-01',
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature\Maintenances\Ui;
|
||||
|
||||
use App\Models\Asset;
|
||||
use App\Models\MaintenanceType;
|
||||
use App\Models\User;
|
||||
use Tests\TestCase;
|
||||
|
||||
class CreateMaintenanceTrackingTest extends TestCase
|
||||
{
|
||||
public function test_checkout_snapshot_is_captured_when_asset_is_checked_out()
|
||||
{
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$assignedUser = User::factory()->create();
|
||||
$asset = Asset::factory()->assignedToUser($assignedUser)->create();
|
||||
$type = MaintenanceType::factory()->create();
|
||||
|
||||
$this->actingAs($actor)
|
||||
->post(route('maintenances.store'), [
|
||||
'name' => 'Snapshot Test',
|
||||
'selected_assets' => [$asset->id],
|
||||
'maintenance_type_id' => $type->id,
|
||||
'start_date' => '2026-01-01',
|
||||
])
|
||||
->assertSessionHasNoErrors()
|
||||
->assertRedirect(route('maintenances.index'));
|
||||
|
||||
$this->assertDatabaseHas('maintenances', [
|
||||
'asset_id' => $asset->id,
|
||||
'checked_out_to_id' => $assignedUser->id,
|
||||
'checked_out_to_type' => User::class,
|
||||
]);
|
||||
}
|
||||
|
||||
public function test_checkout_snapshot_is_null_when_asset_is_not_checked_out()
|
||||
{
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$asset = Asset::factory()->create();
|
||||
$type = MaintenanceType::factory()->create();
|
||||
|
||||
$this->actingAs($actor)
|
||||
->post(route('maintenances.store'), [
|
||||
'name' => 'No Checkout Test',
|
||||
'selected_assets' => [$asset->id],
|
||||
'maintenance_type_id' => $type->id,
|
||||
'start_date' => '2026-01-01',
|
||||
])
|
||||
->assertSessionHasNoErrors();
|
||||
|
||||
$this->assertDatabaseHas('maintenances', [
|
||||
'asset_id' => $asset->id,
|
||||
'checked_out_to_id' => null,
|
||||
'checked_out_to_type' => null,
|
||||
]);
|
||||
}
|
||||
|
||||
public function test_responsible_party_defaults_to_creating_user()
|
||||
{
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$asset = Asset::factory()->create();
|
||||
$type = MaintenanceType::factory()->create();
|
||||
|
||||
$this->actingAs($actor)
|
||||
->post(route('maintenances.store'), [
|
||||
'name' => 'RP Default Test',
|
||||
'selected_assets' => [$asset->id],
|
||||
'maintenance_type_id' => $type->id,
|
||||
'start_date' => '2026-01-01',
|
||||
])
|
||||
->assertSessionHasNoErrors();
|
||||
|
||||
$this->assertDatabaseHas('maintenances', [
|
||||
'asset_id' => $asset->id,
|
||||
'responsible_party_id' => $actor->id,
|
||||
]);
|
||||
}
|
||||
|
||||
public function test_responsible_party_can_be_set_to_another_user()
|
||||
{
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$technician = User::factory()->create();
|
||||
$asset = Asset::factory()->create();
|
||||
$type = MaintenanceType::factory()->create();
|
||||
|
||||
$this->actingAs($actor)
|
||||
->post(route('maintenances.store'), [
|
||||
'name' => 'RP Explicit Test',
|
||||
'selected_assets' => [$asset->id],
|
||||
'maintenance_type_id' => $type->id,
|
||||
'responsible_party_id' => $technician->id,
|
||||
'start_date' => '2026-01-01',
|
||||
])
|
||||
->assertSessionHasNoErrors();
|
||||
|
||||
$this->assertDatabaseHas('maintenances', [
|
||||
'asset_id' => $asset->id,
|
||||
'responsible_party_id' => $technician->id,
|
||||
]);
|
||||
}
|
||||
|
||||
public function test_maintenance_type_id_syncs_legacy_asset_maintenance_type()
|
||||
{
|
||||
$actor = User::factory()->superuser()->create();
|
||||
$asset = Asset::factory()->create();
|
||||
$type = MaintenanceType::factory()->create(['name' => 'Custom Calibration']);
|
||||
|
||||
$this->actingAs($actor)
|
||||
->post(route('maintenances.store'), [
|
||||
'name' => 'Type Sync Test',
|
||||
'selected_assets' => [$asset->id],
|
||||
'maintenance_type_id' => $type->id,
|
||||
'start_date' => '2026-01-01',
|
||||
])
|
||||
->assertSessionHasNoErrors();
|
||||
|
||||
$this->assertDatabaseHas('maintenances', [
|
||||
'asset_id' => $asset->id,
|
||||
'maintenance_type_id' => $type->id,
|
||||
'asset_maintenance_type' => 'Custom Calibration',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ use App\Models\Actionlog;
|
||||
use App\Models\Asset;
|
||||
use App\Models\Company;
|
||||
use App\Models\Maintenance;
|
||||
use App\Models\MaintenanceType;
|
||||
use App\Models\Supplier;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
@@ -30,13 +31,14 @@ class EditMaintenanceTest extends TestCase
|
||||
$asset = Asset::factory()->create();
|
||||
$maintenance = Maintenance::factory()->create(['asset_id' => $asset]);
|
||||
$supplier = Supplier::factory()->create();
|
||||
$type = MaintenanceType::factory()->create();
|
||||
|
||||
$this->actingAs($actor)
|
||||
->put(route('maintenances.update', $maintenance), [
|
||||
'name' => 'Test Maintenance',
|
||||
'asset_id' => $asset->id,
|
||||
'supplier_id' => $supplier->id,
|
||||
'asset_maintenance_type' => 'Maintenance',
|
||||
'maintenance_type_id' => $type->id,
|
||||
'start_date' => '2021-01-01',
|
||||
'completion_date' => '2021-01-10',
|
||||
'is_warranty' => 1,
|
||||
@@ -68,7 +70,8 @@ class EditMaintenanceTest extends TestCase
|
||||
$this->assertDatabaseHas('maintenances', [
|
||||
'asset_id' => $asset->id,
|
||||
'supplier_id' => $supplier->id,
|
||||
'asset_maintenance_type' => 'Maintenance',
|
||||
'maintenance_type_id' => $type->id,
|
||||
'asset_maintenance_type' => $type->name,
|
||||
'name' => 'Test Maintenance',
|
||||
'is_warranty' => 1,
|
||||
'start_date' => '2021-01-01',
|
||||
@@ -111,7 +114,7 @@ class EditMaintenanceTest extends TestCase
|
||||
->put(route('maintenances.update', $maintenanceForCompanyB), [
|
||||
'name' => 'Should Not Update',
|
||||
'asset_id' => $maintenanceForCompanyB->asset_id,
|
||||
'asset_maintenance_type' => $maintenanceForCompanyB->asset_maintenance_type,
|
||||
'maintenance_type_id' => $maintenanceForCompanyB->maintenance_type_id,
|
||||
'start_date' => $maintenanceForCompanyB->start_date,
|
||||
])
|
||||
->assertRedirectToRoute('maintenances.index');
|
||||
|
||||
Reference in New Issue
Block a user