Skip to content

Commit 4e11011

Browse files
committed
Adding tests for new collection update workflow.
1 parent fe9d5d5 commit 4e11011

File tree

3 files changed

+86
-11
lines changed

3 files changed

+86
-11
lines changed

docker-compose.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ services:
1414
- RELOAD=true
1515
- ENVIRONMENT=local
1616
- WEB_CONCURRENCY=10
17-
- ES_HOST=172.17.0.1
17+
- ES_HOST=elasticsearch
1818
- ES_PORT=9200
1919
- ES_USE_SSL=false
2020
- ES_VERIFY_CERTS=false
@@ -32,6 +32,7 @@ services:
3232
elasticsearch:
3333
container_name: es-container
3434
image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTICSEARCH_VERSION:-8.11.0}
35+
hostname: elasticsearch
3536
environment:
3637
ES_JAVA_OPTS: -Xms512m -Xmx1g
3738
volumes:

stac_fastapi/elasticsearch/stac_fastapi/elasticsearch/database_logic.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -785,15 +785,15 @@ async def update_collection(
785785
await self.find_collection(collection_id=collection_id)
786786

787787
if collection_id != collection["id"]:
788-
await self.create_collection(collection)
788+
await self.create_collection(collection, refresh=refresh)
789789

790790
await self.client.reindex(
791791
body={
792-
"dest": {"index": f"items_{collection['id']}"},
793-
"source": {"index": f"items_{collection_id}"},
792+
"dest": {"index": f"{ITEMS_INDEX_PREFIX}{collection['id']}"},
793+
"source": {"index": f"{ITEMS_INDEX_PREFIX}{collection_id}"},
794794
"script": {
795795
"lang": "painless",
796-
"source": f"""ctx._source.collection = '{collection["id"]}'""",
796+
"source": f"""ctx._id = ctx._id.replace('{collection_id}', '{collection["id"]}'); ctx._source.collection = '{collection["id"]}' ;""",
797797
},
798798
},
799799
wait_for_completion=True,

stac_fastapi/elasticsearch/tests/clients/test_elasticsearch.py

Lines changed: 80 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,90 @@ async def test_update_collection(
4040
txn_client,
4141
load_test_data: Callable,
4242
):
43-
data = load_test_data("test_collection.json")
43+
collection_data = load_test_data("test_collection.json")
44+
item_data = load_test_data("test_item.json")
4445

45-
await txn_client.create_collection(data, request=MockRequest)
46-
data["keywords"].append("new keyword")
47-
await txn_client.update_collection(data, request=MockRequest)
46+
await txn_client.create_collection(collection_data, request=MockRequest)
47+
await txn_client.create_item(
48+
collection_id=collection_data["id"],
49+
item=item_data,
50+
request=MockRequest,
51+
refresh=True,
52+
)
4853

49-
coll = await core_client.get_collection(data["id"], request=MockRequest)
54+
collection_data["keywords"].append("new keyword")
55+
await txn_client.update_collection(collection_data, request=MockRequest)
56+
57+
coll = await core_client.get_collection(collection_data["id"], request=MockRequest)
5058
assert "new keyword" in coll["keywords"]
5159

52-
await txn_client.delete_collection(data["id"])
60+
item = await core_client.get_item(
61+
item_id=item_data["id"],
62+
collection_id=collection_data["id"],
63+
request=MockRequest,
64+
)
65+
assert item["id"] == item_data["id"]
66+
assert item["collection"] == item_data["collection"]
67+
68+
await txn_client.delete_collection(collection_data["id"])
69+
70+
71+
@pytest.mark.asyncio
72+
async def test_update_collection_id(
73+
core_client,
74+
txn_client,
75+
load_test_data: Callable,
76+
):
77+
collection_data = load_test_data("test_collection.json")
78+
item_data = load_test_data("test_item.json")
79+
new_collection_id = "new-test-collection"
80+
81+
await txn_client.create_collection(collection_data, request=MockRequest)
82+
await txn_client.create_item(
83+
collection_id=collection_data["id"],
84+
item=item_data,
85+
request=MockRequest,
86+
refresh=True,
87+
)
88+
89+
old_collection_id = collection_data["id"]
90+
collection_data["id"] = new_collection_id
91+
92+
await txn_client.update_collection(
93+
collection=collection_data,
94+
request=MockRequest(
95+
query_params={
96+
"collection_id": old_collection_id,
97+
"limit": "10",
98+
}
99+
),
100+
refresh=True,
101+
)
102+
103+
with pytest.raises(NotFoundError):
104+
await core_client.get_collection(old_collection_id, request=MockRequest)
105+
106+
coll = await core_client.get_collection(collection_data["id"], request=MockRequest)
107+
assert coll["id"] == new_collection_id
108+
109+
with pytest.raises(NotFoundError):
110+
await core_client.get_item(
111+
item_id=item_data["id"],
112+
collection_id=old_collection_id,
113+
request=MockRequest,
114+
)
115+
116+
item = await core_client.get_item(
117+
item_id=item_data["id"],
118+
collection_id=collection_data["id"],
119+
request=MockRequest,
120+
refresh=True,
121+
)
122+
123+
assert item["id"] == item_data["id"]
124+
assert item["collection"] == new_collection_id
125+
126+
await txn_client.delete_collection(collection_data["id"])
53127

54128

55129
@pytest.mark.asyncio

0 commit comments

Comments
 (0)