51 lines
2.3 KiB
PHP
51 lines
2.3 KiB
PHP
<?php
|
|
|
|
use App\Domain\Administration\Services\NotificationTemplateService;
|
|
use App\Domain\Identity\Enums\RoleName;
|
|
use App\Domain\Identity\Models\Role;
|
|
use App\Domain\Reservations\Enums\ReservationStatus;
|
|
use App\Domain\Reservations\Models\Reservation;
|
|
use App\Models\User;
|
|
use App\Notifications\ReservationDecisionNotification;
|
|
|
|
it('personaliza modelos e aplica variáveis às notificações', function () {
|
|
$administrator = User::factory()->create();
|
|
$administrator->roles()->attach(Role::firstOrCreate(['name' => RoleName::Administrator->value]));
|
|
$requester = User::factory()->create(['name' => 'Maria Docente']);
|
|
$reservation = Reservation::create([
|
|
'reference' => 'REQ-TEMPLATE-001',
|
|
'requester_id' => $requester->id,
|
|
'purpose' => 'Validação dos modelos configuráveis.',
|
|
'usage_location' => 'Biblioteca',
|
|
'starts_at' => now()->addDay(),
|
|
'ends_at' => now()->addDay()->addHours(2),
|
|
'status' => ReservationStatus::Approved,
|
|
])->load('requester');
|
|
|
|
$templates = app(NotificationTemplateService::class)->templates();
|
|
$templates['approved'] = [
|
|
'subject' => 'Pedido {reference} confirmado',
|
|
'message' => 'Olá {requester}, o pedido {reference} foi confirmado. {comment}',
|
|
];
|
|
|
|
$this->actingAs($administrator)
|
|
->put('/administracao/notificacoes/modelos', ['templates' => $templates])
|
|
->assertRedirect()
|
|
->assertSessionHas('success');
|
|
|
|
$notification = new ReservationDecisionNotification($reservation, 'approved', 'Pode levantar às 09:00.');
|
|
$mail = $notification->toMail($requester);
|
|
$database = $notification->toArray($requester);
|
|
|
|
expect($mail->subject)->toBe('Pedido REQ-TEMPLATE-001 confirmado')
|
|
->and($mail->introLines)->toContain('Olá Maria Docente, o pedido REQ-TEMPLATE-001 foi confirmado. Pode levantar às 09:00.')
|
|
->and($database['message'])->toBe('Olá Maria Docente, o pedido REQ-TEMPLATE-001 foi confirmado. Pode levantar às 09:00.');
|
|
$this->assertDatabaseHas('audit_logs', ['event' => 'settings.notification_templates_updated']);
|
|
});
|
|
|
|
it('impede requisitantes de editar modelos de notificação', function () {
|
|
$this->actingAs(User::factory()->create())
|
|
->get('/administracao/notificacoes/modelos')
|
|
->assertForbidden();
|
|
});
|