feature suite

This commit is contained in:
2025-06-12 12:59:07 +02:00
parent 80d857747c
commit 0b1d59390f
3 changed files with 208 additions and 0 deletions

View File

@@ -0,0 +1,91 @@
# language: en
Feature: Gestion des livres
Backgroud:
Given Le systéme possède comme livre :
| isbn | title | author | publisher | publicationDate | price | quantity | categories | description | language |
| 999 | Bob | Boby | Nathan | 2025-06-12 | 1.5 | 0 | FICTION, THRILLER | blabla | fr |
| 9783161484100 | Le Petit Prince | Antoine de Saint-Exupery | Gallimard | 1943-04-06 | 12.5 | 100 | FICTION, CHILDRENS | un conte poetique et philosophique | fr |
Scenario: Récupérer tous les livres avec pagination
When jenvoie une requête GET vers "/api/books?page=0&size=10"
Then le code de réponse doit être 200
And la réponse doit contenir le champ "content"
Scenario: Récupérer un livre par son identifiant
Given que le livre avec lID 9783161484100 existe
When jenvoie une requête GET vers "/api/books/9783161484100"
Then le code de réponse doit être 200
And la réponse doit contenir :
| isbn | 9783161484100 |
| title | Le Petit Prince |
| author | Antoine de Saint-Exupery |
| publisher | Gallimard |
| publicationDate | 1943-04-06 |
| price | 12.5 |
| quantity | 100 |
| categories | FICTION,CHILDRENS |
| description | Un conte poetique et philosophique |
| language | fr |
Scenario: Ajouter un nouveau livre
When jenvoie une requête POST vers "/api/books" :
| isbn | 66666666666666 |
| title | Le Grand Roi |
| author | Saint de Exupery |
| publisher | Mard |
| publicationDate | 1993-06-06 |
| price | 10.5 |
| quantity | 15 |
| categories | FICTION |
| description | Un conte |
| language | fr |
Then le code de réponse doit être 201
And le systéme doit avoir 3 livres
Scenario: Ajouter un nouveau livre mais cela cause l'erreur 400 à cause d'une mauvaise entrée
When jenvoie une requête POST vers "/api/books" mais je met des informations incorrect:
| isbn | 0000000000000 |
| title | Le Petit Prince |
| author | Antoine de Saint-Exupery |
| publisher | Gallimard |
| publicationDate | 19430406 |
| price | -12.5 |
| quantity | 100 |
| categories | TeSt |
| description | Un conte poetique et philosophique |
| language | fr |
Then le code de réponse doit être 400
And la réponse doit contenir le message :
| typeException | BadRequestException |
Scenario: Ajouter un livre déjà existant
Given quun livre avec lISBN 9783161484100 existe déjà dans le système
When jenvoie une requête POST vers "/api/books" d'un livre qui existe déjà:
| isbn | 9783161484100 |
| title | Le Petit Prince |
| author | Antoine de Saint-Exupery |
| publisher | Gallimard |
| publicationDate | 1943-04-06 |
| price | 12.5 |
| quantity | 100 |
| categories | FICTION |
| description | Un conte poetique |
| language | fr |
Then le code de réponse doit être 406
And la réponse doit contenir :
| typeException | ConflictException |
Scenario: Récupérer un livre existant par son ID
Given quun livre avec lISBN 9783161484100 existe dans le système
When jenvoie une requête GET vers "/api/books/9783161484100"
Then le code de réponse doit être 200
And la réponse doit contenir :
| isbn | 9783161484100 |
| title | Le Petit Prince |
| author | Antoine de Saint-Exupery |
| publisher | Gallimard |
| publicationDate | 1943-04-06 |
| price | 12.5 |
| quantity | 100 |
| language | fr |

View File

