diff --git a/tests/src/Unit/Form/SelectWidgetFormTest.php b/tests/src/Unit/Form/SelectWidgetFormTest.php deleted file mode 100644 index d237cbf..0000000 --- a/tests/src/Unit/Form/SelectWidgetFormTest.php +++ /dev/null @@ -1,159 +0,0 @@ -setUrl(new Url('llama')); - $result2 = new Result('badger', 'Badger', 20); - $result2->setUrl(new Url('badger')); - $result3 = new Result('duck', 'Duck', 15); - $result3->setUrl(new Url('duck')); - $result4 = new Result('alpaca', 'Alpaca', 9); - $result4->setUrl(new Url('alpaca')); - - $this->originalResults = [ - $result, - $result2, - $result3, - $result4, - ]; - - $url_generator = $this->getMock(UrlGeneratorInterface::class); - $url_generator->expects($this->any()) - ->method('generateFromRoute') - ->willReturnCallback(function ($param) { - return 'http://test/' . $param; - }); - $string_translation = $this->getMockBuilder(TranslationManager::class) - ->disableOriginalConstructor() - ->getMock(); - - $container_builder = new ContainerBuilder(); - $container_builder->set('url_generator', $url_generator); - $container_builder->set('string_translation', $string_translation); - \Drupal::setContainer($container_builder); - } - - /** - * Tests widget form with default settings. - */ - public function testDefaultSettings() { - $facet = new Facet(['id' => 'zoo_animal'], 'facet'); - $facet->setResults($this->originalResults); - $facet->setFieldIdentifier('zoo_animal'); - - $form_state = new FormState(); - $form_state->addBuildInfo('args', [$facet]); - $form = []; - - $widget_form = new DropdownWidgetForm($facet); - $built_form = $widget_form->buildForm($form, $form_state); - - $this->assertInternalType('array', $built_form); - $this->assertCount(5, $built_form['zoo_animal']['#options']); - $this->assertEquals('select', $built_form['zoo_animal']['#type']); - - $expected_links = [ - 'http://test/llama' => 'Llama', - 'http://test/badger' => 'Badger', - 'http://test/duck' => 'Duck', - 'http://test/alpaca' => 'Alpaca', - ]; - foreach ($expected_links as $index => $value) { - $this->assertEquals($value, $built_form['zoo_animal']['#options'][$index]); - } - $this->assertEquals(array('zoo_animal', 'zoo_animal_submit'), array_keys($built_form)); - } - - /** - * Tests widget form, make sure hiding and showing numbers works. - */ - public function testHideNumbers() { - $facet = new Facet([], 'facet'); - $facet->setResults($this->originalResults); - $facet->setFieldIdentifier('zoo__animal'); - $facet->setWidgetConfigs(['show_numbers' => 0]); - - $form_state = new FormState(); - $form_state->addBuildInfo('args', [$facet]); - $form = []; - - $widget_form = new DropdownWidgetForm($facet); - $built_form = $widget_form->buildForm($form, $form_state); - - $this->assertInternalType('array', $built_form); - $this->assertCount(5, $built_form['zoo__animal']['#options']); - $expected_links = [ - 'http://test/llama' => 'Llama', - 'http://test/badger' => 'Badger', - 'http://test/duck' => 'Duck', - 'http://test/alpaca' => 'Alpaca', - ]; - foreach ($expected_links as $index => $value) { - $this->assertEquals($value, $built_form['zoo__animal']['#options'][$index]); - } - - // Enable the 'show_numbers' setting again to make sure that the switch - // between those settings works. - $facet->setWidgetConfigs(['show_numbers' => 1]); - - $built_form = $widget_form->buildForm($form, $form_state); - $this->assertInternalType('array', $built_form); - $this->assertCount(5, $built_form['zoo__animal']['#options']); - - $expected_links = [ - 'http://test/llama' => 'Llama (10)', - 'http://test/badger' => 'Badger (20)', - 'http://test/duck' => 'Duck (15)', - 'http://test/alpaca' => 'Alpaca (9)', - ]; - foreach ($expected_links as $index => $value) { - $this->assertEquals($value, $built_form['zoo__animal']['#options'][$index]); - } - } - - /** - * Tests form default methods. - */ - public function testForm() { - $facet = new Facet(['id' => 'donkey'], 'facet'); - $facet->setResults($this->originalResults); - $facet->setFieldIdentifier('donkey'); - - $form = new DropdownWidgetForm($facet); - - $this->assertEquals('facets_dropdown_widget', $form->getBaseFormId()); - $this->assertEquals('facets_dropdown_widget__donkey', $form->getFormId()); - } - -} diff --git a/tests/src/Unit/Plugin/widget/SelectWidgetTest.php b/tests/src/Unit/Plugin/widget/SelectWidgetTest.php index 8f1bf73..6ef4664 100644 --- a/tests/src/Unit/Plugin/widget/SelectWidgetTest.php +++ b/tests/src/Unit/Plugin/widget/SelectWidgetTest.php @@ -2,6 +2,7 @@ namespace Drupal\Tests\facets\Unit\Plugin\widget; +use Drupal\Component\Render\FormattableMarkup; use Drupal\Core\Url; use Drupal\facets\Entity\Facet; use Drupal\facets\Plugin\facets\widget\DropdownWidget; @@ -49,35 +50,64 @@ class SelectWidgetTest extends UnitTestCase { } $this->originalResults = $original_results; - $form_builder = $this->getMockBuilder('\Drupal\Core\Form\FormBuilder') - ->disableOriginalConstructor() - ->getMock(); - $form_builder->expects($this->once()) - ->method('getForm') - ->willReturn('build'); - - $string_translation = $this->getMockBuilder('\Drupal\Core\StringTranslation\TranslationManager') - ->disableOriginalConstructor() - ->getMock(); - - $container_builder = new ContainerBuilder(); - $container_builder->set('form_builder', $form_builder); - $container_builder->set('string_translation', $string_translation); - \Drupal::setContainer($container_builder); - $this->widget = new DropdownWidget(); } /** - * Tests widget with default settings. + * Tests widget without filters. */ - public function testDefaultSettings() { + public function testNoFilterResults() { $facet = new Facet([], 'facet'); $facet->setResults($this->originalResults); - $facet->setFieldIdentifier('test_field'); + $facet->setWidgetConfigs(['show_numbers' => 1]); + + $output = $this->widget->build($facet); + + $this->assertInternalType('array', $output); + $this->assertCount(4, $output['#items']); - $built_form = $this->widget->build($facet); - $this->assertEquals('build', $built_form); + $this->assertEquals(['js-facets-dropdown-links'], $output['#attributes']['class']); + + $expected_links = [ + $this->buildLinkAssertion('Llama', 10), + $this->buildLinkAssertion('Badger', 20), + $this->buildLinkAssertion('Duck', 15), + $this->buildLinkAssertion('Alpaca', 9), + ]; + foreach ($expected_links as $index => $value) { + $this->assertInternalType('array', $output['#items'][$index]); + $this->assertEquals($value, $output['#items'][$index]['#title']); + $this->assertInstanceOf(FormattableMarkup::class, $output['#items'][$index]['#title']); + $this->assertEquals('link', $output['#items'][$index]['#type']); + $this->assertEquals(['facet-item'], $output['#items'][$index]['#wrapper_attributes']['class']); + } } + /** + * Build a formattable markup object to use in the other tests. + * + * @param string $text + * Text to display. + * @param int $count + * Number of results. + * @param bool $active + * Link is active. + * @param bool $show_numbers + * Numbers are displayed. + * + * @return \Drupal\Component\Render\FormattableMarkup + * Formattable markup object for link. + */ + private function buildLinkAssertion($text, $count = 0, $active = FALSE, $show_numbers = TRUE) { + $text = new FormattableMarkup('@text', ['@text' => $text, '@count' => $count]); + if ($show_numbers !== FALSE) { + $text->string .= ' (@count)'; + } + if ($active) { + $text->string = '(-) ' . $text->string; + } + return $text; + } + + }