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"