62 lines
1.8 KiB
PHP
62 lines
1.8 KiB
PHP
<?php
|
|
|
|
use App\Actions\Schools\CreateSchool;
|
|
use App\Exceptions\AuditionAdminException;
|
|
use App\Models\AuditLogEntry;
|
|
use App\Models\School;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
beforeEach(function () {
|
|
$this->creator = app(CreateSchool::class);
|
|
});
|
|
|
|
it('creates a school', function () {
|
|
$newSchool = ($this->creator)(
|
|
'Longfellow Intermediate',
|
|
'210 East 4th Stret',
|
|
'Chelsea',
|
|
'OK',
|
|
'74016',
|
|
);
|
|
$dbSchool = School::first();
|
|
expect(School::where('name', 'Longfellow Intermediate')->exists())->toBeTrue()
|
|
->and($dbSchool->name)->toEqual('Longfellow Intermediate')
|
|
->and($dbSchool->address)->toEqual('210 East 4th Stret')
|
|
->and($dbSchool->city)->toEqual('Chelsea')
|
|
->and($dbSchool->state)->toEqual('OK')
|
|
->and($dbSchool->zip)->toEqual('74016');
|
|
});
|
|
|
|
it('logs school creation', function () {
|
|
actAsAdmin();
|
|
$schoolAddress = fake()->streetAddress();
|
|
$schoolCity = fake()->city();
|
|
$schoolState = 'OK';
|
|
$schoolZip = fake()->postcode();
|
|
$schoolName = $schoolCity.' High School';
|
|
$this->creator->create(
|
|
$schoolName,
|
|
$schoolAddress,
|
|
$schoolCity,
|
|
$schoolState,
|
|
$schoolZip,
|
|
);
|
|
$logEntry = AuditLogEntry::orderBy('id', 'desc')->first();
|
|
expect($logEntry->message)->toEqual('Created school '.$schoolName)
|
|
->and($logEntry->affected['schools'])->toEqual([1])
|
|
->and($logEntry->user)->toEqual(auth()->user()->email);
|
|
|
|
});
|
|
|
|
it('will not create a school with a duplicate name', function () {
|
|
$schoolName = 'Longfellow Intermediate';
|
|
$this->creator->create(
|
|
$schoolName
|
|
);
|
|
$this->creator->create(
|
|
$schoolName
|
|
);
|
|
})->throws(AuditionAdminException::class, 'The school Longfellow Intermediate already exists');
|