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;
}
+
}