WIP: Adding various tests of the contents of ActionLogs for lots of events
This commit is contained in:
@@ -13,10 +13,13 @@ use App\Models\User;
|
||||
use Illuminate\Support\Facades\Crypt;
|
||||
use Illuminate\Testing\Fluent\AssertableJson;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use Tests\Support\AssertsActionLogs;
|
||||
use Tests\TestCase;
|
||||
|
||||
class StoreAssetTest extends TestCase
|
||||
{
|
||||
use AssertsActionLogs;
|
||||
|
||||
public function testRequiresPermissionToCreateAsset()
|
||||
{
|
||||
$this->actingAsForApi(User::factory()->create())
|
||||
@@ -82,6 +85,8 @@ class StoreAssetTest extends TestCase
|
||||
$this->assertTrue($asset->assetstatus->is($status));
|
||||
$this->assertTrue($asset->supplier->is($supplier));
|
||||
$this->assertEquals(10, $asset->warranty_months);
|
||||
|
||||
$this->assertHasTheseActionLogs($asset, ['create', 'checkout']);
|
||||
}
|
||||
|
||||
public function testSetsLastAuditDateToMidnightOfProvidedDate()
|
||||
@@ -180,6 +185,8 @@ class StoreAssetTest extends TestCase
|
||||
$asset = Asset::find($response->json()['payload']['id']);
|
||||
$this->assertEquals($user->id, $asset->assigned_to);
|
||||
$this->assertEquals('Asset created successfully. :)', $response->json('messages'));
|
||||
|
||||
$this->assertHasTheseActionLogs($asset, ['create', 'checkout']);
|
||||
}
|
||||
|
||||
|
||||
@@ -571,6 +578,7 @@ class StoreAssetTest extends TestCase
|
||||
$this->assertTrue($asset->adminuser->is($user));
|
||||
$this->assertTrue($asset->checkedOutToUser());
|
||||
$this->assertTrue($asset->assignedTo->is($userAssigned));
|
||||
$this->assertHasTheseActionLogs($asset, ['create', 'checkout']);
|
||||
}
|
||||
|
||||
public static function checkoutTargets()
|
||||
@@ -655,6 +663,7 @@ class StoreAssetTest extends TestCase
|
||||
$this->assertTrue($asset->adminuser->is($user));
|
||||
$this->assertTrue($asset->checkedOutToLocation());
|
||||
$this->assertTrue($asset->location->is($location));
|
||||
$this->assertHasTheseActionLogs($asset, ['create', 'checkout']);
|
||||
}
|
||||
|
||||
public function testAnAssetCanBeCheckedOutToAssetOnStore()
|
||||
@@ -682,6 +691,7 @@ class StoreAssetTest extends TestCase
|
||||
$this->assertTrue($apiAsset->checkedOutToAsset());
|
||||
// I think this makes sense, but open to a sanity check
|
||||
$this->assertTrue($asset->assignedAssets()->find($response['payload']['id'])->is($apiAsset));
|
||||
$this->assertHasTheseActionLogs($asset, ['create', 'checkout']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -7,10 +7,12 @@ use App\Models\Company;
|
||||
use App\Models\User;
|
||||
use Tests\Concerns\TestsFullMultipleCompaniesSupport;
|
||||
use Tests\Concerns\TestsPermissionsRequirement;
|
||||
use Tests\Support\AssertsActionLogs;
|
||||
use Tests\TestCase;
|
||||
|
||||
class AccessoryCheckinTest extends TestCase implements TestsFullMultipleCompaniesSupport, TestsPermissionsRequirement
|
||||
{
|
||||
use AssertsActionLogs;
|
||||
public function testRequiresPermission()
|
||||
{
|
||||
$accessory = Accessory::factory()->checkedOutToUser()->create();
|
||||
@@ -45,6 +47,7 @@ class AccessoryCheckinTest extends TestCase implements TestsFullMultipleCompanie
|
||||
|
||||
$this->assertEquals(1, $accessoryForCompanyB->fresh()->checkouts->count(), 'Accessory should not be checked in');
|
||||
$this->assertEquals(0, $anotherAccessoryForCompanyB->fresh()->checkouts->count(), 'Accessory should be checked in');
|
||||
$this->assertHasTheseActionLogs($anotherAccessoryForCompanyB, ['create', 'checkin from']);
|
||||
}
|
||||
|
||||
public function testCanCheckinAccessory()
|
||||
@@ -60,6 +63,7 @@ class AccessoryCheckinTest extends TestCase implements TestsFullMultipleCompanie
|
||||
->assertStatusMessageIs('success');
|
||||
|
||||
$this->assertEquals(0, $accessory->fresh()->checkouts->count(), 'Accessory should be checked in');
|
||||
$this->assertHasTheseActionLogs($accessory, ['create', 'checkout', 'checkin from']); // fixme?
|
||||
}
|
||||
|
||||
public function testCheckinIsLogged()
|
||||
|
||||
@@ -11,10 +11,12 @@ use App\Models\Statuslabel;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Tests\Support\AssertsActionLogs;
|
||||
use Tests\TestCase;
|
||||
|
||||
class AssetCheckinTest extends TestCase
|
||||
{
|
||||
use AssertsActionLogs;
|
||||
public function testCheckingInAssetRequiresCorrectPermission()
|
||||
{
|
||||
$this->actingAsForApi(User::factory()->create())
|
||||
@@ -69,6 +71,8 @@ class AssetCheckinTest extends TestCase
|
||||
$this->assertEquals('Changed Name', $asset->name);
|
||||
$this->assertEquals($status->id, $asset->status_id);
|
||||
$this->assertTrue($asset->location()->is($location));
|
||||
$this->assertHasTheseActionLogs($asset, [/*'create', 'checkout', */ 'checkin from']); //FIXME?
|
||||
|
||||
|
||||
Event::assertDispatched(function (CheckoutableCheckedIn $event) use ($currentTimestamp) {
|
||||
// this could be better mocked but is ok for now.
|
||||
@@ -88,6 +92,7 @@ class AssetCheckinTest extends TestCase
|
||||
->postJson(route('api.asset.checkin', $asset->id));
|
||||
|
||||
$this->assertTrue($asset->refresh()->location()->is($rtdLocation));
|
||||
$this->assertHasTheseActionLogs($asset, ['create', /*'checkout',*/ 'checkin from']); //FIXME?
|
||||
}
|
||||
|
||||
public function testDefaultLocationCanBeUpdatedUponCheckin()
|
||||
@@ -102,6 +107,7 @@ class AssetCheckinTest extends TestCase
|
||||
]);
|
||||
|
||||
$this->assertTrue($asset->refresh()->defaultLoc()->is($location));
|
||||
$this->assertHasTheseActionLogs($asset, ['create', /*'checkout',*/ 'checkin from']); //FIXME?
|
||||
}
|
||||
|
||||
public function testAssetsLicenseSeatsAreClearedUponCheckin()
|
||||
|
||||
@@ -10,10 +10,12 @@ use App\Models\User;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Tests\Concerns\TestsFullMultipleCompaniesSupport;
|
||||
use Tests\Concerns\TestsPermissionsRequirement;
|
||||
use Tests\Support\AssertsActionLogs;
|
||||
use Tests\TestCase;
|
||||
|
||||
class ComponentCheckinTest extends TestCase implements TestsFullMultipleCompaniesSupport, TestsPermissionsRequirement
|
||||
{
|
||||
use AssertsActionLogs;
|
||||
public function testRequiresPermission()
|
||||
{
|
||||
$component = Component::factory()->checkedOutToAsset()->create();
|
||||
@@ -82,6 +84,8 @@ class ComponentCheckinTest extends TestCase implements TestsFullMultipleCompanie
|
||||
->assertStatusMessageIs('success');
|
||||
|
||||
$this->assertEquals(1, $component->fresh()->assets->first()->pivot->assigned_qty);
|
||||
$this->assertHasTheseActionLogs($component, ['create']); //FIXME?
|
||||
|
||||
|
||||
Event::assertDispatched(function (CheckoutableCheckedIn $event) use ($user, $component) {
|
||||
return $event->checkoutable->is($component)
|
||||
@@ -160,5 +164,6 @@ class ComponentCheckinTest extends TestCase implements TestsFullMultipleCompanie
|
||||
'item_id' => $component->id,
|
||||
'item_type' => Component::class,
|
||||
]);
|
||||
$this->assertHasTheseActionLogs($component, ['create', /*'checkout',*/ 'checkin from']); //FIXME?
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,9 +4,11 @@ namespace Tests\Feature\Checkins\Api;
|
||||
use App\Models\License;
|
||||
use App\Models\LicenseSeat;
|
||||
use App\Models\User;
|
||||
use Tests\Support\AssertsActionLogs;
|
||||
use Tests\TestCase;
|
||||
|
||||
class LicenseCheckInTest extends TestCase {
|
||||
use AssertsActionLogs;
|
||||
public function testLicenseCheckin()
|
||||
{
|
||||
$authUser = User::factory()->superuser()->create();
|
||||
@@ -41,5 +43,6 @@ class LicenseCheckInTest extends TestCase {
|
||||
$this->assertNull($licenseSeat->asset_id);
|
||||
|
||||
$this->assertEquals('Checking in the seat', $licenseSeat->notes);
|
||||
$this->assertHasTheseActionLogs($license, ['add seats', 'create', 'checkin from']); //FIXME - bad order!
|
||||
}
|
||||
}
|
||||
@@ -11,10 +11,12 @@ use App\Models\Statuslabel;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Tests\Support\AssertsActionLogs;
|
||||
use Tests\TestCase;
|
||||
|
||||
class AssetCheckinTest extends TestCase
|
||||
{
|
||||
use AssertsActionLogs;
|
||||
public function testCheckingInAssetRequiresCorrectPermission()
|
||||
{
|
||||
$this->actingAs(User::factory()->create())
|
||||
@@ -102,6 +104,7 @@ class AssetCheckinTest extends TestCase
|
||||
->post(route('hardware.checkin.store', [$asset]));
|
||||
|
||||
$this->assertTrue($asset->refresh()->location()->is($rtdLocation));
|
||||
$this->assertHasTheseActionLogs($asset, ['create', 'checkin from']);
|
||||
}
|
||||
|
||||
public function testDefaultLocationCanBeUpdatedUponCheckin()
|
||||
|
||||
@@ -5,10 +5,13 @@ namespace Tests\Feature\Checkins\Ui;
|
||||
use App\Models\Component;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Tests\Support\AssertsActionLogs;
|
||||
use Tests\TestCase;
|
||||
|
||||
class ComponentCheckinTest extends TestCase
|
||||
{
|
||||
use AssertsActionLogs;
|
||||
|
||||
public function testCheckingInComponentRequiresCorrectPermission()
|
||||
{
|
||||
$component = Component::factory()->checkedOutToAsset()->create();
|
||||
@@ -47,6 +50,7 @@ class ComponentCheckinTest extends TestCase
|
||||
])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('components.index'));
|
||||
$this->assertHasTheseActionLogs($component, ['create', 'checkin from']);
|
||||
}
|
||||
|
||||
public function testComponentCheckinPagePostIsRedirectedIfRedirectSelectionIsItem()
|
||||
@@ -66,5 +70,7 @@ class ComponentCheckinTest extends TestCase
|
||||
->assertStatus(302)
|
||||
->assertSessionHasNoErrors()
|
||||
->assertRedirect(route('components.show', $component));
|
||||
$this->assertHasTheseActionLogs($component, ['create', 'checkin from']);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,10 +10,13 @@ use App\Notifications\CheckoutAccessoryNotification;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
use Tests\Concerns\TestsPermissionsRequirement;
|
||||
use Tests\Support\AssertsActionLogs;
|
||||
use Tests\TestCase;
|
||||
|
||||
class AccessoryCheckoutTest extends TestCase implements TestsPermissionsRequirement
|
||||
{
|
||||
use AssertsActionLogs;
|
||||
|
||||
public function testRequiresPermission()
|
||||
{
|
||||
$this->actingAsForApi(User::factory()->create())
|
||||
@@ -91,6 +94,7 @@ class AccessoryCheckoutTest extends TestCase implements TestsPermissionsRequirem
|
||||
'created_by' => $admin->id,
|
||||
])->count(),'Log entry either does not exist or there are more than expected'
|
||||
);
|
||||
$this->assertHasTheseActionLogs($accessory, ['create', 'checkout']);
|
||||
}
|
||||
|
||||
public function testAccessoryCanBeCheckedOutWithQty()
|
||||
@@ -125,6 +129,8 @@ class AccessoryCheckoutTest extends TestCase implements TestsPermissionsRequirem
|
||||
])->count(),
|
||||
'Log entry either does not exist or there are more than expected'
|
||||
);
|
||||
$this->assertHasTheseActionLogs($accessory, ['create', 'checkout']);
|
||||
|
||||
}
|
||||
|
||||
public function testAccessoryCannotBeCheckedOutToInvalidUser()
|
||||
@@ -190,5 +196,7 @@ class AccessoryCheckoutTest extends TestCase implements TestsPermissionsRequirem
|
||||
])->count(),
|
||||
'Log entry either does not exist or there are more than expected'
|
||||
);
|
||||
$this->assertHasTheseActionLogs($accessory, ['create', 'checkout']);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,10 +12,12 @@ use App\Models\Statuslabel;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Tests\Support\AssertsActionLogs;
|
||||
use Tests\TestCase;
|
||||
|
||||
class AssetCheckoutTest extends TestCase
|
||||
{
|
||||
use AssertsActionLogs;
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
@@ -37,6 +39,8 @@ class AssetCheckoutTest extends TestCase
|
||||
->post(route('api.assets.requests.store', $nonRequestable->id))
|
||||
->assertStatusMessageIs('error');
|
||||
|
||||
$this->assertHasTheseActionLogs($requestable, ['create', 'requested', 'update']); //FIXME - is this right?!
|
||||
|
||||
}
|
||||
|
||||
public function testCheckingOutAssetRequiresCorrectPermission()
|
||||
|
||||
26
tests/Support/AssertsActionLogs.php
Normal file
26
tests/Support/AssertsActionLogs.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Support;
|
||||
|
||||
use App\Models\Actionlog;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Testing\TestResponse;
|
||||
use PHPUnit\Framework\Assert;
|
||||
|
||||
trait AssertsActionLogs
|
||||
{
|
||||
|
||||
public function assertHasTheseActionLogs(Model $item, array $statuses)
|
||||
{
|
||||
\Log::error("Okay, we're running the test macro now?");
|
||||
$logs = Actionlog::where(['item_id' => $item->id, 'item_type' => get_class($item)])->orderBy('id')->get();
|
||||
Assert::assertEquals(count($statuses), count($logs), "Wrong count of logs expected - expecting " . count($statuses) . ", got " . count($logs));
|
||||
$i = 0;
|
||||
foreach ($statuses as $status) {
|
||||
Assert::assertEquals($status, $logs[$i]->action_type, "Unexpected action type - " . $logs[$i]->action_type . " - expecting $status");
|
||||
$i++;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Tests\Support;
|
||||
|
||||
use App\Models\Actionlog;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Testing\TestResponse;
|
||||
use PHPUnit\Framework\Assert;
|
||||
|
||||
Reference in New Issue
Block a user