From b979ce5896113d76533f31c29af842f299c3faa8 Mon Sep 17 00:00:00 2001 From: Guy Sartorelli <36352093+GuySartorelli@users.noreply.github.com> Date: Fri, 19 Jan 2024 13:27:32 +1300 Subject: [PATCH] MNT Fix test for required password fields in kitchen sink (#11111) --- .../php/Forms/ConfirmedPasswordFieldTest.php | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/tests/php/Forms/ConfirmedPasswordFieldTest.php b/tests/php/Forms/ConfirmedPasswordFieldTest.php index 5f900df3d..42aa33c35 100644 --- a/tests/php/Forms/ConfirmedPasswordFieldTest.php +++ b/tests/php/Forms/ConfirmedPasswordFieldTest.php @@ -2,6 +2,7 @@ namespace SilverStripe\Forms\Tests; +use SilverStripe\Admin\LeftAndMain; use SilverStripe\Control\Controller; use SilverStripe\Dev\SapphireTest; use SilverStripe\Forms\ConfirmedPasswordField; @@ -11,6 +12,7 @@ use SilverStripe\Forms\ReadonlyField; use SilverStripe\Forms\RequiredFields; use SilverStripe\Security\Member; use SilverStripe\Security\PasswordValidator; +use SilverStripe\View\SSViewer; class ConfirmedPasswordFieldTest extends SapphireTest { @@ -437,29 +439,37 @@ class ConfirmedPasswordFieldTest extends SapphireTest */ public function testChildFieldsAreRequired(bool $canBeEmpty, bool $required, bool $childrenRequired, bool $expectRequired) { - $form = new Form(); - $field = new ConfirmedPasswordField('Test'); - $field->setForm($form); - $field->setCanBeEmpty($canBeEmpty); - $requiredFields = []; - if ($required) { - $requiredFields[] = 'Test'; - } - if ($childrenRequired) { - $requiredFields[] = 'Test[_Password]'; - $requiredFields[] = 'Test[_ConfirmPassword]'; - } - $form->setValidator(new RequiredFields($requiredFields)); + // CWP front-end templates break this logic - but there's no easy fix for that. + // For the most part we are interested in ensuring this works in the CMS with default templates. + $originalThemes = SSViewer::get_themes(); + SSViewer::set_themes(LeftAndMain::config()->uninherited('admin_themes')); + try { + $form = new Form(); + $field = new ConfirmedPasswordField('Test'); + $field->setForm($form); + $field->setCanBeEmpty($canBeEmpty); + $requiredFields = []; + if ($required) { + $requiredFields[] = 'Test'; + } + if ($childrenRequired) { + $requiredFields[] = 'Test[_Password]'; + $requiredFields[] = 'Test[_ConfirmPassword]'; + } + $form->setValidator(new RequiredFields($requiredFields)); - $rendered = $field->Field(); - $fieldOneRegex = ']*?required="required"\s+aria-required="true"\s[^>]*\/>'; - $fieldTwoRegex = ']*?required="required"\s+aria-required="true"\s[^>]*\/>'; - $regex = '/' . $fieldOneRegex . '.*' . $fieldTwoRegex . '/isu'; + $rendered = $field->Field(); + $fieldOneRegex = ']*?required="required"\s+aria-required="true"\s[^>]*\/>'; + $fieldTwoRegex = ']*?required="required"\s+aria-required="true"\s[^>]*\/>'; + $regex = '/' . $fieldOneRegex . '.*' . $fieldTwoRegex . '/isu'; - if ($expectRequired) { - $this->assertMatchesRegularExpression($regex, $rendered); - } else { - $this->assertDoesNotMatchRegularExpression($regex, $rendered); + if ($expectRequired) { + $this->assertMatchesRegularExpression($regex, $rendered); + } else { + $this->assertDoesNotMatchRegularExpression($regex, $rendered); + } + } finally { + SSViewer::set_themes($originalThemes); } } }