Skip to content

Commit 3749c12

Browse files
use specific ENV ENABLE_TRANSACTIONS_EXTENSIONS for transactions (#239)
* use specific ENV ENABLE_TRANSACTIONS_EXTENSIONS for transactions * Update docker-compose.yml Co-authored-by: Henry Rodman <[email protected]> --------- Co-authored-by: Henry Rodman <[email protected]>
1 parent a6c501f commit 3749c12

File tree

5 files changed

+76
-9
lines changed

5 files changed

+76
-9
lines changed

.github/workflows/cicd.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ jobs:
101101
PGDATABASE: postgis
102102
APP_HOST: 0.0.0.0
103103
APP_PORT: 8080
104-
ENABLED_EXTENSIONS: transaction,bulk_transactions,query,sort,fields,filter,pagination,collection_search
104+
ENABLE_TRANSACTIONS_EXTENSIONS: TRUE
105105

106106
test-docs:
107107
runs-on: ubuntu-latest

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ services:
2121
- DB_MIN_CONN_SIZE=1
2222
- DB_MAX_CONN_SIZE=1
2323
- USE_API_HYDRATE=${USE_API_HYDRATE:-false}
24-
- ENABLED_EXTENSIONS=transaction,bulk_transactions,query,sort,fields,filter,pagination,collection_search
24+
- ENABLE_TRANSACTIONS_EXTENSIONS=TRUE
2525
ports:
2626
- "8082:8082"
2727
volumes:

stac_fastapi/pgstac/app.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,7 @@
9595

9696
application_extensions = []
9797

98-
# transaction extensions
99-
if "transaction" in enabled_extensions:
98+
if os.environ.get("ENABLE_TRANSACTIONS_EXTENSIONS", "").lower() in ["yes", "true", "1"]:
10099
application_extensions.append(
101100
TransactionExtension(
102101
client=TransactionsClient(),
@@ -105,7 +104,6 @@
105104
),
106105
)
107106

108-
if "bulk_transactions" in enabled_extensions:
109107
application_extensions.append(
110108
BulkTransactionExtension(client=BulkTransactionsClient()),
111109
)

tests/api/test_api.py

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,13 @@
6969

7070

7171
async def test_default_app_no_transactions(
72-
default_app_client, load_test_data, load_test_collection
72+
app_client_no_transaction, load_test_data, load_test_collection
7373
):
7474
coll = load_test_collection
7575
item = load_test_data("test_item.json")
76-
resp = await default_app_client.post(f"/collections/{coll['id']}/items", json=item)
76+
resp = await app_client_no_transaction.post(
77+
f"/collections/{coll['id']}/items", json=item
78+
)
7779

7880
# the default application does not have the transaction extensions enabled!
7981
assert resp.status_code == 405
@@ -903,3 +905,40 @@ async def test_no_extension(
903905

904906
finally:
905907
await close_db_connection(app)
908+
909+
910+
async def test_default_app(default_client, default_app, load_test_data):
911+
api_routes = {
912+
f"{list(route.methods)[0]} {route.path}" for route in default_app.routes
913+
}
914+
assert set(STAC_CORE_ROUTES).issubset(api_routes)
915+
assert set(STAC_TRANSACTION_ROUTES).issubset(api_routes)
916+
917+
# Load collections
918+
col = load_test_data("test_collection.json")
919+
resp = await default_client.post("/collections", json=col)
920+
assert resp.status_code == 201
921+
922+
# Load items
923+
item = load_test_data("test_item.json")
924+
resp = await default_client.post(f"/collections/{col['id']}/items", json=item)
925+
assert resp.status_code == 201
926+
927+
resp = await default_client.get("/conformance")
928+
assert resp.status_code == 200
929+
conf = resp.json()["conformsTo"]
930+
assert (
931+
"https://api.stacspec.org/v1.0.0/ogcapi-features/extensions/transaction" in conf
932+
)
933+
assert "https://api.stacspec.org/v1.0.0/collections/extensions/transaction" in conf
934+
assert "http://www.opengis.net/spec/cql2/1.0/conf/basic-cql2" in conf
935+
assert "http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/simple-query" in conf
936+
assert "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core" in conf
937+
assert (
938+
"http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/features-filter" in conf
939+
)
940+
assert "http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/filter" in conf
941+
assert "https://api.stacspec.org/v1.0.0-rc.1/collection-search" in conf
942+
assert "https://api.stacspec.org/v1.0.0/collections" in conf
943+
assert "https://api.stacspec.org/v1.0.0/ogcapi-features#query" in conf
944+
assert "https://api.stacspec.org/v1.0.0/ogcapi-features#sort" in conf

tests/conftest.py

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ async def app_client_no_ext(app_no_ext):
330330

331331

332332
@pytest.fixture(scope="function")
333-
async def default_app(database):
333+
async def app_no_transaction(database):
334334
"""Default stac-fastapi-pgstac application without any extensions."""
335335
api_settings = Settings(testing=True)
336336
api = StacApi(
@@ -358,8 +358,38 @@ async def default_app(database):
358358

359359

360360
@pytest.fixture(scope="function")
361-
async def default_app_client(default_app):
361+
async def app_client_no_transaction(app_no_transaction):
362362
logger.info("creating app_client")
363+
async with AsyncClient(
364+
transport=ASGITransport(app=app_no_transaction), base_url="http://test"
365+
) as c:
366+
yield c
367+
368+
369+
@pytest.fixture(scope="function")
370+
async def default_app(database, monkeypatch):
371+
"""Test default stac-fastapi-pgstac application."""
372+
monkeypatch.setenv("POSTGRES_USER", database.user)
373+
monkeypatch.setenv("POSTGRES_PASS", database.password)
374+
monkeypatch.setenv("POSTGRES_HOST_READER", database.host)
375+
monkeypatch.setenv("POSTGRES_HOST_WRITER", database.host)
376+
monkeypatch.setenv("POSTGRES_PORT", str(database.port))
377+
monkeypatch.setenv("POSTGRES_DBNAME", database.dbname)
378+
monkeypatch.delenv("ENABLED_EXTENSIONS", raising=False)
379+
380+
monkeypatch.setenv("ENABLE_TRANSACTIONS_EXTENSIONS", "TRUE")
381+
monkeypatch.setenv("USE_API_HYDRATE", "TRUE")
382+
monkeypatch.setenv("ENABLE_RESPONSE_MODELS", "TRUE")
383+
384+
from stac_fastapi.pgstac.app import app
385+
386+
await connect_to_db(app)
387+
yield app
388+
await close_db_connection(app)
389+
390+
391+
@pytest.fixture(scope="function")
392+
async def default_client(default_app):
363393
async with AsyncClient(
364394
transport=ASGITransport(app=default_app), base_url="http://test"
365395
) as c:

0 commit comments

Comments
 (0)