import sys import os import pytest import shutil from jinja2 import Environment, FileSystemLoader, select_autoescape sys.path.append('src/') from backend.fsOutput import BackendFSOutFile, BackendFSOutStaticConent, BackendFSOutFolder, BackendFSOutputJinjaFile TEST_FOLDER = "/tmp/protocolGenerator_test_data" @pytest.fixture def filesystem_folder(): yield TEST_FOLDER shutil.rmtree(TEST_FOLDER) print("Cleanup done") def test_fsOutput_saveToDisk(filesystem_folder: str): jinja_env = Environment( loader=FileSystemLoader("test/data/templates/"), autoescape=select_autoescape() ) # Setup root_folder = BackendFSOutFolder("root", [ BackendFSOutFile("file1", "some content"), BackendFSOutFile("file2", "some other content"), BackendFSOutFolder("subfolder", [ BackendFSOutFile("file3", "some more content #2"), BackendFSOutFile("file4", "even more content"), ]), BackendFSOutStaticConent("test/data/static_folder/static_content2.txt", "static_content2.txt"), BackendFSOutStaticConent("test/data/static_content1.txt", "static_content1.txt"), BackendFSOutputJinjaFile(jinja_env, "template.jinja2", "template.txt", {"name": "World"}) ]) root_folder.saveToDisk(filesystem_folder) # Test Structure assert os.path.isdir(filesystem_folder) assert os.path.isfile(filesystem_folder + "/root/file1") assert os.path.isfile(filesystem_folder + "/root/file2") assert os.path.isdir(filesystem_folder + "/root/subfolder") assert os.path.isfile(filesystem_folder + "/root/subfolder/file3") assert os.path.isfile(filesystem_folder + "/root/subfolder/file4") assert os.path.isfile(filesystem_folder + "/root/static_content1.txt") assert os.path.isfile(filesystem_folder + "/root/static_content2.txt") assert os.path.isfile(filesystem_folder + "/root/template.txt") # Test Content with open(filesystem_folder + "/root/file1", "r") as f: assert f.read() == "some content" with open(filesystem_folder + "/root/file2", "r") as f: assert f.read() == "some other content" with open(filesystem_folder + "/root/subfolder/file3", "r") as f: assert f.read() == "some more content #2" with open(filesystem_folder + "/root/subfolder/file4", "r") as f: assert f.read() == "even more content" with open(filesystem_folder + "/root/static_content1.txt", "r") as f: assert f.read() == "test1" with open(filesystem_folder + "/root/static_content2.txt", "r") as f: assert f.read() == "test2" with open(filesystem_folder + "/root/template.txt", "r") as f: assert f.read() == "Hello World!" def test_fsOutput_treeString(): jinja_env = Environment( loader=FileSystemLoader("test/data/templates/"), autoescape=select_autoescape() ) root_folder = BackendFSOutFolder("root", [ BackendFSOutFile("file1", "some content"), BackendFSOutFile("file2", "some other content"), BackendFSOutFolder("subfolder", [ BackendFSOutFile("file3", "some more content #2"), BackendFSOutFile("file4", "even more content"), BackendFSOutputJinjaFile(jinja_env, "template.jinja", "generate", {"name": "Jinja2"}) ]), BackendFSOutStaticConent("test/data/static_folder", "data"), BackendFSOutputJinjaFile(jinja_env, "template.jinja", None, {"name": "World"}) ]) string = root_folder.assemble_file_tree_string() assert string == """└── root ├── [file1] ├── [file2] ├── subfolder │ ├── [file3] │ ├── [file4] │ └── Template [generate] ├── Static [data] └── Template [template] """ def test_fsOutput_toString(): jinja_env = Environment( loader=FileSystemLoader("test/data/templates/"), autoescape=select_autoescape() ) root_folder = BackendFSOutFolder("root", [ BackendFSOutFile("file1", "some content"), BackendFSOutFile("file2", "some other content"), BackendFSOutFolder("subfolder", [ BackendFSOutFile("file3", "some more content #2"), BackendFSOutFile("file4", "even more content"), BackendFSOutputJinjaFile(jinja_env, "template.jinja2", "generate", {"name": "Jinja2"}) ]), BackendFSOutStaticConent("test/data/static_folder", "data/static_folder"), BackendFSOutStaticConent("test/data/static_content1.txt", "data"), BackendFSOutputJinjaFile(jinja_env, "template.jinja2", None, {"name": "World"}) ]) res = root_folder.toString() assert res == { "root/file1": "some content", "root/file2": "some other content", "root/subfolder/file3": "some more content #2", "root/subfolder/file4": "even more content", "root/subfolder/generate": "Hello Jinja2!", "root/data/static_content1.txt": "test1", "root/data/static_folder/static_content2.txt": "test2", "root/template": "Hello World!" } def test_fsOutput_pathnormalization(filesystem_folder: str): root_folder = BackendFSOutFolder(".", [ BackendFSOutFolder(".", [ BackendFSOutFile("file2", "some other content"), ]), BackendFSOutFile("file1", "some content"), ]) # Check if this works for toString res = root_folder.toString() assert res == { "file2": "some other content", "file1": "some content" } # Check if this works for saveToDisk root_folder.saveToDisk(filesystem_folder) assert os.path.isfile(filesystem_folder + "/file1") assert os.path.isfile(filesystem_folder + "/file2") with open(filesystem_folder + "/file1", "r") as f: assert f.read() == "some content" with open(filesystem_folder + "/file2", "r") as f: assert f.read() == "some other content"