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);
}
}
}