package services import ( "testing" "github.com/sujit-baniya/fiber-boilerplate/app" "github.com/sujit-baniya/fiber-boilerplate/config" "github.com/sujit-baniya/fiber-boilerplate/pkg/models" ) // ─── Helpers ────────────────────────────────────────────────────────────────── func setupTestApp() { if app.Http == nil { app.Http = &config.AppConfig{ Server: config.ServerConfig{ Url: "http://localhost", Port: "8080", }, } } } func TestSendSoporteAutoRespuestaNilTicket(t *testing.T) { setupTestApp() // No debe panic si ticket es nil SendSoporteAutoRespuesta(nil) } func TestSendSoporteAutoRespuestaSinEmail(t *testing.T) { setupTestApp() ticket := &models.ProyectoTicket{ Titulo: "Test", Descripcion: "Desc", AutorNombre: "Cliente", Origen: "email", } // No debe hacer nada si no tiene email SendSoporteAutoRespuesta(ticket) } func TestSendSoporteAutoRespuestaConEmail(t *testing.T) { setupTestApp() ticket := &models.ProyectoTicket{ EmailFrom: "cliente@test.com", Titulo: "Ayuda con factura", Descripcion: "No puedo ver mi factura de enero", AutorNombre: "Juan Pérez", Origen: "email", } app.Http.Mail.FromAddress = "soporte@u-s.app" app.Http.Mail.Host = "127.0.0.1" app.Http.Mail.Port = 2525 // Solo verificar que no panic (enviaría a un SMTP que no existe, pero el go routine captura error) SendSoporteAutoRespuesta(ticket) } func TestSendSoporteNotifAdminNil(t *testing.T) { setupTestApp() SendSoporteNotifAdmin(nil) } func TestSendSoporteNotifAdminSinSmtp(t *testing.T) { setupTestApp() ticket := &models.ProyectoTicket{ EmailFrom: "cliente@test.com", Titulo: "Problema", Descripcion: "No funciona", AutorNombre: "Cliente", } // Sin SMTP config no debe panic SendSoporteNotifAdmin(ticket) } func TestSendSoporteAutoRespuestaOrigenPortal(t *testing.T) { setupTestApp() ticket := &models.ProyectoTicket{ EmailFrom: "", Titulo: "Portal ticket", Descripcion: "Desc", AutorNombre: "Portal User", Origen: "portal", } // No debe intentar enviar email porque EmailFrom está vacío SendSoporteAutoRespuesta(ticket) } func TestSendSoporteNotifAdminConSmtp(t *testing.T) { setupTestApp() // Simular SMTP config en app.Http.Mail app.Http.Mail.FromAddress = "admin@u-s.app" app.Http.Mail.Host = "127.0.0.1" app.Http.Mail.Port = 2525 ticket := &models.ProyectoTicket{ // gorm.Model embedido: ID se asigna via Create en DB real EmailFrom: "cliente@test.com", Titulo: "Error en el sistema", Descripcion: "Recibo un error 500", AutorNombre: "María López", Origen: "email", } // Verificar que no panic (el email se envía en goroutine) SendSoporteNotifAdmin(ticket) }