Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add shipping status api tests (test automation) #2337

Merged
merged 4 commits into from
Aug 16, 2024

Conversation

shashwatahalder01
Copy link
Contributor

@shashwatahalder01 shashwatahalder01 commented Aug 16, 2024

All Submissions:

  • My code follow the WordPress' coding standards
  • My code satisfies feature requirements
  • My code is tested
  • My code passes the PHPCS tests
  • My code has proper inline documentation
  • I've included related pull request(s) (optional)
  • I've included developer documentation (optional)
  • I've added proper labels to this pull request

Changes proposed in this Pull Request:

Related Pull Request(s)

  • Full PR Link

Closes

  • Closes #

How to test the changes in this Pull Request:

  • Steps or issue link

Changelog entry

Title

Detailed Description of the pull request. What was previous behaviour
and what will be changed in this PR.

Before Changes

Describe the issue before changes with screenshots(s).

After Changes

Describe the issue after changes with screenshot(s).

Feature Video (optional)

Link of detailed video if this PR is for a feature.

PR Self Review Checklist:

  • Code is not following code style guidelines
  • Bad naming: make sure you would understand your code if you read it a few months from now.
  • KISS: Keep it simple, Sweetie (not stupid!).
  • DRY: Don't Repeat Yourself.
  • Code that is not readable: too many nested 'if's are a bad sign.
  • Performance issues
  • Complicated constructions that need refactoring or comments: code should almost always be self-explanatory.
  • Grammar errors.

FOR PR REVIEWER ONLY:

As a reviewer, your feedback should be focused on the idea, not the person. Seek to understand, be respectful, and focus on constructive dialog.

As a contributor, your responsibility is to learn from suggestions and iterate your pull request should it be needed based on feedback. Seek to collaborate and produce the best possible contribution to the greater whole.

  • Correct — Does the change do what it’s supposed to? ie: code 100% fulfilling the requirements?
  • Secure — Would a nefarious party find some way to exploit this change? ie: everything is sanitized/escaped appropriately for any SQL or XSS injection possibilities?
  • Readable — Will your future self be able to understand this change months down the road?
  • Elegant — Does the change fit aesthetically within the overall style and architecture?

Summary by CodeRabbit

  • New Features

    • Introduced a comprehensive suite of automated tests for shipping status API endpoints.
    • Added new API endpoints for managing shipping status, including functionalities for retrieving and creating shipments.
    • Enhanced payload configurability with new environment variables for customer and product IDs.
    • Implemented validation schemas for shipment and shipping status data structures.
  • Bug Fixes

    • Improved response validation checks for API interactions related to shipments.
  • Documentation

    • Updated documentation to reflect new API endpoints and payload structures.

@shashwatahalder01 shashwatahalder01 added the In Progress The issues is being worked on label Aug 16, 2024
@shashwatahalder01 shashwatahalder01 self-assigned this Aug 16, 2024
Copy link
Contributor

coderabbitai bot commented Aug 16, 2024

Walkthrough

The recent changes introduce a robust testing framework for the shipping status API, enhancing endpoint functionality and data management. New tests validate API responses and data integrity, while additional endpoints and utility methods streamline shipment operations. Payload configuration has been improved with environment variables, and schemas for validation ensure data consistency. Overall, these updates significantly bolster the API's capabilities and testing rigor.

Changes

Files Change Summary
tests/pw/tests/api/shippingStatus.spec.ts Added automated tests for shipping status API endpoints using Playwright, covering key functionalities like shipment retrieval and updates.
tests/pw/utils/apiEndPoints.ts Introduced new shipping-related endpoints for managing shipments, enhancing API functionality.
tests/pw/utils/apiUtils.ts Added createShipment method to ApiUtils for facilitating shipment creation through API calls.
tests/pw/utils/payloads.ts Expanded payload configuration with environment variables; introduced new properties for shipment creation and updates.
tests/pw/utils/schemas.ts Created shipmentSchema and shippingStatusSchema for validating shipment data structures and statuses using Zod.

