PanelAdminTest
extends ApiTestCase
in package
Sección PANEL ADMIN de la API — gestión de usuarios y de sus permisos.
El foco de estos tests es la ESCALADA DE PRIVILEGIOS: que un usuario estándar (tipo 0) no pueda ejecutar acciones administrativas y que un administrador (tipo 1) no pueda superar su propio nivel.
Tags
Attributes
- #[Group]
- 'trackingweb'
- #[Group]
- 'panel-admin'
Table of Contents
Properties
- $cookieJar : CookieJar
- $debug : bool
- $http : Client
Methods
- accionesAdminProvider() : array<string|int, mixed>
- entradasInvalidasProvider() : array<string|int, mixed>
- modosBorradoProvider() : array<string|int, mixed>
- testAdminNoPuedeCrearUsuarioDeRolSuperior() : void
- Un administrador no puede crear un usuario de rol superior al suyo.
- testAdminNoPuedePromocionarPorEncimaDeSuRol() : void
- Un administrador no puede promocionar a otro usuario por encima de su rol.
- testEntradasInvalidasNoProvocanErrorDeServidor() : void
- Entradas inválidas deben resolverse con 4xx, nunca con un 5xx.
- testListadoDeUsuariosNoExponeContrasenas() : void
- El listado de usuarios no debe exponer nunca el hash de contraseña.
- testNoSePuedenCrearDosUsuariosConElMismoLogin() : void
- Crear dos veces el mismo login debe rechazarse con 409.
- testUsuarioNoPuedeBorrarseASiMismo() : void
- Nadie puede eliminarse ni desactivarse a sí mismo.
- assertNoFiltraDetallesInternos() : void
- Verifica que un mensaje de error no filtra detalles internos del servidor (SQL, rutas de archivo, clases o trazas de excepción).
- assertRespuestaApi() : void
- Verifica que la respuesta cumple el contrato mínimo de la API: JSON válido con una clave booleana 'ok'.
- credenciales() : array{0: string, 1: string}
- Devuelve las credenciales de test del entorno.
- idSesion() : string|null
- Devuelve el identificador de sesión actual del cookieJar, si existe.
- iniciarSesion() : void
- Inicia sesión con las credenciales del entorno.
- nuevoCliente() : Client
- Crea un cliente HTTP que comparte el cookieJar del test.
- post() : array{0: int, 1: array}
- Ejecuta un POST contra la API y devuelve [statusCode, bodyArray].
- setUp() : void
- Carga el entorno de test, el cookieJar y el cliente HTTP.
- trace() : void
- Imprime una traza de ejecución con contexto, dirección y payload.
Properties
$cookieJar
protected
CookieJar
$cookieJar
$debug
protected
bool
$debug
= \false
$http
protected
Client
$http
Methods
accionesAdminProvider()
public
static accionesAdminProvider() : array<string|int, mixed>
Return values
array<string|int, mixed>entradasInvalidasProvider()
public
static entradasInvalidasProvider() : array<string|int, mixed>
Return values
array<string|int, mixed>modosBorradoProvider()
public
static modosBorradoProvider() : array<string|int, mixed>
Return values
array<string|int, mixed>testAdminNoPuedeCrearUsuarioDeRolSuperior()
Un administrador no puede crear un usuario de rol superior al suyo.
public
testAdminNoPuedeCrearUsuarioDeRolSuperior() : void
Se prueba la vía SIN permisos (create_user sin el campo 'permisos'), que es la que no pasa por createUsuarioConPermisos.
Tags
Attributes
- #[Group]
- 'escritura'
testAdminNoPuedePromocionarPorEncimaDeSuRol()
Un administrador no puede promocionar a otro usuario por encima de su rol.
public
testAdminNoPuedePromocionarPorEncimaDeSuRol() : void
Tags
testEntradasInvalidasNoProvocanErrorDeServidor()
Entradas inválidas deben resolverse con 4xx, nunca con un 5xx.
public
testEntradasInvalidasNoProvocanErrorDeServidor(string $accion, array<string|int, mixed> $params) : void
Parameters
- $accion : string
- $params : array<string|int, mixed>
Tags
Attributes
- #[DataProvider]
- 'entradasInvalidasProvider'
testListadoDeUsuariosNoExponeContrasenas()
El listado de usuarios no debe exponer nunca el hash de contraseña.
public
testListadoDeUsuariosNoExponeContrasenas() : void
Tags
testNoSePuedenCrearDosUsuariosConElMismoLogin()
Crear dos veces el mismo login debe rechazarse con 409.
public
testNoSePuedenCrearDosUsuariosConElMismoLogin() : void
Tags
Attributes
- #[Group]
- 'escritura'
testUsuarioNoPuedeBorrarseASiMismo()
Nadie puede eliminarse ni desactivarse a sí mismo.
public
testUsuarioNoPuedeBorrarseASiMismo(string $modo) : void
Parameters
- $modo : string
Tags
Attributes
- #[DataProvider]
- 'modosBorradoProvider'
assertNoFiltraDetallesInternos()
Verifica que un mensaje de error no filtra detalles internos del servidor (SQL, rutas de archivo, clases o trazas de excepción).
protected
assertNoFiltraDetallesInternos(array<string|int, mixed> $body[, string $contexto = '' ]) : void
Parameters
- $body : array<string|int, mixed>
-
: Cuerpo decodificado
- $contexto : string = ''
-
: Texto identificativo para el mensaje de fallo
assertRespuestaApi()
Verifica que la respuesta cumple el contrato mínimo de la API: JSON válido con una clave booleana 'ok'.
protected
assertRespuestaApi(array<string|int, mixed> $body[, string $contexto = '' ]) : void
Parameters
- $body : array<string|int, mixed>
-
: Cuerpo decodificado
- $contexto : string = ''
-
: Texto identificativo para el mensaje de fallo
credenciales()
Devuelve las credenciales de test del entorno.
protected
credenciales([bool $admin = false ]) : array{0: string, 1: string}
Parameters
- $admin : bool = false
-
: true para las credenciales de administrador
Return values
array{0: string, 1: string}idSesion()
Devuelve el identificador de sesión actual del cookieJar, si existe.
protected
idSesion() : string|null
Se busca por coincidencia parcial para soportar session.name personalizado.
Return values
string|nulliniciarSesion()
Inicia sesión con las credenciales del entorno.
protected
iniciarSesion([bool $admin = false ]) : void
Marca el test como skipped si no están configuradas.
Parameters
- $admin : bool = false
-
: true para iniciar como administrador
Tags
nuevoCliente()
Crea un cliente HTTP que comparte el cookieJar del test.
protected
nuevoCliente([array<string|int, mixed> $headers = [] ]) : Client
Permite sobreescribir cabeceras (útil para probar el binding de UA).
Parameters
- $headers : array<string|int, mixed> = []
-
: Cabeceras adicionales o sobreescritas
Return values
Clientpost()
Ejecuta un POST contra la API y devuelve [statusCode, bodyArray].
protected
post(string $endpoint, array<string|int, mixed> $params) : array{0: int, 1: array}
Parameters
- $endpoint : string
-
: Punto de entrada
- $params : array<string|int, mixed>
-
: Parametros de la peticion
Tags
Return values
array{0: int, 1: array}setUp()
Carga el entorno de test, el cookieJar y el cliente HTTP.
protected
setUp() : void
El cookieJar se recrea en cada test para garantizar aislamiento.
trace()
Imprime una traza de ejecución con contexto, dirección y payload.
protected
trace(string $contexto, string $mensaje[, mixed|null $payload = null ]) : void
Los valores sensibles se sustituyen por '***'.
Parameters
- $contexto : string
-
: Contexto del mensaje
- $mensaje : string
-
: Mensaje
- $payload : mixed|null = null
-
: Carga del mensaje