-
Notifications
You must be signed in to change notification settings - Fork 3.1k
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
E2E test of issue #8785: Undefined when reading getUpdated #8843
base: develop
Are you sure you want to change the base?
Conversation
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughThe pull request introduces a new Cypress end-to-end test file targeting issue #8785, which focuses on handling job metadata inconsistencies after frame deletion. The test simulates a scenario where a job might crash during saving after removing a frame. It includes functions to delete a frame, save a job, and implements a middleware to intercept and manage PATCH request responses, ensuring robust error handling and recovery mechanisms. 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 using PR comments)
Other keywords and placeholders
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: 2
🧹 Nitpick comments (5)
tests/cypress/e2e/issues_prs2/issue_8785_Cannot_read_properties_of_undefined_reading_getUpdated.js (5)
7-7
: Consider using more specific importsInstead of importing the entire
const
file, consider destructuring only the requiredtaskName
constant for better code maintainability and clarity.-import { taskName } from '../../support/const'; +import type { taskName } from '../../support/const';
9-15
: Improve test setup documentation and constantsConsider the following improvements:
- Document why frame 4 is specifically chosen for the test
- Extract the frame number into a named constant
+const TEST_FRAME_NUMBER = 4; // Document why this frame is chosen context('When saving after deleting a frame, job metadata is inconsistent.', () => { const issueId = '8785'; before(() => { cy.openTaskJob(taskName); - cy.goToNextFrame(4); + cy.goToNextFrame(TEST_FRAME_NUMBER); });
35-36
: Remove debug console.log statementsDebug logging statements should be removed from the test code.
if (calls === 0) { - console.log(calls); calls++; res.send(badResponseStub); } else { - console.log(calls); req.continue({ statusCode: 200, body: 'OK' }); }Also applies to: 39-40
52-69
: Address TODO and FIXME commentsThere are several unresolved comments that need attention:
- TODO: refactor saveJob with necessary status
- FIXME: assertions and response stubbing comments
Please either implement the suggested changes or create issues to track these improvements.
Would you like me to help create GitHub issues to track these improvements?
70-74
: Consider consolidating save job testsThe consecutive save job tests with different status codes could be combined into a more descriptive test case using
cy.then()
for better flow control.-// Send bad PATCH -cy.saveJob('PATCH', 502); - -// Send again -cy.saveJob('PATCH', 200); +cy.then(() => { + // First attempt should fail + cy.saveJob('PATCH', 502).then(() => { + // Second attempt should succeed + cy.saveJob('PATCH', 200); + }); +});
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
tests/cypress/e2e/issues_prs2/issue_8785_Cannot_read_properties_of_undefined_reading_getUpdated.js
(1 hunks)
|
||
// TODO: refactor saveJob with necessary status | ||
|
||
// Check that frame is deleted |
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.
Add missing frame deletion assertions
The comment indicates a need for frame deletion verification, but no assertions are implemented. Consider adding appropriate checks.
// Add these assertions after line 54
cy.get('.cvat-player-frame-selector').should('have.value', TEST_FRAME_NUMBER - 1);
cy.get('.cvat-player-restore-frame').should('exist');
function middleware() { | ||
let calls = 0; | ||
const badResponseStub = { statusCode: 502, body: 'Network error' }; | ||
function handle(req, res) { | ||
if (calls === 0) { | ||
console.log(calls); | ||
calls++; | ||
res.send(badResponseStub); | ||
} else { | ||
console.log(calls); | ||
req.continue({ statusCode: 200, body: 'OK' }); | ||
} | ||
} | ||
return handle; | ||
} |
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.
🛠️ Refactor suggestion
Improve middleware implementation
The middleware implementation could benefit from several improvements:
- Add error handling for edge cases
- Use typed response objects
- Add logging for debugging purposes
function middleware() {
let calls = 0;
- const badResponseStub = { statusCode: 502, body: 'Network error' };
+ const badResponseStub = {
+ statusCode: 502,
+ body: { error: 'Network error' },
+ headers: { 'content-type': 'application/json' },
+ };
function handle(req, res) {
+ try {
if (calls === 0) {
calls++;
res.send(badResponseStub);
} else {
req.continue({ statusCode: 200, body: 'OK' });
}
+ } catch (error) {
+ cy.log(`Middleware error: ${error.message}`);
+ throw error;
+ }
}
return handle;
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
function middleware() { | |
let calls = 0; | |
const badResponseStub = { statusCode: 502, body: 'Network error' }; | |
function handle(req, res) { | |
if (calls === 0) { | |
console.log(calls); | |
calls++; | |
res.send(badResponseStub); | |
} else { | |
console.log(calls); | |
req.continue({ statusCode: 200, body: 'OK' }); | |
} | |
} | |
return handle; | |
} | |
function middleware() { | |
let calls = 0; | |
const badResponseStub = { | |
statusCode: 502, | |
body: { error: 'Network error' }, | |
headers: { 'content-type': 'application/json' }, | |
}; | |
function handle(req, res) { | |
try { | |
if (calls === 0) { | |
calls++; | |
res.send(badResponseStub); | |
} else { | |
req.continue({ statusCode: 200, body: 'OK' }); | |
} | |
} catch (error) { | |
cy.log(`Middleware error: ${error.message}`); | |
throw error; | |
} | |
} | |
return handle; | |
} |
Please retry analysis of this Pull-Request directly on SonarQube Cloud |
Quality Gate passedIssues Measures |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## develop #8843 +/- ##
===========================================
+ Coverage 73.88% 73.91% +0.02%
===========================================
Files 408 408
Lines 44086 44086
Branches 3986 3986
===========================================
+ Hits 32575 32588 +13
+ Misses 11511 11498 -13
|
Adding a test to reproduce the issue fixed in GH-8785
Motivation and context
The issue dealt with inconsistent state of the user's job cache after he deletes a frame, tries to save the job, suddenly gets an unexpected network error from the server, then tries to save the job again.
How has this been tested?
Arranged state (before() hook)
Test case
Checklist
develop
branch(cvat-canvas,
cvat-core,
cvat-data and
cvat-ui)
License
Feel free to contact the maintainers if that's a concern.
Summary by CodeRabbit
New Features
Bug Fixes