def test_filter_groups_have_correct_state_when_changed(self):
        request = self._get_request_for_params({
            'q': 'email',
            'lot': 'paas',
            'booleanExample1': 'true'
        })

        search_filters = list(filters_for_lot('paas', g6_builder).values())
        set_filter_states(search_filters, request)

        assert search_filters[0] == {
            'label': 'Booleans example',
            'slug': 'booleans-example',
            'filters': [
                {
                    'checked': True,
                    'label': 'Option 1',
                    'name': 'booleanExample1',
                    'id': 'booleanExample1',
                    'value': 'true',
                },
                {
                    'checked': False,
                    'label': 'Option 2',
                    'name': 'booleanExample2',
                    'id': 'booleanExample2',
                    'value': 'true',
                },
            ],
        }
示例#2
0
def setup_module(module):
    # TODO we should have example subset search_filter manifests as fixtures
    content_loader.load_manifest('g-cloud-6', 'services',
                                 'services_search_filters')
    content_loader.load_manifest('g-cloud-9', 'services',
                                 'services_search_filters')

    module.filter_groups = filters_for_lot(
        "saas",
        content_loader.get_manifest('g-cloud-6',
                                    'services_search_filters')).values()

    module.g9_filter_groups = filters_for_lot(
        'cloud-software',
        content_loader.get_manifest('g-cloud-9',
                                    'services_search_filters')).values()
    def test_instance_has_correct_filter_groups_for_iaas(self):
        search_filters = filters_for_lot('iaas', g6_builder).values()

        filter_group_labels = [
            group['label'] for group in search_filters
        ]

        assert 'Booleans example' not in filter_group_labels
        assert 'Checkboxes example' in filter_group_labels
        assert 'Radios example' in filter_group_labels
 def test_filters_with_filter_label_but_no_value(self):
     checkboxes_filter_group = filters_for_lot('cloud-software', g9_builder)['categories-example']
     filter_with_special_label = None
     for some_filter in checkboxes_filter_group['filters']:
         if some_filter['label'] == 'Option 6 filter label':
             filter_with_special_label = some_filter
             break
     assert filter_with_special_label is not None
     assert filter_with_special_label['id'] == 'checkboxTreeExample-option-6'
     assert filter_with_special_label['value'] == 'option 6'
 def test_filters_with_values(self):
     checkboxes_filter_group = filters_for_lot('cloud-software', g9_builder)['categories-example']
     filter_with_value = None
     for some_filter in checkboxes_filter_group['filters']:
         if some_filter['label'] == 'Option 4 has a value':
             filter_with_value = some_filter
             break
     assert filter_with_value is not None
     assert filter_with_value['id'] == 'checkboxTreeExample-option_4_value'
     assert filter_with_value['value'] == 'option_4_value'
 def test_filters_with_commas(self):
     checkboxes_filter_group = filters_for_lot('cloud-software', g9_builder)['categories-example']
     filter_with_comma = None
     for some_filter in checkboxes_filter_group['filters']:
         if some_filter['label'] == 'Option 3, with comma':
             filter_with_comma = some_filter
             break
     assert filter_with_comma is not None
     assert filter_with_comma['id'] == 'checkboxTreeExample-option-3-with-comma'
     assert filter_with_comma['value'] == 'option 3 with comma'
    def setup_method(self, method):
        super().setup_method(method)

        self.framework = self._get_framework_fixture_data('g-cloud-9')['frameworks']
        self.category_filter_group = filters_for_lot('cloud-software', g9_builder)['categories-example']
        # in these tests, the key 'category' key is 'checkboxTreeExample'

        self.search_api_client_patch = mock.patch(
            'app.main.views.g_cloud.search_api_client', autospec=True
        )
        self.search_api_client = self.search_api_client_patch.start()
        self.search_api_client.aggregate.return_value = _get_g9_aggregations_fixture_data()
    def test_request_filters_are_set(self):
        search_filters = list(filters_for_lot('saas', g6_builder).values())
        request = self._get_request_for_params({
            'q': 'email',
            'booleanExample1': 'true'
        })

        set_filter_states(search_filters, request)
        assert search_filters[0]['filters'][0]['name'] == 'booleanExample1'
        assert search_filters[0]['filters'][0]['checked'] is True
        assert search_filters[0]['filters'][1]['name'] == 'booleanExample2'
        assert search_filters[0]['filters'][1]['checked'] is False
    def __init__(self,
                 search_api_client,
                 search_api_url,
                 frameworks_by_slug,
                 include_markup=False):
        # Get core data
        self.framework_slug = search_api_client.get_index_from_search_api_url(
            search_api_url)
        framework = frameworks_by_slug[self.framework_slug]
        content_manifest = content_loader.get_manifest(
            self.framework_slug, 'services_search_filters')
        lots_by_slug = get_lots_by_slug(framework)

        # We need to get buyer-frontend query params from our saved search API URL.
        search_query_params = search_api_client.get_frontend_params_from_search_api_url(
            search_api_url)
        search_query_params = ungroup_request_filters(search_query_params,
                                                      content_manifest)
        search_query_params_multidict = MultiDict(search_query_params)

        current_lot_slug = search_query_params_multidict.get('lot', None)
        filters = filters_for_lot(current_lot_slug,
                                  content_manifest,
                                  all_lots=framework['lots'])
        clean_request_query_params = clean_request_args(
            search_query_params_multidict, filters.values(), lots_by_slug)

        # Now build the buyer-frontend URL representing the saved Search API URL
        self.url = construct_url_from_base_and_params(
            url_for('main.search_services'), search_query_params)

        # Get the saved Search API URL result set and build the search summary.
        search_api_response = search_api_client._get(search_api_url)
        self.search_summary = SearchSummary(
            search_api_response['meta']['total'],
            clean_request_query_params.copy(), filters.values(), lots_by_slug)
 def _get_filter_group_by_label(self, lot, label):
     filter_groups = filters_for_lot(lot, g6_builder, all_lots=_get_framework_lots('g-cloud-6'))
     for filter_group in filter_groups.values():
         if filter_group['label'] == label:
             return filter_group