-
Notifications
You must be signed in to change notification settings - Fork 200
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
Add shipping status api tests (test automation) #2337
Conversation
WalkthroughThe 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
Poem
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? TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Additionally, you can add CodeRabbit Configuration File (
|
There was a problem hiding this 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 forresponseBody
andpayload
.The
responseBody
type is currently defined asany
, which lacks type safety. Consider defining a specific type that represents the expected structure of the response body. Similarly, thepayload
parameter is defined as anobject
, 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 asPromise<[responseBody, string, string]>
. Ensure thatresponseBody
andshipmentId
are correctly typed and that thepayload
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 2Length of output: 4458
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
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 ofshipmentSchema
, 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 10Length of output: 45
Script:
#!/bin/bash # Search for the definition of shipmentsSchema in the entire codebase. rg 'shipmentsSchema' --context 10Length of output: 2904
Script:
#!/bin/bash # Search for the definition of shipmentSchema to verify its completeness. rg 'shipmentSchema' --context 10Length 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 intests/pw/utils/schemas.ts
appears to be comprehensive and accurately reflects the expected structure of a shipment response. It includes necessary fields and uses thezod
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 10Length 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 10Length 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
andPRODUCT_ID
in the destructuring fromprocess.env
enhances configurability and aligns with best practices for managing configurations.
1218-1218
: Dynamic configuration forcustomer_id
.Using
CUSTOMER_ID
with a fallback to0
allows for flexible testing configurations.
1245-1245
: Dynamic configuration forproduct_id
.Using
PRODUCT_ID
with a fallback to an empty string allows for flexible testing configurations.
4014-4027
: NewcreateShipment
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
: NewupdateShipment
payload added.This addition enhances shipment management capabilities. Ensure that the shipment status options are correctly implemented and tested.
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 } }); | ||
}); |
There was a problem hiding this comment.
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
}
});
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); | ||
}); |
There was a problem hiding this comment.
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
}
});
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); | ||
}); |
There was a problem hiding this comment.
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();
});
* 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]>
* 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]>
All Submissions:
Changes proposed in this Pull Request:
Related Pull Request(s)
Closes
How to test the changes in this Pull Request:
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:
FOR PR REVIEWER ONLY:
Summary by CodeRabbit
New Features
Bug Fixes
Documentation