Skip to content

Commit 53f810e

Browse files
committed
fix: add number match when count is true
1 parent cb5f73e commit 53f810e

2 files changed

Lines changed: 49 additions & 0 deletions

File tree

stac_fastapi/eodag/core.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,12 @@ def _search_base(self, search_request: BaseSearchPostRequest, request: Request)
214214
feature_collection = ItemCollection(
215215
type="FeatureCollection",
216216
features=features,
217+
numberMatched=search_result.number_matched,
217218
numberReturned=len(features),
218219
)
220+
# Remove numberMatched if it is None
221+
if feature_collection.get("numberMatched") is None:
222+
feature_collection.pop("numberMatched")
219223

220224
# pagination
221225
if "provider" not in request.state.eodag_args and len(search_result) > 0:

tests/test_search.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,51 @@ async def test_request_params_valid(request_valid, defaults, input_bbox, expecte
5858
)
5959

6060

61+
async def test_count_search(request_valid, defaults, mock_search, mock_search_result):
62+
"""
63+
Test the count setting during a search.
64+
"""
65+
count = get_settings().count
66+
qs = f"search?collections={defaults.collection}"
67+
68+
assert count is False, "Default count setting should be False"
69+
response = await request_valid(
70+
qs,
71+
expected_search_kwargs=dict(
72+
collection=defaults.collection,
73+
token=None,
74+
items_per_page=DEFAULT_ITEMS_PER_PAGE,
75+
raise_errors=False,
76+
count=False, # Ensure count is set to False
77+
validate=True,
78+
),
79+
)
80+
assert "numberMatched" not in response
81+
82+
# Reset search mock, set "number_matched" attribute of the search results mock for a counting search
83+
# and set count to True
84+
mock_search.reset_mock()
85+
search_result = mock_search_result
86+
search_result.number_matched = len(search_result)
87+
get_settings().count = True
88+
89+
response = await request_valid(
90+
qs,
91+
expected_search_kwargs=dict(
92+
collection=defaults.collection,
93+
token=None,
94+
items_per_page=DEFAULT_ITEMS_PER_PAGE,
95+
raise_errors=False,
96+
count=True, # Ensure count is set to True
97+
validate=True,
98+
),
99+
)
100+
assert response["numberMatched"] == 2
101+
102+
# Reset count setting to default
103+
get_settings().count = count
104+
105+
61106
async def test_items_response(request_valid, defaults):
62107
"""Returned items properties must be mapped as expected"""
63108
resp_json = await request_valid(

0 commit comments

Comments
 (0)