def test_when_all_query_params_are_set(self):
        limit = 5
        offset = "30"
        filters = "distance_learning,honours_award,-foundation_year,sandwich_year,-year_abroad,full_time"
        length_of_course = "3,4"
        countries = "england,wales"
        subjects = "CAH09-01-01,CAH09-01-02"
        validator = Validator(countries, filters, length_of_course, subjects,
                              limit, 100, offset)

        expected_result = {
            "countries": ["XF", "XI"],
            "distance_learning": True,
            "foundation_year": False,
            "full_time": True,
            "honours_award": True,
            "length_of_course": ["3", "4"],
            "limit": 5,
            "offset": 30,
            "sandwich_year": True,
            "subjects": ["CAH09-01-01", "CAH09-01-02"],
            "year_abroad": False,
        }
        output_result, output_error_object = validator.validate()

        self.assertEqual(expected_result, output_result)
        self.assertEqual([], output_error_object)
    def test_when_all_query_params_are_bad(self):
        limit = 200
        offset = "-30"
        filters = "illusion,Part_Time,full_time,-full_time"
        length_of_course = "-2,8,twenty"
        countries = "bolivia,-england,england"
        subjects = 32
        validator = Validator(countries, filters, length_of_course, subjects,
                              limit, 100, offset)

        expected_result = {}
        output_result, output_error_object = validator.validate()
        expected_error_object = [
            {
                "error": "limit cannot exceed maximum value of 100",
                "error_values": [{
                    "limit": 200
                }],
            },
            {
                "error":
                "offset needs to be a positive number, offset cannot be lower than 0",
                "error_values": [{
                    "offset": "-30"
                }],
            },
            {
                "error": "use of the same filter option more than once",
                "error_values": [{
                    "filters": "full_time"
                }],
            },
            {
                "error": "invalid filters",
                "error_values": [{
                    "filters": "illusion,Part_Time"
                }],
            },
            {
                "error": "use of the same countries more than once",
                "error_values": [{
                    "countries": "england"
                }],
            },
            {
                "error": "invalid countries",
                "error_values": [{
                    "countries": "bolivia"
                }]
            },
            {
                "error": "length_of_course values needs to be a number",
                "error_values": [{
                    "length_of_course": "twenty"
                }],
            },
            {
                "error":
                "length_of_course values needs to be numbers between the range of 1 and 7",
                "error_values": [{
                    "length_of_course": "-2,8"
                }],
            },
        ]

        print(f"output: {output_error_object}")

        self.assertEqual(expected_result, output_result)
        self.assertEqual(expected_error_object, output_error_object)