예제 #1
0
    def test_validate_arguments_with_empty_arguments_raises(self):
        arguments = {}

        with self.assertRaises(ValidationError) as context:
            _ = validate_arguments(arguments)

        self.assertEqual(context.exception.message,
                         "missing required arguments")
        self.assertEqual(context.exception.fields, ["address", "zipcode"])
예제 #2
0
    def test_validate_arguments_with_extra_keys_raises(self):
        arguments = {
            "zipcode": "90210",
            "address": "100 One Hundred Dr.",
            "extra_key": "this is extra",
        }

        with self.assertRaises(ValidationError) as context:
            _ = validate_arguments(arguments)

        self.assertEqual(context.exception.message, "invalid arguments")
        self.assertEqual(context.exception.fields, ["extra_key"])
예제 #3
0
    def get(self, request: HttpRequest, *_args, **_kwargs) -> JsonResponse:
        """
        Determines whether or not a property has a septic system installed.

        The following query parameters are required: address, zipcode.

        Status Code Meaning:
        ---
        200 -> Request completed successfully and true/false determination was made
        204 -> Request completed successfully; but true/false determination could not be made
        400 -> Request was improperly formatted or has an invalid set of arguments
        500 -> Request failed due internal error: I.e. Could not connect to external API

        Response Formats
        ---
        200 OK:
            Content-Type: application/json
            {"result": <bool>}

        non-200 OK:
            Content-Type: application/json
            {"message": <string>, "data": [<supporting datas>]}

        Example:
            GET /check-septic?address=18 Haskell Rd&zipcode=03087
            => 200 OK
            Content-Type: application/json
            {"result": true}
        """

        try:
            arguments = validate_arguments(request.GET)
        except ValidationError as error:
            return render_validation_response(error)

        api = HouseCanaryApi(
            base_url=settings.HOUSE_CANARY_BASE_URL,
            api_key=settings.HOUSE_CANARY_API_KEY,
            api_secret=settings.HOUSE_CANARY_API_SECRET,
        )

        use_case = CheckSeptic(house_canary_api=api)
        uc_request = use_case.Request.from_dict(arguments)
        result = use_case.execute(uc_request)

        return render_usecase_response(result)
예제 #4
0
    def test_validate_arguments_with_valid_inputs(self):
        arguments = {"zipcode": "90210", "address": "100 One Hundred Dr."}

        validated = validate_arguments(arguments)
        self.assertDictEqual(arguments, validated)