From 6edd7500feedd26983c230c542e3f8f67fc4db5c Mon Sep 17 00:00:00 2001 From: Pascal CESCON - Amoifr Date: Tue, 1 Sep 2026 14:13:42 +0200 Subject: [PATCH] Cover checkboxes of an array field mixed with disabled ones --- tests/Form/CheckboxTest.php | 35 +++++++++++++++++++ web-fixtures/multicheckbox_disabled_form.html | 19 ++++++++++ 2 files changed, 54 insertions(+) create mode 100644 web-fixtures/multicheckbox_disabled_form.html diff --git a/tests/Form/CheckboxTest.php b/tests/Form/CheckboxTest.php index 43f9ee7..6bd3259 100644 --- a/tests/Form/CheckboxTest.php +++ b/tests/Form/CheckboxTest.php @@ -80,4 +80,39 @@ public function testCheckboxMultiple(): void $this->assertFalse($updateMail->isChecked()); $this->assertTrue($spamMail->isChecked()); } + + public function testCheckboxMultipleWithDisabledCheckboxes(): void + { + $this->getSession()->visit($this->pathTo('/multicheckbox_disabled_form.html')); + $webAssert = $this->getAssertSession(); + + $disabledChecked = $webAssert->elementExists('css', '[name="mail_types[]"][value="update"]'); + $disabled = $webAssert->elementExists('css', '[name="mail_types[]"][value="spam"]'); + $newsletter = $webAssert->elementExists('css', '[name="mail_types[]"][value="newsletter"]'); + $digest = $webAssert->elementExists('css', '[name="mail_types[]"][value="digest"]'); + + $this->assertTrue($disabledChecked->isChecked()); + $this->assertFalse($disabled->isChecked()); + + // the enabled checkboxes come after the disabled ones, so a driver that + // numbers them differently than the browser does manipulates the wrong one + $this->assertFalse($newsletter->isChecked()); + $this->assertFalse($digest->isChecked()); + + $newsletter->check(); + $this->assertTrue($newsletter->isChecked()); + $this->assertFalse($digest->isChecked()); + + $digest->check(); + $this->assertTrue($newsletter->isChecked()); + $this->assertTrue($digest->isChecked()); + + $newsletter->uncheck(); + $this->assertFalse($newsletter->isChecked()); + $this->assertTrue($digest->isChecked()); + + // the disabled ones were not affected + $this->assertTrue($disabledChecked->isChecked()); + $this->assertFalse($disabled->isChecked()); + } } diff --git a/web-fixtures/multicheckbox_disabled_form.html b/web-fixtures/multicheckbox_disabled_form.html new file mode 100644 index 0000000..001ddbc --- /dev/null +++ b/web-fixtures/multicheckbox_disabled_form.html @@ -0,0 +1,19 @@ + + + + Multicheckbox Disabled Test + + + +

Multicheckbox Disabled Test

+ +
+ + + + + + +
+ +