feat(gherkin): ajouter features contenus géolocalisés mode voiture
Ajout et enrichissement des fichiers Gherkin pour les contenus géolocalisés en mode voiture selon règles métier section 17: API Backend (notifications-geolocalisees.feature): - Edge cases haute vitesse (130 km/h, 180 km/h) - Gestion multiples points géolocalisés proches (800m) - Cooldown réduit après validations multiples - Mode stationnement (vitesse < 1 km/h pendant 2 min) UI Mobile (contenus-geolocalises-voiture.feature) - nouveau fichier: - Notification visuelle minimaliste (icône + compteur, pas de texte) - Validation "Suivant" et décompte 5 secondes - Transitions audio fluides (fade in/out) - Conformité CarPlay/Android Auto (sonore uniquement) - Navigation avec contenus géolocalisés - Annulation décompte et gestion historique UI Navigation (commande-precedent.feature): - Comportement "Précédent" avec contenus géolocalisés - Historique mixte buffer et géolocalisés - Règle 10s pour replay/retour - Notification ignorée/annulée n'entre pas dans historique
This commit is contained in:
@@ -388,3 +388,102 @@ Fonctionnalité: API - Notifications géolocalisées et quota anti-spam
|
||||
| 5 | disponible |
|
||||
| 6 | atteint |
|
||||
| 7 | atteint |
|
||||
|
||||
# Edge cases : haute vitesse
|
||||
|
||||
Scénario: API calcule ETA correctement à 130 km/h
|
||||
Étant donné qu'un contenu géolocalisé existe
|
||||
Et que l'utilisateur roule à 130 km/h (36.1 m/s)
|
||||
Et qu'il est à 252 mètres du point
|
||||
Quand je POST /api/v1/geo-notifications/check-eta
|
||||
"""json
|
||||
{
|
||||
"user_id": "user123",
|
||||
"speed_kmh": 130,
|
||||
"distance_meters": 252
|
||||
}
|
||||
"""
|
||||
Alors le statut de réponse est 200
|
||||
Et la réponse contient:
|
||||
"""json
|
||||
{
|
||||
"eta_seconds": 7,
|
||||
"speed_ms": 36.1,
|
||||
"should_notify": true,
|
||||
"notification_trigger": "eta_threshold"
|
||||
}
|
||||
"""
|
||||
Et une notification est envoyée 252m avant le point
|
||||
|
||||
Scénario: API calcule distance notification selon vitesse
|
||||
Étant donné qu'un contenu géolocalisé existe
|
||||
Quand l'utilisateur roule à 180 km/h (50 m/s)
|
||||
Alors la notification est déclenchée à 350 mètres avant le point
|
||||
Et après décompte 5s, user a parcouru 250m
|
||||
Et le contenu démarre 100m avant le point
|
||||
Et le système fonctionne même à vitesse extrême
|
||||
|
||||
# Edge cases : multiples points proches
|
||||
|
||||
Scénario: API gère multiples points géolocalisés proches (800m chacun)
|
||||
Étant donné que 3 châteaux existent espacés de 800m chacun
|
||||
| contenu | position_km |
|
||||
| Château A | 0 |
|
||||
| Château B | 0.8 |
|
||||
| Château C | 1.6 |
|
||||
Et que l'utilisateur roule à 50 km/h
|
||||
Quand une notification Château A est envoyée et acceptée
|
||||
Alors le quota passe à 1/6
|
||||
Et aucun cooldown n'est activé (notification acceptée)
|
||||
Quand 57 secondes s'écoulent (temps pour parcourir 800m)
|
||||
Et que l'utilisateur atteint Château B
|
||||
Alors une notification Château B est envoyée
|
||||
Car le quota n'est pas atteint (1/6)
|
||||
Et il n'y a pas de cooldown actif
|
||||
|
||||
Scénario: API active cooldown réduit après validations multiples
|
||||
Étant donné que l'utilisateur a validé 2 notifications consécutives
|
||||
Et que les notifications ont toutes été acceptées (clic "Suivant")
|
||||
Quand une 3ème notification est ignorée
|
||||
Alors le cooldown activé est 5 minutes (réduit)
|
||||
Et non 10 minutes (standard)
|
||||
Car l'utilisateur a montré de l'engagement précédemment
|
||||
|
||||
Scénario: API ignore notifications si cooldown actif après ignorance
|
||||
Étant donné qu'une notification a été ignorée à 10:00:00
|
||||
Et qu'un cooldown de 10 minutes est actif
|
||||
Et que 3 contenus géolocalisés existent à 10:05, 10:08, 10:11
|
||||
Quand l'utilisateur passe devant le contenu à 10:05
|
||||
Alors aucune notification n'est envoyée (cooldown actif, reste 5 min)
|
||||
Quand l'utilisateur passe devant le contenu à 10:08
|
||||
Alors aucune notification n'est envoyée (cooldown actif, reste 2 min)
|
||||
Quand l'utilisateur passe devant le contenu à 10:11
|
||||
Alors une notification est envoyée (cooldown expiré après 10 min)
|
||||
|
||||
# Edge cases : mode stationnement
|
||||
|
||||
Scénario: API détecte mode stationnement (vitesse < 1 km/h pendant 2 min)
|
||||
Étant donné que l'utilisateur roule à 50 km/h
|
||||
Quand la vitesse passe à 0.5 km/h (arrêt complet)
|
||||
Et que la vitesse reste < 1 km/h pendant 2 minutes consécutives
|
||||
Alors le mode "stationnement" est activé
|
||||
Et aucune notification géolocalisée n'est envoyée
|
||||
Et le système bascule automatiquement en mode piéton
|
||||
Et un événement "mode_stationnement_detected" est enregistré
|
||||
|
||||
Scénario: API sort du mode stationnement quand vitesse > 5 km/h
|
||||
Étant donné que le mode stationnement est actif depuis 30 minutes
|
||||
Et que l'utilisateur était à l'arrêt près d'un château
|
||||
Quand la vitesse passe à 20 km/h pendant 10 secondes
|
||||
Alors le mode voiture est réactivé
|
||||
Et les notifications géolocalisées reprennent
|
||||
Et le quota horaire est vérifié avant nouvelle notification
|
||||
|
||||
Scénario: API refuse notification si user arrêté longtemps près d'un point
|
||||
Étant donné qu'un contenu géolocalisé existe à 30 mètres
|
||||
Et que l'utilisateur est à l'arrêt (vitesse 0 km/h) depuis 3 minutes
|
||||
Quand le système détecte la proximité
|
||||
Alors le mode stationnement est actif
|
||||
Et aucune notification n'est envoyée
|
||||
Car l'utilisateur est probablement stationné (parking)
|
||||
Et pas en mode conduite
|
||||
|
||||
Reference in New Issue
Block a user