from unittest import TestCase

from distribution.managers.feed import FeedItemManager
from distribution.managers.backends import current_backend


class FeedItemManagerTestCase(TestCase):

    def setUp(self):
        current_backend.indices = {
            'distribution_feed': {
                'real_index_name': 'distribution_feed_aaaaaaaaaa'
            }
        }
        self.manager = FeedItemManager('awesome-project')
        self.initial_query = {
            'query': {
                'bool': {
                    'must': {
                        'bool': {
                            'must': [],
                            'must_not': []
                        }
                    },
                    "filter": {
                        "bool": {
                            "must": [],
                            "must_not": []
                        }

                    }
                }
            }
        }

    def test_build_query_languages_with_arguments(self):
        arguments = {
            "language": {
                "values": [
                    "example_language"
                ]
            }
        }
        expected_query = {
            'query': {
                'bool': {
                    'must': {
                        'bool': {
                            'must': [{
                                "bool": {
                                    "should": [{
                                        "bool": {
                                            "should": [{
                                                "match_phrase": {
                                                    "language": "example_language"
                                                }
                                            }],
                                            "minimum_should_match": 1
                                        },
                                    }],
                                    "minimum_should_match": 1
                                },
                            }],
                            'must_not': []
                        }
                    },
                    "filter": {
                        "bool": {
                            "must": [],
                            "must_not": []
                        }

                    }
                }
            }
        }

        self.manager._build_query_languages(self.initial_query, arguments)
        self.assertEqual(self.initial_query, expected_query)

    def test_build_query_languages_without_arguments(self):
        arguments = {
            "language": {
                "values": []
            }
        }
        expected_query = {
            'query': {
                'bool': {
                    'must': {
                        'bool': {
                            'must': [{
                                "bool": {
                                    "should": [],
                                    "minimum_should_match": 1
                                },
                            }],
                            'must_not': []
                        }
                    },
                    "filter": {
                        "bool": {
                            "must": [],
                            "must_not": []
                        }
                    }
                }
            }
        }

        self.manager._build_query_languages(self.initial_query, arguments)
        self.assertEqual(self.initial_query, expected_query)
