From 0b1d59390f95d04f0c92aab16b5084cc1f1311e4 Mon Sep 17 00:00:00 2001 From: Naernis Date: Thu, 12 Jun 2025 12:59:07 +0200 Subject: [PATCH] feature suite --- src/test/resources/features/book.feature | 91 +++++++++++++++++++ src/test/resources/features/order.feature | 53 +++++++++++ .../resources/features/subscription.feature | 64 +++++++++++++ 3 files changed, 208 insertions(+) create mode 100644 src/test/resources/features/book.feature create mode 100644 src/test/resources/features/order.feature create mode 100644 src/test/resources/features/subscription.feature diff --git a/src/test/resources/features/book.feature b/src/test/resources/features/book.feature new file mode 100644 index 0000000..03a9b0a --- /dev/null +++ b/src/test/resources/features/book.feature @@ -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 j’envoie 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 l’ID 9783161484100 existe + When j’envoie 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 j’envoie 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 j’envoie 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 qu’un livre avec l’ISBN 9783161484100 existe déjà dans le système + When j’envoie 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 qu’un livre avec l’ISBN 9783161484100 existe dans le système + When j’envoie 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 | \ No newline at end of file diff --git a/src/test/resources/features/order.feature b/src/test/resources/features/order.feature new file mode 100644 index 0000000..d3c7a8b --- /dev/null +++ b/src/test/resources/features/order.feature @@ -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 | diff --git a/src/test/resources/features/subscription.feature b/src/test/resources/features/subscription.feature new file mode 100644 index 0000000..6102ab1 --- /dev/null +++ b/src/test/resources/features/subscription.feature @@ -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 l’ID "12345678-9101-1121-3141-516171819201" s'inscrit à l'abonement + When j’envoie 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 j’envoie 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 j’envoie 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 qu’un client avec l’ID "12345678-9101-1121-3141-516171819201" mais il n'a pas assez de points + When j’envoie 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 l’abonnement d’un client existant + Given Un client avec l’ID "00000000-0000-0000-0000-000000000000" possède un abonnement actif + When j’envoie 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 l’abonnement d’un client sans abonnement + Given qu’un client avec l’ID "12345678-9101-1121-3141-516171819201" n’a pas d’abonnement + When j’envoie 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 | \ No newline at end of file