Skip to content

Commit 88ac952

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

2 files changed

Lines changed: 48 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: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,50 @@ async def test_request_params_valid(request_valid, defaults, input_bbox, expecte
5757
),
5858
)
5959

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

61105
async def test_items_response(request_valid, defaults):
62106
"""Returned items properties must be mapped as expected"""

0 commit comments

Comments
 (0)