Skip to content

Commit

Permalink
chore: bring tests up to date with latest feat/refactors
Browse files Browse the repository at this point in the history
  • Loading branch information
tazlin committed Jul 11, 2023
1 parent 91fc0f6 commit 0e3f936
Show file tree
Hide file tree
Showing 5 changed files with 1,933 additions and 3,215 deletions.
33 changes: 18 additions & 15 deletions tests/ai_horde_api/test_api_calls.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
from pathlib import Path

import pytest
from horde_sdk.ai_horde_api import (
from horde_sdk.ai_horde_api.ai_horde_client import AIHordeAPIClient
from horde_sdk.ai_horde_api.apimodels import (
AllWorkersDetailsRequest,
AllWorkersDetailsResponse,
CancelImageGenerateRequest,
ImageGenerateAsyncRequest,
ImageGenerateAsyncResponse,
ImageGenerateStatusResponse,
)
from horde_sdk.ai_horde_api.ai_horde_client import AIHordeAPIClient
from horde_sdk.ai_horde_api.consts import WORKER_TYPE
from horde_sdk.generic_api import RequestErrorResponse
from horde_sdk.generic_api.apimodels import BaseResponse
Expand All @@ -32,23 +33,24 @@ def test_AIHordeAPIClient_init(self):
def test_generate_async(self, default_image_gen_request: ImageGenerateAsyncRequest):
client = AIHordeAPIClient()

api_response: ImageGenerateAsyncResponse | RequestErrorResponse = client.generate_image_async(
default_image_gen_request
image_async_response: ImageGenerateAsyncResponse | RequestErrorResponse = client.generate_image_async(
default_image_gen_request,
)

if isinstance(api_response, RequestErrorResponse):
pytest.fail(f"API Response was an error: {api_response.message}")

assert isinstance(api_response, ImageGenerateAsyncResponse)
if isinstance(image_async_response, RequestErrorResponse):
pytest.fail(f"API Response was an error: {image_async_response.message}")

cancel_request = CancelImageGenerateRequest(apikey="0000000000", id=api_response.id)
cancel_response: BaseResponse | RequestErrorResponse = client.submit_request(cancel_request)
assert isinstance(image_async_response, ImageGenerateAsyncResponse)

cancel_response: ImageGenerateStatusResponse | RequestErrorResponse = client.delete_pending_image(
"0000000000",
image_async_response.id,
)
if isinstance(cancel_response, RequestErrorResponse):
pytest.fail(
f"API Response was an error: {cancel_response.message}"
f"Please note that the job ({api_response.id}) is orphaned and will continue to run on the server"
"until it is finished, it times out or it is cancelled manually."
f"Please note that the job ({image_async_response.id}) is orphaned and will continue to run on the "
"server until it is finished, it times out or it is cancelled manually.",
)

assert isinstance(cancel_response, CancelImageGenerateRequest.get_success_response_type())
Expand All @@ -58,15 +60,16 @@ def test_workers_all(self):

api_request = AllWorkersDetailsRequest(type=WORKER_TYPE.image)

api_response = client.submit_request(api_request)
api_response = client.submit_request(
api_request,
api_request.get_success_response_type(),
)

if isinstance(api_response, RequestErrorResponse):
pytest.fail(f"API Response was an error: {api_response.message}")

assert isinstance(api_response, AllWorkersDetailsResponse)

assert len(api_response.workers) > 0

# Write the response to the production responses folder
status_response_pairs = AllWorkersDetailsRequest.get_success_status_response_pairs()

Expand Down
30 changes: 17 additions & 13 deletions tests/ai_horde_api/test_dynamically_validate_against_swagger.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,22 @@
import horde_sdk.ai_horde_api as ai_horde_api
import horde_sdk.ai_horde_api.apimodels
from horde_sdk.ai_horde_api.endpoints import get_ai_horde_swagger_url
from horde_sdk.consts import HTTPMethod, HTTPStatusCode, get_all_success_status_codes
from horde_sdk.generic_api._reflection import get_all_request_types
from horde_sdk.generic_api.utils.swagger import (
SwaggerDoc,
SwaggerEndpoint,
SwaggerParser,
)


def test_all_ai_horde_model_defs_in_swagger() -> None:
def all_ai_horde_model_defs_in_swagger(swagger_doc: SwaggerDoc) -> None:
"""Ensure all models defined in ai_horde_api are defined in the swagger doc."""
all_request_types = get_all_request_types(ai_horde_api.__name__)
all_request_types = get_all_request_types(horde_sdk.ai_horde_api.apimodels.__name__)
assert len(all_request_types) > 0, (
f"Failed to find any request types in {ai_horde_api.__name__}. "
"Something is critically wrong. Check `ai_horde_api/__init__.py` imports."
f"Failed to find any request types in {horde_sdk.ai_horde_api.apimodels.__name__}. "
"Something is critically wrong. Check `ai_horde_api/apimodels/__init__.py` imports."
)

# Retrieve the swagger doc
swagger_doc = None
try:
swagger_doc = SwaggerParser(get_ai_horde_swagger_url()).get_swagger_doc()
except RuntimeError as e:
raise RuntimeError(f"Failed to get swagger doc: {e}") from e
assert swagger_doc, "Failed to get SwaggerDoc"

swagger_defined_models = swagger_doc.definitions.keys()
swagger_defined_payload_examples: dict[str, dict[HTTPMethod, dict[str, object]]]
swagger_defined_payload_examples = swagger_doc.get_all_payload_examples()
Expand Down Expand Up @@ -86,3 +79,14 @@ def test_all_ai_horde_model_defs_in_swagger() -> None:
assert (
success_code in request_type.get_success_status_response_pairs()
), f"Missing success response type for {request_type.__name__} with status code {success_code}"


def test_all_ai_horde_model_defs_in_swagger_from_prod_swagger() -> None:
swagger_doc: SwaggerDoc | None = None
try:
swagger_doc = SwaggerParser(swagger_doc_url=get_ai_horde_swagger_url()).get_swagger_doc()
except RuntimeError as e:
raise RuntimeError(f"Failed to get swagger doc: {e}") from e
assert swagger_doc, "Failed to get SwaggerDoc"
assert swagger_doc.definitions, "Failed to get SwaggerDoc definitions"
all_ai_horde_model_defs_in_swagger(swagger_doc)
8 changes: 4 additions & 4 deletions tests/ai_horde_api/test_swagger.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@


def test_swagger_parser_init():
SwaggerParser(get_ai_horde_swagger_url())
SwaggerParser(swagger_doc_url=get_ai_horde_swagger_url())


def test_get_swagger_doc():
parser = SwaggerParser(get_ai_horde_swagger_url())
parser = SwaggerParser(swagger_doc_url=get_ai_horde_swagger_url())
doc = parser.get_swagger_doc()
assert isinstance(doc, SwaggerDoc)
assert doc.swagger == "2.0"
Expand All @@ -32,14 +32,14 @@ def test_get_swagger_doc():


def test_extract_all_payload_examples() -> None:
swagger_doc = SwaggerParser(get_ai_horde_swagger_url()).get_swagger_doc()
swagger_doc = SwaggerParser(swagger_doc_url=get_ai_horde_swagger_url()).get_swagger_doc()

all_request_examples = swagger_doc.get_all_payload_examples()
assert len(all_request_examples) > 0, "Failed to extract any examples from the swagger doc"


def test_extract_all_response_examples() -> None:
swagger_doc = SwaggerParser(get_ai_horde_swagger_url()).get_swagger_doc()
swagger_doc = SwaggerParser(swagger_doc_url=get_ai_horde_swagger_url()).get_swagger_doc()

all_response_examples = swagger_doc.get_all_response_examples()
assert len(all_response_examples) > 0, "Failed to extract any examples from the swagger doc"
Loading

0 comments on commit 0e3f936

Please sign in to comment.