11"""Choose which backends to use for the tests."""
22
33import contextlib
4+ import io
45import logging
56from collections .abc import Generator
67from enum import Enum
910import requests
1011import responses
1112from beartype import beartype
13+ from PIL import Image
1214from requests_mock_flask import add_flask_app_to_mock
1315from vws import VWS
1416from vws .exceptions .vws_exceptions import (
2123from mock_vws ._flask_server .vws import VWS_FLASK_APP
2224from mock_vws .database import VuforiaDatabase
2325from mock_vws .states import States
26+ from mock_vws .target import Target
27+ from mock_vws .target_raters import HardcodedTargetTrackingRater
28+ from tests .mock_vws .fixtures .credentials import VuMarkVuforiaDatabase
2429from tests .mock_vws .utils .retries import RETRY_ON_TOO_MANY_REQUESTS
2530
2631LOGGER = logging .getLogger (name = __name__ )
@@ -57,16 +62,51 @@ def _delete_all_targets(*, database_keys: VuforiaDatabase) -> None:
5762 vws_client .delete_target (target_id = target )
5863
5964
65+ @beartype
66+ def _rgb_png_bytes () -> bytes :
67+ """Return a small RGB PNG image."""
68+ image = Image .new (mode = "RGB" , size = (8 , 8 ), color = (255 , 0 , 0 ))
69+ image_file = io .BytesIO ()
70+ image .save (fp = image_file , format = "PNG" )
71+ return image_file .getvalue ()
72+
73+
74+ @beartype
75+ def _vumark_database (
76+ * ,
77+ vumark_vuforia_database : VuMarkVuforiaDatabase ,
78+ ) -> VuforiaDatabase :
79+ """Return a database with a target for VuMark instance generation."""
80+ vumark_target = Target (
81+ active_flag = True ,
82+ application_metadata = None ,
83+ image_value = _rgb_png_bytes (),
84+ name = "mock-vumark-target" ,
85+ processing_time_seconds = 0 ,
86+ width = 1 ,
87+ target_tracking_rater = HardcodedTargetTrackingRater (rating = 5 ),
88+ target_id = vumark_vuforia_database .target_id ,
89+ )
90+ return VuforiaDatabase (
91+ database_name = vumark_vuforia_database .target_manager_database_name ,
92+ server_access_key = vumark_vuforia_database .server_access_key ,
93+ server_secret_key = vumark_vuforia_database .server_secret_key ,
94+ targets = {vumark_target },
95+ )
96+
97+
6098@beartype
6199def _enable_use_real_vuforia (
62100 * ,
63101 working_database : VuforiaDatabase ,
64102 inactive_database : VuforiaDatabase ,
103+ vumark_vuforia_database : VuMarkVuforiaDatabase ,
65104 monkeypatch : pytest .MonkeyPatch ,
66105) -> Generator [None ]:
67106 """Test against the real Vuforia."""
68107 assert monkeypatch
69108 assert inactive_database
109+ assert vumark_vuforia_database
70110 _delete_all_targets (database_keys = working_database )
71111 yield
72112
@@ -76,6 +116,7 @@ def _enable_use_mock_vuforia(
76116 * ,
77117 working_database : VuforiaDatabase ,
78118 inactive_database : VuforiaDatabase ,
119+ vumark_vuforia_database : VuMarkVuforiaDatabase ,
79120 monkeypatch : pytest .MonkeyPatch ,
80121) -> Generator [None ]:
81122 """Test against the in-memory mock Vuforia."""
@@ -96,10 +137,14 @@ def _enable_use_mock_vuforia(
96137 client_access_key = inactive_database .client_access_key ,
97138 client_secret_key = inactive_database .client_secret_key ,
98139 )
140+ vumark_database = _vumark_database (
141+ vumark_vuforia_database = vumark_vuforia_database ,
142+ )
99143
100144 with MockVWS () as mock :
101145 mock .add_database (database = working_database )
102146 mock .add_database (database = inactive_database )
147+ mock .add_database (database = vumark_database )
103148 yield
104149
105150
@@ -108,6 +153,7 @@ def _enable_use_docker_in_memory(
108153 * ,
109154 working_database : VuforiaDatabase ,
110155 inactive_database : VuforiaDatabase ,
156+ vumark_vuforia_database : VuMarkVuforiaDatabase ,
111157 monkeypatch : pytest .MonkeyPatch ,
112158) -> Generator [None ]:
113159 """Test against mock Vuforia created to be run in a container."""
@@ -170,6 +216,13 @@ def _enable_use_docker_in_memory(
170216 json = inactive_database .to_dict (),
171217 timeout = 30 ,
172218 )
219+ requests .post (
220+ url = databases_url ,
221+ json = _vumark_database (
222+ vumark_vuforia_database = vumark_vuforia_database ,
223+ ).to_dict (),
224+ timeout = 30 ,
225+ )
173226
174227 yield
175228
@@ -233,8 +286,9 @@ def fixture_verify_mock_vuforia(
233286 request : pytest .FixtureRequest ,
234287 vuforia_database : VuforiaDatabase ,
235288 inactive_database : VuforiaDatabase ,
289+ vumark_vuforia_database : VuMarkVuforiaDatabase ,
236290 monkeypatch : pytest .MonkeyPatch ,
237- ) -> Generator [VuforiaBackend ]:
291+ ) -> Generator [None ]:
238292 """Test functions which use this fixture are run multiple times. Once
239293 with
240294 the real Vuforia, and once with each mock.
@@ -257,12 +311,12 @@ def fixture_verify_mock_vuforia(
257311 VuforiaBackend .DOCKER_IN_MEMORY : _enable_use_docker_in_memory ,
258312 }[backend ]
259313
260- for _ in enable_function (
314+ yield from enable_function (
261315 working_database = vuforia_database ,
262316 inactive_database = inactive_database ,
317+ vumark_vuforia_database = vumark_vuforia_database ,
263318 monkeypatch = monkeypatch ,
264- ):
265- yield backend
319+ )
266320
267321
268322@pytest .fixture (
@@ -278,6 +332,7 @@ def mock_only_vuforia(
278332 request : pytest .FixtureRequest ,
279333 vuforia_database : VuforiaDatabase ,
280334 inactive_database : VuforiaDatabase ,
335+ vumark_vuforia_database : VuMarkVuforiaDatabase ,
281336 monkeypatch : pytest .MonkeyPatch ,
282337) -> Generator [None ]:
283338 """Test functions which use this fixture are run multiple times. Once
@@ -305,5 +360,6 @@ def mock_only_vuforia(
305360 yield from enable_function (
306361 working_database = vuforia_database ,
307362 inactive_database = inactive_database ,
363+ vumark_vuforia_database = vumark_vuforia_database ,
308364 monkeypatch = monkeypatch ,
309365 )
0 commit comments