def test_field_lookup(self):
        field = fields.ExactSearchField("pk", field_lookup="contains")
        self.assertEqual(field.match_case, True)
        self.assertEqual(field.field_lookup, "exact")

        field = fields.ExactSearchField("pk",
                                        field_lookup="contains",
                                        match_case=False)
        self.assertEqual(field.match_case, False)
        self.assertEqual(field.field_lookup, "iexact")
    def test_simple(self):
        # basic, no frills
        field = fields.ExactSearchField("pk")
        self.assertEqual(field.field_name, "pk")
        self.assertEqual(field.match_case, True)
        self.assertEqual(field.field_lookup, "exact")

        # changes with match_case
        field = fields.ExactSearchField("pk", match_case=False)
        self.assertEqual(field.field_name, "pk")
        self.assertEqual(field.match_case, False)
        self.assertEqual(field.field_lookup, "iexact")
 def test_get_search_fields(self):
     attrs = [("field1", fields.SearchField("pk",
                                            field_lookup="istartswith")),
              ("field2",
               fields.ExactSearchField("name",
                                       match_case=False,
                                       default=True)),
              ("field3", fields.ExactSearchField("something"))]
     search_fields = filters.SearchFilterMetaclass._get_search_fields(
         (), dict(attrs))
     self.assertEqual(len(search_fields), 3)
     expected_fields = ["field2", "field3", "field1"]
     self.assertEqual(list(search_fields.keys()), expected_fields)
    def test_get_search_fields__with_aliases(self):
        test_fields = {
            "field1":
            fields.SearchField("pk", field_lookup="istartswith", aliases="f1"),
            "field2":
            fields.ExactSearchField("name", match_case=False, default=True),
            "field3":
            fields.ExactSearchField("something", aliases=["f3"])
        }

        attrs = [("field1", test_fields["field1"]),
                 ("field2", test_fields["field2"]),
                 ("field3", test_fields["field3"])]
        search_fields = filters.SearchFilterMetaclass._get_search_fields(
            (), dict(attrs))
        self.assertEqual(len(search_fields), 5)

        expected_fields = ["field2", "field3", "f3", "field1", "f1"]
        self.assertEqual(list(search_fields.keys()), expected_fields)
    def test_get_search_fields__with_bases__with_aliases(self):
        test_fields = {
            "fieldA":
            fields.IntegerSearchField("id", aliases="fa"),
            "fieldB":
            fields.RegexSearchField("title", aliases="fb"),
            "fieldZ":
            fields.BooleanSearchField("active"),
            "field1":
            fields.SearchField("pk", field_lookup="istartswith"),
            "field2":
            fields.ExactSearchField("name", match_case=False, default=True),
            "sharedfield":
            fields.ExactSearchField("something", aliases=["s"])
        }

        class Example(object):
            _search_fields = [("fieldA", test_fields["fieldA"]),
                              ("fieldB", test_fields["fieldB"]),
                              ("sharedfield", test_fields["sharedfield"])]

        class Example2(object):
            _search_fields = [("fieldZ", test_fields["fieldZ"]),
                              ("fieldB", test_fields["fieldB"]),
                              ("sharedfield", test_fields["sharedfield"])]

        bases = (Example, Example2)
        attrs = [("field1", test_fields["field1"]),
                 ("field2", test_fields["field2"]),
                 ("sharedfield", test_fields["sharedfield"])]
        search_fields = filters.SearchFilterMetaclass._get_search_fields(
            bases, dict(attrs))
        self.assertEqual(len(search_fields), 9)

        expected_fields = [
            "fieldA", "fa", "fieldZ", "fieldB", "fb", "field2", "field1",
            "sharedfield", "s"
        ]
        self.assertEqual(list(search_fields.keys()), expected_fields)