|
3 | 3 | import os
|
4 | 4 | from os import listdir
|
5 | 5 | from os.path import isfile, join
|
| 6 | +from typing import Callable, Dict |
6 | 7 |
|
7 | 8 | import pytest
|
| 9 | +from httpx import AsyncClient |
| 10 | +from stac_pydantic import api |
| 11 | + |
| 12 | +from stac_fastapi.core.core import TransactionsClient |
| 13 | + |
| 14 | +from ..conftest import MockRequest |
8 | 15 |
|
9 | 16 | THIS_DIR = os.path.dirname(os.path.abspath(__file__))
|
10 | 17 |
|
@@ -40,7 +47,6 @@ async def test_filter_extension_collection_link(app_client, load_test_data):
|
40 | 47 |
|
41 | 48 | @pytest.mark.asyncio
|
42 | 49 | async def test_search_filters_post(app_client, ctx):
|
43 |
| - |
44 | 50 | filters = []
|
45 | 51 | pwd = f"{THIS_DIR}/cql2"
|
46 | 52 | for fn in [fn for f in listdir(pwd) if isfile(fn := join(pwd, f))]:
|
@@ -625,3 +631,65 @@ async def test_search_filter_extension_cql2text_s_disjoint_property(app_client,
|
625 | 631 | assert resp.status_code == 200
|
626 | 632 | resp_json = resp.json()
|
627 | 633 | assert len(resp_json["features"]) == 1
|
| 634 | + |
| 635 | + |
| 636 | +@pytest.mark.asyncio |
| 637 | +async def test_queryables_enum_platform( |
| 638 | + app_client: AsyncClient, |
| 639 | + txn_client: TransactionsClient, |
| 640 | + load_test_data: Callable[[str], Dict], |
| 641 | +): |
| 642 | + # Arrange |
| 643 | + # Create collection |
| 644 | + collection_data = load_test_data("test_collection.json") |
| 645 | + collection_id = collection_data["id"] = "enum-test-collection" |
| 646 | + await txn_client.create_collection( |
| 647 | + api.Collection(**collection_data), request=MockRequest |
| 648 | + ) |
| 649 | + |
| 650 | + # Create items with different platform values |
| 651 | + item_data_1 = load_test_data("test_item.json") |
| 652 | + item_data_1["id"] = "enum-test-item-1" |
| 653 | + item_data_1["properties"]["platform"] = "landsat-8" |
| 654 | + await txn_client.create_item( |
| 655 | + collection_id=collection_id, |
| 656 | + item=api.Item(**item_data_1), |
| 657 | + request=MockRequest, |
| 658 | + ) |
| 659 | + |
| 660 | + item_data_2 = load_test_data("test_item.json") |
| 661 | + item_data_2["id"] = "enum-test-item-2" |
| 662 | + item_data_2["properties"]["platform"] = "sentinel-2" |
| 663 | + await txn_client.create_item( |
| 664 | + collection_id=collection_id, |
| 665 | + item=api.Item(**item_data_2), |
| 666 | + request=MockRequest, |
| 667 | + ) |
| 668 | + |
| 669 | + item_data_3 = load_test_data("test_item.json") |
| 670 | + item_data_3["id"] = "enum-test-item-3" |
| 671 | + item_data_3["properties"]["platform"] = "landsat-8" |
| 672 | + await txn_client.create_item( |
| 673 | + collection_id=collection_id, |
| 674 | + item=api.Item(**item_data_3), |
| 675 | + request=MockRequest, |
| 676 | + refresh=True, |
| 677 | + ) |
| 678 | + |
| 679 | + # Act |
| 680 | + # Test queryables endpoint |
| 681 | + queryables = ( |
| 682 | + (await app_client.get(f"/collections/{collection_data['id']}/queryables")) |
| 683 | + .raise_for_status() |
| 684 | + .json() |
| 685 | + ) |
| 686 | + |
| 687 | + # Assert |
| 688 | + # Verify distinct values (should only have 2 unique values despite 3 items) |
| 689 | + properties = queryables["properties"] |
| 690 | + platform_info = properties["platform"] |
| 691 | + platform_values = platform_info["enum"] |
| 692 | + assert set(platform_values) == {"landsat-8", "sentinel-2"} |
| 693 | + |
| 694 | + # Clean up |
| 695 | + await txn_client.delete_collection(collection_id) |
0 commit comments