Skip to content
Snippets Groups Projects
Verified Commit db2e23fd authored by Lee Rowlands's avatar Lee Rowlands
Browse files

Issue #3126654 by idimopoulos, smustgrave, borisson_, mglaman, pfrenssen,...

Issue #3126654 by idimopoulos, smustgrave, borisson_, mglaman, pfrenssen, catch: EntityConstraintViolationList::findByCodes is inconsistent

(cherry picked from commit 66aaf44b)
parent b4533402
No related branches found
No related tags found
23 merge requests!11628Update file MediaLibraryWidget.php,!7564Revert "Issue #3364773 by roshnichordiya, Chris Matthews, thakurnishant_06,...,!5752Issue #3275828 by joachim, quietone, bradjones1, Berdir: document the reason...,!5627Issue #3261805: Field not saved when change of 0 on string start,!5427Issue #3338518: send credentials in ajax if configured in CORS settings.,!5395Issue #3387916 by fjgarlin, Spokje: Each GitLab job exposes user email,!5217Issue #3386607 by alexpott: Improve spell checking in commit-code-check.sh,!5064Issue #3379522 by finnsky, Gauravvvv, kostyashupenko, smustgrave, Chi: Revert...,!5040SDC ComponentElement: Transform slots scalar values to #plain_text instead of throwing an exception,!4958Issue #3392147: Whitelist IP for a Ban module.,!4942Issue #3365945: Errors: The following table(s) do not have a primary key: forum_index,!4894Issue #3280279: Add API to allow sites to opt in to upload SVG images in CKEditor 5,!4857Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!4856Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!4788Issue #3272985: RSS Feed header reverts to text/html when cached,!4716Issue #3362929: Improve 400 responses for broken/invalid image style routes,!4553Draft: Issue #2980951: Permission to see own unpublished comments in comment thread,!4273Add UUID to sections,!3679Issue #115801: Allow password on registration without disabling e-mail verification,!3106Issue #3017548: "Filtered HTML" text format does not support manual teaser break (<!--break-->),!2851Issue #2264739: Allow multiple field widgets to not use tabledrag,!925Issue #2339235: Remove taxonomy hard dependency on node module,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links
......@@ -170,6 +170,20 @@ public function filterByFieldAccess(AccountInterface $account = NULL) {
return $this->filterByFields($filtered_fields);
}
/**
* {@inheritdoc}
*/
public function findByCodes(string|array $codes): static {
$violations = [];
foreach ($this as $violation) {
if (in_array($violation->getCode(), $codes, TRUE)) {
$violations[] = $violation;
}
}
return new static($this->getEntity(), $violations);
}
/**
* {@inheritdoc}
*/
......
......@@ -47,6 +47,20 @@ public function getByField($field_name);
*/
public function getByFields(array $field_names);
/**
* Filters this violation list by the given error codes.
*
* Copied from Symfony parent class
* \Symfony\Component\Validator\ConstraintViolationList.
*
* @param string|string[] $codes
* The codes to find.
*
* @return \Drupal\Core\Entity\EntityConstraintViolationListInterface
* A list of violations of the given fields.
*/
public function findByCodes(string|array $codes): static;
/**
* Filters this violation list by the given fields.
*
......
......@@ -75,6 +75,22 @@ public function testFilterByFieldAccessWithCompositeConstraint() {
$this->assertEquals(array_values(iterator_to_array($constraint_list)), [$violations[2], $violations[3], $violations[4], $violations[5]]);
}
/**
* @covers ::findByCodes
*/
public function testFindByCodes() {
$account = $this->prophesize('\Drupal\Core\Session\AccountInterface')->reveal();
$entity = $this->setupEntity($account);
$constraint_list = $this->setupConstraintListWithoutCompositeConstraint($entity);
$violations = iterator_to_array($constraint_list);
$codes = ['test-code-violation-name', 'test-code-violation2-name'];
$actual = $constraint_list->findByCodes($codes);
$this->assertCount(2, $actual);
$this->assertEquals(iterator_to_array($actual), $violations);
}
/**
* Builds the entity.
*
......@@ -121,11 +137,11 @@ protected function setupConstraintListWithoutCompositeConstraint(FieldableEntity
$violations = [];
// Add two violations to two specific fields.
$violations[] = new ConstraintViolation('test name violation', '', [], '', 'name', 'invalid');
$violations[] = new ConstraintViolation('test name violation2', '', [], '', 'name', 'invalid');
$violations[] = new ConstraintViolation('test name violation', '', [], '', 'name', 'invalid', NULL, 'test-code-violation-name');
$violations[] = new ConstraintViolation('test name violation2', '', [], '', 'name', 'invalid', NULL, 'test-code-violation2-name');
$violations[] = new ConstraintViolation('test type violation', '', [], '', 'type', 'invalid');
$violations[] = new ConstraintViolation('test type violation2', '', [], '', 'type', 'invalid');
$violations[] = new ConstraintViolation('test type violation', '', [], '', 'type', 'invalid', NULL, 'test-code-violation-type');
$violations[] = new ConstraintViolation('test type violation2', '', [], '', 'type', 'invalid', NULL, 'test-code-violation2-type');
// Add two entity level specific violations.
$violations[] = new ConstraintViolation('test entity violation', '', [], '', '', 'invalid');
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment