diff --git a/agrirouter/onboarding/dto.py b/agrirouter/onboarding/dto.py index d2b34bed..224f8b5c 100644 --- a/agrirouter/onboarding/dto.py +++ b/agrirouter/onboarding/dto.py @@ -159,18 +159,45 @@ def __repr__(self): class ErrorResponse: + CODE = "code" + MESSAGE = "message" + TARGET = "target" + DETAILS = "details" + def __init__(self, *, - code, - message, - target, - details + code: str = None, + message: str = None, + target: str = None, + details: str = None ): self.code = code self.message = message self.target = target self.details = details + def json_serialize(self) -> dict: + return { + self.CODE: self.code, + self.MESSAGE: self.message, + self.TARGET: self.target, + self.DETAILS: self.details + } + + def json_deserialize(self, data: Union[str, dict]) -> None: + data = data if type(data) == dict else json.loads(data) + for key, value in data.items(): + if key == self.CODE: + self.code = value + elif key == self.MESSAGE: + self.message = value + elif key == self.TARGET: + self.target = value + elif key == self.DETAILS: + self.details = value + else: + raise WrongFieldError(f"Unknown field {key} for ErrorResponse class") + def get_code(self) -> str: return self.code diff --git a/agrirouter/onboarding/response.py b/agrirouter/onboarding/response.py index 44a4f5b5..43e42a8d 100644 --- a/agrirouter/onboarding/response.py +++ b/agrirouter/onboarding/response.py @@ -63,6 +63,7 @@ class SoftwareOnboardingResponse(BaseOnboardingResonse): SENSOR_ALTERNATE_ID = "sensorAlternateId" CONNECTION_CRITERIA = "connectionCriteria" AUTHENTICATION = "authentication" + ERROR = "error" def __init__(self, http_response: Response = None): if http_response: @@ -130,6 +131,10 @@ def set_capability_alternate_id(self, capability_alternate_id: str): self.capability_alternate_id = capability_alternate_id def json_serialize(self): + if self.error: + return { + self.ERROR: self.error + } return { self.DEVICE_ALTERNATE_ID: self.device_alternate_id, self.CAPABILITY_ALTERNATE_ID: self.capability_alternate_id, @@ -155,6 +160,10 @@ def json_deserialize(self, data: Union[dict, str]): authentication = Authentication() authentication.json_deserialize(value) self.authentication = authentication + elif key == self.ERROR: + error_response = ErrorResponse() + error_response.json_deserialize(value) + self.error = error_response else: raise WrongFieldError(f"Unknown field `{key}` for {self.__class__}") diff --git a/tests/auth_test/test_auth.py b/tests/auth_test/test_auth.py index 8ab7cf28..350e951e 100644 --- a/tests/auth_test/test_auth.py +++ b/tests/auth_test/test_auth.py @@ -9,34 +9,45 @@ ENV, application_id, ) -from re import search +import re class TestAuthorization: - def test_extract_auth_response(self): + def test_extract_query_params(self): auth_client = Authorization(ENV, public_key=public_key, private_key=private_key) - assert search( - "