Poem

In fields of code where bunnies play,
New tests hop in to save the day.
With endpoints fresh and schemas bright,
Our shipping paths are now just right.
So let’s rejoice, with a happy cheer,
For every change brings us good near! 🐇✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Outside diff range, codebase verification and nitpick comments (1)
tests/pw/utils/apiUtils.ts (1)

1448-1452: Consider using more specific types for responseBody and payload.

The responseBody type is currently defined as any, which lacks type safety. Consider defining a specific type that represents the expected structure of the response body. Similarly, the payload parameter is defined as an object, but it seems to have specific properties related to shipment creation. Defining a specific type for the payload can enhance clarity and type safety.

  • responseBody: Define a specific type for the expected structure of the response body.
  • payload: Define a specific type for the payload with expected properties for shipment creation.
Analysis chain

Verify the return type and parameter types.

The createShipment method's return type is specified as Promise<[responseBody, string, string]>. Ensure that responseBody and shipmentId are correctly typed and that the payload parameter is accurately defined as an object. Consider using more specific types if available.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the types used in the `createShipment` method.

# Test: Check for the definition of `responseBody` and `shipmentId` types.
rg --type ts 'type responseBody|shipmentId' -A 2

# Test: Check for the usage of `createShipment` to ensure parameter types are consistent.
rg --type ts 'createShipment' -A 2

Length of output: 4458

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 2a015fc and e38ab42.

Files selected for processing (5)
  • tests/pw/tests/api/shippingStatus.spec.ts (1 hunks)
  • tests/pw/utils/apiEndPoints.ts (1 hunks)
  • tests/pw/utils/apiUtils.ts (1 hunks)
  • tests/pw/utils/payloads.ts (4 hunks)
  • tests/pw/utils/schemas.ts (2 hunks)
Additional comments not posted (12)
tests/pw/tests/api/shippingStatus.spec.ts (4)

29-34: Validate response schemas thoroughly.

The test for getting shipping status checks the response against a schema. Ensure that the schema validation is comprehensive and includes all necessary fields.


36-41: Check schema validation for shipments.

The test for getting shipments validates the response against a schema. Ensure that the schema includes all expected fields and constraints.

Verification successful

Schema Validation for Shipments is Comprehensive and Correct

The shipmentsSchema is well-defined as an array of shipmentSchema, which includes all necessary fields and constraints for shipment data. The schema covers IDs, provider details, status, and descriptions, ensuring comprehensive validation. No further action is needed.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the completeness of the shipmentsSchema.

# Test: Check the schema definition for required fields and completeness.
rg --type json 'shipmentsSchema' --context 10

Length of output: 45


Script:

#!/bin/bash
# Search for the definition of shipmentsSchema in the entire codebase.
rg 'shipmentsSchema' --context 10

Length of output: 2904


Script:

#!/bin/bash
# Search for the definition of shipmentSchema to verify its completeness.
rg 'shipmentSchema' --context 10

Length of output: 4598


53-58: Verify single shipment retrieval schema.

The test for getting a single shipment checks the response against a schema. Ensure that the schema is comprehensive and accurately reflects the expected response structure.

Verification successful

Schema for Single Shipment Retrieval is Comprehensive

The shipmentSchema defined in tests/pw/utils/schemas.ts appears to be comprehensive and accurately reflects the expected structure of a shipment response. It includes necessary fields and uses the zod library for validation, ensuring type safety and completeness. No further action is required.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the completeness of the shipmentSchema for single shipment retrieval.

# Test: Check the schema definition for required fields and completeness.
rg --type json 'shipmentSchema' --context 10

Length of output: 44


Script:

#!/bin/bash
# Description: Search for shipmentSchema definition in TypeScript and JavaScript files.

# Search for shipmentSchema in TypeScript and JavaScript files to locate its definition.
rg 'shipmentSchema' --type ts --type js --context 10

Length of output: 4618


