def test_decimal_filters_gte(self):
        valid_data = {
            "integer_choice_field": 2,
            "boolean_field": True,
            "nullboolean_field": False,
            "char_field": "demo",
            "choice_field": "foo",
            "text_field": "admin",
            "slug_field": "a-slug",
        }

        invalid_data = {
            "integer_choice_field": 2,
            "boolean_field": True,
            "nullboolean_field": False,
            "char_field": "demo",
            "choice_field": "foo",
            "text_field": "admin",
            "slug_field": "a-slug",
        }

        for i in range(10):
            ExampleModelOneFactory(decimal_field=1 + i * 0.1, **valid_data)

        for i in range(10):
            ExampleModelOneFactory(decimal_field=i * 0.1, **invalid_data)

        response = self.client.get(self.url + "?decimal_field=1:")

        self.assertEqual(response.data["total_result_count"], 10)

        for result in response.data["results"]:
            self.assertTrue(Decimal(result["decimal_field"]) >= 1)
    def test_date_field_fitlering_range(self):
        ExampleModelOneFactory(
            date_field=date(year=2018, month=1, day=1), boolean_field=True
        )
        ExampleModelOneFactory(
            date_field=date(year=2018, month=2, day=1), boolean_field=True
        )
        ExampleModelOneFactory(
            date_field=date(year=2018, month=3, day=1), boolean_field=True
        )
        ExampleModelOneFactory(
            date_field=date(year=2018, month=4, day=1), boolean_field=True
        )

        response = self.client.get(self.url + "?date_field=2018-02-01:2018-04-01")

        self.assertEqual(response.data["total_result_count"], 3)

        self.assertIn(
            "2018-02-01", [result["date_field"] for result in response.data["results"]]
        )
        self.assertIn(
            "2018-03-01", [result["date_field"] for result in response.data["results"]]
        )
        self.assertIn(
            "2018-04-01", [result["date_field"] for result in response.data["results"]]
        )
    def test_integer_filters_equal(self):
        valid_data = {
            "integer_field": 1,
            "integer_choice_field": 2,
            "float_field": 10.0,
            "decimal_field": Decimal("10"),
            "boolean_field": True,
            "nullboolean_field": False,
            "char_field": "demo",
            "choice_field": "foo",
            "text_field": "admin",
            "slug_field": "a-slug",
        }

        invalid_data = {
            "integer_field": 2,
            "integer_choice_field": 2,
            "float_field": 10.0,
            "decimal_field": Decimal("10"),
            "boolean_field": True,
            "nullboolean_field": False,
            "char_field": "demo",
            "choice_field": "foo",
            "text_field": "admin",
            "slug_field": "a-slug",
        }

        ExampleModelOneFactory(**valid_data)
        ExampleModelOneFactory(**invalid_data)
        response = self.client.get(self.url + "?integer_field=1")

        self.assertEqual(response.data["total_result_count"], 1)
        self.assertEqual(response.data["results"][0]["integer_field"], 1)
    def test_boolean_filter_false(self):
        ExampleModelOneFactory(boolean_field=True)
        ExampleModelOneFactory(boolean_field=False)

        response = self.client.get(self.url + "?boolean_field=false")

        self.assertEqual(response.data["total_result_count"], 1)
        self.assertFalse(response.data["results"][0]["boolean_field"])
    def test_foreign_key_field_filtering(self):
        em2 = ExampleModelTwoFactory()

        ExampleModelOneFactory(other_model=em2, boolean_field=True)
        ExampleModelOneFactory(boolean_field=True)

        response = self.client.get(self.url + "?other_model=" + str(em2.uuid))

        self.assertEqual(response.data["total_result_count"], 1)
    def test_slug_field_filter(self):
        ExampleModelOneFactory(slug_field="Hooray", boolean_field=True)
        ExampleModelOneFactory(slug_field="hoor", boolean_field=True)
        ExampleModelOneFactory(slug_field="athoor", boolean_field=True)
        ExampleModelOneFactory(slug_field="Stuff", boolean_field=True)

        response = self.client.get(self.url + "?slug_field=hoor")

        self.assertEqual(response.data["total_result_count"], 3)
    def test_nullboolean_filter_true(self):
        ExampleModelOneFactory(nullboolean_field=True, boolean_field=True)
        ExampleModelOneFactory(nullboolean_field=False, boolean_field=True)
        ExampleModelOneFactory(nullboolean_field=None, boolean_field=True)

        response = self.client.get(self.url + "?nullboolean_field=true")

        self.assertEqual(response.data["total_result_count"], 1)
        self.assertTrue(response.data["results"][0]["nullboolean_field"])
    def test_ordering_boolean_field_desc(self):
        ExampleModelOneFactory.create(boolean_field=True)
        ExampleModelOneFactory.create(boolean_field=False)
        ExampleModelOneFactory.create(boolean_field=True)
        ExampleModelOneFactory.create(boolean_field=False)
        ExampleModelOneFactory.create(boolean_field=True)

        response = self.client.get(self.url, {"_order": "-boolean_field"})

        self.assertEqual(response.data["results"][4]["boolean_field"], False)
        self.assertEqual(response.data["results"][3]["boolean_field"], False)
        self.assertEqual(response.data["results"][2]["boolean_field"], True)
        self.assertEqual(response.data["results"][1]["boolean_field"], True)
        self.assertEqual(response.data["results"][0]["boolean_field"], True)
    def test_many_to_many_field_filtering(self):
        em2 = ExampleModelTwoFactory(name="Test Item")

        valid_model = ExampleModelOneFactory(other_model=em2, boolean_field=True)

        ExampleModelOneFactory(boolean_field=True)

        valid_model.many_to_many_field.add(em2)

        response = self.client.get(self.url + "?many_to_many_field=" + str(em2.uuid))

        self.assertEqual(response.data["total_result_count"], 1)
        self.assertEqual(
            response.data["results"][0]["many_to_many_field"], ["Test Item"]
        )
    def test_ordering_integer_field_desc(self):
        ExampleModelOneFactory.create(integer_field=4)
        ExampleModelOneFactory.create(integer_field=5)
        ExampleModelOneFactory.create(integer_field=3)
        ExampleModelOneFactory.create(integer_field=1)
        ExampleModelOneFactory.create(integer_field=2)

        response = self.client.get(self.url, {"_order": "-integer_field"})

        self.assertEqual(response.data["total_result_count"], 5)
        self.assertEqual(response.data["results"][0]["integer_field"], 5)
        self.assertEqual(response.data["results"][1]["integer_field"], 4)
        self.assertEqual(response.data["results"][2]["integer_field"], 3)
        self.assertEqual(response.data["results"][3]["integer_field"], 2)
        self.assertEqual(response.data["results"][4]["integer_field"], 1)
