Saltar al contenido principal

Hora de actualización del precio

Implementa: web, app
Consume: api
Estado: borrador
Última revisión: 2026-05-21T19:38:35Z

# Implementa: web, app
# Consume: api
# Estado: borrador
# Última revisión: 2026-05-21T19:38:35Z
# Position: 4

Feature: Hora de actualización del precio

Los precios provienen de una fuente externa y se actualizan periódicamente.
Mostrar cuándo se actualizó el precio ayuda al usuario a calibrar la
fiabilidad del dato antes de desplazarse a la estación.

El campo `price.updated_at` de la API devuelve un datetime sin zona horaria
que se interpreta siempre como Europe/Madrid.

Por defecto se muestra en formato relativo. Al interactuar con el timestamp
(hover en web, tap en app) se revela el valor absoluto exacto.

El timestamp aparece en dos lugares:
- Hero card de la lista: muestra el updated_at del combustible de la búsqueda.
- Filas de combustible en el detalle: cada fila muestra su propio updated_at.

# ---------------------------------------------------------------------------
# Formato relativo — umbrales
# ---------------------------------------------------------------------------

Scenario Outline: El timestamp relativo refleja la antigüedad del precio
Given el precio se actualizó hace <antiguedad>
Then el timestamp muestra <texto_relativo>

Examples:
| antiguedad | texto_relativo |
| 3 minutos | "hace 3 min" |
| 59 minutos | "hace 59 min" |
| 1 hora | "hace 1 hora" |
| 5 horas | "hace 5 horas" |
| 47 horas | "hace 47 horas" |
| 2 días | "hace 2 días" |
| 6 días | "hace 6 días" |

Scenario: A los 60 minutos exactos el formato cambia de minutos a horas
Given el precio se actualizó hace exactamente 60 minutos
Then el timestamp muestra "hace 1 hora"
And no muestra "hace 60 min"

Scenario: A las 48 horas exactas el formato cambia de horas a días
Given el precio se actualizó hace exactamente 48 horas
Then el timestamp muestra "hace 2 días"
And no muestra "hace 48 horas"

Scenario: Con más de 6 días de antigüedad el timestamp muestra la fecha absoluta directamente
Given el precio se actualizó hace más de 6 días
Then el timestamp muestra la fecha absoluta sin formato relativo
And no muestra un texto del tipo "hace N días"

# ---------------------------------------------------------------------------
# Formato absoluto — al interactuar
# ---------------------------------------------------------------------------

Scenario Outline: Al interactuar con el timestamp se muestra el valor absoluto
Given el precio tiene updated_at <updated_at>
And la fecha y hora actuales son <fecha_actual>
When el usuario interactúa con el timestamp
Then se muestra el tiempo absoluto <texto_absoluto>

Examples:
| updated_at | fecha_actual | texto_absoluto |
| 2026-05-19T15:30:00 | 2026-05-19T18:00:00 | "15:30" |
| 2026-05-18T09:45:00 | 2026-05-19T08:00:00 | "ayer 9:45" |
| 2026-05-03T11:20:00 | 2026-05-19T08:00:00 | "3 may 11:20" |
| 2025-12-15T07:00:00 | 2026-05-19T08:00:00 | "15 dic 2025 7:00" |

# ---------------------------------------------------------------------------
# Dato ausente
# ---------------------------------------------------------------------------

Scenario: No se renderiza el timestamp cuando updated_at está ausente
Given la API no devuelve updated_at para ese precio
Then no se renderiza ningún elemento de timestamp en la tarjeta o fila

# ---------------------------------------------------------------------------
# Ubicación: hero card en la lista
# ---------------------------------------------------------------------------

Scenario: La hero card muestra el timestamp del combustible de la búsqueda
Given la hero card corresponde a la estación más barata para "sp98"
And el precio sp98 de esa estación tiene un updated_at determinado
Then la hero card muestra el timestamp relativo del precio sp98
And no muestra el timestamp de ningún otro combustible

# ---------------------------------------------------------------------------
# Ubicación: filas de combustible en el detalle
# ---------------------------------------------------------------------------

Scenario: Cada fila de combustible muestra su propio timestamp de forma independiente
Given la pantalla de detalle muestra filas para "SP98" y "Diésel"
And la fila "SP98" tiene un updated_at distinto al de "Diésel"
Then cada fila muestra su propio timestamp relativo
And el timestamp de "SP98" no influye en el timestamp de "Diésel"