25-27: Ensure proper resource cleanup in teardown.

The afterAll teardown method disposes of the API context. Ensure that any resources created during tests are also cleaned up to prevent resource leaks.

tests/pw/utils/apiEndPoints.ts (1)

368-373: Endpoints look correct and consistent.

The newly added endpoints for shipping status and shipments are correctly defined and consistent with the existing API structure.

tests/pw/utils/schemas.ts (2)

2858-2873: LGTM!

The shippingStatusSchema is well-defined and captures the necessary fields for shipping status validation.


1314-1355: Verify data type alignment with actual usage.

The shipmentSchema is comprehensive, but ensure that the expected data types align with the actual data being validated in the application.

tests/pw/utils/payloads.ts (5)

7-7: Good use of environment variables.

Including CUSTOMER_ID and PRODUCT_ID in the destructuring from process.env enhances configurability and aligns with best practices for managing configurations.


1218-1218: Dynamic configuration for customer_id.

Using CUSTOMER_ID with a fallback to 0 allows for flexible testing configurations.


1245-1245: Dynamic configuration for product_id.

Using PRODUCT_ID with a fallback to an empty string allows for flexible testing configurations.


4014-4027: New createShipment payload added.

This addition supports new shipment creation functionality. Ensure that the item IDs (lineitemid) are correctly replaced with actual values during tests.


4029-4034: New updateShipment payload added.

This addition enhances shipment management capabilities. Ensure that the shipment status options are correctly implemented and tested.