예제 #11
0
    def test_char_field_multiple_variables(self):
        ExampleModelOneFactory(char_field="Hooray", boolean_field=True)
        ExampleModelOneFactory(char_field="hoor", boolean_field=True)
        ExampleModelOneFactory(char_field="hank", boolean_field=True)
        ExampleModelOneFactory(char_field="rank", boolean_field=True)
        ExampleModelOneFactory(char_field="Stuff", boolean_field=True)

        response = self.client.get(self.url +
                                   "?char_field=hoor&char_field=ank")

        self.assertEqual(response.data["total_result_count"], 4)
        for result in response.data["results"]:
            # Checks all results either contain hoor or ank
            # Lower is used so the check is case insensitive
            self.assertTrue("hoor" in result["char_field"].lower()
                            or "ank" in result["char_field"].lower())
    def test_ordering_decimal_field(self):
        ExampleModelOneFactory.create(decimal_field=Decimal("1.4"))
        ExampleModelOneFactory.create(decimal_field=Decimal("1.5"))
        ExampleModelOneFactory.create(decimal_field=Decimal("1.3"))
        ExampleModelOneFactory.create(decimal_field=Decimal("1.1"))
        ExampleModelOneFactory.create(decimal_field=Decimal("1.2"))

        response = self.client.get(self.url, {"_order": "decimal_field"})

        self.assertEqual(response.data["total_result_count"], 5)

        self.assertEqual(response.data["results"][0]["decimal_field"], "1.10")
        self.assertEqual(response.data["results"][1]["decimal_field"], "1.20")
        self.assertEqual(response.data["results"][2]["decimal_field"], "1.30")
        self.assertEqual(response.data["results"][3]["decimal_field"], "1.40")
        self.assertEqual(response.data["results"][4]["decimal_field"], "1.50")
예제 #13
0
    def test_general_query(self):
        obj = ExampleModelOneFactory.create(char_field="foobar")

        response = self.client.get(self.url)

        self.assertEqual(response.data["results"][0]["_detail_url"],
                         obj.get_admin_detail_url())
    def test_ordering_float_field_desc(self):
        ExampleModelOneFactory.create(float_field=1.4)
        ExampleModelOneFactory.create(float_field=1.5)
        ExampleModelOneFactory.create(float_field=1.3)
        ExampleModelOneFactory.create(float_field=1.1)
        ExampleModelOneFactory.create(float_field=1.2)

        response = self.client.get(self.url, {"_order": "-float_field"})

        self.assertEqual(response.data["total_result_count"], 5)

        self.assertEqual(response.data["results"][4]["float_field"], 1.1)
        self.assertEqual(response.data["results"][3]["float_field"], 1.2)
        self.assertEqual(response.data["results"][2]["float_field"], 1.3)
        self.assertEqual(response.data["results"][1]["float_field"], 1.4)
        self.assertEqual(response.data["results"][0]["float_field"], 1.5)
    def test_general_query(self):
        ExampleModelOneFactory.create(char_field="foobar")
        ExampleModelOneFactory.create(text_field="dobeefoobee")
        ExampleModelOneFactory.create(slug_field="lafoot")
        ExampleModelOneFactory.create(text_field="")

        response = self.client.get(self.url, {"_q": "foo"})

        self.assertEqual(response.data["total_result_count"], 3)
