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(); });