cr-connect-workflow/tests/test_complete_template_script.py

84 lines
3.0 KiB
Python
Raw Normal View History

import unittest
2021-10-21 13:37:56 -04:00
from tests.base_test import BaseTest
import copy
2021-10-21 13:37:56 -04:00
import docx
from docxtpl import Listing
2021-10-21 13:37:56 -04:00
from io import BytesIO
2021-10-21 13:37:56 -04:00
from crc import session
from crc.models.file import FileModel
2021-10-21 10:31:02 -04:00
from crc.services.jinja_service import JinjaService
class TestCompleteTemplate(unittest.TestCase):
def test_rich_text_update(self):
2021-10-21 10:31:02 -04:00
script = JinjaService()
data = {"name": "Dan"}
data_copy = copy.deepcopy(data)
script.rich_text_update(data_copy)
2020-06-05 12:08:46 -06:00
self.assertEqual(data, data_copy)
def test_rich_text_update_new_line(self):
2021-10-21 10:31:02 -04:00
script = JinjaService()
data = {"name": "Dan\n Funk"}
data_copy = copy.deepcopy(data)
script.rich_text_update(data_copy)
self.assertNotEqual(data, data_copy)
self.assertIsInstance(data_copy["name"], Listing)
def test_rich_text_nested_new_line(self):
2021-10-21 10:31:02 -04:00
script = JinjaService()
data = {"names": [{"name": "Dan\n Funk"}]}
data_copy = copy.deepcopy(data)
script.rich_text_update(data_copy)
self.assertNotEqual(data, data_copy)
self.assertIsInstance(data_copy["names"][0]["name"], Listing)
2021-10-21 13:37:56 -04:00
class TestEmbeddedTemplate(BaseTest):
def run_docx_embedded_workflow(self, data):
self.create_reference_document()
2021-10-21 13:37:56 -04:00
workflow = self.create_workflow('docx_embedded')
workflow_api = self.get_workflow_api(workflow)
task = workflow_api.next_task
workflow_api = self.complete_form(workflow, task, data)
return workflow_api
def test_embedded_template(self):
2021-10-21 13:37:56 -04:00
data = {'include_me': 'Hello {{ name }}!',
'name': 'World',
'template_file_name': 'simple.docx',
2021-10-21 13:37:56 -04:00
'irb_doc_code': 'Study_App_Doc'}
workflow_api = self.run_docx_embedded_workflow(data)
2021-10-21 13:37:56 -04:00
# Get the file data created for us in the workflow
file_model = session.query(FileModel).\
filter(FileModel.workflow_id == workflow_api.id).\
filter(FileModel.irb_doc_code == 'Study_App_Doc').\
2021-10-21 13:37:56 -04:00
first()
# If we don't pass file_name, name should be set to template_file_name
self.assertEqual(data['template_file_name'], file_model.name)
2021-10-21 13:37:56 -04:00
# read the data as a word document
2022-04-12 14:01:00 -04:00
document = docx.Document(BytesIO(file_model.data))
2021-10-21 13:37:56 -04:00
# Make sure 'Hello World!' is there
self.assertEqual('Hello World!', document.paragraphs[4].text)
data = {'include_me': 'Hello {{ name }}!',
'name': 'World',
'template_file_name': 'simple.docx',
'irb_doc_code': 'Study_App_Doc',
'file_name': 'test_file_name.docx'}
workflow_api = self.run_docx_embedded_workflow(data)
file_model = session.query(FileModel).\
filter(FileModel.workflow_id == workflow_api.id).\
filter(FileModel.irb_doc_code == 'Study_App_Doc').\
first()
# If we do pass file_name, name should be set to file_name
self.assertEqual(data['file_name'], file_model.name)