예제 #16
0
    def test_pagination_info_string(self):
        date_time = datetime.now()

        foreign_model = ExampleModelTwoFactory()
        ExampleModelOneFactory.create_batch(60)

        response = self.client.get(self.url, {})

        self.assertEqual(
            response.data["meta"]["footer_info"],
            ("page_result_count 50 "
             "total_result_count 60 "
             "current_page 1 "
             "page_count 2 "
             "first_result_count 1 "
             "last_result_count 50 "
             "per_page 50 "),
        )
    def test_date_field_fitlering_equal(self):
        ExampleModelOneFactory(
            date_field=date(year=2018, month=1, day=1), boolean_field=True
        )
        ExampleModelOneFactory(
            date_field=date(year=2018, month=2, day=1), boolean_field=True
        )
        ExampleModelOneFactory(
            date_field=date(year=2018, month=3, day=1), boolean_field=True
        )
        ExampleModelOneFactory(
            date_field=date(year=2018, month=4, day=1), boolean_field=True
        )

        response = self.client.get(self.url + "?date_field=2018-01-01")

        self.assertEqual(response.data["total_result_count"], 1)

        self.assertEqual(response.data["results"][0]["date_field"], "2018-01-01")
    def test_integer_filters_range(self):
        valid_data = {
            "integer_choice_field": 2,
            "float_field": 10.0,
            "decimal_field": Decimal("10"),
            "boolean_field": True,
            "nullboolean_field": False,
            "char_field": "demo",
            "choice_field": "foo",
            "text_field": "admin",
            "slug_field": "a-slug",
        }

        invalid_data = {
            "integer_choice_field": 2,
            "float_field": 10.0,
            "decimal_field": Decimal("10"),
            "boolean_field": True,
            "nullboolean_field": False,
            "char_field": "demo",
            "choice_field": "foo",
            "text_field": "admin",
            "slug_field": "a-slug",
        }

        for i in range(10):
            ExampleModelOneFactory(integer_field=i + 10, **valid_data)

        for i in range(10):
            ExampleModelOneFactory(integer_field=i, **invalid_data)

        for i in range(10):
            ExampleModelOneFactory(integer_field=i + 21, **invalid_data)

        response = self.client.get(self.url + "?integer_field=10:20")

        self.assertEqual(response.data["total_result_count"], 10)

        for result in response.data["results"]:
            self.assertTrue(result["integer_field"] >= 10)
            self.assertTrue(result["integer_field"] <= 20)
    def test_getting_data_fields_present(self):
        date_time = datetime.now()

        foreign_model = ExampleModelTwoFactory()
        test_model_1 = ExampleModelOneFactory(
            integer_field=1,
            integer_choice_field=2,
            float_field=10.0,
            decimal_field=Decimal("10"),
            boolean_field=True,
            nullboolean_field=False,
            char_field="demo",
            choice_field="foo",
            text_field="admin",
            slug_field="a-slug",
            date_field=date_time.date(),
            other_model=foreign_model,
        )
        test_model_1.many_to_many_field.add(foreign_model)

        response = self.client.get(self.url, {})

        self.assertEqual(response.data["total_result_count"], 1)
        self.assertEqual(response.data["next"], None)
        self.assertEqual(response.data["previous"], None)

        result = response.data["results"][0]

        self.assertEqual(result["integer_field"], 1)
        self.assertEqual(result["integer_choice_field"], 2)
        self.assertEqual(result["float_field"], 10.0)
        self.assertEqual(result["decimal_field"], "10.00")
        self.assertEqual(result["boolean_field"], True)
        self.assertEqual(result["nullboolean_field"], False)
        self.assertEqual(result["char_field"], "demo")
        self.assertEqual(result["choice_field"], "foo")
        self.assertEqual(result["text_field"], "admin")
        self.assertEqual(result["slug_field"], "a-slug")
        self.assertEqual(result["date_field"], str(date_time.date()))
        self.assertEqual(result["other_model__name"], foreign_model.name)
        self.assertEqual(result["other_model__number"], foreign_model.number)
    def test_ordering_slug_field(self):
        ExampleModelOneFactory.create(slug_field="echo")
        ExampleModelOneFactory.create(slug_field="delta")
        ExampleModelOneFactory.create(slug_field="alpha")
        ExampleModelOneFactory.create(slug_field="charlie")
        ExampleModelOneFactory.create(slug_field="foxtrot")
        ExampleModelOneFactory.create(slug_field="beta")

        response = self.client.get(self.url, {"_order": "-slug_field"})

        self.assertEqual(response.data["results"][5]["slug_field"], "alpha")
        self.assertEqual(response.data["results"][4]["slug_field"], "beta")
        self.assertEqual(response.data["results"][3]["slug_field"], "charlie")
        self.assertEqual(response.data["results"][2]["slug_field"], "delta")
        self.assertEqual(response.data["results"][1]["slug_field"], "echo")
        self.assertEqual(response.data["results"][0]["slug_field"], "foxtrot")