diff options
Diffstat (limited to 'tests')
5 files changed, 122 insertions, 0 deletions
diff --git a/tests/data/simple/templates/new_entry_from_data.yaml b/tests/data/simple/templates/new_entry_from_data.yaml new file mode 100644 index 0000000..1f9e9a5 --- /dev/null +++ b/tests/data/simple/templates/new_entry_from_data.yaml @@ -0,0 +1,12 @@ +name: '{{ name }}' +description: | +  {{ description if description else "." | indent(width=2, first=False) }} +position: '{{ position }}' +# # quantity (integer): how many items are there +quantity: {{ quantity if quantity else "0" }} +# # value (float): how much each item is +value: 0.0 +# # cost (decimal): how much this costs +cost: '0' +# # other (yaml):  +other: diff --git a/tests/data/simple/templates/new_entry_from_data_broken.yaml b/tests/data/simple/templates/new_entry_from_data_broken.yaml new file mode 100644 index 0000000..73798ce --- /dev/null +++ b/tests/data/simple/templates/new_entry_from_data_broken.yaml @@ -0,0 +1,14 @@ +name: '{{ name }}' +description: | +  {{ description if description else "." indent(width=2, first=False) }} +  # Note that the lack of | between "." and indent is wanted, to get a proper +  # TemplatingError. +position: '{{ position }}' +# quantity (integer): how many items are there +quantity: {{ quantity if quantity else "0" }} +# value (float): how much each item is +value: 0.0 +# cost (decimal): how much this costs +cost: '0' +# other (yaml):  +other: diff --git a/tests/data/simple/templates/new_entry_from_data_invalid_yaml.yaml b/tests/data/simple/templates/new_entry_from_data_invalid_yaml.yaml new file mode 100644 index 0000000..7493947 --- /dev/null +++ b/tests/data/simple/templates/new_entry_from_data_invalid_yaml.yaml @@ -0,0 +1,13 @@ +# A : in that position should result in invalid yaml +name: '{{ name }}': some text +description: | +  {{ description if description else "." | indent(width=2, first=False) }} +position: '{{ position }}' +# # quantity (integer): how many items are there +quantity: {{ quantity if quantity else "0" }} +# # value (float): how much each item is +value: 0.0 +# # cost (decimal): how much this costs +cost: '0' +# # other (yaml):  +other: diff --git a/tests/data/simple/templates/new_entry_from_multiple_data.yaml b/tests/data/simple/templates/new_entry_from_multiple_data.yaml new file mode 100644 index 0000000..cfa4296 --- /dev/null +++ b/tests/data/simple/templates/new_entry_from_multiple_data.yaml @@ -0,0 +1,12 @@ +name: '{{ data.name }}' +description: | +  {{ description if description else "." | indent(width=2, first=False) }} +position: '{{ data.position }}' +# # quantity (integer): how many items are there +quantity: {{ values.quantity if values.quantity else "0" }} +# # value (float): how much each item is +value: 0.0 +# # cost (decimal): how much this costs +cost: '{{ values.cost if values.cost else "0.0" }}' +# # other (yaml):  +other: diff --git a/tests/test_collection.py b/tests/test_collection.py index d05415f..2308633 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -1,4 +1,5 @@  import datetime +import decimal  import logging  import os.path  import shutil @@ -294,6 +295,76 @@ class testSimpleCollection(unittest.TestCase):              {'value': None, 'frequency': 1},          ]) +    def test_entry_from_template(self): +        # TODO: make finding the templates less prone to breaking and +        # then remove the cwd change from here +        old_cwd = os.getcwd() +        os.chdir(self.tmpdir) +        data = { +            "name": "This is a name", +        } +        entry = self.collection.entry_from_rendered_template( +            "templates/new_entry_from_data.yaml", +            data +        ) +        os.chdir(old_cwd) +        self.assertIsInstance(entry, lesana.Entry) +        self.assertEqual(entry.data["name"], "This is a name") + +    def test_entry_from_template_multiple_data_sources(self): +        # TODO: make finding the templates less prone to breaking and +        # then remove the cwd change from here +        old_cwd = os.getcwd() +        os.chdir(self.tmpdir) +        data = { +            "name": "This is a name", +        } +        values = { +            "quantity": 5, +            "cost": decimal.Decimal("3.5"), +        } +        entry = self.collection.entry_from_rendered_template( +            "templates/new_entry_from_multiple_data.yaml", +            { +                "data": data, +                "values": values +            } +        ) +        os.chdir(old_cwd) +        self.assertIsInstance(entry, lesana.Entry) +        self.assertEqual(entry.data["name"], "This is a name") +        self.assertEqual(entry.data["quantity"], 5) + +    def test_entry_from_bad_template(self): +        # TODO: make finding the templates less prone to breaking and +        # then remove the cwd change from here +        old_cwd = os.getcwd() +        os.chdir(self.tmpdir) +        data = { +            "name": "This is a name", +        } +        with self.assertRaises(lesana.collection.TemplatingError): +            self.collection.entry_from_rendered_template( +                "templates/new_entry_from_data_broken.yaml", +                data +            ) +        os.chdir(old_cwd) + +    def test_entry_from_bad_yaml(self): +        # TODO: make finding the templates less prone to breaking and +        # then remove the cwd change from here +        old_cwd = os.getcwd() +        os.chdir(self.tmpdir) +        data = { +            "name": "This is a name", +        } +        with self.assertRaises(lesana.collection.TemplatingError): +            self.collection.entry_from_rendered_template( +                "templates/new_entry_from_data_invalid_yaml.yaml", +                data +            ) +        os.chdir(old_cwd) +  class testComplexCollection(unittest.TestCase):      def setUp(self):  | 
