diff --git a/src/Plugin/facets/widget/CheckboxWidget.php b/src/Plugin/facets/widget/CheckboxWidget.php index d45da2e..877e478 100644 --- a/src/Plugin/facets/widget/CheckboxWidget.php +++ b/src/Plugin/facets/widget/CheckboxWidget.php @@ -7,14 +7,13 @@ namespace Drupal\facets\Plugin\facets\widget; -use Drupal\Core\Cache\CacheableRedirectResponse; use Drupal\Core\Form\FormInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Link; use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\Core\Url; use Drupal\facets\FacetInterface; use Drupal\facets\Widget\WidgetInterface; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Symfony\Component\HttpFoundation\RedirectResponse; /** * The checkbox / radios widget. @@ -30,14 +29,6 @@ class CheckboxWidget implements WidgetInterface, FormInterface { use StringTranslationTrait; /** - * The link generator. - * - * @var \Drupal\Core\Utility\LinkGeneratorInterface $linkGenerator - * The link generator. - */ - protected $linkGenerator; - - /** * {@inheritdoc} */ public function execute() { @@ -87,19 +78,6 @@ class CheckboxWidget implements WidgetInterface, FormInterface { } /** - * Gets the link generator. - * - * @return \Drupal\Core\Utility\LinkGeneratorInterface - * The link generator. - */ - protected function linkGenerator() { - if (!isset($this->linkGenerator)) { - $this->linkGenerator = \Drupal::linkGenerator(); - } - return $this->linkGenerator; - } - - /** * {@inheritdoc} */ public function getFormId() { @@ -163,7 +141,9 @@ class CheckboxWidget implements WidgetInterface, FormInterface { /** @var \Drupal\facets\FacetInterface $facet */ $build_info = $form_state->getBuildInfo(); $facet = $build_info['args'][0]; + $result_link = FALSE; + $active_items = []; foreach ($values[$facet->getFieldAlias()] as $key => $value) { if ($value !== 0) { @@ -178,12 +158,12 @@ class CheckboxWidget implements WidgetInterface, FormInterface { } // We have an active item, so redirecting to that page. - if ($result_link instanceof Link) { - return new CacheableRedirectResponse($result_link->toUriString()); + if ($result_link instanceof Url) { + return new RedirectResponse($result_link->toString()); } // Form was submitted, but nothing was selected, so we should submit to the // facet. - return new CacheableRedirectResponse('/' . $facet->getFacetSource()->getPath()); + return new RedirectResponse('/' . $facet->getFacetSource()->getPath()); } } diff --git a/tests/src/Unit/Plugin/widget/CheckboxWidgetTest.php b/tests/src/Unit/Plugin/widget/CheckboxWidgetTest.php index f24ee45..187dddd 100644 --- a/tests/src/Unit/Plugin/widget/CheckboxWidgetTest.php +++ b/tests/src/Unit/Plugin/widget/CheckboxWidgetTest.php @@ -7,6 +7,7 @@ namespace Drupal\Tests\facets\Unit\Plugin\widget; +use Drupal\Core\Form\FormState; use Drupal\facets\Entity\Facet; use Drupal\facets\Plugin\facets\widget\CheckboxWidget; use Drupal\facets\Result\Result; @@ -23,7 +24,7 @@ class CheckboxWidgetTest extends UnitTestCase { /** * The processor to be tested. * - * @var \drupal\facets\Widget\WidgetInterface + * @var \Drupal\facets\Plugin\facets\widget\CheckboxWidget */ protected $widget; @@ -53,19 +54,16 @@ class CheckboxWidgetTest extends UnitTestCase { } $this->originalResults = $original_results; - $link_generator = $this->getMockBuilder('\Drupal\Core\Utility\LinkGenerator') + $form_builder = $this->getMockBuilder('\Drupal\Core\Form\FormBuilder') ->disableOriginalConstructor() ->getMock(); - $link_generator->expects($this->atLeastOnce()) - ->method('generate') - ->will($this->returnArgument(0)); $string_translation = $this->getMockBuilder('\Drupal\Core\StringTranslation\TranslationManager') ->disableOriginalConstructor() ->getMock(); $container_builder = new ContainerBuilder(); - $container_builder->set('link_generator', $link_generator); + $container_builder->set('form_builder', $form_builder); $container_builder->set('string_translation', $string_translation); \Drupal::setContainer($container_builder); @@ -78,34 +76,74 @@ class CheckboxWidgetTest extends UnitTestCase { public function testDefaultSettings() { $facet = new Facet([], 'facet'); $facet->setResults($this->originalResults); - - $output = $this->widget->build($facet); - - $this->assertInternalType('array', $output); - $this->assertCount(4, $output['#items']); - - $expected_links = ['Llama', 'Badger', 'Duck', 'Alpaca']; + $facet->setFieldIdentifier('test_field'); + + $formState = new FormState(); + $formState->addBuildInfo('args', [$facet]); + $form = []; + $built_form = $this->widget->buildForm($form, $formState); + + $this->assertInternalType('array', $built_form); + $this->assertCount(4, $built_form['test_field']['#options']); + $this->assertEquals('checkboxes', $built_form['test_field']['#type']); + + $expected_links = [ + 'llama' => 'Llama', + 'badger' => 'Badger', + 'duck' => 'Duck', + 'alpaca' => 'Alpaca' + ]; foreach ($expected_links as $index => $value) { - $this->assertEquals($value, $output['#items'][$index]); + $this->assertEquals($value, $built_form['test_field']['#options'][$index]); } } /** - * Test widget with show numbers enabled. + * Test widget, make sure hiding and showing numbers works. */ - public function testShowAmount() { + public function testHideNumbers() { + $original_results = $this->originalResults; + $original_results[1]->setActiveState(TRUE); + $facet = new Facet([], 'facet'); - $facet->setResults($this->originalResults); + $facet->setResults($original_results); + $facet->setFieldIdentifier('test__field'); + $facet->setWidgetConfigs(['show_numbers' => 0]); + + $formState = new FormState(); + $formState->addBuildInfo('args', [$facet]); + $form = []; + $built_form = $this->widget->buildForm($form, $formState); + + $this->assertInternalType('array', $built_form); + $this->assertCount(4, $built_form['test__field']['#options']); + $expected_links = [ + 'llama' => 'Llama', + 'badger' => 'Badger', + 'duck' => 'Duck', + 'alpaca' => 'Alpaca' + ]; + foreach ($expected_links as $index => $value) { + $this->assertEquals($value, $built_form['test__field']['#options'][$index]); + } + + // Enable the 'show_numbers' setting again to make sure that the switch + // between those settings works. $facet->setWidgetConfigs(['show_numbers' => 1]); - $output = $this->widget->build($facet); + $built_form = $this->widget->buildForm($form, $formState); - $this->assertInternalType('array', $output); - $this->assertCount(4, $output['#items']); + $this->assertInternalType('array', $built_form); + $this->assertCount(4, $built_form['test__field']['#options']); - $expected_links = ['Llama (10)', 'Badger (20)', 'Duck (15)', 'Alpaca (9)']; + $expected_links = [ + 'llama' => 'Llama (10)', + 'badger' => 'Badger (20)', + 'duck' => 'Duck (15)', + 'alpaca' => 'Alpaca (9)', + ]; foreach ($expected_links as $index => $value) { - $this->assertEquals($value, $output['#items'][$index]); + $this->assertEquals($value, $built_form['test__field']['#options'][$index]); } }