Saltar al contenido principal

Estado de apertura de una gasolinera (triestado)

Implementa: api
Consume: web, app
Estado: activa
Última revisión: 2026-05-15

# Implementa: api
# Consume: web, app
# Estado: activa
# Última revisión: 2026-05-15

Feature: Estado de apertura de una gasolinera (triestado)

El campo `is_open` en la respuesta puede tener tres valores distintos.
Es un triestado, no un booleano — null significa "no sabemos", no "cerrado".

Confundir null con false llevaría al frontend a mostrar "CERRADO" en
estaciones cuyo horario simplemente no está disponible, induciendo al
usuario a descartarlas incorrectamente.

Background:
Given el API evalúa `is_open` en la zona horaria Europe/Madrid

Scenario: Estación con horario 24h siempre aparece como abierta
Given una estación con `always_open: true`
When el API calcula el estado de apertura
Then `is_open` es `true`

Scenario: Estación abierta en el tramo horario actual
Given una estación con horario L-V 07:00-22:00
And la consulta se realiza un miércoles a las 10:00
When el API calcula el estado de apertura
Then `is_open` es `true`

Scenario: Estación cerrada fuera de su tramo horario
Given una estación con horario L-V 07:00-22:00 y Sáb 08:00-21:00
And la consulta se realiza un domingo a cualquier hora
When el API calcula el estado de apertura
Then `is_open` es `false`

Scenario: Horario desconocido — el API no puede determinar si está abierta
Given una estación cuyo horario no pudo ser parseado (`schedule_parsed` es null)
When el API calcula el estado de apertura
Then `is_open` es `null`

Scenario Outline: El frontend muestra el badge correcto según el triestado
Given una estación con `is_open` igual a <valor>
When el frontend renderiza el indicador de apertura
Then muestra <badge>

Examples:
| valor | badge |
| true | "ABIERTO" (indicador verde) |
| false | "CERRADO" (indicador rojo) |
| null | nada — omite el badge |