Skip to content

Commit

Permalink
Meta tests: make constants upper-case
Browse files Browse the repository at this point in the history
  • Loading branch information
fonfon committed Aug 1, 2020
1 parent 6ce64c4 commit de61b9b
Showing 1 changed file with 54 additions and 54 deletions.
108 changes: 54 additions & 54 deletions ixmp/tests/core/test_meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
from ixmp.testing import models


sample_meta = {'sample_int': 3, 'sample_string': 'string_value',
SAMPLE_META = {'sample_int': 3, 'sample_string': 'string_value',
'sample_bool': False}
meta_entries = [
META_ENTRIES = [
{'sample_int': 3},
{'sample_string': 'string_value'},
{'sample_bool': False},
Expand All @@ -20,106 +20,106 @@
},
{'mixed_category': ['string', 0.01, 2, True]},
]
dantzig = models['dantzig']
DANTZIG = models['dantzig']


@pytest.mark.parametrize('meta', meta_entries)
@pytest.mark.parametrize('meta', META_ENTRIES)
def test_set_meta_missing_argument(mp, meta):
with pytest.raises(ValueError):
mp.set_meta(meta)
with pytest.raises(ValueError):
mp.set_meta(meta, model=dantzig['model'], version=0)
mp.set_meta(meta, model=DANTZIG['model'], version=0)
with pytest.raises(ValueError):
mp.set_meta(meta, scenario=dantzig['scenario'], version=0)
mp.set_meta(meta, scenario=DANTZIG['scenario'], version=0)


@pytest.mark.parametrize('meta', meta_entries)
@pytest.mark.parametrize('meta', META_ENTRIES)
def test_set_get_meta(mp, meta):
"""Assert that storing+retrieving meta yields expected values"""
mp.set_meta(meta, model=dantzig['model'])
obs = mp.get_meta(model=dantzig['model'])
mp.set_meta(meta, model=DANTZIG['model'])
obs = mp.get_meta(model=DANTZIG['model'])
assert obs == meta
assert obs == mp.get_meta()


@pytest.mark.parametrize('meta', meta_entries)
@pytest.mark.parametrize('meta', META_ENTRIES)
def test_unique_meta(mp, meta):
"""
When setting a meta key on two levels, a uniqueness error is expected.
"""
scenario = ixmp.Scenario(mp, **dantzig, version='new')
scenario = ixmp.Scenario(mp, **DANTZIG, version='new')
scenario.commit('save dummy scenario')
mp.set_meta(meta, model=dantzig['model'])
mp.set_meta(meta, model=DANTZIG['model'])
expected = ("Metadata already contains category")
with pytest.raises(Exception, match=expected):
mp.set_meta(meta, **dantzig, version=scenario.version)
scen = ixmp.Scenario(mp, **dantzig)
mp.set_meta(meta, **DANTZIG, version=scenario.version)
scen = ixmp.Scenario(mp, **DANTZIG)
with pytest.raises(Exception, match=expected):
scen.set_meta(meta)
# changing the category value type still should raise an error
meta = {'sample_entry': 3}
mp.set_meta(meta, **dantzig)
mp.set_meta(meta, **DANTZIG)
meta['sample_entry'] = 'test-string'
with pytest.raises(Exception, match=expected):
mp.set_meta(meta, **dantzig, version=scenario.version)
mp.set_meta(meta, **DANTZIG, version=scenario.version)


@pytest.mark.parametrize('meta', meta_entries)
@pytest.mark.parametrize('meta', META_ENTRIES)
def test_unique_meta_differing_model(mp, meta):
"""
When meta is set on a model-level, setting it on a new model and a scenario
should fail.
"""
mp.set_meta(meta, model=dantzig['model'])
dantzig2 = {
mp.set_meta(meta, model=DANTZIG['model'])
DANTZIG2 = {
'model': 'canning problem 2',
'scenario': 'standard',
}
mp.add_model(dantzig2['model'])
mp.add_model(DANTZIG2['model'])
expected = "Metadata already contains category"
with pytest.raises(Exception, match=expected):
mp.set_meta(meta, **dantzig2)
mp.set_meta(meta, **DANTZIG2)


@pytest.mark.parametrize('meta', meta_entries)
@pytest.mark.parametrize('meta', META_ENTRIES)
def test_unique_meta_model_scenario(mp, meta):
"""
When setting a meta key for a Model, it shouldn't be possible to set it
for a Model+Scenario then.
"""
mp.set_meta(meta, model=dantzig['model'])
mp.set_meta(meta, model=DANTZIG['model'])
expected = "Metadata already contains category"
with pytest.raises(Exception, match=expected):
mp.set_meta(meta, **dantzig)
mp.set_meta(meta, **DANTZIG)


@pytest.mark.parametrize('meta', meta_entries)
@pytest.mark.parametrize('meta', META_ENTRIES)
def test_unique_meta_scenario(mp, meta):
"""
When setting a meta key on a specific Scenario run, setting the same key
on an higher level (Model or Model+Scenario) should fail.
"""
scen = ixmp.Scenario(mp, **dantzig)
scen = ixmp.Scenario(mp, **DANTZIG)
scen.set_meta(meta)
# add a second scenario and verify that setting Meta for it works
scen2 = ixmp.Scenario(mp, **dantzig, version="new")
scen2 = ixmp.Scenario(mp, **DANTZIG, version="new")
scen2.commit('save dummy scenario')
scen2.set_meta(meta)
assert scen2.get_meta() == scen.get_meta()

expected = ("Metadata already contains category")
with pytest.raises(Exception, match=expected):
mp.set_meta(meta, **dantzig)
mp.set_meta(meta, **DANTZIG)
with pytest.raises(Exception, match=expected):
mp.set_meta(meta, model=dantzig['model'])
mp.set_meta(meta, model=DANTZIG['model'])


def test_meta_partial_overwrite(mp):
meta1 = {'sample_string': 3.0, 'another_string': 'string_value',
'sample_bool': False}
'sample_bool': False}
meta2 = {'sample_string': 5.0, 'yet_another_string': 'hello',
'sample_bool': True}
scen = ixmp.Scenario(mp, **dantzig)
scen = ixmp.Scenario(mp, **DANTZIG)
scen.set_meta(meta1)
scen.set_meta(meta2)
expected = copy.copy(meta1)
Expand All @@ -131,11 +131,11 @@ def test_meta_partial_overwrite(mp):
def test_remove_meta(mp):
meta = {'sample_int': 3.0, 'another_string': 'string_value'}
remove_key = 'another_string'
mp.set_meta(meta, **dantzig)
mp.remove_meta(remove_key, **dantzig)
mp.set_meta(meta, **DANTZIG)
mp.remove_meta(remove_key, **DANTZIG)
expected = copy.copy(meta)
del expected[remove_key]
obs = mp.get_meta(**dantzig)
obs = mp.get_meta(**DANTZIG)
assert expected == obs


Expand All @@ -144,13 +144,13 @@ def test_remove_invalid_meta(mp):
Removing nonexisting meta entries or None shouldn't result in any meta
being removed. Providing None should give a ValueError.
"""
mp.set_meta(sample_meta, **dantzig)
mp.set_meta(SAMPLE_META, **DANTZIG)
with pytest.raises(ValueError):
mp.remove_meta(None, **dantzig)
mp.remove_meta('nonexisting_category', **dantzig)
mp.remove_meta([], **dantzig)
obs = mp.get_meta(**dantzig)
assert obs == sample_meta
mp.remove_meta(None, **DANTZIG)
mp.remove_meta('nonexisting_category', **DANTZIG)
mp.remove_meta([], **DANTZIG)
obs = mp.get_meta(**DANTZIG)
assert obs == SAMPLE_META


def test_set_and_remove_meta_scenario(mp):
Expand All @@ -161,7 +161,7 @@ def test_set_and_remove_meta_scenario(mp):
meta2 = {'sample_string': 5.0, 'yet_another_string': 'hello'}
remove_key = 'another_string'

scen = ixmp.Scenario(mp, **dantzig)
scen = ixmp.Scenario(mp, **DANTZIG)
scen.set_meta(meta1)
scen.set_meta(meta2)
expected = copy.copy(meta1)
Expand All @@ -181,7 +181,7 @@ def test_scenario_delete_meta_warning(mp):
This test can be removed once Scenario.delete_meta is removed.
"""
scen = ixmp.Scenario(mp, **dantzig)
scen = ixmp.Scenario(mp, **DANTZIG)
meta = {'sample_int': 3, 'sample_string': 'string_value'}
remove_key = 'sample_string'

Expand All @@ -197,31 +197,31 @@ def test_scenario_delete_meta_warning(mp):
def test_meta_arguments(mp):
"""Set scenario meta with key-value arguments"""
meta = {'sample_int': 3}
scen = ixmp.Scenario(mp, **dantzig)
scen = ixmp.Scenario(mp, **DANTZIG)
scen.set_meta(meta)
# add a second scenario and verify that setting Meta for it works
scen2 = ixmp.Scenario(mp, **dantzig, version="new")
scen2 = ixmp.Scenario(mp, **DANTZIG, version="new")
scen2.commit('save dummy scenario')
scen2.set_meta(*meta.popitem())
assert scen.get_meta() == scen2.get_meta()


def test_update_meta_lists(mp):
"""Set metadata categories having list/array values"""
sample_meta = {'list_category': ['a', 'b', 'c']}
mp.set_meta(sample_meta, model=dantzig['model'])
obs = mp.get_meta(model=dantzig['model'])
assert obs == sample_meta
SAMPLE_META = {'list_category': ['a', 'b', 'c']}
mp.set_meta(SAMPLE_META, model=DANTZIG['model'])
obs = mp.get_meta(model=DANTZIG['model'])
assert obs == SAMPLE_META
# try updating meta
sample_meta = {'list_category': ['a', 'e', 'f']}
mp.set_meta(sample_meta, model=dantzig['model'])
obs = mp.get_meta(model=dantzig['model'])
assert obs == sample_meta
SAMPLE_META = {'list_category': ['a', 'e', 'f']}
mp.set_meta(SAMPLE_META, model=DANTZIG['model'])
obs = mp.get_meta(model=DANTZIG['model'])
assert obs == SAMPLE_META


def test_meta_mixed_list(mp):
"""Set metadata categories having list/array values"""
meta = {'mixed_category': ['string', 0.01, True]}
mp.set_meta(meta, model=dantzig['model'])
obs = mp.get_meta(model=dantzig['model'])
mp.set_meta(meta, model=DANTZIG['model'])
obs = mp.get_meta(model=DANTZIG['model'])
assert obs == meta

0 comments on commit de61b9b

Please sign in to comment.