Skip to content

Commit

Permalink
Test for parameter, num uniqueness constraints.
Browse files Browse the repository at this point in the history
  • Loading branch information
danielballan committed Nov 7, 2023
1 parent f204d45 commit 1cdb59c
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 2 deletions.
79 changes: 78 additions & 1 deletion tiled/_tests/test_catalog.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import pandas.testing
import pytest
import pytest_asyncio
import sqlalchemy.exc
import tifffile
import xarray

Expand All @@ -17,12 +18,13 @@
from ..catalog import in_memory
from ..catalog.adapter import WouldDeleteData
from ..catalog.explain import record_explanations
from ..catalog.register import create_node_safe
from ..catalog.utils import ensure_uri
from ..client import Context, from_context
from ..client.xarray import write_xarray_dataset
from ..queries import Eq, Key
from ..server.app import build_app
from ..server.schemas import Asset, DataSource
from ..server.schemas import Asset, DataSource, Management
from ..structures.core import StructureFamily


Expand Down Expand Up @@ -364,3 +366,78 @@ async def test_delete_tree(tmpdir):
assert len(data_sources_after_delete) == 0
assets_after_delete = (await tree.context.execute("SELECT * from assets")).all()
assert len(assets_after_delete) == 0


@pytest.mark.asyncio
@pytest.mark.parametrize(
"assets",
[
[
Asset(
data_uri="file://localhost/test1",
is_directory=False,
parameter="filepath",
num=None,
),
Asset(
data_uri="file://localhost/test2",
is_directory=False,
parameter="filepath",
num=1,
),
],
[
Asset(
data_uri="file://localhost/test1",
is_directory=False,
parameter="filepath",
num=None,
),
Asset(
data_uri="file://localhost/test2",
is_directory=False,
parameter="filepath",
num=None,
),
],
[
Asset(
data_uri="file://localhost/test1",
is_directory=False,
parameter="filepath",
num=1,
),
Asset(
data_uri="file://localhost/test2",
is_directory=False,
parameter="filepath",
num=1,
),
],
],
ids=[
"mix-null-and-int",
"duplicate-null",
"duplicate-int",
],
)
async def test_constraints_on_parameter_and_num(a, assets):
"Test constraints enforced by database on 'parameter' and 'num'."
arr_adapter = ArrayAdapter.from_array([1, 2, 3])
with pytest.raises(sqlalchemy.exc.IntegrityError):
await create_node_safe(
a,
key="test",
structure_family=arr_adapter.structure_family,
metadata=dict(arr_adapter.metadata()),
specs=arr_adapter.specs,
data_sources=[
DataSource(
mimetype="application/x-test",
structure=asdict(arr_adapter.structure()),
parameters={},
management=Management.external,
assets=assets,
)
],
)
1 change: 0 additions & 1 deletion tiled/catalog/orm.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,6 @@ class DataSourceAssetAssociation(Base):
__table_args__ = (
UniqueConstraint(
"data_source_id",
"asset_id",
"parameter",
"num",
name="parameter_num_unique_constraint",
Expand Down

0 comments on commit 1cdb59c

Please sign in to comment.