feat: complete administration and reporting
This commit is contained in:
50
tests/Feature/AdminNotificationTemplateTest.php
Normal file
50
tests/Feature/AdminNotificationTemplateTest.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?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();
|
||||
});
|
||||
Reference in New Issue
Block a user