diff --git a/src/Plugin/facets/widget/CheckboxWidget.php b/src/Plugin/facets/widget/CheckboxWidget.php index 9d0f3ce..d0d51fb 100644 --- a/src/Plugin/facets/widget/CheckboxWidget.php +++ b/src/Plugin/facets/widget/CheckboxWidget.php @@ -22,9 +22,16 @@ use Drupal\facets\Widget\WidgetInterface; class CheckboxWidget extends LinksWidget { /** + * @var \Drupal\facets\FacetInterface + */ + protected $facet; + + /** * {@inheritdoc} */ public function build(FacetInterface $facet) { + $this->facet = $facet; + /** @var \Drupal\facets\Result\Result[] $results */ $results = $facet->getResults(); $items = []; @@ -38,7 +45,7 @@ class CheckboxWidget extends LinksWidget { $items[] = ['#markup' => $text]; } else { - $items[] = $this->buildListItems($result, $facet); + $items[] = $this->buildListItems($result); } } @@ -57,9 +64,12 @@ class CheckboxWidget extends LinksWidget { return $build; } - protected function buildListItems(ResultInterface $result, FacetInterface $facet) { + /** + * {@inheritdoc} + */ + protected function buildListItems(ResultInterface $result) { $items = parent::buildListItems($result); - $items['#attributes']['id'] = $facet->getUrlAlias() . '-' . $result->getRawValue(); + $items['#attributes']['id'] = $this->facet->getUrlAlias() . '-' . $result->getRawValue(); return $items; } } diff --git a/tests/src/Unit/Form/CheckboxWidgetFormTest.php b/tests/src/Unit/Form/CheckboxWidgetFormTest.php deleted file mode 100644 index aead740..0000000 --- a/tests/src/Unit/Form/CheckboxWidgetFormTest.php +++ /dev/null @@ -1,140 +0,0 @@ -setUrl(new Url('test')); - } - $original_results[1]->setActiveState(TRUE); - - $this->originalResults = $original_results; - } - - /** - * 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 CheckboxWidgetForm($facet); - $built_form = $widget_form->buildForm($form, $form_state); - - $this->assertInternalType('array', $built_form); - $this->assertCount(4, $built_form['zoo_animal']['#options']); - $this->assertEquals('checkboxes', $built_form['zoo_animal']['#type']); - - $expected_links = [ - 'llama' => 'Llama', - 'badger' => 'Badger', - 'duck' => 'Duck', - '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 CheckboxWidgetForm($facet); - $built_form = $widget_form->buildForm($form, $form_state); - - $this->assertInternalType('array', $built_form); - $this->assertCount(4, $built_form['zoo__animal']['#options']); - $expected_links = [ - 'llama' => 'Llama', - 'badger' => 'Badger', - 'duck' => 'Duck', - '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(4, $built_form['zoo__animal']['#options']); - - $expected_links = [ - 'llama' => 'Llama (10)', - 'badger' => 'Badger (20)', - 'duck' => 'Duck (15)', - '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 CheckboxWidgetForm($facet); - - $this->assertEquals('facets_checkbox_widget', $form->getBaseFormId()); - $this->assertEquals('facets_checkbox_widget__donkey', $form->getFormId()); - } - -} diff --git a/tests/src/Unit/Plugin/widget/CheckboxWidgetTest.php b/tests/src/Unit/Plugin/widget/CheckboxWidgetTest.php index c868d2d..dcd8031 100644 --- a/tests/src/Unit/Plugin/widget/CheckboxWidgetTest.php +++ b/tests/src/Unit/Plugin/widget/CheckboxWidgetTest.php @@ -2,12 +2,12 @@ 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\CheckboxWidget; use Drupal\facets\Result\Result; use Drupal\Tests\UnitTestCase; -use Symfony\Component\DependencyInjection\ContainerBuilder; /** * Unit test for widget. @@ -49,35 +49,63 @@ class CheckboxWidgetTest 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 CheckboxWidget(); } /** - * 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']); + + $this->assertEquals(['js-facets-checkbox-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']); + } + } - $built_form = $this->widget->build($facet); - $this->assertEquals('build', $built_form); + /** + * Build a formattable markup object to use in the other tests. + * + * @param $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; } } diff --git a/tests/src/Unit/Plugin/widget/LinksWidgetTest.php b/tests/src/Unit/Plugin/widget/LinksWidgetTest.php index ae2b6f4..075bcb3 100644 --- a/tests/src/Unit/Plugin/widget/LinksWidgetTest.php +++ b/tests/src/Unit/Plugin/widget/LinksWidgetTest.php @@ -237,4 +237,5 @@ class LinksWidgetTest extends UnitTestCase { } return $text; } + }