forked from pierront/mylibrary-template
		
	feature suite
This commit is contained in:
		
							
								
								
									
										91
									
								
								src/test/resources/features/book.feature
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								src/test/resources/features/book.feature
									
									
									
									
									
										Normal 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 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                         |
 | 
			
		||||
							
								
								
									
										53
									
								
								src/test/resources/features/order.feature
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/test/resources/features/order.feature
									
									
									
									
									
										Normal 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 |
 | 
			
		||||
							
								
								
									
										64
									
								
								src/test/resources/features/subscription.feature
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								src/test/resources/features/subscription.feature
									
									
									
									
									
										Normal 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 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 |
 | 
			
		||||
		Reference in New Issue
	
	Block a user