Skip to content

Commit 0db0214

Browse files
authored
Added seeFormErrorMessage function (#50)
1 parent 0f669ca commit 0db0214

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

src/Codeception/Module/Symfony.php

+59
Original file line numberDiff line numberDiff line change
@@ -1108,6 +1108,65 @@ public function seeCurrentActionIs(string $action)
11081108
$this->fail("Action '$action' does not exist");
11091109
}
11101110

1111+
/**
1112+
* Verifies that a form field has an error.
1113+
* You can specify the expected error message as second parameter.
1114+
*
1115+
* ``` php
1116+
* <?php
1117+
* $I->seeFormErrorMessage('username');
1118+
* $I->seeFormErrorMessage('username', 'Username is empty');
1119+
* ```
1120+
* @param string $field
1121+
* @param string|null $message
1122+
*/
1123+
public function seeFormErrorMessage(string $field, $message = null)
1124+
{
1125+
$formCollector = $this->grabCollector('form', __FUNCTION__);
1126+
1127+
if (!$forms = $formCollector->getData()->getValue('forms')['forms']) {
1128+
$this->fail('There are no forms on the current page.');
1129+
}
1130+
1131+
$fields = [];
1132+
$errors = [];
1133+
1134+
foreach ($forms as $form) {
1135+
foreach ($form['children'] as $child) {
1136+
$fieldName = $child['name'];
1137+
$fields[] = $fieldName;
1138+
1139+
if (!array_key_exists('errors', $child)) {
1140+
continue;
1141+
}
1142+
foreach ($child['errors'] as $error) {
1143+
$errors[$fieldName] = $error['message'];
1144+
}
1145+
}
1146+
}
1147+
1148+
if (array_search($field, $fields) === false) {
1149+
$this->fail("the field '$field' does not exist in the form.");
1150+
}
1151+
1152+
if (!array_key_exists($field, $errors)) {
1153+
$this->fail("No form error message for field '$field'.");
1154+
}
1155+
1156+
if (!$message) {
1157+
return;
1158+
}
1159+
1160+
$this->assertStringContainsString(
1161+
$message,
1162+
$errors[$field],
1163+
sprintf(
1164+
"There is an error message for the field '%s', but it does not match the expected message.",
1165+
$field
1166+
)
1167+
);
1168+
}
1169+
11111170
/**
11121171
* Checks that the user's password would not benefit from rehashing.
11131172
* If the user is not provided it is taken from the current session.

0 commit comments

Comments
 (0)