def test_date_time_datetime(self):
        filter = FilterBuilder()
        filter.date_time(
            "updated_since",
            datetime(year=2020, month=10, day=17, hour=13, minute=14,
                     second=7))

        assert filter.build() == "&updated_since=2020-10-17T13:14:07"
    def test_between_datetime_object(self):
        filter = FilterBuilder()
        filter.between("start_date",
                       min=datetime(year=2020,
                                    month=10,
                                    day=17,
                                    hour=13,
                                    minute=14))

        assert filter.build() == "&search[start_date]=2020-10-17"
    def test_between_min_max(self):
        filter = FilterBuilder()
        filter.between("amount", 1, 10)

        assert filter.build() == "&search[amount_min]=1&search[amount_max]=10"
    def test_like(self):
        filter = FilterBuilder()
        filter.like("user_like", "leaf")

        assert filter.build() == "&search[user_like]=leaf"
    def test_in_list__pluralized(self):
        filter = FilterBuilder()
        filter.in_list("userid", [1, 2])

        assert filter.build() == "&search[userids][]=1&search[userids][]=2"
    def test_equals__project(self):
        filter = FilterBuilder()
        filter.equals("username", "Bob")

        assert filter.build("ProjectResource") == "&username=Bob"
    def test_equals__resource_not_specified(self):
        filter = FilterBuilder()
        filter.equals("username", "Bob")

        assert filter.build() == "&search[username]=Bob"
    def test_equals__accounting(self):
        filter = FilterBuilder()
        filter.equals("username", "Bob")

        assert filter.build("AccountingResource") == "&search[username]=Bob"
    def test_boolean_false(self):
        filter = FilterBuilder()
        filter.boolean("active", False)

        assert filter.build() == "&active=False"
    def test_boolean_true(self):
        filter = FilterBuilder()
        filter.boolean("active", True)

        assert filter.build() == "&active=True"
        assert str(filter) == "FilterBuilder(&active=True)"
    def test_date_time_string(self):
        filter = FilterBuilder()
        filter.date_time("updated_since", "2020-10-17T13:14:07")

        assert filter.build() == "&updated_since=2020-10-17T13:14:07"
    def test_between_date_string(self):
        filter = FilterBuilder()
        filter.between("start_date", min="2020-10-17")

        assert filter.build() == "&search[start_date]=2020-10-17"
    def test_between_max_specified(self):
        filter = FilterBuilder()
        filter.between("amount_max", max=10)

        assert filter.build() == "&search[amount_max]=10"
    def test_between_min_specified(self):
        filter = FilterBuilder()
        filter.between("amount_min", min=1)

        assert filter.build() == "&search[amount_min]=1"