package middlewares import ( "testing" "github.com/sujit-baniya/fiber-boilerplate/pkg/models" ) // El widget valida el dominio; el chat de prueba no. Cuando alguien reporta // "el chat de prueba anda pero el widget no", esta comparación es casi siempre // la causa, así que la regla queda fijada acá. func TestDominioPermitidoEsFailClosed(t *testing.T) { casos := []struct { nombre string lista string host string permitido bool }{ {"lista vacía no permite nada", "", "ejemplo.com", false}, {"sin host no permite", "ejemplo.com", "", false}, {"dominio exacto", "ejemplo.com", "ejemplo.com", true}, {"dominio distinto", "ejemplo.com", "otro.com", false}, {"www no entra por el dominio pelado", "ejemplo.com", "www.ejemplo.com", false}, {"www listado explícitamente", "ejemplo.com,www.ejemplo.com", "www.ejemplo.com", true}, {"comodín cubre subdominio", "*.ejemplo.com", "app.ejemplo.com", true}, {"comodín no cubre otro dominio", "*.ejemplo.com", "app.otro.com", false}, {"espacios alrededor no molestan", " ejemplo.com , otro.com ", "otro.com", true}, {"mayúsculas no molestan", "Ejemplo.COM", "ejemplo.com", true}, } for _, cas := range casos { t.Run(cas.nombre, func(t *testing.T) { tenant := &models.UmindTenant{DominiosPermitidos: cas.lista} if got := tenant.DominioPermitido(cas.host); got != cas.permitido { t.Errorf("DominioPermitido(%q) con lista %q = %v, esperaba %v", cas.host, cas.lista, got, cas.permitido) } }) } } // hostDeOrigen recibe el header Origin o Referer, no un host pelado. func TestHostDeOrigen(t *testing.T) { casos := map[string]string{ "https://ejemplo.com": "ejemplo.com", "https://ejemplo.com/una/pagina": "ejemplo.com", "https://ejemplo.com:8443": "ejemplo.com", // el puerto no cuenta "http://WWW.Ejemplo.com": "www.ejemplo.com", "": "", } for entrada, esperado := range casos { if got := hostDeOrigen(entrada); got != esperado { t.Errorf("hostDeOrigen(%q) = %q, esperaba %q", entrada, got, esperado) } } }