Skip to content
This repository was archived by the owner on Apr 2, 2025. It is now read-only.

Commit af2e2ad

Browse files
fix: load mock data into in memory db more cleanly for order status tests.
1 parent 1cdc145 commit af2e2ad

File tree

3 files changed

+65
-55
lines changed

3 files changed

+65
-55
lines changed

tests/application.py

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,26 @@ async def search_opportunities(
105105
product_router: ProductRouter,
106106
search: OpportunityRequest,
107107
request: Request,
108-
) -> ResultE[list[Opportunity]]:
108+
next: str | None,
109+
limit: int,
110+
) -> ResultE[tuple[list[Opportunity], str]]:
109111
try:
112+
start = 0
113+
if limit > 100:
114+
limit = 100
115+
if next:
116+
start = self._opportunities.index(next)
117+
end = min(start + limit, len(self._opportunities))
118+
print(end)
119+
# opportunities = self._opportunities.k
110120
return Success(
111-
[o.model_copy(update=search.model_dump()) for o in self._opportunities]
121+
(
122+
[
123+
o.model_copy(update=search.model_dump())
124+
for o in self._opportunities
125+
],
126+
"",
127+
)
112128
)
113129
except Exception as e:
114130
return Failure(e)
@@ -206,23 +222,3 @@ class MyOrderParameters(OrderParameters):
206222
root_router.add_product(product)
207223
app: FastAPI = FastAPI()
208224
app.include_router(root_router, prefix="")
209-
210-
TEST_STATUSES = {
211-
"test_order_id": [
212-
OrderStatus(
213-
timestamp=datetime(2025, 1, 14, 2, 21, 48, 466726, tzinfo=timezone.utc),
214-
status_code=OrderStatusCode.received,
215-
links=[],
216-
),
217-
OrderStatus(
218-
timestamp=datetime(2025, 1, 15, 5, 20, 48, 466726, tzinfo=timezone.utc),
219-
status_code=OrderStatusCode.accepted,
220-
links=[],
221-
),
222-
OrderStatus(
223-
timestamp=datetime(2025, 1, 16, 10, 15, 32, 466726, tzinfo=timezone.utc),
224-
status_code=OrderStatusCode.completed,
225-
links=[],
226-
),
227-
]
228-
}

tests/conftest.py

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
from stapi_fastapi.routers.root_router import RootRouter
2222

2323
from .application import (
24-
TEST_STATUSES,
2524
InMemoryOrderDB,
2625
MockProductBackend,
2726
MockRootBackend,
@@ -42,13 +41,6 @@ def order_db() -> InMemoryOrderDB:
4241
return InMemoryOrderDB()
4342

4443

45-
@pytest.fixture
46-
def order_db_statuses() -> InMemoryOrderDB:
47-
order_db = InMemoryOrderDB()
48-
order_db._statuses = TEST_STATUSES
49-
return order_db
50-
51-
5244
@pytest.fixture
5345
def product_backend(order_db: InMemoryOrderDB) -> MockProductBackend:
5446
return MockProductBackend(order_db)
@@ -59,11 +51,6 @@ def root_backend(order_db: InMemoryOrderDB) -> MockRootBackend:
5951
return MockRootBackend(order_db)
6052

6153

62-
@pytest.fixture
63-
def root_backend_preloaded(order_db_statuses: InMemoryOrderDB) -> MockRootBackend:
64-
return MockRootBackend(order_db_statuses)
65-
66-
6754
@pytest.fixture
6855
def mock_product_test_spotlight(
6956
product_backend: MockProductBackend, mock_provider: Provider
@@ -131,16 +118,6 @@ def empty_stapi_client(root_backend, base_url: str) -> Iterator[TestClient]:
131118
yield client
132119

133120

134-
@pytest.fixture
135-
def statuses_client(root_backend_preloaded, base_url: str) -> Iterator[TestClient]:
136-
root_router = RootRouter(root_backend_preloaded)
137-
app = FastAPI()
138-
app.include_router(root_router, prefix="")
139-
140-
with TestClient(app, base_url=f"{base_url}") as client:
141-
yield client
142-
143-
144121
@pytest.fixture(scope="session")
145122
def url_for(base_url: str) -> Iterator[Callable[[str], str]]:
146123
def with_trailing_slash(value: str) -> str:
@@ -206,7 +183,6 @@ def mock_test_spotlight_opportunities() -> list[Opportunity]:
206183
off_nadir={"minimum": 20, "maximum": 22},
207184
vehicle_id=[1],
208185
platform="platform_id",
209-
other_thing="abcd1234",
210186
),
211187
),
212188
]

