# 🧪 Tests API - Story App

**Date :** 2 janvier 2026  
**Phase :** Phase 1 - Backend MVP complété  
**URL API :** `https://story.cosmail.fr/api`

---

## ✅ Résumé des tests

| Test | Endpoint | Statut | Description |
|------|----------|--------|-------------|
| 1 | `GET /api/health` | ✅ | Health check de l'API |
| 2 | `POST /api/auth/register` | ✅ | Inscription utilisateur |
| 3 | `GET /api/auth/me` | ✅ | Récupération utilisateur connecté |
| 4 | `POST /api/auth/login` | ✅ | Connexion utilisateur |
| 5 | `POST /api/stories` (Tu) | ✅ | Création histoire 2ème personne |
| 6 | `POST /api/stories` (Aria) | ✅ | Création histoire 3ème personne avec nom |
| 7 | `GET /api/stories` | ✅ | Liste des histoires utilisateur |
| 8 | `POST /api/auth/register` (duplicate) | ✅ | Validation email unique |
| 9 | `POST /api/auth/login` (bad pass) | ✅ | Validation mot de passe |
| 10 | `GET /api/auth/me` (no token) | ✅ | Protection JWT |

**Résultat :** 10/10 tests réussis 🎉

---

## 📋 Exemples d'utilisation

### 1. Health Check

```bash
curl -k https://story.cosmail.fr/api/health
```

**Réponse :**
```json
{
  "status": "ok",
  "environment": "development",
  "debug": true
}
```

---

### 2. Inscription

```bash
curl -k -X POST https://story.cosmail.fr/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "username": "username",
    "password": "Password123",
    "password_confirm": "Password123"
  }'
```

**Réponse :**
```json
{
  "message": "Inscription réussie",
  "user": {
    "id": "uuid",
    "email": "user@example.com",
    "username": "username",
    "is_active": true,
    "is_verified": false,
    "created_at": "2026-01-02T13:52:47",
    "updated_at": "2026-01-02T13:52:47"
  },
  "access_token": "eyJhbGci...",
  "refresh_token": "eyJhbGci..."
}
```

---

### 3. Connexion

```bash
curl -k -X POST https://story.cosmail.fr/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "password": "Password123"
  }'
```

**Réponse :**
```json
{
  "message": "Connexion réussie",
  "user": { ... },
  "access_token": "eyJhbGci...",
  "refresh_token": "eyJhbGci..."
}
```

---

### 4. Récupérer l'utilisateur connecté

```bash
curl -k https://story.cosmail.fr/api/auth/me \
  -H "Authorization: Bearer <access_token>"
```

**Réponse :**
```json
{
  "user": {
    "id": "uuid",
    "email": "user@example.com",
    "username": "username",
    "is_active": true,
    "is_verified": false,
    "created_at": "2026-01-02T13:52:47",
    "updated_at": "2026-01-02T13:52:47"
  }
}
```

---

### 5. Créer une histoire (2ème personne "Tu")

```bash
curl -k -X POST https://story.cosmail.fr/api/stories \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Les Chroniques de Sylvandre",
    "genre": "fantasy",
    "epoch": "medieval",
    "reality_level": 80,
    "narrative_perspective": "second",
    "game_mode": "choices"
  }'
```

**Réponse :**
```json
{
  "message": "Histoire créée avec succès",
  "story": {
    "id": "uuid",
    "user_id": "uuid",
    "title": "Les Chroniques de Sylvandre",
    "genre": "fantasy",
    "epoch": "medieval",
    "reality_level": 80,
    "narrative_perspective": "second",
    "protagonist_name": null,
    "protagonist_gender": null,
    "game_mode": "choices",
    "status": "in_progress",
    "turn_count": 0,
    "created_at": "2026-01-02T13:53:44",
    ...
  }
}
```

---

### 6. Créer une histoire (3ème personne avec nom "Aria")

```bash
curl -k -X POST https://story.cosmail.fr/api/stories \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Les Aventures d'\''Aria",
    "genre": "science-fiction",
    "epoch": "futur proche",
    "reality_level": 60,
    "narrative_perspective": "third",
    "protagonist_name": "Aria",
    "protagonist_gender": "she",
    "game_mode": "free"
  }'
```

**Réponse :**
```json
{
  "message": "Histoire créée avec succès",
  "story": {
    "id": "uuid",
    "title": "Les Aventures d'Aria",
    "narrative_perspective": "third",
    "protagonist_name": "Aria",
    "protagonist_gender": "she",
    "game_mode": "free",
    ...
  }
}
```

---

### 7. Lister les histoires de l'utilisateur

```bash
curl -k https://story.cosmail.fr/api/stories \
  -H "Authorization: Bearer <access_token>"
```

**Réponse :**
```json
{
  "count": 2,
  "stories": [
    { "id": "uuid1", "title": "Histoire 1", ... },
    { "id": "uuid2", "title": "Histoire 2", ... }
  ]
}
```

---

## 🔒 Gestion des erreurs

### Email déjà utilisé
```json
{
  "error": "registration_error",
  "message": "Cette adresse email est déjà utilisée"
}
```

### Mauvais mot de passe
```json
{
  "error": "login_error",
  "message": "Email ou mot de passe incorrect"
}
```

### Token manquant
```json
{
  "error": "authorization_required",
  "message": "Token d'authentification manquant"
}
```

### Validation échouée
```json
{
  "error": "validation_error",
  "message": "Données invalides",
  "details": [ ... ]
}
```

---

## 🎯 Endpoints disponibles

### Authentification
- `POST /api/auth/register` - Inscription
- `POST /api/auth/login` - Connexion
- `GET /api/auth/me` - Utilisateur connecté 🔒

### Utilisateurs
- `GET /api/users/me` - Profil utilisateur 🔒
- `PATCH /api/users/me` - Modifier profil 🔒
- `GET /api/users/<id>` - Profil public utilisateur

### Histoires
- `POST /api/stories` - Créer histoire 🔒
- `GET /api/stories` - Lister mes histoires 🔒
- `GET /api/stories/<id>` - Détails d'une histoire 🔒
- `PATCH /api/stories/<id>` - Modifier histoire 🔒
- `DELETE /api/stories/<id>` - Supprimer histoire 🔒
- `POST /api/stories/<id>/publish` - Publier histoire 🔒

🔒 = Nécessite authentification JWT

---

## ✨ Fonctionnalités validées

- ✅ Inscription avec validation (email unique, password fort)
- ✅ Connexion avec JWT (access_token + refresh_token)
- ✅ Protection des routes avec JWT
- ✅ Gestion des utilisateurs
- ✅ Création d'histoires (2ème et 3ème personne)
- ✅ LoreBook automatiquement créé avec chaque histoire
- ✅ Validation Pydantic complète
- ✅ Gestion d'erreurs robuste
- ✅ Base de données MySQL avec toutes les tables
- ✅ Migrations Flask-Migrate

---

## 🚀 Prochaines étapes (Phase 2)

- Service IA (OpenAI GPT-4)
- Génération du squelette narratif
- Génération des couvertures (DALL-E 3)
- Génération des passages narratifs
- Système LoreBook automatique
- Mode choix multiples
- Mode dialogue libre
- Messages OFF (instructions techniques)

---

**API déployée avec succès sur O2Switch + Passenger** 🎉

