<?php use App\Exceptions\CheckoutNotAllowed; use App\Models\Asset; use App\Models\AssetModel; use App\Models\Category; use App\Models\Location; use App\Models\User; use App\Notifications\CheckoutNotification; use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\WithoutMiddleware; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Notification; class NotificationTest extends BaseTest { /** * @var \UnitTester */ protected $tester; public function testAUserIsEmailedIfTheyCheckoutAnAssetWithEULA() { $admin = factory(User::class)->states('superuser')->create(); Auth::login($admin); $cat = factory(Category::class)->states('asset-category', 'requires-acceptance')->create(); $model = factory(AssetModel::class)->create(['category_id' => $cat->id]); $asset = factory(Asset::class)->create(['model_id' => $model->id]); $user = factory(User::class)->create(); Notification::fake(); $asset->checkOut($user, 1); Notification::assertSentTo($user, CheckoutNotification::class); } public function testAnAssetRequiringAEulaDoesNotExplodeWhenCheckedOutToALocation() { $this->signIn(); $asset = factory(Asset::class)->states('requires-acceptance')->create(); $this->expectException(CheckoutNotAllowed::class); $location = factory(Location::class)->create(); Notification::fake(); $asset->checkOut($location, 1); Notification::assertNotSentTo($location, CheckoutNotification::class); } }