@@ -0,0 +1,53 @@
# language: en
Feature: Gestion des commandes
Backgroud:
Given Le systéme possède comme commande :
Background:
Given Le système possède comme commande:
Scenario: Créer une commande avec succès
Given un client avec l'identifiant "12345678-9101-1121-3141-516171819201" passe commande
And un livre avec l'identifiant 100 est en stock
And les détails de la commande sont :
When j'envoie une requête POST vers "/api/orders" avec ces informations
Then le code de réponse doit être 201
And la réponse JSON doit contenir :
| customerId | 12345678-9101-1121-3141-516171819201 |
| paymentMethod | CREDIT_CARD |
Scenario: Échec de la création d'une commande avec des données invalides
Given les détails de la commande sont :
| bookId | 9783161484100 |
| quantity | -10 |
| customerId | 12345678-9101-1121-3141-516171819201 |
| paymentMethod | rue des Tests |
| street | rue des Tests |
| city | Testville |
| postalCode | 12345 |
| country | France |
When l'utilisateur envoie une requête POST vers "/api/orders"
Then le code de réponse doit être 400
And la réponse doit contenir le message :
| typeException | InvalidOrderException |
| errorMessage | Les détails de la commande sont invalides. |
Scenario: Échec de création de commande à cause d'un livre ou client introuvable
Given un identifiant client "client-inexistant"
And un identifiant livre "999999" qui n'existe pas
When j'envoie une requête POST vers "/api/orders" avec ces informations
Then le code de réponse doit être 404
And la réponse JSON doit contenir :
| errorMessage | Book or customer not found |
Scenario: Échec de commande à cause de points de fidélité ou de stock insuffisants
Given un client qui n'a pas assez de points de fidélité
And le livre commandé n'est pas disponible en quantité suffisante
When j'envoie une requête POST vers "/api/orders"
Then le code de réponse doit être 409
And la réponse JSON doit contenir :
| errorMessage | Not enough loyalty points or book quantity insufficient |

View File

@@ -0,0 +1,64 @@
# language: en
Feature: Gestion des inscriptions de l'abonnement
Background:
Given Le systéme possède comme commande:
| durationInMonths | paymentMethod | requestedStartDate | customerId |
| 12 | CREDIT_CARD | 2025-01-01 | 00000000-0000-0000-0000-000000000000 |
Scenario: Créer un abonnement avec succès
Given un client avec lID "12345678-9101-1121-3141-516171819201" s'inscrit à l'abonement
When jenvoie une requête POST vers "/api/subscriptions":
| durationInMonths | 6 |
| paymentMethod | CREDIT_CARD |
| requestedStartDate | 2025-01-01 |
| customerId | 12345678-9101-1121-3141-516171819201 |
Then le code de réponse doit être 201
And la réponse doit contenir le champ "subscriptionId"
Scenario: Échec de création à cause de données invalides
When jenvoie une requête POST vers "/api/subscriptions":
| customerId | gdftrg |
| durationInMonths | 0 |
| paymentMethod | AUTRE |
Then le code de réponse doit être 400
And la réponse doit contenir :
| errorMessage | Invalid subscription details or payment method |
Scenario: Échec de création car le client est introuvable
When jenvoie une requête POST vers "/api/subscriptions":
| durationInMonths | 6 |
| paymentMethod | CREDIT_CARD |
| requestedStartDate | 2025-07-01 |
| customerId | 00000000-0000-0000-0000-000000000022 |
Then le code de réponse doit être 404
And la réponse doit contenir :
| errorMessage | Customer not found |
Scenario: Échec de création customer "65464646" à cause de points de fidélité insuffisants
Given quun client avec lID "12345678-9101-1121-3141-516171819201" mais il n'a pas assez de points
When jenvoie une requête POST vers "/api/subscriptions":
| durationInMonths | 12 |
| paymentMethod | LOYALTY_POINTS |
| requestedStartDate | 2025-07-01 |
| customerId | 123e4567-e89b-12d3-a456-426614174000 |
Then le code de réponse doit être 409
And la réponse doit contenir :
| errorMessage | Not enough loyalty points |
Scenario: Récupérer labonnement dun client existant
Given Un client avec lID "00000000-0000-0000-0000-000000000000" possède un abonnement actif
When jenvoie une requête GET vers "/api/subscriptions/customer/123e4567-e89b-12d3-a456-426614174000"
Then le code de réponse doit être 200
And la réponse doit contenir :
| customerId | 00000000-0000-0000-0000-000000000000 |
| durationInMonths | 6 |
| startDate | 2025-01-01 |
| endDate | 2025-01-02 |
Scenario: Récupérer labonnement dun client sans abonnement
Given quun client avec lID "12345678-9101-1121-3141-516171819201" na pas dabonnement
When jenvoie une requête GET vers "/api/subscriptions/customer/12345678-9101-1121-3141-516171819201"
Then le code de réponse doit être 404
And la réponse doit contenir 65489 :
| errorMessage | Subscription not found for the customer |