diff --git a/src/Tests/FacetSourceTest.php b/src/Tests/FacetSourceTest.php index b23f4b7..c5f0e15 100644 --- a/src/Tests/FacetSourceTest.php +++ b/src/Tests/FacetSourceTest.php @@ -17,9 +17,21 @@ use Drupal\facets\Tests\WebTestBase as FacetWebTestBase; class FacetSourceTest extends FacetWebTestBase { /** + * {@inheritdoc} + */ + public static $modules = [ + 'views', + 'search_api', + 'search_api_test_backend', + 'facets', + 'facets_search_api_dependency', + 'facets_query_processor', + ]; + + /** * Test the facet source editing. */ - public function testFacetSource() { + public function testEditFilterKey() { // Make sure we're logged in with a user that has sufficient permissions. $this->drupalLogin($this->adminUser); @@ -31,16 +43,44 @@ class FacetSourceTest extends FacetWebTestBase { // Test the edit page. $edit = array( 'filterKey' => 'fq', - 'urlProcessor' => 'query_string', ); $this->assertField('filterKey'); $this->assertField('urlProcessor'); $this->drupalPostForm(NULL, $edit, $this->t('Save')); + $this->assertResponse(200); - // Test that saving worked. + // Test that saving worked filterkey has the new value $this->assertField('filterKey'); $this->assertField('urlProcessor'); $this->assertRaw('fq'); } + /** + * Tests editing the url processor. + */ + public function testEditUrlProcessor() { + // Make sure we're logged in with a user that has sufficient permissions. + $this->drupalLogin($this->adminUser); + + // Test the overview. + $this->drupalGet('admin/config/search/facets'); + $this->assertLink($this->t('Configure')); + $this->clickLink($this->t('Configure')); + + // Test the edit page. + $edit = array( + 'urlProcessor' => 'dummy_query', + ); + $this->assertField('filterKey'); + $this->assertField('urlProcessor'); + $this->drupalPostForm(NULL, $edit, $this->t('Save')); + $this->assertResponse(200); + + // Test that saving worked and that the url processor has the new value. + $this->assertField('filterKey'); + $this->assertField('urlProcessor'); + $elements = $this->xpath('//input[@id=:id]', [':id' => 'edit-urlprocessor-dummy-query']); + $this->assertEqual('dummy_query', $elements[0]['value']); + } + } diff --git a/src/Tests/UrlIntegrationTest.php b/src/Tests/UrlIntegrationTest.php index f451b83..64ef7b2 100644 --- a/src/Tests/UrlIntegrationTest.php +++ b/src/Tests/UrlIntegrationTest.php @@ -7,7 +7,10 @@ namespace Drupal\facets\Tests; +use Drupal\Core\Url; use Drupal\facets\Tests\WebTestBase as FacetWebTestBase; +use Drupal\facets\Entity\Facet; +use Drupal\facets\FacetSourceInterface; /** * Tests the overall functionality of the Facets admin UI. @@ -25,7 +28,6 @@ class UrlIntegrationTest extends FacetWebTestBase { 'search_api', 'search_api_test_backend', 'facets', - 'search_api_test_views', 'block', 'facets_search_api_dependency', 'facets_query_processor', @@ -65,25 +67,80 @@ class UrlIntegrationTest extends FacetWebTestBase { $this->drupalPostForm(NULL, ['facet_source_id' => 'search_api_views:search_api_test_view:page_1'], $this->t('Configure facet source')); $this->drupalPostForm(NULL, $form_values, $this->t('Save')); - // Go to the only enabled facet source's config. + $block_values = [ + 'plugin_id' => 'facet_block:' . $id, + 'settings' => [ + 'region' => 'footer', + 'id' => str_replace('_', '-', $id), + ] + ]; + $this->drupalPlaceBlock($block_values['plugin_id'], $block_values['settings']); + + $url = Url::fromUserInput('/search-api-test-fulltext', ['query' => ['f[0]' => 'facet:item']]); + $this->checkClickedFacetUrl($url); + + /** @var \Drupal\facets\FacetInterface $facet */ + $facet = Facet::load($id); + $config = $facet->getFacetSourceConfig(); + $this->assertTrue($config instanceof FacetSourceInterface); + $this->assertEqual(NULL, $config->getFilterKey()); + + $facet = NULL; + $config = NULL; + + // Go to the only enabled facet source's config and change the filter key. $this->drupalGet('admin/config/search/facets'); $this->clickLink($this->t('Configure')); $edit = [ 'filterKey' => 'y', - 'urlProcessor' => 'dummy_query', + 'urlProcessor' => 'query_string', ]; $this->drupalPostForm(NULL, $edit, $this->t('Save')); - $block_values = [ - 'plugin_id' => 'facet_block:' . $id, - 'settings' => [ - 'region' => 'footer', - 'id' => str_replace('_', '-', $id), - ] + /** @var \Drupal\facets\FacetInterface $facet */ + $facet = Facet::load($id); + $config = $facet->getFacetSourceConfig(); + $this->assertTrue($config instanceof FacetSourceInterface); + $this->assertEqual('y', $config->getFilterKey()); + + $facet = NULL; + $config = NULL; + + $url_2 = Url::fromUserInput('/search-api-test-fulltext', ['query' => ['y[0]' => 'facet:item']]); + $this->checkClickedFacetUrl($url_2); + + // Go to the only enabled facet source's config and change the url + // processor. + $this->drupalGet('admin/config/search/facets'); + $this->clickLink($this->t('Configure')); + + $edit = [ + 'filterKey' => 'y', + 'urlProcessor' => 'dummy_query', ]; - $this->drupalPlaceBlock($block_values['plugin_id'], $block_values['settings']); + $this->drupalPostForm(NULL, $edit, $this->t('Save')); + + /** @var \Drupal\facets\FacetInterface $facet */ + $facet = Facet::load($id); + $config = $facet->getFacetSourceConfig(); + $this->assertTrue($config instanceof FacetSourceInterface); + $this->assertEqual('y', $config->getFilterKey()); + + $facet = NULL; + $config = NULL; + $url_3 = Url::fromUserInput('/search-api-test-fulltext', ['query' => ['y[0]' => 'facet||item']]); + $this->checkClickedFacetUrl($url_3); + } + + /** + * Checks that the url after clicking a facet is as expected. + * + * @param \Drupal\Core\Url $url + * The expected url we end on. + */ + protected function checkClickedFacetUrl(Url $url) { $this->drupalGet('search-api-test-fulltext'); $this->assertResponse(200); $this->assertLink('item'); @@ -94,7 +151,7 @@ class UrlIntegrationTest extends FacetWebTestBase { $this->assertResponse(200); $this->assertLink('(-) item'); $this->assertNoLink('article'); - $this->assertUrl('search-api-test-fulltext', ['query' => ['y[0]' => 'facet||item']]); + $this->assertUrl($url); } } diff --git a/src/Tests/WebTestBase.php b/src/Tests/WebTestBase.php index 4116347..3b06261 100644 --- a/src/Tests/WebTestBase.php +++ b/src/Tests/WebTestBase.php @@ -40,7 +40,6 @@ abstract class WebTestBase extends SimpletestWebTestBase { 'search_api', 'search_api_test_backend', 'facets', - 'search_api_test_views', 'block', 'facets_search_api_dependency', ]; diff --git a/src/Tests/WidgetIntegrationTest.php b/src/Tests/WidgetIntegrationTest.php index 5f91902..38b7bb3 100644 --- a/src/Tests/WidgetIntegrationTest.php +++ b/src/Tests/WidgetIntegrationTest.php @@ -25,7 +25,6 @@ class WidgetIntegrationTest extends FacetWebTestBase { 'search_api', 'search_api_test_backend', 'facets', - 'search_api_test_views', 'block', 'facets_search_api_dependency', 'facets_query_processor', diff --git a/tests/facets_search_api_dependency/config/install/views.view.search_api_test_views_fulltext.yml b/tests/facets_search_api_dependency/config/install/views.view.search_api_test_views_fulltext.yml new file mode 100644 index 0000000..60311fd --- /dev/null +++ b/tests/facets_search_api_dependency/config/install/views.view.search_api_test_views_fulltext.yml @@ -0,0 +1,198 @@ +base_field: search_api_id +base_table: search_api_index_database_search_index +core: 8.x +description: '' +status: true +display: + default: + display_plugin: default + id: default + display_title: Master + position: 0 + display_options: + access: + type: none + options: { } + cache: + type: none + options: { } + query: + type: search_api_query + options: + search_api_bypass_access: false + entity_access: false + parse_mode: terms + exposed_form: + type: basic + options: + submit_button: Search + reset_button: false + reset_button_label: Reset + exposed_sorts_label: 'Sort by' + expose_sort_order: true + sort_asc_label: Asc + sort_desc_label: Desc + pager: + type: full + options: + items_per_page: 10 + offset: 0 + id: 0 + total_pages: null + expose: + items_per_page: false + items_per_page_label: 'Items per page' + items_per_page_options: '5, 10, 20, 40, 60' + items_per_page_options_all: false + items_per_page_options_all_label: '- All -' + offset: false + offset_label: Offset + tags: + previous: '‹ previous' + next: 'next ›' + first: '« first' + last: 'last »' + quantity: 9 + style: + type: default + row: + type: search_api + options: + view_modes: + bundle: + 'article': default + 'page': default + datasource: + 'entity:entity_test': default + fields: + search_api_id: + table: search_api_index_database_search_index + field: search_api_id + id: search_api_id + plugin_id: numeric + relationship: none + group_type: group + admin_label: '' + label: 'Entity ID' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: true + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + set_precision: false + precision: 0 + decimal: . + separator: ',' + format_plural: false + format_plural_string: "1\x03@count" + prefix: '' + suffix: '' + filters: + search_api_fulltext: + id: search_api_fulltext + table: search_api_index_database_search_index + field: search_api_fulltext + relationship: none + group_type: group + admin_label: '' + operator: and + value: '' + group: 1 + exposed: true + expose: + operator_id: search_api_fulltext_op + label: 'Fulltext search' + description: '' + use_operator: false + operator: search_api_fulltext_op + identifier: search_api_fulltext + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '0' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + min_length: 0 + fields: { } + plugin_id: search_api_fulltext + sorts: { } + title: 'Fulltext test index' + header: + result: + id: result + table: views + field: result + relationship: none + group_type: group + admin_label: '' + empty: false + content: 'Displaying @total search results' + plugin_id: result + footer: { } + empty: { } + relationships: { } + arguments: { } + page_1: + display_plugin: page + id: page_1 + display_title: Page + position: 1 + display_options: + path: search-api-test-fulltext +label: 'Search API Test Fulltext search view' +module: views +id: search_api_test_view +tag: '' +langcode: en +dependencies: + module: + - search_api + - facets_search_api_dependency diff --git a/tests/facets_search_api_dependency/facets_search_api_dependency.info.yml b/tests/facets_search_api_dependency/facets_search_api_dependency.info.yml index 7f57da6..69ceeeb 100644 --- a/tests/facets_search_api_dependency/facets_search_api_dependency.info.yml +++ b/tests/facets_search_api_dependency/facets_search_api_dependency.info.yml @@ -5,4 +5,6 @@ package: 'Search' core: 8.x hidden: true dependencies: - - search_api + - search_api:search_api + - search_api:search_api_test_db + - drupal:views