def test_hash_identical_values_different_facet_type(self):
        """
        Facets with same key/values but different facet type in different order shouldn't have same hash
        """
        facet_1 = [{
            'type':
            'and',
            'facets': [{
                'key': 'sector',
                'value': 'Technology'
            }, {
                'key': 'industry',
                'value': 'Software'
            }]
        }]

        facet_2 = [{
            'type':
            'or',
            'facets': [{
                'key': 'industry',
                'value': 'Software'
            }, {
                'key': 'sector',
                'value': 'Technology'
            }]
        }]

        facet_1_hash = Autocompleter.hash_facets(facet_1)
        facet_2_hash = Autocompleter.hash_facets(facet_2)
        self.assertNotEqual(facet_1_hash, facet_2_hash)
    def test_hashing_order(self):
        """
        Facets with identical key/values in different order should still have same hash
        """
        facet_1 = [{
            'type':
            'or',
            'facets': [{
                'key': 'sector',
                'value': 'Technology'
            }, {
                'value': 'Software',
                'key': 'industry'
            }]
        }]

        facet_2 = [{
            'type':
            'or',
            'facets': [{
                'key': 'industry',
                'value': 'Software'
            }, {
                'key': 'sector',
                'value': 'Technology'
            }]
        }]

        facet_1_hash = Autocompleter.hash_facets(facet_1)
        facet_2_hash = Autocompleter.hash_facets(facet_2)
        self.assertEqual(facet_1_hash, facet_2_hash)
    def test_hash_identical_values_different_facet_type(self):
        """
        Facets with same key/values but different facet type in different order shouldn't have same hash
        """
        facet_1 = [
            {
                'type': 'and',
                'facets': [
                    {'key': 'sector', 'value': 'Technology'},
                    {'key': 'industry', 'value': 'Software'}
                ]
            }
        ]

        facet_2 = [
            {
                'type': 'or',
                'facets': [
                    {'key': 'industry', 'value': 'Software'},
                    {'key': 'sector', 'value': 'Technology'}
                ]
            }
        ]

        facet_1_hash = Autocompleter.hash_facets(facet_1)
        facet_2_hash = Autocompleter.hash_facets(facet_2)
        self.assertNotEqual(facet_1_hash, facet_2_hash)
    def test_hashing_order(self):
        """
        Facets with identical key/values in different order should still have same hash
        """
        facet_1 = [
            {
                'type': 'or',
                'facets': [
                    {'key': 'sector', 'value': 'Technology'},
                    {'key': 'industry', 'value': 'Software'}
                ]
            }
        ]

        facet_2 = [
            {
                'type': 'or',
                'facets': [
                    {'key': 'industry', 'value': 'Software'},
                    {'key': 'sector', 'value': 'Technology'}
                ]
            }
        ]

        facet_1_hash = Autocompleter.hash_facets(facet_1)
        facet_2_hash = Autocompleter.hash_facets(facet_2)
        self.assertEqual(facet_1_hash, facet_2_hash)
    def test_multiple_facets_hashing_order(self):
        """
        A facet list with multiple facets should have same hash when key/values are identical regardless of order
        """
        facet_1 = [{
            'type':
            'or',
            'facets': [{
                'value': 'Technology',
                'key': 'sector'
            }, {
                'value': 'Software',
                'key': 'industry'
            }]
        }, {
            'type':
            'and',
            'facets': [{
                'key': 'sector',
                'value': 'Energy'
            }, {
                'key': 'industry',
                'value': 'Oil & Gas Integrated'
            }]
        }]

        facet_2 = [
            {
                'type':
                'and',
                'facets': [{
                    'key': 'industry',
                    'value': 'Oil & Gas Integrated'
                }, {
                    'key': 'sector',
                    'value': 'Energy'
                }]
            },
            {
                'type':
                'or',
                'facets': [{
                    'value': 'Technology',
                    'key': 'sector'
                }, {
                    'key': 'industry',
                    'value': 'Software'
                }]
            },
        ]

        facet_1_hash = Autocompleter.hash_facets(facet_1)
        facet_2_hash = Autocompleter.hash_facets(facet_2)
        self.assertEqual(facet_1_hash, facet_2_hash)
 def test_facet_identity_hash(self):
     """
     Hashing a facet should equal the hash of an earlier call
     """
     facets = [
         {
             'type': 'or',
             'facets': [{'key': 'sector', 'value': 'Technology'}]
         }
     ]
     first_hash = Autocompleter.hash_facets(facets)
     second_hash = Autocompleter.hash_facets(facets)
     self.assertEqual(first_hash, second_hash)
 def test_facet_identity_hash(self):
     """
     Hashing a facet should equal the hash of an earlier call
     """
     facets = [{
         'type': 'or',
         'facets': [{
             'key': 'sector',
             'value': 'Technology'
         }]
     }]
     first_hash = Autocompleter.hash_facets(facets)
     second_hash = Autocompleter.hash_facets(facets)
     self.assertEqual(first_hash, second_hash)
    def test_hashing_facet_type(self):
        """
        Facet list with same sub facets but different type should not have equal hashes
        """
        and_facet = [
            {
                'type': 'and',
                'facets': [{'key': 'sector', 'value': 'Technology'}]
            }
        ]

        or_facet = [
            {
                'type': 'or',
                'facets': [{'key': 'sector', 'value': 'Technology'}]
            }
        ]
        and_hash = Autocompleter.hash_facets(and_facet)
        or_hash = Autocompleter.hash_facets(or_facet)
        self.assertNotEqual(and_hash, or_hash)
    def test_multiple_facets_hashing_order(self):
        """
        A facet list with multiple facets should have same hash when key/values are identical regardless of order
        """
        facet_1 = [
            {
                'type': 'or',
                'facets': [
                    {'key': 'sector', 'value': 'Technology'},
                    {'key': 'industry', 'value': 'Software'}
                ]
            },
            {
                'type': 'and',
                'facets': [
                    {'key': 'sector', 'value': 'Energy'},
                    {'key': 'industry', 'value': 'Oil & Gas Integrated'}
                ]
            }
        ]

        facet_2 = [
            {
                'type': 'and',
                'facets': [
                    {'key': 'industry', 'value': 'Oil & Gas Integrated'},
                    {'key': 'sector', 'value': 'Energy'}
                ]
            },
            {
                'type': 'or',
                'facets': [
                    {'key': 'sector', 'value': 'Technology'},
                    {'key': 'industry', 'value': 'Software'}
                ]
            },
        ]

        facet_1_hash = Autocompleter.hash_facets(facet_1)
        facet_2_hash = Autocompleter.hash_facets(facet_2)
        self.assertEqual(facet_1_hash, facet_2_hash)
    def test_hashing_facet_type(self):
        """
        Facet list with same sub facets but different type should not have equal hashes
        """
        and_facet = [{
            'type': 'and',
            'facets': [{
                'key': 'sector',
                'value': 'Technology'
            }]
        }]

        or_facet = [{
            'type': 'or',
            'facets': [{
                'key': 'sector',
                'value': 'Technology'
            }]
        }]
        and_hash = Autocompleter.hash_facets(and_facet)
        or_hash = Autocompleter.hash_facets(or_facet)
        self.assertNotEqual(and_hash, or_hash)