File size: 2,721 Bytes
b33130e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
"""Run with: python -m unittest discover -s tests -v."""
import os
from pathlib import Path
import tempfile
from types import SimpleNamespace
import unittest
from unittest.mock import patch

import middleMan


class FormState(dict):
    """Blank form fixture; named fields are supplied by each test."""

    def __missing__(self, key):
        return ""

    def __getattr__(self, key):
        return self[key]


class MarkdownRenderingTests(unittest.TestCase):
    def render(self, **values):
        state = FormState(markdown_upload="language_model_template1.md", model_name="Example model")
        state.update(values)
        with patch.object(middleMan, "st", SimpleNamespace(session_state=state)):
            return middleMan.parse_into_jinja_markdown()

    def test_imported_markdown_preserves_literal_template_syntax(self):
        markdown = "# My card\n\n{{ 7 * 7 }}\n{% include 'README.md' %}\n"
        self.assertEqual(self.render(uploaded_markdown=markdown), markdown)

    def test_empty_import_is_not_replaced_with_a_default_template(self):
        self.assertEqual(self.render(uploaded_markdown=""), "")

    def test_imported_markdown_is_not_shared_with_another_session(self):
        marker = "SESSION_A_ONLY"
        self.assertEqual(self.render(uploaded_markdown=marker), marker)
        self.assertNotIn(marker, self.render())

    def test_only_built_in_templates_can_be_loaded(self):
        for filename in ["README.md", "../language_model_template1.md", "/tmp/card.md"]:
            with self.subTest(filename=filename), self.assertRaises(ValueError):
                self.render(markdown_upload=filename)

    def test_built_in_templates_still_render_form_fields(self):
        for filename in ["language_model_template1.md", "current_card.md"]:
            with self.subTest(filename=filename):
                content = self.render(markdown_upload=filename)
                self.assertIn("Example model", content)
                self.assertNotIn("{{ model_id }}", content)

    def test_form_values_are_data_even_for_built_in_templates(self):
        self.assertIn("{{ 7 * 7 }}", self.render(model_name="{{ 7 * 7 }}"))

    def test_working_directory_cannot_shadow_built_in_templates(self):
        original_directory = Path.cwd()
        with tempfile.TemporaryDirectory() as directory:
            Path(directory, "language_model_template1.md").write_text("SHADOW_TEMPLATE")
            try:
                os.chdir(directory)
                content = self.render()
            finally:
                os.chdir(original_directory)
        self.assertNotIn("SHADOW_TEMPLATE", content)
        self.assertIn("Example model", content)


if __name__ == "__main__":
    unittest.main()