-
Notifications
You must be signed in to change notification settings - Fork 3.7k
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
chore: Run unit test with separate data. DO NOT MERGE #36593
chore: Run unit test with separate data. DO NOT MERGE #36593
Conversation
…o fix/incorrect-selected-date-in-table-date-cell
… for EPOCK and MILLISECONDS format
… for EPOCK and MILLISECONDS format
WalkthroughThis pull request introduces a set of Cypress tests for validating date column types in a table widget, alongside utility functions and constants for handling various date formats. It also enhances the table widget's functionality by adding methods for date formatting and transforming data based on specified metadata. Several new files are created for testing and data fixtures, while existing files are modified to improve date handling and validation. Changes
Possibly related PRs
Suggested labels
Suggested reviewers
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
Documentation and Community
|
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: 8
🧹 Outside diff range and nitpick comments (10)
app/client/cypress/fixtures/tableDateColumnTypes.ts (2)
4-23
: Excellent work on maintaining consistency across date formats!I'm impressed with how you've represented the same date and time (September 25, 2024, at 14:30) in so many different formats. It's like teaching the same concept in multiple ways to ensure everyone understands. However, let's make sure we're consistent with our quotation marks, shall we?
Consider using double quotes consistently for all keys. For example, change:
- iso8601: "2024-09-25T14:30:00.000Z", + "iso8601": "2024-09-25T14:30:00.000Z", - lll: "September 25, 2024 2:30 PM", + "lll": "September 25, 2024 2:30 PM", - ll: "September 25, 2024", + "ll": "September 25, 2024",This will make our code as neat as a freshly cleaned chalkboard!
1-2
: Let's add some instructions for our students!Just as we provide instructions for our classroom exercises, it would be helpful to add a comment explaining how to use this fixture in Cypress tests. This will ensure that all our "students" (developers) know how to make the most of this valuable resource.
Consider adding a comment at the top of the file, like this:
/** * This fixture provides various date formats for use in Cypress tests. * Usage example: * cy.fixture('tableDateColumnTypes').then((dateFormats) => { * // Use dateFormats in your tests * }); */ export const tableDateColumnTypes = `This way, everyone will know exactly how to use this excellent teaching aid!
app/client/src/widgets/TableWidgetV2/widget/reactTableUtils/TransformDataPureFn.test.ts (3)
13-26
: Excellent work on your first test case, students!Your test case does a fine job of checking the basic functionality of
transformDataPureFn
. However, let's make it even better!Consider adding a test for all elements in the
tableData
array instead of just the first two. This way, we ensure complete coverage:it("should transform table data based on column meta properties", () => { const result = transformDataPureFn( tableData, columns as ReactTableColumnProps[], ); expect(result).toEqual(expectedData); });This approach tests all data in one go, making our test more comprehensive. What do you think?
28-55
: A gold star for thinking about edge cases!Your test for handling invalid date values is crucial. It shows great foresight in considering how your function might behave with unexpected inputs.
To make this test even more robust, consider adding a few more scenarios:
- Mix of valid and invalid dates in the same object.
- Empty string as a date value.
null
orundefined
as a date value.This will give us a more comprehensive coverage of potential real-world scenarios. Remember, in testing, we always want to expect the unexpected!
63-71
: Excellent work on your final test case!Your test ensures that non-date data remains untransformed, which is a critical aspect of the function's behavior. Well done!
To make this test even more informative, consider adding a comment explaining why this behavior is important. For example:
it("should not transform non-date data", () => { // This test ensures that the function only transforms date fields // and leaves other data types untouched, maintaining data integrity const result = transformDataPureFn( tableDataNonDate, columnsNonDate as ReactTableColumnProps[], ); expect(result).toEqual(expectedDataNonDate); });Remember, good comments help future developers (including yourself!) understand the purpose and importance of each test.
app/client/src/widgets/TableWidgetV2/widget/reactTableUtils/fixtures.ts (2)
68-72
: Let's double-check our comments, shall we?There's a small inconsistency in the comments for the first entry in
expectedData
. The comment for the "lll" field says "LLL format to date", but the actual transformation is from "September 25, 2024 12:00 AM" to "2024-09-25". This is correct, but it might be worth noting that it's handling the midnight case correctly.Consider updating the comment to something like:
lll: "2024-09-25", // LLL format to date (correctly handling midnight case)
118-131
: Let's clarify the purpose of__originalIndex__
, class.I notice that
tableDataNonDate
includes an__originalIndex__
field, which is not present inexpectedDataNonDate
. It would be helpful to add a comment explaining the purpose of this field and why it's removed in the expected data.Consider adding a comment like this:
// Mock table data for non-date transformation // The __originalIndex__ field is used internally for tracking original row positions // and is expected to be removed during the transformation process export const tableDataNonDate = [ // ... (existing code) ];app/client/src/widgets/TableWidgetV2/constants.ts (1)
222-225
: Very good addition of the MomentDateInputFormat enum, class! Let's make it even better.I'm pleased to see you've added this new enum for Moment.js date input formats. It's a step in the right direction! However, let's consider a few improvements:
Add a comment above the enum to explain its purpose and relationship to Moment.js. This will help your classmates understand its usage better.
Be mindful of the potential confusion between
DateInputFormat.MILLISECONDS
andMomentDateInputFormat.MILLISECONDS
. Consider renaming one of them or adding a note in the comments to clarify the difference.Here's how you might improve it:
// Moment.js specific date input formats for parsing Unix timestamps export enum MomentDateInputFormat { MILLISECONDS = "x", // Unix ms timestamp (e.g., 1318781876406) SECONDS = "X", // Unix seconds timestamp (e.g., 1318781876) }Remember, clear documentation is like a good lesson plan – it helps everyone understand and learn better!
app/client/cypress/support/Pages/Table.ts (1)
859-884
: Well done, class! Let's review your work on thegetFormattedTomorrowDates
method.The implementation is correct and shows good understanding of date manipulation in JavaScript. However, I have a few suggestions to make it even better:
- Consider adding input validation or error handling. What if something goes wrong?
- The method name could be more specific. How about
getFormattedTomorrowDateStrings
?- Let's expand the comment to include examples of the return format. This will help your classmates understand it better!
Here's an improved version of the comment:
/** * Generates formatted date strings for tomorrow's date. * * @returns {Object} An object containing: * - verboseFormat: A string in the format "Weekday Month Day Year" (e.g., "Sat Sep 21 2024") * - isoFormat: A string in ISO 8601 date format (e.g., "2024-09-21") * * @throws {Error} If there's an issue with date calculation or formatting */Keep up the good work!
app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/Date_column_types_validation_spec.ts (1)
59-63
: Strengthen your test cases by adding multiple assertions.Including multiple assertions helps verify different aspects of your functionality and ensures comprehensive coverage. This practice can catch potential issues that a single assertion might miss.
For instance, you could:
- Assert the initial value of the cell before editing.
- Confirm that the cell's value updates correctly after editing.
- Verify that no unexpected errors occur during the process.
This approach will make your tests more robust and reliable.
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
📒 Files selected for processing (8)
- app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/Date_column_types_validation_spec.ts (1 hunks)
- app/client/cypress/fixtures/tableDateColumnTypes.ts (1 hunks)
- app/client/cypress/support/Pages/Table.ts (1 hunks)
- app/client/src/widgets/TableWidgetV2/component/cellComponents/DateCell.tsx (3 hunks)
- app/client/src/widgets/TableWidgetV2/constants.ts (1 hunks)
- app/client/src/widgets/TableWidgetV2/widget/reactTableUtils/TransformDataPureFn.test.ts (1 hunks)
- app/client/src/widgets/TableWidgetV2/widget/reactTableUtils/fixtures.ts (1 hunks)
- app/client/src/widgets/TableWidgetV2/widget/reactTableUtils/transformDataPureFn.tsx (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/Date_column_types_validation_spec.ts (1)
Pattern
app/client/cypress/**/**.*
: Review the following e2e test code written using the Cypress test library. Ensure that:
- Follow best practices for Cypress code and e2e automation.
- Avoid using cy.wait in code.
- Avoid using cy.pause in code.
- Avoid using agHelper.sleep().
- Use locator variables for locators and do not use plain strings.
- Use data-* attributes for selectors.
- Avoid Xpaths, Attributes and CSS path.
- Avoid selectors like .btn.submit or button[type=submit].
- Perform logins via API with LoginFromAPI.
- Perform logout via API with LogOutviaAPI.
- Perform signup via API with SignupFromAPI.
- Avoid using it.only.
- Avoid using after and aftereach in test cases.
- Use multiple assertions for expect statements.
- Avoid using strings for assertions.
- Do not use duplicate filenames even with different paths.
- Avoid using agHelper.Sleep, this.Sleep in any file in code.
app/client/cypress/fixtures/tableDateColumnTypes.ts (1)
Pattern
app/client/cypress/**/**.*
: Review the following e2e test code written using the Cypress test library. Ensure that:
- Follow best practices for Cypress code and e2e automation.
- Avoid using cy.wait in code.
- Avoid using cy.pause in code.
- Avoid using agHelper.sleep().
- Use locator variables for locators and do not use plain strings.
- Use data-* attributes for selectors.
- Avoid Xpaths, Attributes and CSS path.
- Avoid selectors like .btn.submit or button[type=submit].
- Perform logins via API with LoginFromAPI.
- Perform logout via API with LogOutviaAPI.
- Perform signup via API with SignupFromAPI.
- Avoid using it.only.
- Avoid using after and aftereach in test cases.
- Use multiple assertions for expect statements.
- Avoid using strings for assertions.
- Do not use duplicate filenames even with different paths.
- Avoid using agHelper.Sleep, this.Sleep in any file in code.
app/client/cypress/support/Pages/Table.ts (1)
Pattern
app/client/cypress/**/**.*
: Review the following e2e test code written using the Cypress test library. Ensure that:
- Follow best practices for Cypress code and e2e automation.
- Avoid using cy.wait in code.
- Avoid using cy.pause in code.
- Avoid using agHelper.sleep().
- Use locator variables for locators and do not use plain strings.
- Use data-* attributes for selectors.
- Avoid Xpaths, Attributes and CSS path.
- Avoid selectors like .btn.submit or button[type=submit].
- Perform logins via API with LoginFromAPI.
- Perform logout via API with LogOutviaAPI.
- Perform signup via API with SignupFromAPI.
- Avoid using it.only.
- Avoid using after and aftereach in test cases.
- Use multiple assertions for expect statements.
- Avoid using strings for assertions.
- Do not use duplicate filenames even with different paths.
- Avoid using agHelper.Sleep, this.Sleep in any file in code.
🔇 Additional comments (12)
app/client/cypress/fixtures/tableDateColumnTypes.ts (1)
1-26
: Well done on creating a comprehensive date format fixture!Class, let's take a moment to appreciate the structure of this new file. It's like a well-organized lesson plan, providing us with a variety of date formats that we can use in our Cypress tests. The use of a template string is a clever choice, making it easy to embed this data wherever we need it.
app/client/src/widgets/TableWidgetV2/widget/reactTableUtils/TransformDataPureFn.test.ts (3)
1-10
: Well done on organizing your imports, class!You've done a splendid job importing the necessary types, functions, and mock data for your test suite. It's always important to keep your imports tidy and relevant.
57-61
: Bravo on considering the empty input scenario!This test case is short, sweet, and to the point. It's crucial to verify that our function behaves correctly when given an empty array. Well done!
1-71
: Overall, an exemplary test suite, class!You've done a commendable job creating a comprehensive set of tests for the
transformDataPureFn
. Your test cases cover the main functionality, edge cases, and even consider non-date data scenarios. This thorough approach will help ensure the reliability and correctness of the function.To take your testing skills to the next level, consider:
- Adding more diverse edge cases as suggested earlier.
- Including descriptive comments for each test case to explain their purpose.
- Exploring property-based testing for even more robust coverage.
Keep up the excellent work! Remember, thorough testing is the foundation of reliable software.
app/client/src/widgets/TableWidgetV2/widget/reactTableUtils/fixtures.ts (3)
1-1
: Good job on the import statement, class!The import statement is correct and brings in the necessary types for our mock data. Keep up the good work!
3-81
: Excellent work on creating comprehensive mock data, students!Your mock data for date-related columns and transformations is well-structured and covers a good range of scenarios. This will be very helpful for testing our date transformation logic.
83-131
: Well done on creating mock data for non-date columns!Your mock data for non-date columns is well-structured and includes different data types. This will be useful for testing various scenarios.
app/client/src/widgets/TableWidgetV2/widget/reactTableUtils/transformDataPureFn.tsx (2)
Line range hint
32-78
: Let's discuss the changes in our date validation logic, students!I noticed you've removed the
isNumber
check for thevalue
variable in our date validation process. This is an interesting change that simplifies our code, but let's think about its implications:
- How will this affect our handling of non-number values in date processing?
- Have we considered all possible input types that might come through this function?
Also, I see you've removed the comment about needing unit tests. This raises a few questions:
- Have the unit tests been added for this function?
- If not, do we still need them?
- Has our testing strategy for this component changed?
Remember, class, thorough testing is crucial for maintaining the quality of our code!
Let's check if we have any unit tests for this function. Run this command to search for test files:
#!/bin/bash # Description: Search for test files related to transformDataPureFn # Test: Look for test files fd -e test.ts -e test.tsx -e spec.ts -e spec.tsx . app/client/src/widgets/TableWidgetV2 | grep -i "transformDataPureFn"If we don't find any test files, we should consider adding them to ensure our function works correctly with various input types.
4-4
: Good job removing the unused import, class!I see you've removed the
isNumber
import from lodash. That's a great step towards keeping our code clean and tidy. Remember, it's always important to remove unused imports to maintain code hygiene.Let's double-check if there are any other unused imports in this file. Run this little pop quiz:
app/client/src/widgets/TableWidgetV2/component/cellComponents/DateCell.tsx (3)
12-16
: Good Use of Necessary ImportsYou've correctly imported
DateInputFormat
,EditableCellActions
, andMomentDateInputFormat
from the constants module. These imports are essential for the new functionality you've added and contribute to clearer, more maintainable code. Well done!
238-244
: Correct Application of Adjusted Input FormatBy using
momentAdjustedInputFormat
in theonDateSelected
function, you've ensured that dates are formatted correctly according to the adjusted input format. This change enhances consistency and prevents potential formatting errors. Excellent application of the new utility function!
204-215
: Ensure All Input Formats Are Compatible with Moment.jsYour implementation of the
convertInputFormatToMomentFormat
function effectively handles theMILLISECONDS
andEPOCH
formats. However, please verify that all other possible values ofDateInputFormat
are compatible with Moment.js'format
function without additional adjustments. This will ensure consistent date formatting across all input formats.You can run the following script to list all
DateInputFormat
values and review their compatibility:✅ Verification successful
Let's try a different approach to extract all the
DateInputFormat
enum values. Please run the following script:
All DateInputFormat Values Are Compatible with Moment.js
I've verified that all
DateInputFormat
enum values (Epoch
,Milliseconds
) are correctly handled by theconvertInputFormatToMomentFormat
function and are compatible with Moment.js'format
function.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: List all `DateInputFormat` enum values to verify compatibility with Moment.js. # Extract the `DateInputFormat` enum definition rg --type typescript 'export enum DateInputFormat' -A 15Length of output: 93
Script:
#!/bin/bash # Description: Extract all values of the `DateInputFormat` enum to verify compatibility with Moment.js. ast-grep --lang typescript --pattern 'export enum DateInputFormat { $$$ }'Length of output: 696
export const tableDateColumnTypes = ` | ||
{{ | ||
[ | ||
{ | ||
"unixs": 1727212200, | ||
"unixms": 1727212200000, | ||
"yyyymmdd": "2024-09-25", | ||
"yyyymmddhhmm": "2024-09-25 14:30", | ||
iso8601: "2024-09-25T14:30:00.000Z", | ||
"yyyymmddTHHmmss": "2024-09-25T14:30:00", | ||
"yyyymmddhhmmss": "2024-09-25 02:30:00", | ||
"doMMMyyyy": "25th Sep 2024", | ||
"ddmmyyyy": "25/09/2024", | ||
"ddmmyyyyhhmm": "25/09/2024 14:30", | ||
lll: "September 25, 2024 2:30 PM", | ||
ll: "September 25, 2024", | ||
"dmmmmyyyy": "25 September, 2024", | ||
"hmmAdmmmmyyyy": "2:30 PM 25 September, 2024", | ||
"mm1dd1yyyy": "09-25-2024", | ||
"dd1mm1yyyy": "25-09-2024", | ||
"ddimmiyy": "25/09/24", | ||
"mmddyy": "09/25/24", | ||
}, | ||
] | ||
}} | ||
`; |
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
Let's make our lesson plan more dynamic!
While your current approach is like having a well-prepared set of flashcards, we could make this even more flexible and easier to maintain. Instead of hardcoding all these date formats, why don't we create them programmatically?
Consider refactoring the code to generate the date representations dynamically. Here's an example of how you might do this:
import moment from 'moment';
function generateDateFormats(date: Date) {
return {
unixs: Math.floor(date.getTime() / 1000),
unixms: date.getTime(),
yyyymmdd: moment(date).format('YYYY-MM-DD'),
yyyymmddhhmm: moment(date).format('YYYY-MM-DD HH:mm'),
iso8601: date.toISOString(),
// ... add other formats here
};
}
const sampleDate = new Date('2024-09-25T14:30:00Z');
export const tableDateColumnTypes = JSON.stringify([generateDateFormats(sampleDate)], null, 2);
This approach is like creating a reusable lesson plan that we can easily update for different dates. It reduces the chance of errors and makes our code more maintainable. What do you think, class?
it("14. should allow inline editing of date in MM-DD-YYYY format", () => { | ||
table.EditColumn("hmmAdmmmmyyyy", "v2"); | ||
setEditableDateFormats("H:mm A D MMMM, YYYY"); | ||
clickAndValidateDateCell(0, 13); | ||
}); |
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.
Verify that the date format matches the test case purpose.
In this test case, you're supposed to test the 'MM-DD-YYYY'
format, but the date format set is "H:mm A D MMMM, YYYY"
, which doesn't align with the test description.
Adjust the date format to reflect the intended test:
- setEditableDateFormats("H:mm A D MMMM, YYYY");
+ setEditableDateFormats("MM-DD-YYYY");
📝 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.
it("14. should allow inline editing of date in MM-DD-YYYY format", () => { | |
table.EditColumn("hmmAdmmmmyyyy", "v2"); | |
setEditableDateFormats("H:mm A D MMMM, YYYY"); | |
clickAndValidateDateCell(0, 13); | |
}); | |
it("14. should allow inline editing of date in MM-DD-YYYY format", () => { | |
table.EditColumn("hmmAdmmmmyyyy", "v2"); | |
setEditableDateFormats("MM-DD-YYYY"); | |
clickAndValidateDateCell(0, 13); | |
}); |
it("15. should allow inline editing of date in DD-MM-YYYY format", () => { | ||
table.EditColumn("mm1dd1yyyy", "v2"); | ||
setEditableDateFormats("MM-DD-YYYY"); | ||
clickAndValidateDateCell(0, 14); | ||
}); |
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 the date format corresponds with the test's goal.
The test description mentions the 'DD-MM-YYYY'
format, but the date format used doesn't match. For the test to be effective, the date format in your code should align with the test description.
Update the date format accordingly:
- setEditableDateFormats("MM-DD-YYYY");
+ setEditableDateFormats("DD-MM-YYYY");
📝 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.
it("15. should allow inline editing of date in DD-MM-YYYY format", () => { | |
table.EditColumn("mm1dd1yyyy", "v2"); | |
setEditableDateFormats("MM-DD-YYYY"); | |
clickAndValidateDateCell(0, 14); | |
}); | |
it("15. should allow inline editing of date in DD-MM-YYYY format", () => { | |
table.EditColumn("mm1dd1yyyy", "v2"); | |
setEditableDateFormats("DD-MM-YYYY"); | |
clickAndValidateDateCell(0, 14); | |
}); |
it("7. should allow inline editing of date in 'do MMM yyyy' format", () => { | ||
table.ChangeColumnType("yyyymmddhhmmss", "Date"); | ||
setEditableDateFormats("YYYY-MM-DDTHH:mm:ss"); | ||
clickAndValidateDateCell(0, 6); | ||
}); |
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.
There's a mismatch between your test description and the date format used.
The test description indicates you're validating the 'Do MMM YYYY'
format, but you've set the date format to "YYYY-MM-DDTHH:mm:ss"
. To accurately test the intended format, you should align the date format in your code with the test description.
Let's adjust the setEditableDateFormats
function to match the test description:
- setEditableDateFormats("YYYY-MM-DDTHH:mm:ss");
+ setEditableDateFormats("Do MMM YYYY");
📝 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.
it("7. should allow inline editing of date in 'do MMM yyyy' format", () => { | |
table.ChangeColumnType("yyyymmddhhmmss", "Date"); | |
setEditableDateFormats("YYYY-MM-DDTHH:mm:ss"); | |
clickAndValidateDateCell(0, 6); | |
}); | |
it("7. should allow inline editing of date in 'do MMM yyyy' format", () => { | |
table.ChangeColumnType("yyyymmddhhmmss", "Date"); | |
setEditableDateFormats("Do MMM YYYY"); | |
clickAndValidateDateCell(0, 6); | |
}); |
it("8. should allow inline editing of date in DD/MM/YYYY format", () => { | ||
table.ChangeColumnType("doMMMyyyy", "Date"); | ||
setEditableDateFormats("Do MMM YYYY"); | ||
clickAndValidateDateCell(0, 7); | ||
}); |
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 consistency between your test description and the date format provided.
Your test description specifies the 'DD/MM/YYYY' format, but the date format you've set is "Do MMM YYYY"
. Aligning them will ensure the test accurately assesses the intended functionality.
Please update the date format to match the test description:
- setEditableDateFormats("Do MMM YYYY");
+ setEditableDateFormats("DD/MM/YYYY");
📝 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.
it("8. should allow inline editing of date in DD/MM/YYYY format", () => { | |
table.ChangeColumnType("doMMMyyyy", "Date"); | |
setEditableDateFormats("Do MMM YYYY"); | |
clickAndValidateDateCell(0, 7); | |
}); | |
it("8. should allow inline editing of date in DD/MM/YYYY format", () => { | |
table.ChangeColumnType("doMMMyyyy", "Date"); | |
setEditableDateFormats("DD/MM/YYYY"); | |
clickAndValidateDateCell(0, 7); | |
}); |
it("9. should allow inline editing of date in DD/MM/YYYY HH:mm format", () => { | ||
table.EditColumn("ddmmyyyy", "v2"); | ||
setEditableDateFormats("DD/MM/YYYY"); | ||
clickAndValidateDateCell(0, 8); | ||
}); |
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.
Align the date format with your test objective for accuracy.
The test aims to validate the 'DD/MM/YYYY HH:mm'
format, but the date format provided is "DD/MM/YYYY"
, missing the time component. Including the time in your format will ensure the test is precise.
Modify the date format as follows:
- setEditableDateFormats("DD/MM/YYYY");
+ setEditableDateFormats("DD/MM/YYYY HH:mm");
📝 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.
it("9. should allow inline editing of date in DD/MM/YYYY HH:mm format", () => { | |
table.EditColumn("ddmmyyyy", "v2"); | |
setEditableDateFormats("DD/MM/YYYY"); | |
clickAndValidateDateCell(0, 8); | |
}); | |
it("9. should allow inline editing of date in DD/MM/YYYY HH:mm format", () => { | |
table.EditColumn("ddmmyyyy", "v2"); | |
setEditableDateFormats("DD/MM/YYYY HH:mm"); | |
clickAndValidateDateCell(0, 8); | |
}); |
const setEditableDateFormats = (format: string) => { | ||
// Update date format property | ||
propPane.ToggleJSMode("Date format", true); | ||
propPane.UpdatePropertyFieldValue("Date format", format); | ||
|
||
// Update display format property | ||
propPane.ToggleJSMode("Display format", true); | ||
propPane.UpdatePropertyFieldValue("Display format", "YYYY-MM-DD"); | ||
|
||
// Toggle editable | ||
propPane.TogglePropertyState("Editable", "On"); | ||
}; |
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
Let's enhance reusability by parameterizing the 'Display format'.
By making 'Display format' a parameter in your setEditableDateFormats
function, you can test various display formats more effectively. This adjustment will make your tests more flexible and your code more maintainable.
Here's how you can modify the function:
- const setEditableDateFormats = (format: string) => {
+ const setEditableDateFormats = (dateFormat: string, displayFormat: string) => {
// Update date format property
propPane.ToggleJSMode("Date format", true);
- propPane.UpdatePropertyFieldValue("Date format", format);
+ propPane.UpdatePropertyFieldValue("Date format", dateFormat);
// Update display format property
propPane.ToggleJSMode("Display format", true);
- propPane.UpdatePropertyFieldValue("Display format", "YYYY-MM-DD");
+ propPane.UpdatePropertyFieldValue("Display format", displayFormat);
// Toggle editable
propPane.TogglePropertyState("Editable", "On");
};
Then, update your test cases to pass the appropriate displayFormat
argument.
📝 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.
const setEditableDateFormats = (format: string) => { | |
// Update date format property | |
propPane.ToggleJSMode("Date format", true); | |
propPane.UpdatePropertyFieldValue("Date format", format); | |
// Update display format property | |
propPane.ToggleJSMode("Display format", true); | |
propPane.UpdatePropertyFieldValue("Display format", "YYYY-MM-DD"); | |
// Toggle editable | |
propPane.TogglePropertyState("Editable", "On"); | |
}; | |
const setEditableDateFormats = (dateFormat: string, displayFormat: string) => { | |
// Update date format property | |
propPane.ToggleJSMode("Date format", true); | |
propPane.UpdatePropertyFieldValue("Date format", dateFormat); | |
// Update display format property | |
propPane.ToggleJSMode("Display format", true); | |
propPane.UpdatePropertyFieldValue("Display format", displayFormat); | |
// Toggle editable | |
propPane.TogglePropertyState("Editable", "On"); | |
}; |
agHelper.GetNClick( | ||
`${table._dateInputPopover} [aria-label='${table.getFormattedTomorrowDates().verboseFormat}']`, | ||
); |
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.
Avoid using attribute selectors; utilize data- attributes and locator variables instead.*
Using attribute selectors like [aria-label='...']
can make your tests fragile and harder to maintain. It's better to use data-* attributes and predefined locator variables to ensure robustness and readability.
Consider modifying your selector to use a data-* attribute or a locator variable. For example:
- agHelper.GetNClick(
- `${table._dateInputPopover} [aria-label='${table.getFormattedTomorrowDates().verboseFormat}']`,
- );
+ agHelper.GetNClick(
+ `${table._dateInputPopover} ${table._datePickerCell}`,
+ );
Ensure that table._datePickerCell
is a predefined locator corresponding to the date cell element.
Committable suggestion was skipped due to low confidence.
removing as no longer needed |
Description
Tip
Add a TL;DR when the description is longer than 500 words or extremely technical (helps the content, marketing, and DevRel team).
Please also include relevant motivation and context. List any dependencies that are required for this change. Add links to Notion, Figma or any other documents that might be relevant to the PR.
Fixes #
Issue Number
or
Fixes
Issue URL
Warning
If no issue exists, please create an issue first, and check with the maintainers if the issue is valid.
Automation
/ok-to-test tags=""
🔍 Cypress test results
Caution
If you modify the content in this section, you are likely to disrupt the CI result for your PR.
Communication
Should the DevRel and Marketing teams inform users about this change?
Summary by CodeRabbit
Release Notes
New Features
Bug Fixes
Tests
Chores