Skip to content
20 changes: 14 additions & 6 deletions src/ogd/apis/utils/APIResponse.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
# import standard libraries
import json
from enum import IntEnum
from typing import Any, Dict, Optional
from typing import Any, Dict, Optional, Set

# import 3rd-party libraries
from flask import Response
Expand Down Expand Up @@ -47,8 +47,17 @@ class ResponseStatus(IntEnum):
NONE = 1
SUCCESS = 200
ERR_REQ = 400
ERR_NOTFOUND = 404
ERR_SRV = 500

@staticmethod
def ServerErrors() -> Set["ResponseStatus"]:
return {ResponseStatus.ERR_SRV}

@staticmethod
def ClientErrors() -> Set["ResponseStatus"]:
return {ResponseStatus.ERR_REQ, ResponseStatus.ERR_NOTFOUND}

def __str__(self):
"""Stringify function for ResponseStatus objects.

Expand Down Expand Up @@ -164,7 +173,6 @@ def AsDict(self):
"type" : str(self._type),
"val" : self._val,
"msg" : self._msg,
"status" : str(self._status)
}

@property
Expand All @@ -175,12 +183,12 @@ def AsJSON(self):
def AsFlaskResponse(self) -> Response:
return Response(response=self.AsJSON, status=self.Status.value, mimetype='application/json')

def RequestErrored(self, msg:str):
self._status = ResponseStatus.ERR_REQ
def RequestErrored(self, msg:str, status:Optional[ResponseStatus]=None):
self._status = status if status is not None and status in ResponseStatus.ClientErrors() else ResponseStatus.ERR_REQ
self._msg = f"ERROR: {msg}"

def ServerErrored(self, msg:str):
self._status = ResponseStatus.ERR_SRV
def ServerErrored(self, msg:str, status:Optional[ResponseStatus]=None):
self._status = status if status is not None and status in ResponseStatus.ServerErrors() else ResponseStatus.ERR_SRV
self._msg = f"SERVER ERROR: {msg}"

def RequestSucceeded(self, msg:str, val:Any):
Expand Down
3 changes: 0 additions & 3 deletions tests/cases/apis/HelloAPI/local/t_Hello.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ def test_get(self):
self.assertEqual(body.get("type"), "GET")
self.assertEqual(body.get("val"), None)
self.assertEqual(body.get("msg"), "Hello! You GETted successfully!")
self.assertEqual(body.get("status"), "SUCCESS")

def test_post(self):
_url = f"/hello"
Expand All @@ -64,7 +63,6 @@ def test_post(self):
self.assertEqual(body.get("type"), "POST")
self.assertEqual(body.get("val"), None)
self.assertEqual(body.get("msg"), "Hello! You POSTed successfully!")
self.assertEqual(body.get("status"), "SUCCESS")

def test_put(self):
_url = f"/hello"
Expand All @@ -79,4 +77,3 @@ def test_put(self):
self.assertEqual(body.get("type"), "PUT")
self.assertEqual(body.get("val"), None)
self.assertEqual(body.get("msg"), "Hello! You PUTted successfully!")
self.assertEqual(body.get("status"), "SUCCESS")
3 changes: 0 additions & 3 deletions tests/cases/apis/HelloAPI/local/t_ParamHello.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ def test_get(self):
self.assertEqual(body.get("type"), "GET")
self.assertEqual(body.get("val"), None)
self.assertEqual(body.get("msg"), f"Hello {param}! You GETted successfully!")
self.assertEqual(body.get("status"), "SUCCESS")

def test_post(self):
param = "Tester"
Expand All @@ -66,7 +65,6 @@ def test_post(self):
self.assertEqual(body.get("type"), "POST")
self.assertEqual(body.get("val"), None)
self.assertEqual(body.get("msg"), f"Hello {param}! You POSTed successfully!")
self.assertEqual(body.get("status"), "SUCCESS")

def test_put(self):
param = "Tester"
Expand All @@ -82,4 +80,3 @@ def test_put(self):
self.assertEqual(body.get("type"), "PUT")
self.assertEqual(body.get("val"), None)
self.assertEqual(body.get("msg"), f"Hello {param}! You PUTted successfully!")
self.assertEqual(body.get("status"), "SUCCESS")
1 change: 0 additions & 1 deletion tests/cases/apis/HelloAPI/local/t_Version.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,3 @@ def test_get(self):
self.assertEqual(body.get("type"), "GET")
self.assertEqual(body.get("val"), {"version": "0.0.0-Testing"})
self.assertEqual(body.get("msg"), "Successfully retrieved API version.")
self.assertEqual(body.get("status"), "SUCCESS")
3 changes: 0 additions & 3 deletions tests/cases/apis/HelloAPI/remote/t_Hello.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ def test_get(self):
self.assertEqual(body.get("type"), "GET", f"Bad type from {_url}")
self.assertEqual(body.get("val"), None, f"Bad val from {_url}")
self.assertEqual(body.get("msg"), "Hello! You GETted successfully!", f"Bad msg from {_url}")
self.assertEqual(body.get("status"), "SUCCESS", f"Bad status from {_url}")

def test_post(self):
_url = f"{self.base_url}/hello"
Expand All @@ -57,7 +56,6 @@ def test_post(self):
self.assertEqual(body.get("type"), "POST", f"Bad type from {_url}")
self.assertEqual(body.get("val"), None, f"Bad val from {_url}")
self.assertEqual(body.get("msg"), "Hello! You POSTed successfully!", f"Bad msg from {_url}")
self.assertEqual(body.get("status"), "SUCCESS", f"Bad status from {_url}")

def test_put(self):
_url = f"{self.base_url}/hello"
Expand All @@ -77,4 +75,3 @@ def test_put(self):
self.assertEqual(body.get("type"), "PUT", f"Bad type from {_url}")
self.assertEqual(body.get("val"), None, f"Bad val from {_url}")
self.assertEqual(body.get("msg"), "Hello! You PUTted successfully!", f"Bad msg from {_url}")
self.assertEqual(body.get("status"), "SUCCESS", f"Bad status from {_url}")
3 changes: 0 additions & 3 deletions tests/cases/apis/HelloAPI/remote/t_ParamHello.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ def test_get(self):
self.assertEqual(body.get("type"), "GET", f"Bad type from {_url}")
self.assertEqual(body.get("val"), None, f"Bad val from {_url}")
self.assertEqual(body.get("msg"), f"Hello {self.param}! You GETted successfully!", f"Bad msg from {_url}")
self.assertEqual(body.get("status"), "SUCCESS", f"Bad status from {_url}")

def test_post(self):
_url = f"{self.base_url}/p_hello/{self.param}"
Expand All @@ -58,7 +57,6 @@ def test_post(self):
self.assertEqual(body.get("type"), "POST", f"Bad type from {_url}")
self.assertEqual(body.get("val"), None, f"Bad val from {_url}")
self.assertEqual(body.get("msg"), f"Hello {self.param}! You POSTed successfully!", f"Bad msg from {_url}")
self.assertEqual(body.get("status"), "SUCCESS", f"Bad status from {_url}")

def test_put(self):
_url = f"{self.base_url}/p_hello/{self.param}"
Expand All @@ -78,4 +76,3 @@ def test_put(self):
self.assertEqual(body.get("type"), "PUT", f"Bad type from {_url}")
self.assertEqual(body.get("val"), None, f"Bad val from {_url}")
self.assertEqual(body.get("msg"), f"Hello {self.param}! You PUTted successfully!", f"Bad msg from {_url}")
self.assertEqual(body.get("status"), "SUCCESS", f"Bad status from {_url}")
95 changes: 68 additions & 27 deletions tests/cases/utils/t_APIResponse.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
# import libraries
import sys
import json
import logging
import unittest
from pathlib import Path
from unittest import TestCase
# import ogd libraries
from ogd.common.configs.TestConfig import TestConfig
from ogd.common.utils.Logger import Logger
# import locals
from src.ogd.apis.utils.APIResponse import APIResponse
from src.ogd.apis.utils.APIResponse import APIResponse, RESTType, ResponseStatus
from tests.config.t_config import settings

_config = TestConfig.FromDict(name="APIResponseTestConfig", unparsed_elements=settings)

@unittest.skip("No tests implemented yet")
class t_APIResponse(TestCase):
@staticmethod
def RunAll():
pass
@classmethod
def setUpClass(cls) -> None:
_config = TestConfig.FromDict(name="APIResponseTestConfig", unparsed_elements=settings)
_level = logging.DEBUG if _config.Verbose else logging.INFO
Logger.InitializeLogger(level=_level, use_logfile=False)

def setUp(self):
self.response = APIResponse(req_type=RESTType.GET, val={"foo":"bar"}, msg="Complete", status=ResponseStatus.SUCCESS)

@unittest.skip("Not yet implemented")
def test_FromRequestResult(self):
Expand All @@ -25,45 +30,81 @@ def test_FromRequestResult(self):
def test_FromFromDict(self):
pass

@unittest.skip("Not yet implemented")
def test_Type(self):
pass
self.assertEqual(self.response.Type, RESTType.GET)

@unittest.skip("Not yet implemented")
def test_Value(self):
pass
self.assertEqual(self.response.Value, {"foo":"bar"})

@unittest.skip("Not yet implemented")
def test_Message(self):
pass
self.assertEqual(self.response.Message, "Complete")

@unittest.skip("Not yet implemented")
def test_Status(self):
pass
self.assertEqual(self.response.Status, ResponseStatus.SUCCESS)

@unittest.skip("Not yet implemented")
def test_AsDict(self):
pass
expected = {
"type": "GET",
"val": {"foo":"bar"},
"msg": "Complete"
}
d = self.response.AsDict
for key in expected.keys():
self.assertIn(key, d.keys(), f"Response is missing key {key}")
self.assertEqual(d[key], expected[key])

@unittest.skip("Not yet implemented")
def test_AsJSON(self):
pass
expected = {
"type": "GET",
"val": {"foo":"bar"},
"msg": "Complete"
}
self.assertEqual(self.response.AsJSON, json.dumps(expected))

@unittest.skip("Not yet implemented")
def test_AsFlaskResponse(self):
pass

@unittest.skip("Not yet implemented")
def test_RequestErrored(self):
pass
def test_RequestErrored_default_status(self):
self.response.RequestErrored("Default request error")
self.assertEqual(self.response.Message, "ERROR: Default request error")
self.assertEqual(self.response.Status, ResponseStatus.ERR_REQ)

@unittest.skip("Not yet implemented")
def test_ServerErrored(self):
pass
def test_RequestErrored_general_status(self):
self.response.RequestErrored("General request error", ResponseStatus.ERR_REQ)
self.assertEqual(self.response.Message, "ERROR: General request error")
self.assertEqual(self.response.Status, ResponseStatus.ERR_REQ)

def test_RequestErrored_notfound_status(self):
self.response.RequestErrored("404 request error", ResponseStatus.ERR_NOTFOUND)
self.assertEqual(self.response.Message, "ERROR: 404 request error")
self.assertEqual(self.response.Status, ResponseStatus.ERR_NOTFOUND)

def test_RequestErrored_invalid_status(self):
self.response.RequestErrored("Invalid choice of code for request error, should give default error code", ResponseStatus.ERR_SRV)
self.assertEqual(self.response.Message, "ERROR: Invalid choice of code for request error, should give default error code")
self.assertEqual(self.response.Status, ResponseStatus.ERR_REQ)

def test_ServerErrored_default_status(self):
self.response.ServerErrored("Default server error")
self.assertEqual(self.response.Message, "SERVER ERROR: Default server error")
self.assertEqual(self.response.Status, ResponseStatus.ERR_SRV)

def test_ServerErrored_general_status(self):
self.response.ServerErrored("General server error")
self.assertEqual(self.response.Message, "SERVER ERROR: General server error", ResponseStatus.ERR_SRV)
self.assertEqual(self.response.Status, ResponseStatus.ERR_SRV)

def test_ServerErrored_invalid_status(self):
self.response.ServerErrored("Invalid choice of code for server error, should give default error code", ResponseStatus.ERR_REQ)
self.assertEqual(self.response.Message, "SERVER ERROR: Invalid choice of code for server error, should give default error code")
self.assertEqual(self.response.Status, ResponseStatus.ERR_SRV)

@unittest.skip("Not yet implemented")
def test_RequestSucceeded(self):
pass
self.response.RequestSucceeded(msg="Default server success", val={"foo":"bar"})
self.assertEqual(self.response.Message, "SUCCESS: Default server success")
self.assertEqual(self.response.Status, ResponseStatus.SUCCESS)
self.assertEqual(self.response.Value, {"foo":"bar"})

if __name__ == '__main__':
unittest.main()
Loading