8000 feat: Add programmatic state change validation for Checkbox widget by rahulbarwal · Pull Request #39980 · appsmithorg/appsmith · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

feat: Add programmatic state change validation for Checkbox widget #39980

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

Conversation

rahulbarwal
Copy link
Contributor
@rahulbarwal rahulbarwal commented Mar 31, 2025

Description

In the case of programmatically changing the checkbox state, the onCheckboxChange event was not being triggered. I have added logic to handle this issue.

Fixes #Issue Number
or
Fixes https://github.com/appsmithorg/appsmith-ee/issues/6823

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="@tag.Checkbox"

🔍 Cypress test results

Tip

🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
Workflow run: https://github.com/appsmithorg/appsmith/actions/runs/14169747454
Commit: 81c1da0
Cypress dashboard.
Tags: @tag.Checkbox
Spec:


Mon, 31 Mar 2025 11:11:12 UTC

Communication

Should the DevRel and Marketing teams inform users about this change?

  • Yes
  • No

Summary by CodeRabbit

  • New Features
    • Enhanced the checkbox widget to reflect programmatic state changes with corresponding UI updates and notifications.
  • Tests
    • Added a new automated test case to validate that programmatic changes to the checkbox state trigger the appropriate alerts and update the UI accordingly.

@rahulbarwal rahulbarwal requested review from ApekshaBhosale and a team as code owners March 31, 2025 08:41
@rahulbarwal rahulbarwal requested review from jacquesikot and removed request for a team March 31, 2025 08:41
@rahulbarwal rahulbarwal self-assigned this Mar 31, 2025
Copy link
Contributor
coderabbitai bot commented Mar 31, 2025

Walkthrough

This pull request adds a new test case to validate that the onCheckChange event is properly triggered by programmatic changes in the Checkbox widget. The test simulates toggling the state via a button click while checking that both the UI and widget metadata update accordingly. Additionally, a conditional block is introduced in the Checkbox widget's lifecycle method to handle the state change and invoke the related event callback.

Changes

File(s) Summary
app/client/cypress/e2e/Regression/ClientSide/Widgets/Checkbox/CheckBox_spec.js Added a test case for validating the onCheckChange event, simulating button clicks that toggle the Checkbox state and verifying UI updates.
app/client/src/widgets/CheckboxWidget/widget/index.tsx Introduced a new conditional block in componentDidUpdate to detect changes in isChecked and trigger updateWidgetMetaProperty with event parameters.

Possibly related PRs

Suggested labels

Bug, Test

Suggested reviewers

  • ApekshaBhosale
  • sagar-qa007

Poem

In code we trust, changes now unfold,
Checkbox and button, brave and bold.
State toggles, alerts with a cheer,
A merry dance in tests appears!
CodeRabbit sings, finesse in every line 😊
A whimsical fix, simply divine!
Let the widgets shine!


🪧 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>, please review it.
    • 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 gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @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 using 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 plan to trigger planning for file edits and PR creation.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

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.

@github-actions github-actions bot added the Enhancement New feature or request label Mar 31, 2025
@rahulbarwal rahulbarwal added Unplanned Work - Q&W Work items that are unplanned and removed Enhancement New feature or request labels Mar 31, 2025
@rahulbarwal
Copy link
Contributor Author

/build-deploy-preview skip-tests=true

Copy link

Deploying Your Preview: https://github.com/appsmithorg/appsmith/actions/runs/14167590262.
Workflow: On demand build Docker image and deploy preview.
skip-tests: true.
env: ``.
PR: 39980.
recreate: .

@github-actions github-actions bot added the Enhancement New feature or request label Mar 31, 2025
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: 1

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a07f048 and b693b05.

