mirror of
https://github.com/snipe/snipe-it.git
synced 2025-03-05 20:52:15 -08:00
Send webhook notifications for accessory checkins when enabled
This commit is contained in:
parent
2187310abb
commit
3cc3662992
|
@ -36,7 +36,7 @@ class CheckoutableListener
|
||||||
|
|
||||||
// @todo: comment...we send this anonymously so that webhook notification still
|
// @todo: comment...we send this anonymously so that webhook notification still
|
||||||
// @todo: get sent for models that don't have email addresses associated...
|
// @todo: get sent for models that don't have email addresses associated...
|
||||||
if (Setting::getSettings() && Setting::getSettings()->webhook_endpoint) {
|
if ($this->shouldSendWebhookNotification()) {
|
||||||
Notification::route('slack', Setting::getSettings()->webhook_endpoint)
|
Notification::route('slack', Setting::getSettings()->webhook_endpoint)
|
||||||
->notify($this->getCheckoutNotification($event));
|
->notify($this->getCheckoutNotification($event));
|
||||||
}
|
}
|
||||||
|
@ -71,11 +71,13 @@ class CheckoutableListener
|
||||||
{
|
{
|
||||||
\Log::debug('onCheckedIn in the Checkoutable listener fired');
|
\Log::debug('onCheckedIn in the Checkoutable listener fired');
|
||||||
|
|
||||||
/**
|
// @todo: update docblock
|
||||||
* When the item wasn't checked out to a user, we can't send notifications
|
|
||||||
*/
|
// @todo: comment...we send this anonymously so that webhook notification still
|
||||||
if (! $event->checkedOutTo instanceof User) {
|
// @todo: get sent for models that don't have email addresses associated...
|
||||||
return;
|
if ($this->shouldSendWebhookNotification()) {
|
||||||
|
Notification::route('slack', Setting::getSettings()->webhook_endpoint)
|
||||||
|
->notify($this->getCheckinNotification($event));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -227,4 +229,9 @@ class CheckoutableListener
|
||||||
'App\Listeners\CheckoutableListener@onCheckedOut'
|
'App\Listeners\CheckoutableListener@onCheckedOut'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function shouldSendWebhookNotification(): bool
|
||||||
|
{
|
||||||
|
return Setting::getSettings() && Setting::getSettings()->webhook_endpoint;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,12 @@
|
||||||
|
|
||||||
namespace Tests\Feature\Notifications;
|
namespace Tests\Feature\Notifications;
|
||||||
|
|
||||||
|
use App\Events\CheckoutableCheckedIn;
|
||||||
use App\Events\CheckoutableCheckedOut;
|
use App\Events\CheckoutableCheckedOut;
|
||||||
use App\Models\Accessory;
|
use App\Models\Accessory;
|
||||||
use App\Models\Setting;
|
use App\Models\Setting;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use App\Notifications\CheckinAccessoryNotification;
|
||||||
use App\Notifications\CheckoutAccessoryNotification;
|
use App\Notifications\CheckoutAccessoryNotification;
|
||||||
use Illuminate\Notifications\AnonymousNotifiable;
|
use Illuminate\Notifications\AnonymousNotifiable;
|
||||||
use Illuminate\Support\Facades\Notification;
|
use Illuminate\Support\Facades\Notification;
|
||||||
|
@ -50,4 +52,42 @@ class AccessoryWebhookTest extends TestCase
|
||||||
|
|
||||||
Notification::assertNotSentTo(new AnonymousNotifiable, CheckoutAccessoryNotification::class);
|
Notification::assertNotSentTo(new AnonymousNotifiable, CheckoutAccessoryNotification::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testAccessoryCheckinSendsWebhookNotificationWhenSettingEnabled()
|
||||||
|
{
|
||||||
|
Notification::fake();
|
||||||
|
|
||||||
|
Setting::factory()->withWebhookEnabled()->create();
|
||||||
|
|
||||||
|
event(new CheckoutableCheckedIn(
|
||||||
|
Accessory::factory()->appleBtKeyboard()->create(),
|
||||||
|
User::factory()->create(),
|
||||||
|
User::factory()->superuser()->create(),
|
||||||
|
''
|
||||||
|
));
|
||||||
|
|
||||||
|
Notification::assertSentTo(
|
||||||
|
new AnonymousNotifiable,
|
||||||
|
CheckinAccessoryNotification::class,
|
||||||
|
function ($notification, $channels, $notifiable) {
|
||||||
|
return $notifiable->routes['slack'] === Setting::getSettings()->webhook_endpoint;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAccessoryCheckinDoesNotSendWebhookNotificationWhenSettingDisabled()
|
||||||
|
{
|
||||||
|
Notification::fake();
|
||||||
|
|
||||||
|
Setting::factory()->withWebhookDisabled()->create();
|
||||||
|
|
||||||
|
event(new CheckoutableCheckedIn(
|
||||||
|
Accessory::factory()->appleBtKeyboard()->create(),
|
||||||
|
User::factory()->create(),
|
||||||
|
User::factory()->superuser()->create(),
|
||||||
|
''
|
||||||
|
));
|
||||||
|
|
||||||
|
Notification::assertNotSentTo(new AnonymousNotifiable, CheckinAccessoryNotification::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue