Skip to content

Commit 4dbfbf4

Browse files
Use VuMarkService in VuMark generation API tests (#2984)
* Use VuMarkService in VuMark generation API tests * Add beartype to VuMark test helper functions
1 parent e930c59 commit 4dbfbf4

1 file changed

Lines changed: 83 additions & 27 deletions

File tree

tests/mock_vws/test_vumark_generation_api.py

Lines changed: 83 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@
66

77
import pytest
88
import requests
9-
from vws import VWS
9+
from beartype import beartype
10+
from vws import VWS, VuMarkService
11+
from vws.exceptions.vws_exceptions import (
12+
InvalidInstanceIdError,
13+
InvalidTargetTypeError,
14+
)
15+
from vws.vumark_accept import VuMarkAccept
1016
from vws_auth_tools import authorization_header, rfc_1123_date
1117

1218
from mock_vws._constants import ResultCodes
@@ -20,6 +26,20 @@
2026
_SVG_START = b"<"
2127

2228

29+
@beartype
30+
def _make_vumark_service(
31+
*,
32+
server_access_key: str,
33+
server_secret_key: str,
34+
) -> VuMarkService:
35+
"""Return a VuMark service client."""
36+
return VuMarkService(
37+
server_access_key=server_access_key,
38+
server_secret_key=server_secret_key,
39+
)
40+
41+
42+
@beartype
2343
def _make_vumark_request(
2444
*,
2545
server_access_key: str,
@@ -66,31 +86,56 @@ class TestGenerateInstance:
6686
"""Tests for the VuMark instance generation endpoint."""
6787

6888
@pytest.mark.parametrize(
69-
argnames=("accept", "expected_content_type", "expected_signature"),
89+
argnames=("accept", "expected_signature"),
7090
argvalues=[
71-
pytest.param("image/png", "image/png", _PNG_SIGNATURE, id="png"),
91+
pytest.param(VuMarkAccept.PNG, _PNG_SIGNATURE, id="png"),
7292
pytest.param(
73-
"image/svg+xml",
74-
"image/svg+xml",
93+
VuMarkAccept.SVG,
7594
_SVG_START,
7695
id="svg",
7796
),
7897
pytest.param(
79-
"application/pdf",
80-
"application/pdf",
98+
VuMarkAccept.PDF,
8199
_PDF_SIGNATURE,
82100
id="pdf",
83101
),
84102
],
85103
)
86104
@staticmethod
87105
def test_generate_instance_format(
88-
accept: str,
89-
expected_content_type: str,
106+
accept: VuMarkAccept,
90107
expected_signature: bytes,
91108
vumark_vuforia_database: VuMarkCloudDatabase,
92109
) -> None:
93110
"""A VuMark instance can be generated in the requested format."""
111+
vumark_client = _make_vumark_service(
112+
server_access_key=vumark_vuforia_database.server_access_key,
113+
server_secret_key=vumark_vuforia_database.server_secret_key,
114+
)
115+
vumark_bytes = vumark_client.generate_vumark_instance(
116+
target_id=vumark_vuforia_database.target_id,
117+
instance_id=uuid4().hex,
118+
accept=accept,
119+
)
120+
121+
assert vumark_bytes.strip().startswith(expected_signature)
122+
assert len(vumark_bytes) > len(expected_signature)
123+
124+
@pytest.mark.parametrize(
125+
argnames=("accept", "expected_content_type"),
126+
argvalues=[
127+
pytest.param("image/png", "image/png", id="png"),
128+
pytest.param("image/svg+xml", "image/svg+xml", id="svg"),
129+
pytest.param("application/pdf", "application/pdf", id="pdf"),
130+
],
131+
)
132+
@staticmethod
133+
def test_generate_instance_content_type_header(
134+
accept: str,
135+
expected_content_type: str,
136+
vumark_vuforia_database: VuMarkCloudDatabase,
137+
) -> None:
138+
"""VuMark image responses include the expected content type."""
94139
response = _make_vumark_request(
95140
server_access_key=vumark_vuforia_database.server_access_key,
96141
server_secret_key=vumark_vuforia_database.server_secret_key,
@@ -104,8 +149,6 @@ def test_generate_instance_format(
104149
response.headers["Content-Type"].split(sep=";")[0]
105150
== expected_content_type
106151
)
107-
assert response.content.strip().startswith(expected_signature)
108-
assert len(response.content) > len(expected_signature)
109152

110153
@staticmethod
111154
def test_invalid_accept_header(
@@ -132,16 +175,21 @@ def test_empty_instance_id(
132175
vumark_vuforia_database: VuMarkCloudDatabase,
133176
) -> None:
134177
"""An empty instance_id returns InvalidInstanceId."""
135-
response = _make_vumark_request(
178+
vumark_client = _make_vumark_service(
136179
server_access_key=vumark_vuforia_database.server_access_key,
137180
server_secret_key=vumark_vuforia_database.server_secret_key,
138-
target_id=vumark_vuforia_database.target_id,
139-
instance_id="",
140-
accept="image/png",
141181
)
182+
with pytest.raises(expected_exception=InvalidInstanceIdError) as exc:
183+
vumark_client.generate_vumark_instance(
184+
target_id=vumark_vuforia_database.target_id,
185+
instance_id="",
186+
accept=VuMarkAccept.PNG,
187+
)
142188

143-
assert response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY
144-
response_json = response.json()
189+
assert (
190+
exc.value.response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY
191+
)
192+
response_json = json.loads(s=exc.value.response.text)
145193
assert (
146194
response_json["result_code"]
147195
== ResultCodes.INVALID_INSTANCE_ID.value
@@ -154,9 +202,15 @@ def test_non_vumark_database(
154202
"""Generating a VuMark instance for a target in a non-VuMark
155203
database returns InvalidTargetType.
156204
"""
205+
server_access_key = vuforia_database.server_access_key
206+
server_secret_key = vuforia_database.server_secret_key
157207
vws_client = VWS(
158-
server_access_key=vuforia_database.server_access_key,
159-
server_secret_key=vuforia_database.server_secret_key,
208+
server_access_key=server_access_key,
209+
server_secret_key=server_secret_key,
210+
)
211+
vumark_client = _make_vumark_service(
212+
server_access_key=server_access_key,
213+
server_secret_key=server_secret_key,
160214
)
161215
image = make_image_file(
162216
file_format="PNG",
@@ -171,15 +225,17 @@ def test_non_vumark_database(
171225
active_flag=True,
172226
application_metadata=None,
173227
)
174-
response = _make_vumark_request(
175-
server_access_key=vuforia_database.server_access_key,
176-
server_secret_key=vuforia_database.server_secret_key,
177-
target_id=target_id,
178-
instance_id=uuid4().hex,
179-
accept="image/png",
228+
with pytest.raises(expected_exception=InvalidTargetTypeError) as exc:
229+
vumark_client.generate_vumark_instance(
230+
target_id=target_id,
231+
instance_id=uuid4().hex,
232+
accept=VuMarkAccept.PNG,
233+
)
234+
235+
assert (
236+
exc.value.response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY
180237
)
181-
assert response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY
182-
response_json = response.json()
238+
response_json = json.loads(s=exc.value.response.text)
183239
assert (
184240
response_json["result_code"]
185241
== ResultCodes.INVALID_TARGET_TYPE.value

0 commit comments

Comments
 (0)