def test_with_distinct_counts_raises_when_queryset_includes_unsupported_options(
            self):
        """
        Verify that an error is raised if the original queryset includes options that are not supported by our
        custom Search class.
        """
        dc_queryset = DistinctCountsSearchQuerySet.from_queryset(
            DSLFacetedSearch())
        with pytest.raises(RuntimeError) as err:
            facet_field = 'start'
            agg_filter = ESDSLQ('match_all')
            agg = DateHistogramFacet(field=facet_field, interval='month')
            dc_queryset.aggs.bucket('_filter_' + facet_field,
                                    'filter',
                                    filter=agg_filter).bucket(
                                        facet_field, agg.get_aggregation())
            dc_queryset.with_distinct_counts('aggregation_key')
        assert str(
            err.value
        ) == 'DistinctCountsSearchQuerySet does not support date facets.'

        dc_queryset = DistinctCountsSearchQuerySet.from_queryset(
            DSLFacetedSearch())
        with pytest.raises(RuntimeError) as err:
            facet_field = 'pacing_type'
            agg_filter = ESDSLQ('match_all')
            agg = TermsFacet(field=facet_field, order='term')
            dc_queryset.aggs.bucket('_filter_' + facet_field,
                                    'filter',
                                    filter=agg_filter).bucket(
                                        facet_field, agg.get_aggregation())
            dc_queryset.with_distinct_counts('aggregation_key')
        assert 'DistinctCountsSearchQuerySet only supports a limited set of field facet options.' in str(
            err.value)
    def test_search_raises_when_called_with_date_facet(self):
        queryset = DistinctCountsSearchQuerySet(
            index=CourseRunDocument._index._name)
        facet_field = 'start'
        agg_filter = ESDSLQ('match_all')
        agg = DateHistogramFacet(field=facet_field, interval='month')
        queryset.aggs.bucket('_filter_' + facet_field,
                             'filter',
                             filter=agg_filter).bucket(facet_field,
                                                       agg.get_aggregation())
        backend = DistinctCountsElasticsearchQueryWrapper(
            queryset, 'aggregation_key')

        querystring = queryset.to_dict()
        with pytest.raises(RuntimeError) as err:
            backend.search(querystring)
        assert 'does not support date facets' in str(err.value)
    def test_validate_raises_when_configured_with_date_facet(self):
        """ Verify that validate raises when Query configured with date facet."""

        # The add date facet action on DistinctCountsSearchQuerySet raises, so configure a date facet
        # on a normal FacetedSearch or Search and then clone it to a DistinctCountsSearchQuerySet.
        queryset = FacetedSearch(index=CourseRunDocument._index._name)
        facet_field = 'start'
        agg_filter = ESDSLQ('match_all')
        agg = DateHistogramFacet(field=facet_field, interval='month')
        queryset.aggs.bucket('_filter_' + facet_field,
                             'filter',
                             filter=agg_filter).bucket(facet_field,
                                                       agg.get_aggregation())

        queryset = queryset._clone(klass=DistinctCountsSearchQuerySet)
        queryset.aggregation_key = 'aggregation_key'

        with pytest.raises(RuntimeError) as err:
            queryset.validate()
        assert 'does not support date facets' in str(err.value)