tests/test_order.py

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import UTC, datetime, timedelta
1+
from datetime import UTC, datetime, timedelta, timezone
22

33
import pytest
44
from fastapi import status
@@ -7,9 +7,9 @@
77
from geojson_pydantic.types import Position2D
88
from httpx import Response
99

10-
from stapi_fastapi.models.order import OrderPayload
10+
from stapi_fastapi.models.order import OrderPayload, OrderStatus, OrderStatusCode
1111

12-
from .application import MyOrderParameters
12+
from .application import InMemoryOrderDB, MyOrderParameters
1313
from .backends import MockProductBackend
1414
from .shared import find_link
1515

@@ -188,13 +188,46 @@ def test_token_not_found(stapi_client: TestClient) -> None:
188188
assert res.status_code == status.HTTP_404_NOT_FOUND
189189

190190

191-
def test_order_status_pagination(statuses_client: TestClient, limit: int = 2) -> None:
191+
@pytest.fixture
192+
def order_statuses() -> dict[str, list[OrderStatus]]:
193+
statuses = {
194+
"test_order_id": [
195+
OrderStatus(
196+
timestamp=datetime(2025, 1, 14, 2, 21, 48, 466726, tzinfo=timezone.utc),
197+
status_code=OrderStatusCode.received,
198+
links=[],
199+
),
200+
OrderStatus(
201+
timestamp=datetime(2025, 1, 15, 5, 20, 48, 466726, tzinfo=timezone.utc),
202+
status_code=OrderStatusCode.accepted,
203+
links=[],
204+
),
205+
OrderStatus(
206+
timestamp=datetime(
207+
2025, 1, 16, 10, 15, 32, 466726, tzinfo=timezone.utc
208+
),
209+
status_code=OrderStatusCode.completed,
210+
links=[],
211+
),
212+
]
213+
}
214+
return statuses
215+
216+
217+
def test_order_status_pagination(
218+
stapi_client: TestClient,
219+
order_db: InMemoryOrderDB,
220+
order_statuses: dict[str, list[OrderStatus]],
221+
limit: int = 2,
222+
) -> None:
223+
order_db._statuses = order_statuses
224+
192225
order_id = "test_order_id"
193-
res = statuses_client.get(f"/orders/{order_id}/statuses")
226+
res = stapi_client.get(f"/orders/{order_id}/statuses")
194227
assert res.status_code == status.HTTP_200_OK
195228

196229
order_id = "test_order_id"
197-
res = statuses_client.get(
230+
res = stapi_client.get(
198231
f"/orders/{order_id}/statuses", params={"next": None, "limit": limit}
199232
)
200233
body = res.json()
@@ -205,7 +238,7 @@ def test_order_status_pagination(statuses_client: TestClient, limit: int = 2) ->
205238
next = link["href"]
206239

207240
while len(links) > 1:
208-
res = statuses_client.get(next)
241+
res = stapi_client.get(next)
209242
assert res.status_code == status.HTTP_200_OK
210243
body = res.json()
211244
assert body["statuses"] != []
@@ -217,8 +250,13 @@ def test_order_status_pagination(statuses_client: TestClient, limit: int = 2) ->
217250

218251

219252
def test_get_order_statuses_bad_token(
220-
statuses_client: TestClient, limit: int = 2
253+
stapi_client: TestClient,
254+
order_db: InMemoryOrderDB,
255+
order_statuses: dict[str, list[OrderStatus]],
256+
limit: int = 2,
221257
) -> None:
258+
order_db._statuses = order_statuses
259+
222260
order_id = "non_existing_order_id"
223-
res = statuses_client.get(f"/orders/{order_id}/statuses")
261+
res = stapi_client.get(f"/orders/{order_id}/statuses")
224262
assert res.status_code == status.HTTP_404_NOT_FOUND

0 commit comments

Comments
 (0)