Skip to content

Commit

Permalink
enhancement: add some test cases into tests.api to reveal wrong
Browse files Browse the repository at this point in the history
behaviors of single_load, multi_load and load APIs

- add JSON data files to test
- Test_34_single_load.test_10_single_load_w_validation:
  add to check if 'single_load' API supports validation (ac_schema)
- Test_34_single_load.test_20_single_load_w_query: add to
  check if 'single_load' API supports query w/ JMESPath (actually, not)
- Test_44_multi_load.test_10_multi_load_..._config_files: add to check
  if validation succeeds for multiple partial configuration files that
  each file cannot pass validation
- correct wrong keyword options, s/ac_validate/ac_schema/g
  • Loading branch information
ssato committed May 22, 2018
1 parent d14655f commit 6ef2f5c
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 4 deletions.
1 change: 1 addition & 0 deletions tests/00-00-cnf.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"a": 1}
1 change: 1 addition & 0 deletions tests/00-01-cnf.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"b": {"b": [1, 2], "c": "C"}}
1 change: 1 addition & 0 deletions tests/00-02-cnf.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"name": "aaa"}
1 change: 1 addition & 0 deletions tests/00-scm.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type": "object", "properties": {"name": {"type": "string"}, "a": {"type": "integer"}, "b": {"type": "object", "properties": {"b": {"type": "array", "items": {"type": "integer"}}}}}}
55 changes: 51 additions & 4 deletions tests/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import anyconfig.template
import tests.common

from tests.common import CNF_0, SCM_0, dicts_equal
from tests.common import CNF_0, SCM_0, dicts_equal, selfdir


# suppress logging messages.
Expand Down Expand Up @@ -168,7 +168,7 @@ def test_48_loads_w_validation(self):
cnf_s = TT.dumps(CNF_0, "json")
scm_s = TT.dumps(SCM_0, "json")
cnf_2 = TT.loads(cnf_s, ac_parser="json", ac_context={},
ac_validate=scm_s)
ac_schema=scm_s)

self.assertEqual(cnf_2["name"], CNF_0["name"])
self.assertEqual(cnf_2["a"], CNF_0["a"])
Expand Down Expand Up @@ -355,6 +355,40 @@ def test_40_open_yaml_file(self):
self._load_and_dump_with_opened_files("a.yml")


class Test_34_single_load(TestBaseWithIO):

def test_10_single_load_w_validation(self):
cnf_path = os.path.join(self.workdir, "cnf.json")
scm_path = os.path.join(self.workdir, "scm.json")
TT.dump(CNF_0, cnf_path)
TT.dump(SCM_0, scm_path)

cnf_2 = TT.single_load(cnf_path, ac_context={}, ac_schema=scm_path)

self.assertEqual(cnf_2["name"], CNF_0["name"])
self.assertEqual(cnf_2["a"], CNF_0["a"])
self.assertEqual(cnf_2["b"]["b"], CNF_0["b"]["b"])
self.assertEqual(cnf_2["b"]["c"], CNF_0["b"]["c"])

def test_20_single_load_w_query(self):
cpath = os.path.join(self.workdir, "cnf.json")
TT.dump(CNF_0, cpath)

try:
if TT.query.jmespath:
self.assertEqual(TT.single_load(cpath, ac_query="a"), 1)
self.assertEqual(TT.single_load(cpath, ac_query="b.b"), [1, 2])
self.assertEqual(TT.single_load(cpath, ac_query="b.b[1]"), 2)
self.assertEqual(TT.single_load(cpath, ac_query="b.b[1:]"),
[2])
self.assertEqual(TT.single_load(cpath, ac_query="b.b[::-1]"),
[2, 1])
self.assertEqual(TT.single_load(cpath, ac_query="length(b.b)"),
2)
except (NameError, AttributeError):
pass # jmespath is not available.


class TestBaseWithIOMultiFiles(TestBaseWithIO):

def setUp(self):
Expand Down Expand Up @@ -489,6 +523,19 @@ def test_60_multi_load__w_ac_dict_option(self):
self.assertTrue(isinstance(res, MyODict))


class Test_44_multi_load(TestBase):

def test_10_multi_load_w_validation_for_partial_single_config_files(self):
cpaths = [os.path.join(selfdir(), "00-00-cnf.json"),
os.path.join(selfdir(), "00-01-cnf.json"),
os.path.join(selfdir(), "00-02-cnf.json")]
spath = os.path.join(selfdir(), "00-scm.json")

cnf = TT.multi_load(cpaths, ac_schema=spath)
ref = TT.multi_load(cpaths)
self.assert_dicts_equal(cnf, ref, ordered=False)


class Test_50_load_and_dump(TestBaseWithIOMultiFiles):

def test_30_dump_and_load(self):
Expand Down Expand Up @@ -550,7 +597,7 @@ def test_36_load_w_validation(self):
TT.dump(CNF_0, cnf_path)
TT.dump(SCM_0, scm_path)

cnf_2 = TT.load(cnf_path, ac_context={}, ac_validate=scm_path)
cnf_2 = TT.load(cnf_path, ac_context={}, ac_schema=scm_path)

self.assertEqual(cnf_2["name"], CNF_0["name"])
self.assertEqual(cnf_2["a"], CNF_0["a"])
Expand All @@ -563,7 +610,7 @@ def test_38_load_w_validation_yaml(self):
TT.dump(CNF_0, cnf_path)
TT.dump(SCM_0, scm_path)

cnf_2 = TT.load(cnf_path, ac_context={}, ac_validate=scm_path)
cnf_2 = TT.load(cnf_path, ac_context={}, ac_schema=scm_path)

self.assertEqual(cnf_2["name"], CNF_0["name"])
self.assertEqual(cnf_2["a"], CNF_0["a"])
Expand Down

0 comments on commit 6ef2f5c

Please sign in to comment.