Skip to content

Commit

Permalink
add dataset update test
Browse files Browse the repository at this point in the history
  • Loading branch information
v0lat1le committed Jan 4, 2017
1 parent 0a72f8e commit 809a229
Showing 1 changed file with 69 additions and 1 deletion.
70 changes: 69 additions & 1 deletion integration_tests/index/test_config_docs.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@

import pytest
from datacube.index.postgres._fields import NumericRangeDocField
from datacube.model import Range
from datacube.model import Range, Dataset
from datacube.utils import changes

_DATASET_METADATA = {
'id': 'f7018d80-8807-11e5-aeaa-1040f381a756',
Expand Down Expand Up @@ -115,6 +116,73 @@ def test_idempotent_add_dataset_type(index, ls5_nbar_gtiff_type, ls5_nbar_gtiff_
# TODO: Support for adding/changing search fields?


def test_update_dataset(index, ls5_nbar_gtiff_doc, example_ls5_nbar_metadata_doc):
"""
:type index: datacube.index._api.Index
"""
ls5_nbar_gtiff_type = index.products.add_document(ls5_nbar_gtiff_doc)
assert ls5_nbar_gtiff_type

example_ls5_nbar_metadata_doc['lineage']['source_datasets'] = {}
dataset = Dataset(ls5_nbar_gtiff_type, example_ls5_nbar_metadata_doc, 'file:///test/doc.yaml')
dataset = index.datasets.add(dataset)
assert dataset

# update with the same doc should do nothing
index.datasets.update(dataset)
updated = index.datasets.get(dataset.id)
assert updated.local_uri == 'file:///test/doc.yaml'

# update location
assert index.datasets.get(dataset.id).local_uri == 'file:///test/doc.yaml'
update = Dataset(ls5_nbar_gtiff_type, example_ls5_nbar_metadata_doc, 'file:///test/doc2.yaml')
index.datasets.update(update)
updated = index.datasets.get(dataset.id)
assert updated.local_uri == 'file:///test/doc2.yaml'

# adding more metadata should always be allowed
doc = copy.deepcopy(updated.metadata_doc)
doc['test1'] = {'some': 'thing'}
update = Dataset(ls5_nbar_gtiff_type, doc, updated.local_uri)
index.datasets.update(update)
updated = index.datasets.get(dataset.id)
assert updated.metadata_doc['test1'] == {'some': 'thing'}
assert updated.local_uri == 'file:///test/doc2.yaml'

# adding more metadata and changing location
doc = copy.deepcopy(updated.metadata_doc)
doc['test2'] = {'some': 'other thing'}
update = Dataset(ls5_nbar_gtiff_type, doc, 'file:///test/doc3.yaml')
index.datasets.update(update)
updated = index.datasets.get(dataset.id)
assert updated.metadata_doc['test1'] == {'some': 'thing'}
assert updated.metadata_doc['test2'] == {'some': 'other thing'}
assert updated.local_uri == 'file:///test/doc3.yaml'

# changing stuff isn't allowed by default
doc = copy.deepcopy(updated.metadata_doc)
doc['product_type'] = 'foobar'
update = Dataset(ls5_nbar_gtiff_type, doc, 'file:///test/doc4.yaml')
with pytest.raises(ValueError):
index.datasets.update(update)
updated = index.datasets.get(dataset.id)
assert updated.metadata_doc['test1'] == {'some': 'thing'}
assert updated.metadata_doc['test2'] == {'some': 'other thing'}
assert updated.metadata_doc['product_type'] == 'nbar'
assert updated.local_uri == 'file:///test/doc3.yaml'

# allowed changes go through
doc = copy.deepcopy(updated.metadata_doc)
doc['product_type'] = 'foobar'
update = Dataset(ls5_nbar_gtiff_type, doc, 'file:///test/doc5.yaml')
index.datasets.update(update, {('product_type',): changes.allow_any})
updated = index.datasets.get(dataset.id)
assert updated.metadata_doc['test1'] == {'some': 'thing'}
assert updated.metadata_doc['test2'] == {'some': 'other thing'}
assert updated.metadata_doc['product_type'] == 'foobar'
assert updated.local_uri == 'file:///test/doc5.yaml'


def test_update_dataset_type(index, ls5_nbar_gtiff_type, ls5_nbar_gtiff_doc, default_metadata_type_doc):
"""
:type ls5_nbar_gtiff_type: datacube.model.DatasetType
Expand Down

0 comments on commit 809a229

Please sign in to comment.