mirror of
https://github.com/snipe/snipe-it.git
synced 2024-11-14 17:44:17 -08:00
b18baf74d2
Added #14979: add checkout functionality to accessoires
89 lines
2.7 KiB
PHP
89 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Checkins\Ui;
|
|
|
|
use App\Events\CheckoutableCheckedIn;
|
|
use App\Models\Accessory;
|
|
use App\Models\User;
|
|
use App\Notifications\CheckinAccessoryNotification;
|
|
use Illuminate\Support\Facades\Event;
|
|
use Illuminate\Support\Facades\Notification;
|
|
use Tests\TestCase;
|
|
|
|
class AccessoryCheckinTest extends TestCase
|
|
{
|
|
public function testCheckingInAccessoryRequiresCorrectPermission()
|
|
{
|
|
$accessory = Accessory::factory()->checkedOutToUser()->create();
|
|
|
|
$this->actingAs(User::factory()->create())
|
|
->post(route('accessories.checkin.store', $accessory->checkouts->first()->id))
|
|
->assertForbidden();
|
|
}
|
|
|
|
public function testAccessoryCanBeCheckedIn()
|
|
{
|
|
Event::fake([CheckoutableCheckedIn::class]);
|
|
|
|
$user = User::factory()->create();
|
|
$accessory = Accessory::factory()->checkedOutToUser($user)->create();
|
|
|
|
$this->assertTrue($accessory->checkouts()->where('assigned_type', User::class)->where('assigned_to', $user->id)->count() > 0);
|
|
|
|
$this->actingAs(User::factory()->checkinAccessories()->create())
|
|
->post(route('accessories.checkin.store', $accessory->checkouts->first()->id));
|
|
|
|
$this->assertFalse($accessory->fresh()->checkouts()->where('assigned_type', User::class)->where('assigned_to', $user->id)->count() > 0);
|
|
|
|
Event::assertDispatched(CheckoutableCheckedIn::class, 1);
|
|
}
|
|
|
|
public function testEmailSentToUserIfSettingEnabled()
|
|
{
|
|
Notification::fake();
|
|
|
|
$user = User::factory()->create();
|
|
$accessory = Accessory::factory()->checkedOutToUser($user)->create();
|
|
|
|
$accessory->category->update(['checkin_email' => true]);
|
|
|
|
event(new CheckoutableCheckedIn(
|
|
$accessory,
|
|
$user,
|
|
User::factory()->checkinAccessories()->create(),
|
|
'',
|
|
));
|
|
|
|
Notification::assertSentTo(
|
|
[$user],
|
|
function (CheckinAccessoryNotification $notification, $channels) {
|
|
return in_array('mail', $channels);
|
|
},
|
|
);
|
|
}
|
|
|
|
public function testEmailNotSentToUserIfSettingDisabled()
|
|
{
|
|
Notification::fake();
|
|
|
|
$user = User::factory()->create();
|
|
$accessory = Accessory::factory()->checkedOutToUser($user)->create();
|
|
|
|
$accessory->category->update(['checkin_email' => false]);
|
|
|
|
event(new CheckoutableCheckedIn(
|
|
$accessory,
|
|
$user,
|
|
User::factory()->checkinAccessories()->create(),
|
|
'',
|
|
));
|
|
|
|
Notification::assertNotSentTo(
|
|
[$user],
|
|
function (CheckinAccessoryNotification $notification, $channels) {
|
|
return in_array('mail', $channels);
|
|
},
|
|
);
|
|
}
|
|
}
|