snipe-it/tests/Unit/NotificationTest.php

65 lines
2.1 KiB
PHP
Raw Normal View History

<?php
namespace Tests\Unit;
2024-10-17 13:34:55 -07:00
use App\Mail\CheckoutAssetMail;
use App\Models\User;
use App\Models\Asset;
use App\Models\AssetModel;
use App\Models\Category;
use Carbon\Carbon;
Notification improvements (#5254) * Added “show fields in email” to custom fields * Added “show images in email” to settings * Added nicer HTML emails * Break notifications out into their own, instead of trying to mash them all together * Remove old notification for accessory checkout * Janky fix for #5076 - “The asset you have attempted to accept was not checked out to you” * Add method for image url for accessories * Added accessory checkout email blade * Make accessory email notification on checkout screen consistent with assets * Added native consumables notifications * Fixes for asset notification * Updated notification blades with correct-er fields * Updated notifications * License checkin notification - does not work yet Need to figure out whether the license seat is assigned to a person or an asset before we can pass the target * Added alternate “cc” email for admins * Only try to trigger notifications if the target is a user * Fix tests * Fixed consumable URL * Removed unused notification * Pass target type in params * Show slack status * Pass additional parameters There is a logic bug in this :( Will send to slack twice, since the admin CC and the user are both using the same notification. Fuckity fuck fuck fuck. * Pass a variable to the notification to supress the duplicate slack message * Slack is broken :( Trying to fix Will try a git bisect * Put preview back into checkout * Pulled old archaic mail * Removed debugging * Fixed wrong email title * Fixed slack endpoint not firing * Poobot, we hardly knew ye. * Removed old, manual mail from API * Typo :-/ * Code cleanup * Use defined formatted date in JSON * Use static properties for checkin/checkout notifiers for cleaner code * Removed debugging * Use date formatter * Fixed target_type * Fixed language in consumable email
2018-03-25 13:46:57 -07:00
use App\Notifications\CheckoutAssetNotification;
2024-10-17 13:34:55 -07:00
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Notification;
2023-03-07 16:57:55 -08:00
use Tests\TestCase;
2023-03-07 16:57:55 -08:00
class NotificationTest extends TestCase
{
public function testAUserIsEmailedIfTheyCheckoutAnAssetWithEULA()
{
2023-03-06 12:40:47 -08:00
$admin = User::factory()->superuser()->create();
$user = User::factory()->create();
$asset = Asset::factory()
->create(
[
'model_id' => AssetModel::factory()
->create(
[
'category_id' => Category::factory()->assetLaptopCategory()->create()->id
]
2023-03-02 13:47:58 -08:00
)->id,
'warranty_months' => 24,
2023-03-02 13:47:58 -08:00
'purchase_date' => Carbon::createFromDate(2017, 1, 1)->hour(0)->minute(0)->second(0)->format('Y-m-d')
]);
2024-10-17 13:34:55 -07:00
Mail::fake();
2023-03-06 12:40:47 -08:00
$asset->checkOut($user, $admin->id);
2024-10-22 16:14:36 -07:00
Mail::assertSent(CheckoutAssetMail::class, function ($mail) use ($user) {
return $mail->hasTo($user->email);
});
}
2024-09-04 12:21:49 -07:00
public function testDefaultEulaIsSentWhenSetInCategory()
{
2024-10-17 13:34:55 -07:00
Mail::fake();
2024-09-04 12:21:49 -07:00
$this->settings->setEula('My Custom EULA Text');
$user = User::factory()->create();
$category = Category::factory()->create([
'use_default_eula' => 1,
'eula_text' => 'EULA Text that should not be used',
]);
$model = AssetModel::factory()->for($category)->create();
$asset = Asset::factory()->for($model, 'model')->create();
$asset->checkOut($user, User::factory()->superuser()->create()->id);
2024-10-17 13:34:55 -07:00
Mail::assertSent(CheckoutAssetMail::class, function ($mail) use ($user) {
return $mail->hasTo($user->email) &&
str_contains($mail->render(), 'My Custom EULA Text') &&
!str_contains($mail->render(), 'EULA Text that should not be used');
2024-09-04 12:21:49 -07:00
});
}
}