From 7171247cdcb10c820a7a219a42dfbf3f3a940fd3 Mon Sep 17 00:00:00 2001 From: snipe Date: Fri, 12 Sep 2025 17:37:36 +0100 Subject: [PATCH] Updated tests --- .../Email/ExpiringAlertsNotificationTest.php | 72 ++++++++++++++----- 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/tests/Feature/Notifications/Email/ExpiringAlertsNotificationTest.php b/tests/Feature/Notifications/Email/ExpiringAlertsNotificationTest.php index 1d91cf2557..9ffad8c0ce 100644 --- a/tests/Feature/Notifications/Email/ExpiringAlertsNotificationTest.php +++ b/tests/Feature/Notifications/Email/ExpiringAlertsNotificationTest.php @@ -8,7 +8,6 @@ use App\Mail\SendUpcomingAuditMail; use App\Models\Asset; use App\Models\License; use App\Models\Setting; -use App\Models\User; use Illuminate\Support\Facades\Mail; use Tests\TestCase; @@ -17,7 +16,6 @@ class ExpiringAlertsNotificationTest extends TestCase { public function testExpiringAssetsEmailNotification() { - $this->markIncompleteIfSqlite(); Mail::fake(); $this->settings->enableAlertEmail('admin@example.com'); @@ -25,41 +23,55 @@ class ExpiringAlertsNotificationTest extends TestCase $alert_email = Setting::first()->alert_email; - $expiringAsset = Asset::factory()->create([ - 'purchase_date' => now()->subDays(350)->format('Y-m-d'), + $expiringWarrantyAsset = Asset::factory()->create([ + 'purchase_date' => now()->subDays(356)->format('Y-m-d'), 'warranty_months' => 12, 'archived' => 0, - 'deleted_at' => null, ]); - $expiredAsset = Asset::factory()->create([ - 'purchase_date' => now()->subDays(370)->format('Y-m-d'), + + $alreadyExpiredAsset = Asset::factory()->create([ + 'purchase_date' => now()->subDays(396)->format('Y-m-d'), 'warranty_months' => 12, 'archived' => 0, - 'deleted_at' => null, ]); + // Asset has a manually entered EOL date that's coming up + $expiringEOLAsset = Asset::factory()->create([ + 'archived' => 0, + ]); + + // We have to set this here because of the configure() method in the Asset factory :( + $expiringEOLAsset->asset_eol_date = now()->addDays(5)->format('Y-m-d'); + $expiringEOLAsset->save(); + $notExpiringAsset = Asset::factory()->create([ - 'purchase_date' => now()->subDays(330)->format('Y-m-d'), + 'purchase_date' => now()->addDays(330)->format('Y-m-d'), 'warranty_months' => 12, 'archived' => 0, - 'deleted_at' => null, ]); + // We have to set this here because of the configure() method in the Asset factory :( + $notExpiringAsset->asset_eol_date = null; + $expiringEOLAsset->save(); + $this->artisan('snipeit:expiring-alerts')->assertExitCode(0); - Mail::assertSent(ExpiringAssetsMail::class, function($mail) use ($alert_email, $expiringAsset) { - return $mail->hasTo($alert_email) && $mail->assets->contains($expiringAsset); + Mail::assertSent(ExpiringAssetsMail::class, function($mail) use ($alert_email, $expiringWarrantyAsset) { + return $mail->hasTo($alert_email) && $mail->assets->contains($expiringWarrantyAsset); }); - Mail::assertNotSent(ExpiringAssetsMail::class, function($mail) use ($expiredAsset, $notExpiringAsset) { - return $mail->assets->contains($expiredAsset) || $mail->assets->contains($notExpiringAsset); + Mail::assertSent(ExpiringAssetsMail::class, function($mail) use ($alert_email, $expiringEOLAsset) { + return $mail->hasTo($alert_email) && $mail->assets->contains($expiringEOLAsset); + }); + + Mail::assertNotSent(ExpiringAssetsMail::class, function($mail) use ($alert_email, $notExpiringAsset, $alreadyExpiredAsset) { + return $mail->assets->contains($alert_email) || ($mail->assets->contains($alreadyExpiredAsset) && ($mail->assets->contains($notExpiringAsset))); }); } public function testExpiringLicensesEmailNotification() { - $this->markIncompleteIfSqlite(); Mail::fake(); $this->settings->enableAlertEmail('admin@example.com'); $this->settings->setAlertInterval(60); @@ -69,6 +81,7 @@ class ExpiringAlertsNotificationTest extends TestCase $expiringLicense = License::factory()->create([ 'expiration_date' => now()->addDays(30)->format('Y-m-d'), 'deleted_at' => null, + 'termination_date' => null, ]); $expiredLicense = License::factory()->create([ @@ -80,20 +93,43 @@ class ExpiringAlertsNotificationTest extends TestCase 'deleted_at' => null, ]); + $expiringButTerminatedLicense = License::factory()->create([ + 'termination_date' => now()->subDays(10)->format('Y-m-d'), + 'expiration_date' => now()->subDays(10)->format('Y-m-d'), + 'deleted_at' => null, + ]); + + $deletedExpiringLicense = License::factory()->create([ + 'expiration_date' => now()->addDays(30)->format('Y-m-d'), + 'deleted_at' => now()->subDays(10)->format('Y-m-d'), + ]); + $this->artisan('snipeit:expiring-alerts')->assertExitCode(0); Mail::assertSent(ExpiringLicenseMail::class, function($mail) use ($alert_email, $expiringLicense) { return $mail->hasTo($alert_email) && $mail->licenses->contains($expiringLicense); }); - Mail::assertNotSent(ExpiringLicenseMail::class, function($mail) use ($expiredLicense, $notExpiringLicense) { - return $mail->licenses->contains($expiredLicense) || $mail->licenses->contains($notExpiringLicense); + Mail::assertNotSent(ExpiringLicenseMail::class, function($mail) use ($alert_email, $expiredLicense) { + return $mail->hasTo($alert_email) && $mail->licenses->contains($expiredLicense); }); + + Mail::assertNotSent(ExpiringLicenseMail::class, function($mail) use ($alert_email, $notExpiringLicense) { + return $mail->licenses->contains($alert_email) || $mail->licenses->contains($notExpiringLicense); + }); + + Mail::assertNotSent(ExpiringLicenseMail::class, function($mail) use ($alert_email, $expiringButTerminatedLicense) { + return $mail->licenses->contains($alert_email) || $mail->licenses->contains($expiringButTerminatedLicense); + }); + + Mail::assertNotSent(ExpiringLicenseMail::class, function($mail) use ($alert_email, $deletedExpiringLicense) { + return $mail->licenses->contains($alert_email) || $mail->licenses->contains($deletedExpiringLicense); + }); + } public function testAuditWarningThresholdEmailNotification() { - $this->markIncompleteIfSqlite(); Mail::fake(); $this->settings->enableAlertEmail('admin@example.com'); $this->settings->setAuditWarningDays(15);