test: AssertsToolErrors helper for tool error assertions (T3)
tests/Support/AssertsToolErrors (used by TestCase): assertToolError($result, code)
checks the WP_Error code lit_<code> and the code of the client JSON and returns the
payload; clientError() decodes the payload; errorFields() returns the fields and
asserts they exist. Replaces the private clientError() decoders of
DiviWriteAbilitiesTest/DiviReplaceTextAbilityTest, 216 single-line
assertSame('lit_…', …->get_error_code()) assertions, 24 get_error_data()['fields']
digs and two json_decode(message) reads. ErrorsTest keeps json_decode: it tests
the format itself. Tests 1404 -> 1409 (AssertsToolErrorsTest); no test has fewer
assertions.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -128,14 +128,14 @@ final class ContentCreateDiviTest extends TestCase
|
||||
Functions\expect('wp_insert_post')->never();
|
||||
|
||||
$inactive = $this->ability($this->composer(false))->execute(self::INPUT);
|
||||
self::assertSame('lit_unsupported', $inactive->get_error_code());
|
||||
self::assertToolError($inactive, 'unsupported');
|
||||
|
||||
$none = $this->ability(null)->execute(self::INPUT);
|
||||
self::assertSame('lit_unsupported', $none->get_error_code());
|
||||
self::assertToolError($none, 'unsupported');
|
||||
|
||||
$both = $this->ability($this->composer())->execute(self::INPUT + ['content' => '<p>x</p>']);
|
||||
self::assertSame('lit_validation_failed', $both->get_error_code());
|
||||
self::assertArrayHasKey('content', $both->get_error_data()['fields']);
|
||||
self::assertToolError($both, 'validation_failed');
|
||||
self::assertArrayHasKey('content', self::errorFields($both));
|
||||
}
|
||||
|
||||
public function testEveryValidationErrorComesBackAndNothingIsCreated(): void
|
||||
@@ -149,10 +149,10 @@ final class ContentCreateDiviTest extends TestCase
|
||||
|
||||
$error = $this->ability($composer, $writer)->execute(self::INPUT);
|
||||
|
||||
self::assertSame('lit_invalid_attr_path', $error->get_error_code());
|
||||
self::assertToolError($error, 'invalid_attr_path');
|
||||
self::assertSame(
|
||||
['fields.role' => 'Pflichtfeld fehlt.', 'divi[0].attrs.x' => 'unbekannt'],
|
||||
$error->get_error_data()['fields']
|
||||
self::errorFields($error)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -181,8 +181,8 @@ final class ContentCreateDiviTest extends TestCase
|
||||
$error = $this->ability($composer)->execute(self::INPUT);
|
||||
|
||||
self::assertInstanceOf(WP_Error::class, $error);
|
||||
self::assertSame('lit_validation_failed', $error->get_error_code());
|
||||
self::assertArrayHasKey('divi[0].modules[0].text', $error->get_error_data()['fields']);
|
||||
self::assertToolError($error, 'validation_failed');
|
||||
self::assertArrayHasKey('divi[0].modules[0].text', self::errorFields($error));
|
||||
}
|
||||
|
||||
public function testARefusedLayoutWhoseDraftCannotBeDeletedIsAPartialWrite(): void
|
||||
@@ -254,8 +254,8 @@ final class ContentCreateDiviTest extends TestCase
|
||||
'attrs' => ['module.meta.adminLabel' => ['desktop' => 'Lang']],
|
||||
'modules' => [['type' => 'button', 'text' => 'Los', 'attrs' => ['button.innerContent' => ['desktop' => ['text' => 'x']]]]],
|
||||
]]]);
|
||||
self::assertSame('lit_validation_failed', $overlap->get_error_code());
|
||||
$fields = $overlap->get_error_data()['fields'];
|
||||
self::assertToolError($overlap, 'validation_failed');
|
||||
$fields = self::errorFields($overlap);
|
||||
self::assertArrayHasKey('divi[0].attrs.module.meta.adminLabel', $fields, 'S41: label and attrs label');
|
||||
self::assertArrayHasKey('divi[0].modules[0].modules[0][0].attrs.button.innerContent', $fields, 'S40');
|
||||
self::assertSame([], $saved);
|
||||
|
||||
Reference in New Issue
Block a user