Comment on lines +18 to +23
test.beforeAll(async () => {
apiUtils = new ApiUtils(await request.newContext());
const [, responseBody, oId] = await apiUtils.createOrder(payloads.createProduct(), payloads.createOrder);
const lineItemId = responseBody.line_items[0].id;
[, orderId, shipmentId] = await apiUtils.createShipment(oId, { ...payloads.createShipment, item_id: [lineItemId], item_qty: { [lineItemId]: 1 } });
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ensure proper error handling in setup.

The beforeAll setup method creates an order and a shipment. Consider adding error handling to ensure that failures in setup do not cause misleading test results.

test.beforeAll(async () => {
    try {
        apiUtils = new ApiUtils(await request.newContext());
        const [, responseBody, oId] = await apiUtils.createOrder(payloads.createProduct(), payloads.createOrder);
        const lineItemId = responseBody.line_items[0].id;
        [, orderId, shipmentId] = await apiUtils.createShipment(oId, { ...payloads.createShipment, item_id: [lineItemId], item_qty: { [lineItemId]: 1 } });
    } catch (error) {
        console.error('Setup failed:', error);
        throw error; // Re-throw to ensure test suite does not proceed
    }
});

Comment on lines +43 to +51
test('create shipment', { tag: ['@pro'] }, async () => {
const [, orderResponseBody, orderId] = await apiUtils.createOrder(payloads.createProduct(), payloads.createOrder);
const lineItemId = orderResponseBody.line_items[0].id;

const [response, responseBody] = await apiUtils.post(endPoints.createShipment(orderId), { data: { ...payloads.createShipment, item_id: [lineItemId], item_qty: { [lineItemId]: 1 } } });
expect(response.ok()).toBeTruthy();
expect(responseBody).toBeTruthy();
expect(responseBody).toMatchSchema(schemas.shippingStatusSchema.shipmentSchema);
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider adding error handling for shipment creation.

In the test for creating a shipment, consider adding error handling to capture any issues during the API call and provide meaningful feedback.

test('create shipment', { tag: ['@pro'] }, async () => {
    try {
        const [, orderResponseBody, orderId] = await apiUtils.createOrder(payloads.createProduct(), payloads.createOrder);
        const lineItemId = orderResponseBody.line_items[0].id;

        const [response, responseBody] = await apiUtils.post(endPoints.createShipment(orderId), { data: { ...payloads.createShipment, item_id: [lineItemId], item_qty: { [lineItemId]: 1 } } });
        expect(response.ok()).toBeTruthy();
        expect(responseBody).toBeTruthy();
        expect(responseBody).toMatchSchema(schemas.shippingStatusSchema.shipmentSchema);
    } catch (error) {
        console.error('Error creating shipment:', error);
        throw error; // Re-throw to ensure test fails
    }
});

Comment on lines +60 to +65
test('update shipment', { tag: ['@pro'] }, async () => {
const [response, responseBody] = await apiUtils.put(endPoints.updateShipment(orderId, shipmentId), { data: payloads.updateShipment });
expect(response.ok()).toBeTruthy();
expect(responseBody).toBeTruthy();
expect(responseBody).toMatchSchema(schemas.shippingStatusSchema.shipmentSchema);
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ensure update shipment test covers edge cases.

The test for updating a shipment checks the response against a schema. Consider testing edge cases, such as updating with invalid data, to ensure robustness.

test('update shipment', { tag: ['@pro'] }, async () => {
    const [response, responseBody] = await apiUtils.put(endPoints.updateShipment(orderId, shipmentId), { data: payloads.updateShipment });
    expect(response.ok()).toBeTruthy();
    expect(responseBody).toBeTruthy();
    expect(responseBody).toMatchSchema(schemas.shippingStatusSchema.shipmentSchema);

    // Additional edge case tests
    const [invalidResponse] = await apiUtils.put(endPoints.updateShipment(orderId, shipmentId), { data: { invalidField: 'invalid' } });
    expect(invalidResponse.ok()).toBeFalsy();
});

@shashwatahalder01 shashwatahalder01 changed the title Add Shipping status API tests Add shipping status api tests (test automation) Aug 16, 2024
@shashwatahalder01 shashwatahalder01 added QA approved This PR is approved by the QA team and removed In Progress The issues is being worked on labels Aug 16, 2024
@shashwatahalder01 shashwatahalder01 merged commit 76c9cb1 into getdokan:develop Aug 16, 2024
1 of 2 checks passed
shashwatahalder01 added a commit to shashwatahalder01/dokan that referenced this pull request Aug 17, 2024
* Update feature map

* Add tax, shipping, payment tests and refactor some methods, locators

* Fix order again test

* Add updateDokanSettings method and helper methods

* Add product catalog mode tests and dbuitls methos

* Add reverse withdrawal tests

* Update package and fix locator issue

* Fix a locator and lint issue

* Refactor taxpage and skipped failed test

* Refactor admin test

* Revert a locator change

* Add Fixtures

* Resove pr reviews

* Fix wholesale customer tests

* Fix lint issue and a locator

* Fix prettier issue

* Fix booking tests

* Refactor some method names

* Add tslib package

* Refactor apiutils methods

* Refactor shortcode method tests

* Update some methos, locators & data

* Update lint issues

* Add a  test

* Refactor several methods

* Refactor setup tests

* Fix DB query issue

* Fix serializeData issue

* Update plugin name

* Fix auth issue

* Fix serialize issue

* Update dbutils methos for query contains single quotes and  HTML entities

* Fix auth issue

* Fix hover issue & update query parameter

* Add local site setup tests & update some metods

* Add remove previously cloned repo

* Refactor TDD to replace setUp and tearDown methods with set_up and tear_down. (getdokan#2335)

* Update tdd  docs

* refactor: setUp and tearDown methods

* Update docblocks

* Resolve some todos and add a test

* Sync e2e and api project

* Fix fail tests

* Fix rfq afterall issue

* Remove unused code

* Update suite config, dbdata

* Add grep& grep invert forboth test suite

* Update package & script commands

* Add a php value to htaccess

* Disable showing PHP error

* Add subscription product methods in dbUtils & update config

* Remove .only

* Add Shipping status API tests (getdokan#2337)

* add shipping status tests

* Update shipping status tests

* Update shipping status payload

* Update project config

* Fix a fail test

* Update test tag

* Update yml

* Remove .only

* Fix couple of flaky tests

* Fix lint issues

* Fix type issues

---------

Co-authored-by: Mahbub Rabbani <[email protected]>
shashwatahalder01 added a commit to shashwatahalder01/dokan that referenced this pull request Aug 21, 2024
* Refactor TDD to replace setUp and tearDown methods with set_up and tear_down. (getdokan#2335)

* Update tdd  docs

* refactor: setUp and tearDown methods

* Update docblocks

* Add Shipping status API tests (getdokan#2337)

* add shipping status tests

* Update shipping status tests

* Update shipping status payload

* Add tests (tax, shipping, payment, catalog mode, reverse withdrawal , wholesale customer) (test automation) (getdokan#2338)

* Update feature map

* Add tax, shipping, payment tests and refactor some methods, locators

* Fix order again test

* Add updateDokanSettings method and helper methods

* Add product catalog mode tests and dbuitls methos

* Add reverse withdrawal tests

* Update package and fix locator issue

* Fix a locator and lint issue

* Refactor taxpage and skipped failed test

* Refactor admin test

* Revert a locator change

* Add Fixtures

* Resove pr reviews

* Fix wholesale customer tests

* Fix lint issue and a locator

* Fix prettier issue

* Fix booking tests

* Refactor some method names

* Add tslib package

* Refactor apiutils methods

* Refactor shortcode method tests

* Update some methos, locators & data

* Update lint issues

* Add a  test

* Refactor several methods

* Refactor setup tests

* Fix DB query issue

* Fix serializeData issue

* Update plugin name

* Fix auth issue

* Fix serialize issue

* Update dbutils methos for query contains single quotes and  HTML entities

* Fix auth issue

* Fix hover issue & update query parameter

* Add local site setup tests & update some metods

* Add remove previously cloned repo

* Resolve some todos and add a test

* Sync e2e and api project

* Fix fail tests

* Fix rfq afterall issue

* Remove unused code

* Update suite config, dbdata

* Add grep& grep invert forboth test suite

* Update package & script commands

* Add a php value to htaccess

* Disable showing PHP error

* Add subscription product methods in dbUtils & update config

* Remove .only

* Update project config

* Fix a fail test

* Update test tag

* Update yml

* Remove .only

* Fix couple of flaky tests

* Fix lint issues

* Fix type issues

* Add lint rule and fix lint issues

* Update playwright methods

* Add base page methods

* Add pre define db_port and remove grab port command

* Fix failed eu compliance test

* Fix duplicate stdout issue

* Update some sellerbadge tests and add helper methods

* Add couple of todos

* Add predefined mysqlport

* Add locatorhandler method

* Update shipping status test & schema

* Update site setup, seperate basic setp from dokan specific

* Fix db-port reference in yml

* Update product advertising test

* Update add nanoid to productnameand reset colorscheme

* Fix couple of flaky tests

* Update composer.lock file

* Fix flaky product QA tests and update e2e config

* Add couple of withdraw tests

* Fix assertion issue

* Remove test.only

* Update feature map

* Fix coverage issue

* Update workflow, fix some flaky & failed (pro) tests, add new tests (automation suite) (getdokan#2345)

* Add lint rule and fix lint issues

* Update playwright methods

* Add base page methods

* Add pre define db_port and remove grab port command

* Fix failed eu compliance test

* Fix duplicate stdout issue

* Update some sellerbadge tests and add helper methods

* Add couple of todos

* Add predefined mysqlport

* Add locatorhandler method

* Update shipping status test & schema

* Update site setup, seperate basic setp from dokan specific

* Fix db-port reference in yml

* Update product advertising test

* Update add nanoid to productnameand reset colorscheme

* Fix couple of flaky tests

* Fix flaky product QA tests and update e2e config

* Add couple of withdraw tests

* Fix assertion issue

* Remove test.only

* Update feature map

* Fix coverage issue

---------

Co-authored-by: Mahbub Rabbani <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
QA approved This PR is approved by the QA team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant