diff --git a/core/modules/taxonomy/tests/src/Kernel/Views/ArgumentValidatorTermNameTest.php b/core/modules/taxonomy/tests/src/Kernel/Views/ArgumentValidatorTermNameTest.php index b3d2a0058e..394499926d 100644 --- a/core/modules/taxonomy/tests/src/Kernel/Views/ArgumentValidatorTermNameTest.php +++ b/core/modules/taxonomy/tests/src/Kernel/Views/ArgumentValidatorTermNameTest.php @@ -97,17 +97,87 @@ public function testArgumentValidatorTermName() { $this->assertEquals($this->names[0], $view->argument['name']->getTitle()); $view->argument['name']->validated_title = NULL; $view->argument['name']->argument_validated = NULL; + $this->assertTrue($view->argument['name']->setArgument($this->names[1])); $this->assertEquals($this->names[1], $view->argument['name']->getTitle()); $view->argument['name']->validated_title = NULL; $view->argument['name']->argument_validated = NULL; - // This term is special in that there is a term in another vocabulary - // with an identical name. + // Test that multiple valid terms don't validate because multiple arguments + // are currently not supported. + $multiple_terms = $this->names[0] . '+' . $this->names[1]; + $this->assertFalse($view->argument['name']->setArgument($multiple_terms)); + $view->argument['name']->validated_title = NULL; + $view->argument['name']->argument_validated = NULL; + + // Test term whose name is shared by term in disallowed bundle. $this->assertTrue($view->argument['name']->setArgument($this->names[2])); $this->assertEquals($this->names[2], $view->argument['name']->getTitle()); $view->argument['name']->validated_title = NULL; $view->argument['name']->argument_validated = NULL; + + // Add the second vocabulary as an allowed bundle. + $view->argument['name']->options['validate_options']['bundles']['views_testing_tags_2'] = 'views_testing_tags_2'; + + // Test that an array of bundles is handled by passing terms with unique + // names in each bundle. + $this->assertTrue($view->argument['name']->setArgument($this->names[0])); + $this->assertEquals($this->names[0], $view->argument['name']->getTitle()); + $view->argument['name']->validated_title = NULL; + $view->argument['name']->argument_validated = NULL; + + $this->assertTrue($view->argument['name']->setArgument($this->names[4])); + $this->assertEquals($this->names[4], $view->argument['name']->getTitle()); + $view->argument['name']->validated_title = NULL; + $view->argument['name']->argument_validated = NULL; + + // Allow any and all bundles. + $view->argument['name']->options['validate_options']['bundles'] = []; + + // Test that an empty array of bundles is handled by testing terms with + // unique names in each bundle. + $this->assertTrue($view->argument['name']->setArgument($this->names[0])); + $this->assertEquals($this->names[0], $view->argument['name']->getTitle()); + $view->argument['name']->validated_title = NULL; + $view->argument['name']->argument_validated = NULL; + + $this->assertTrue($view->argument['name']->setArgument($this->names[4])); + $this->assertEquals($this->names[4], $view->argument['name']->getTitle()); + } + + /** + * Tests the access checking in term name argument validator plugin. + */ + public function testArgumentValidatorTermNameAccess() { + $this->installConfig(['user']); + $this->setCurrentUser($this->createUser(['access content'])); + $view = Views::getView('test_taxonomy_name_argument'); + $view->initHandlers(); + + // Enable access checking on validator. + $view->argument['name']->options['validate_options']['access'] = TRUE; + // Allow all bundles. + $view->argument['name']->options['validate_options']['bundles'] = []; + + // A uniquely named unpublished term in an allowed bundle. + $this->terms[0]->setUnpublished()->save(); + $this->assertFalse($view->argument['name']->setArgument($this->names[0])); + $view->argument['name']->validated_title = NULL; + $view->argument['name']->argument_validated = NULL; + + // A name used by two terms in a single vocabulary. One is unpublished. + // We re-name the second term to match the first one. + $this->terms[1]->set('name', $this->names[0])->save(); + $this->names[1] = $this->terms[1]->label(); + $this->assertTrue($view->argument['name']->setArgument($this->names[0])); + $this->assertEquals($this->names[0], $view->argument['name']->getTitle()); + $view->argument['name']->validated_title = NULL; + $view->argument['name']->argument_validated = NULL; + + // A name shared by a term in each vocabulary. One is unpublished. + $this->terms[3]->setUnpublished()->save(); + $this->assertTrue($view->argument['name']->setArgument($this->names[3])); + $this->assertEquals($this->names[3], $view->argument['name']->getTitle()); } }