Skip to content

Instantly share code, notes, and snippets.

@sminnee
Created May 22, 2022 22:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sminnee/e226b9a4b799308a2bc5096582840599 to your computer and use it in GitHub Desktop.
Save sminnee/e226b9a4b799308a2bc5096582840599 to your computer and use it in GitHub Desktop.
from typing import Dict, Union, List, Optional
from app_util.tests.base import BaseTestCase
from app_util.tests.util import send_request
class MockApiClient:
"""A mock API client that returns a summary of the request made in its JSON response"""
def get(self, url: str, data: dict, **headers):
return MockApiClient.Response({"method": "get", "url": url, "data": data, "headers": headers})
def post(self, url: str, format: Optional[str], data: Optional[Union[Dict, List, bytes]], **headers):
return MockApiClient.Response(
{"method": "post", "url": url, "format": format, "data": data, "headers": headers}
)
def patch(self, url: str, format: Optional[str], data: Optional[Union[Dict, List, bytes]], **headers):
return MockApiClient.Response(
{"method": "patch", "url": url, "format": format, "data": data, "headers": headers}
)
def put(self, url: str, format: Optional[str], data: Optional[Union[Dict, List, bytes]], **headers):
return MockApiClient.Response({"method": "put", "url": url, "format": format, "data": data, "headers": headers})
def delete(self, url: str, format: Optional[str], data: Optional[Union[Dict, List, bytes]], **headers):
return MockApiClient.Response(
{"method": "delete", "url": url, "format": format, "data": data, "headers": headers}
)
class Response:
payload: Union[Dict, List]
def __init__(self, payload: Union[Dict, List]) -> None:
self.payload = payload
def get(self, header: str):
if header.lower() == "content-type":
return "application/json"
def json(self):
return self.payload
class BulkUpdateTestCase(BaseTestCase):
# Apply the mock API client for all tests
def setUp(self) -> None:
return super().setUp()
BulkUpdateViewSet.api_client = MockApiClient
def tearDown(self) -> None:
BulkUpdateViewSet.api_client = None
return super().tearDown()
def test_bulk_endpoint(self):
"""Basis test that the endpoint function"""
client, user = self.create_client()
response = send_request(
client,
url="/api/bulk-update",
method="post",
data={
"requests": [
{
"url": "/api/work-order/cb01f22f/2022-05-22",
"method": "PATCH",
"body": {
"status": "ON_HOLD",
},
"query": {
"disable_notifications": 1,
"edit_type": 3,
},
},
{
"url": "/api/work-order/2dc47a39/2022-04-29",
"method": "PATCH",
"body": {
"status": "ON_HOLD",
},
"query": {
"disable_notifications": 1,
"edit_type": 3,
},
},
]
},
)
self.assertEqual(
response,
[
{
"method": "patch",
"url": "/api/work-order/cb01f22f/2022-05-22?disable_notifications=1&edit_type=3",
"format": "json",
"data": {
"status": "ON_HOLD",
},
"headers": [],
},
{
"method": "patch",
"url": "/api/work-order/2dc47a39/2022-04-29?disable_notifications=1&edit_type=3",
"format": "json",
"data": {
"status": "ON_HOLD",
},
"headers": [],
},
],
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment