Skip to content

Commit

Permalink
Adding tests for new collection update workflow.
Browse files Browse the repository at this point in the history
  • Loading branch information
rhysrevans3 committed Jan 29, 2024
1 parent fe9d5d5 commit 4e11011
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 11 deletions.
3 changes: 2 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ services:
- RELOAD=true
- ENVIRONMENT=local
- WEB_CONCURRENCY=10
- ES_HOST=172.17.0.1
- ES_HOST=elasticsearch
- ES_PORT=9200
- ES_USE_SSL=false
- ES_VERIFY_CERTS=false
Expand All @@ -32,6 +32,7 @@ services:
elasticsearch:
container_name: es-container
image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTICSEARCH_VERSION:-8.11.0}
hostname: elasticsearch
environment:
ES_JAVA_OPTS: -Xms512m -Xmx1g
volumes:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -785,15 +785,15 @@ async def update_collection(
await self.find_collection(collection_id=collection_id)

if collection_id != collection["id"]:
await self.create_collection(collection)
await self.create_collection(collection, refresh=refresh)

await self.client.reindex(
body={
"dest": {"index": f"items_{collection['id']}"},
"source": {"index": f"items_{collection_id}"},
"dest": {"index": f"{ITEMS_INDEX_PREFIX}{collection['id']}"},
"source": {"index": f"{ITEMS_INDEX_PREFIX}{collection_id}"},
"script": {
"lang": "painless",
"source": f"""ctx._source.collection = '{collection["id"]}'""",
"source": f"""ctx._id = ctx._id.replace('{collection_id}', '{collection["id"]}'); ctx._source.collection = '{collection["id"]}' ;""",
},
},
wait_for_completion=True,
Expand Down
86 changes: 80 additions & 6 deletions stac_fastapi/elasticsearch/tests/clients/test_elasticsearch.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,90 @@ async def test_update_collection(
txn_client,
load_test_data: Callable,
):
data = load_test_data("test_collection.json")
collection_data = load_test_data("test_collection.json")
item_data = load_test_data("test_item.json")

await txn_client.create_collection(data, request=MockRequest)
data["keywords"].append("new keyword")
await txn_client.update_collection(data, request=MockRequest)
await txn_client.create_collection(collection_data, request=MockRequest)
await txn_client.create_item(
collection_id=collection_data["id"],
item=item_data,
request=MockRequest,
refresh=True,
)

coll = await core_client.get_collection(data["id"], request=MockRequest)
collection_data["keywords"].append("new keyword")
await txn_client.update_collection(collection_data, request=MockRequest)

coll = await core_client.get_collection(collection_data["id"], request=MockRequest)
assert "new keyword" in coll["keywords"]

await txn_client.delete_collection(data["id"])
item = await core_client.get_item(
item_id=item_data["id"],
collection_id=collection_data["id"],
request=MockRequest,
)
assert item["id"] == item_data["id"]
assert item["collection"] == item_data["collection"]

await txn_client.delete_collection(collection_data["id"])


@pytest.mark.asyncio
async def test_update_collection_id(
core_client,
txn_client,
load_test_data: Callable,
):
collection_data = load_test_data("test_collection.json")
item_data = load_test_data("test_item.json")
new_collection_id = "new-test-collection"

await txn_client.create_collection(collection_data, request=MockRequest)
await txn_client.create_item(
collection_id=collection_data["id"],
item=item_data,
request=MockRequest,
refresh=True,
)

old_collection_id = collection_data["id"]
collection_data["id"] = new_collection_id

await txn_client.update_collection(
collection=collection_data,
request=MockRequest(
query_params={
"collection_id": old_collection_id,
"limit": "10",
}
),
refresh=True,
)

with pytest.raises(NotFoundError):
await core_client.get_collection(old_collection_id, request=MockRequest)

coll = await core_client.get_collection(collection_data["id"], request=MockRequest)
assert coll["id"] == new_collection_id

with pytest.raises(NotFoundError):
await core_client.get_item(
item_id=item_data["id"],
collection_id=old_collection_id,
request=MockRequest,
)

item = await core_client.get_item(
item_id=item_data["id"],
collection_id=collection_data["id"],
request=MockRequest,
refresh=True,
)

assert item["id"] == item_data["id"]
assert item["collection"] == new_collection_id

await txn_client.delete_collection(collection_data["id"])


@pytest.mark.asyncio
Expand Down

0 comments on commit 4e11011

Please sign in to comment.