📒 Files selected for processing (2)
  • app/client/cypress/e2e/Regression/ClientSide/Widgets/Checkbox/CheckBox_spec.js (1 hunks)
  • app/client/src/widgets/CheckboxWidget/widget/index.tsx (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`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. ...

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/e2e/Regression/ClientSide/Widgets/Checkbox/CheckBox_spec.js
🪛 Biome (1.9.4)
app/client/cypress/e2e/Regression/ClientSide/Widgets/Checkbox/CheckBox_spec.js

[error] 88-88: Don't focus the test.

The 'only' method is often used for debugging or during implementation. It should be removed before deploying to production.
Consider removing 'only' to ensure all tests are executed.
Unsafe fix: Remove focus from test.

(lint/suspicious/noFocusedTests)

⏰ Context from checks skipped due to timeout of 90000ms (5)
  • GitHub Check: client-unit-tests / client-unit-tests
  • GitHub Check: client-lint / client-lint
  • GitHub Check: client-build / client-build
  • GitHub Check: client-check-cyclic-deps / check-cyclic-dependencies
  • GitHub Check: client-prettier / prettier-check
🔇 Additional comments (1)
app/client/src/widgets/CheckboxWidget/widget/index.tsx (1)

419-432: Good implementation of programmatic state change event handling.

The added code properly handles programmatic changes to the checkbox state by checking if the isChecked property has changed and if onCheckChange is defined. This ensures that the event callback is triggered when the checkbox state is modified programmatically, not just through UI interaction.

Copy link

Deploy-Preview-URL: https://ce-39980.dp.appsmith.com

@rahulbarwal rahulbarwal added Query Widgets & IDE Pod All issues related to Query, JS, Eval, Widgets & IDE ok-to-test Required label for CI labels Mar 31, 2025
jacquesikot
jacquesikot previously approved these changes Mar 31, 2025
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: 0

🧹 Nitpick comments (3)
app/client/cypress/e2e/Regression/ClientSide/Widgets/Checkbox/CheckBox_spec.js (3)

90-90: Consider using locator constants for selectors

The string selector .t--property-control-text should be extracted to a locator constant for better maintainability.

- cy.updateCodeInput(".t--property-control-text", `{{checker.isChecked}}`);
+ cy.updateCodeInput(formWidgetsPage.propertyControlText, `{{checker.isChecked}}`);

96-97: Extract repeated text to a constant

The alert message "Checkbox state changed programmatically" is used in multiple places. Extract it to a constant to improve maintainability.

+ const CHECKBOX_CHANGE_MESSAGE = "Checkbox state changed programmatically";

// Then update the occurrences:
- "{{showAlert('Checkbox state changed programmatically')}}",
+ "{{showAlert('" + CHECKBOX_CHANGE_MESSAGE + "')}}",

- _.agHelper.ValidateToastMessage(
-   "Checkbox state changed programmatically",
- );
+ _.agHelper.ValidateToastMessage(CHECKBOX_CHANGE_MESSAGE);

// And similarly for the second validation

Also applies to: 107-108, 114-115


105-109: Consider creating a helper function for repeating steps

The button click and toast validation steps are repeated. Consider extracting them to a helper function to reduce duplication.

function toggleCheckboxAndValidateToast(expectedMessage) {
  _.agHelper.ClickButton("Submit");
  _.agHelper.ValidateToastMessage(expectedMessage);
}

// Then use it in the test:
toggleCheckboxAndValidateToast("Checkbox state changed programmatically");
_.agHelper.GetNAssertElementText(_.locators._textWidget, "true");

toggleCheckboxAndValidateToast("Checkbox state changed programmatically");
_.agHelper.GetNAssertElementText(_.locators._textWidget, "false");

Also applies to: 112-116

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro (Legacy)

📥 Commits

Reviewing files that changed from the base of the PR and between e49846c and 81c1da0.

📒 Files selected for processing (1)
  • app/client/cypress/e2e/Regression/ClientSide/Widgets/Checkbox/CheckBox_spec.js (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`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. ...

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/e2e/Regression/ClientSide/Widgets/Checkbox/CheckBox_spec.js
⏰ Context from checks skipped due to timeout of 90000ms (8)
  • GitHub Check: perform-test / client-build / client-build
  • GitHub Check: perform-test / rts-build / build
  • GitHub Check: perform-test / server-build / server-unit-tests
  • GitHub Check: client-unit-tests / client-unit-tests
  • GitHub Check: client-lint / client-lint
  • GitHub Check: client-check-cyclic-deps / check-cyclic-dependencies
  • GitHub Check: client-build / client-build
  • GitHub Check: client-prettier / prettier-check
🔇 Additional comments (1)
app/client/cypress/e2e/Regression/ClientSide/Widgets/Checkbox/CheckBox_spec.js (1)

88-120: Good implementation of programmatic state change test

This test case successfully validates that the onCheckChange event is triggered when the checkbox state is changed programmatically. It thoroughly verifies both state transitions (false→true and true→false) and confirms the callback is properly invoked.

@rahulbarwal rahulbarwal merged commit a118152 into release Mar 31, 2025
43 checks passed
@rahulbarwal rahulbarwal deleted the rahulbarwal/checkbox-onCheckboxChange-not-getting-triggered-programatically branch March 31, 2025 11:14
github-actions bot pushed a commit to Zeral-Zhang/appsmith that referenced this pull request Apr 12, 2025
…ppsmithorg#39980)

## Description
In the case of programmatically changing the checkbox state, the
onCheckboxChange event was not being triggered. I have added logic to
handle this issue.

Fixes #`Issue Number`  
_or_  
Fixes appsmithorg/appsmith-ee#6823
> [!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="@tag.Checkbox"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/14169747454>
> Commit: 81c1da0
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=14169747454&attempt=1"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.Checkbox`
> Spec:
> <hr>Mon, 31 Mar 2025 11:11:12 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Enhanced the checkbox widget to reflect programmatic state changes
with corresponding UI updates and notifications.
- **Tests**
- Added a new automated test case to validate that programmatic changes
to the checkbox state trigger the appropriate alerts and update the UI
accordingly.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Checkbox Widget Enhancement New feature or request ok-to-test Required label for CI Query Widgets & IDE Pod All issues related to Query, JS, Eval, Widgets & IDE Unplanned Work - Q&W Work items that are unplanned
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants
0