mirror of
https://github.com/snipe/snipe-it.git
synced 2025-01-12 14:27:33 -08:00
Skip notifications for component checkouts and checkins
This commit is contained in:
parent
f6cff90829
commit
508660b1df
|
@ -5,6 +5,7 @@ namespace App\Listeners;
|
||||||
use App\Models\Accessory;
|
use App\Models\Accessory;
|
||||||
use App\Models\Asset;
|
use App\Models\Asset;
|
||||||
use App\Models\CheckoutAcceptance;
|
use App\Models\CheckoutAcceptance;
|
||||||
|
use App\Models\Component;
|
||||||
use App\Models\Consumable;
|
use App\Models\Consumable;
|
||||||
use App\Models\LicenseSeat;
|
use App\Models\LicenseSeat;
|
||||||
use App\Models\Recipients\AdminRecipient;
|
use App\Models\Recipients\AdminRecipient;
|
||||||
|
@ -22,12 +23,20 @@ use Log;
|
||||||
|
|
||||||
class CheckoutableListener
|
class CheckoutableListener
|
||||||
{
|
{
|
||||||
|
private array $skipNotificationsFor = [
|
||||||
|
Component::class,
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify the user and post to webhook about the checked out checkoutable and add a record to the
|
* Notify the user and post to webhook about the checked out checkoutable and add a record to the
|
||||||
* checkout_requests table.
|
* checkout_requests table.
|
||||||
*/
|
*/
|
||||||
public function onCheckedOut($event)
|
public function onCheckedOut($event)
|
||||||
{
|
{
|
||||||
|
if ($this->shouldNotSendAnyNotifications($event->checkoutable)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Send an anonymous webhook notification if setting enabled
|
// Send an anonymous webhook notification if setting enabled
|
||||||
if ($this->shouldSendWebhookNotification()) {
|
if ($this->shouldSendWebhookNotification()) {
|
||||||
Notification::route('slack', Setting::getSettings()->webhook_endpoint)
|
Notification::route('slack', Setting::getSettings()->webhook_endpoint)
|
||||||
|
@ -64,6 +73,10 @@ class CheckoutableListener
|
||||||
{
|
{
|
||||||
\Log::debug('onCheckedIn in the Checkoutable listener fired');
|
\Log::debug('onCheckedIn in the Checkoutable listener fired');
|
||||||
|
|
||||||
|
if ($this->shouldNotSendAnyNotifications($event->checkoutable)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Send an anonymous webhook notification if setting enabled
|
// Send an anonymous webhook notification if setting enabled
|
||||||
if ($this->shouldSendWebhookNotification()) {
|
if ($this->shouldSendWebhookNotification()) {
|
||||||
Notification::route('slack', Setting::getSettings()->webhook_endpoint)
|
Notification::route('slack', Setting::getSettings()->webhook_endpoint)
|
||||||
|
@ -220,6 +233,11 @@ class CheckoutableListener
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function shouldNotSendAnyNotifications($checkoutable): bool
|
||||||
|
{
|
||||||
|
return in_array(get_class($checkoutable), $this->skipNotificationsFor);
|
||||||
|
}
|
||||||
|
|
||||||
private function shouldSendWebhookNotification(): bool
|
private function shouldSendWebhookNotification(): bool
|
||||||
{
|
{
|
||||||
return Setting::getSettings() && Setting::getSettings()->webhook_endpoint;
|
return Setting::getSettings() && Setting::getSettings()->webhook_endpoint;
|
||||||
|
|
50
tests/Feature/Notifications/ComponentWebhookTest.php
Normal file
50
tests/Feature/Notifications/ComponentWebhookTest.php
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Notifications;
|
||||||
|
|
||||||
|
use App\Events\CheckoutableCheckedIn;
|
||||||
|
use App\Events\CheckoutableCheckedOut;
|
||||||
|
use App\Models\Asset;
|
||||||
|
use App\Models\Component;
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Support\Facades\Notification;
|
||||||
|
use Tests\Support\InteractsWithSettings;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class ComponentWebhookTest extends TestCase
|
||||||
|
{
|
||||||
|
|
||||||
|
use InteractsWithSettings;
|
||||||
|
|
||||||
|
public function testComponentCheckoutDoesNotSendWebhookNotification()
|
||||||
|
{
|
||||||
|
Notification::fake();
|
||||||
|
|
||||||
|
$this->settings->enableWebhook();
|
||||||
|
|
||||||
|
event(new CheckoutableCheckedOut(
|
||||||
|
Component::factory()->ramCrucial8()->create(),
|
||||||
|
Asset::factory()->laptopMbp()->create(),
|
||||||
|
User::factory()->superuser()->create(),
|
||||||
|
''
|
||||||
|
));
|
||||||
|
|
||||||
|
Notification::assertNothingSent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testComponentCheckinDoesNotSendWebhookNotification()
|
||||||
|
{
|
||||||
|
Notification::fake();
|
||||||
|
|
||||||
|
$this->settings->enableWebhook();
|
||||||
|
|
||||||
|
event(new CheckoutableCheckedIn(
|
||||||
|
Component::factory()->ramCrucial8()->create(),
|
||||||
|
Asset::factory()->laptopMbp()->create(),
|
||||||
|
User::factory()->superuser()->create(),
|
||||||
|
''
|
||||||
|
));
|
||||||
|
|
||||||
|
Notification::assertNothingSent();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue