mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 10:06:32 +08:00 
			
		
		
		
	docs(cypress): Update Cypress README Documentation (#4380)
Co-authored-by: PiX@work <69745008+pixincreate@users.noreply.github.com>
This commit is contained in:
		| @ -1,29 +1,37 @@ | |||||||
| # Cypress Tests | # Cypress Tests | ||||||
|  |  | ||||||
| ## Overview | ## Overview | ||||||
|  |  | ||||||
| This Tool is a solution designed to automate testing for the [Hyperswitch](https://github.com/juspay/hyperswitch/) using Cypress, an open-source tool capable of conducting API call tests and UI tests. This README provides guidance on installing Cypress and its dependencies. | This Tool is a solution designed to automate testing for the [Hyperswitch](https://github.com/juspay/hyperswitch/) using Cypress, an open-source tool capable of conducting API call tests and UI tests. This README provides guidance on installing Cypress and its dependencies. | ||||||
|  |  | ||||||
| ## Installation | ## Installation | ||||||
|  |  | ||||||
| ### Prerequisites | ### Prerequisites | ||||||
|  |  | ||||||
| Before installing Cypress, ensure you have the following prerequisites installed: | Before installing Cypress, ensure you have the following prerequisites installed: | ||||||
|  |  | ||||||
| - npm (Node Package Manager) | - npm (Node Package Manager) | ||||||
| - Node.js (18.x and above) | - Node.js (18.x and above) | ||||||
|  |  | ||||||
| ### Run Test Cases on your local | ### Run Test Cases on your local | ||||||
|  |  | ||||||
| To run test cases, follow these steps: | To run test cases, follow these steps: | ||||||
|  |  | ||||||
| 1. Install Cypress | 1. Install Cypress | ||||||
|  |  | ||||||
|    ```shell |    ```shell | ||||||
|    npm install cypress --save-dev |    npm install cypress --save-dev | ||||||
|    ``` |    ``` | ||||||
| 3. Clone the repository and switch to the project directory: |  | ||||||
|  | 2. Clone the repository and switch to the project directory: | ||||||
|  |  | ||||||
|    ```shell |    ```shell | ||||||
|    git clone https://github.com/juspay/hyperswitch |    git clone https://github.com/juspay/hyperswitch | ||||||
|    cd cypress-tests |    cd cypress-tests | ||||||
|    ``` |    ``` | ||||||
| 4. Set environment variables for cypress |  | ||||||
|  | 3. Set environment variables for cypress | ||||||
|  |  | ||||||
|    ```shell |    ```shell | ||||||
|    export CYPRESS_CONNECTOR="connector_id" |    export CYPRESS_CONNECTOR="connector_id" | ||||||
|    export CYPRESS_BASEURL="base_url" |    export CYPRESS_BASEURL="base_url" | ||||||
| @ -31,15 +39,158 @@ To run test cases, follow these steps: | |||||||
|    export CYPRESS_ADMINAPIKEY="admin_api_key" |    export CYPRESS_ADMINAPIKEY="admin_api_key" | ||||||
|    ``` |    ``` | ||||||
|  |  | ||||||
| 5. Run Cypress test cases | 4. Run Cypress test cases | ||||||
|     To run the tests in a browser in interactive mode run the following command |  | ||||||
|  |    To execute a connector create test, ensure the connector details are included in the `creds.json` file. Then, integrate the path in the `command.js` as follows: | ||||||
|  |  | ||||||
|  |    ```javascript | ||||||
|  |    import ConnectorAuthDetails from "../../creds.json"; | ||||||
|    ``` |    ``` | ||||||
|  |  | ||||||
|  |    To run the tests in a browser in interactive mode run the following command | ||||||
|  |  | ||||||
|  |    ```shell | ||||||
|    npm run cypress |    npm run cypress | ||||||
|    ``` |    ``` | ||||||
|  |  | ||||||
|    To run the tests in headless mode run the following command |    To run the tests in headless mode run the following command | ||||||
|     ``` |  | ||||||
|  |    ```shell | ||||||
|    npm run cypress:ci |    npm run cypress:ci | ||||||
|    ``` |    ``` | ||||||
|  |  | ||||||
|  | ## Folder Structure | ||||||
|  |  | ||||||
|  | The folder structure of this directory is as follows: | ||||||
|  |  | ||||||
|  | ```text | ||||||
|  | .                                                        # The root directory for the Cypress tests. | ||||||
|  | ├── .gitignore | ||||||
|  | ├── cypress                                              # Contains Cypress-related files and folders. | ||||||
|  | │   ├── e2e                                              # End-to-end test directory. | ||||||
|  | │   │   ├── ConnectorTest                                # Directory for test scenarios related to connectors. | ||||||
|  | │   │   │   ├── your_testcase1_files_here.cy.js | ||||||
|  | │   │   │   ├── your_testcase2_files_here.cy.js | ||||||
|  | │   │   │   └── ... | ||||||
|  | │   │   └── ConnectorUtils                               # Directory for utility functions related to connectors. | ||||||
|  | │   │       ├── connector_detail_files_here.js | ||||||
|  | │   │       └── utils.js | ||||||
|  | │   ├── fixtures                                         # Directory for storing test data API request. | ||||||
|  | │   │   └── your_fixture_files_here.json | ||||||
|  | │   ├── support                                          # Directory for Cypress support files. | ||||||
|  | │   │   ├── commands.js                                  # File containing custom Cypress commands and utilities. | ||||||
|  | │   │   └── e2e.js | ||||||
|  | │   └── utils | ||||||
|  | │       └── utility_files_go_here.js | ||||||
|  | ├── cypress.config.js                                    # Cypress configuration file. | ||||||
|  | ├── cypress.env.json                                     # File is used to store environment-specific configuration values,such as base URLs, which can be accessed within your Cypress tests. | ||||||
|  | ├── package.json                                         # Node.js package file. | ||||||
|  | ├── readme.md                                            # This file | ||||||
|  | └── yarn.lock | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## Writing Tests | ||||||
|  |  | ||||||
|  | ### Adding Connectors | ||||||
|  |  | ||||||
|  | To add a new connector for testing with Hyperswitch, follow these steps: | ||||||
|  |  | ||||||
|  | 1.Include the connector details in the `creds.json` file: | ||||||
|  |  | ||||||
|  | example: | ||||||
|  |  | ||||||
|  | ```json | ||||||
|  | { | ||||||
|  |   "stripe": { | ||||||
|  |     "auth_type": "HeaderKey", | ||||||
|  |     "api_key": "SK_134" | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | 2.Add the new connector details to the ConnectorUtils folder (including CardNo and connector-specific information). | ||||||
|  |  | ||||||
|  | Refer to Stripe.js file for guidance: | ||||||
|  |  | ||||||
|  | ```javascript | ||||||
|  | /cypress-tests/cypress/e2e/ConnectorUtils/Stripe.js | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Similarly, create a new file named newconnectorname.js and include all the relevant information for that connector. | ||||||
|  |  | ||||||
|  | 3.In util.js, import the new connector details. | ||||||
|  |  | ||||||
|  | ### Adding Functions | ||||||
|  |  | ||||||
|  | Similarly, add any helper functions or utilities in the `command.js` in support folder and import them into your tests as needed. | ||||||
|  |  | ||||||
|  | Example: Adding List Mandate function to support `ListMandate` scenario | ||||||
|  |  | ||||||
|  | ```javascript | ||||||
|  | Cypress.Commands.add("listMandateCallTest", (globalState) => { | ||||||
|  |   const customerId = globalState.get("customerId"); | ||||||
|  |   cy.request({ | ||||||
|  |     method: "GET", | ||||||
|  |     url: `${globalState.get("baseUrl")}/customers/${customerId}/mandates`, | ||||||
|  |     headers: { | ||||||
|  |       "Content-Type": "application/json", | ||||||
|  |       "api-key": globalState.get("apiKey"), | ||||||
|  |     }, | ||||||
|  |   }).then((response) => { | ||||||
|  |     const xRequestId = response.headers["x-request-id"]; | ||||||
|  |     if (xRequestId) { | ||||||
|  |       cy.task("cli_log", "x-request-id ->> " + xRequestId); | ||||||
|  |     } else { | ||||||
|  |       cy.task( | ||||||
|  |         "cli_log", | ||||||
|  |         "x-request-id is not available in the response headers" | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  |     expect(response.headers["content-type"]).to.include("application/json"); | ||||||
|  |     console.log(response.body); | ||||||
|  |     let i = 0; | ||||||
|  |     for (i in response.body) { | ||||||
|  |       if (response.body[i].mandate_id === globalState.get("mandateId")) { | ||||||
|  |         expect(response.body[i].status).to.equal("active"); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | }); | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Adding Scenarios | ||||||
|  |  | ||||||
|  | To add new test scenarios: | ||||||
|  |  | ||||||
|  | 1. Navigate to the ConnectorTest directory. | ||||||
|  | 2. Create a new test file or modify existing ones to add your scenarios. | ||||||
|  | 3. Write your test scenarios using Cypress commands. | ||||||
|  |  | ||||||
|  | For example, to add a scenario for listing mandates in the `Mandateflows`: | ||||||
|  |  | ||||||
|  | ```javascript | ||||||
|  |  | ||||||
|  | // cypress/ConnectorTest/CreateSingleuseMandate.js | ||||||
|  |  | ||||||
|  | describe("Payment Scenarios", () => { | ||||||
|  |   it("should complete a successful payment", () => { | ||||||
|  |     // Your test logic here | ||||||
|  |   }); | ||||||
|  | }); | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | In this scenario, you can call functions defined in `command.js`. For instance, to test the `listMandateCallTest` function: | ||||||
|  |  | ||||||
|  | ```javascript | ||||||
|  | describe("Payment Scenarios", () => { | ||||||
|  |   it("list-mandate-call-test", () => { | ||||||
|  |     cy.listMandateCallTest(globalState); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | You can create similar scenarios by calling other functions defined in `command.js`. These functions interact with utility files like `connector.js` and include necessary assertions to support various connector scenarios. | ||||||
|  |  | ||||||
| ## Additional Resources | ## Additional Resources | ||||||
|  |  | ||||||
| For more information on using Cypress and writing effective tests, refer to the official Cypress documentation: [Cypress Documentation](https://docs.cypress.io/) | For more information on using Cypress and writing effective tests, refer to the official Cypress documentation: [Cypress Documentation](https://docs.cypress.io/) | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Gnanasundari24
					Gnanasundari24