mirror of
https://github.com/sartography/cr-connect-workflow.git
synced 2025-02-23 05:08:32 +00:00
The post processors for form submissions needs to take repeating sections into account, or it won't find the files it is looking for.
110 lines
5.0 KiB
Python
110 lines
5.0 KiB
Python
import json
|
|
import os
|
|
|
|
from tests.base_test import BaseTest
|
|
from crc import app, mail
|
|
|
|
|
|
class TestStudyApi(BaseTest):
|
|
|
|
def test_render_markdown(self):
|
|
template = "My name is {{name}}"
|
|
data = {"name": "Dan"}
|
|
rv = self.app.get('/v1.0/render_markdown?template=%s&data=%s' %
|
|
(template, json.dumps(data)))
|
|
self.assert_success(rv)
|
|
self.assertEqual("My name is Dan", rv.get_data(as_text=True))
|
|
|
|
def test_render_docx(self):
|
|
filepath = os.path.join(app.root_path, '..', 'tests', 'data', 'table.docx')
|
|
template_data = {"hippa": [
|
|
{"option": "Name", "selected": True, "stored": ["Record at UVA", "Stored Long Term"]},
|
|
{"option": "Address", "selected": False},
|
|
{"option": "Phone", "selected": True, "stored": ["Send or Transmit outside of UVA"]}]}
|
|
with open(filepath, 'rb') as f:
|
|
file_data = {'file': (f, 'my_new_file.bpmn'), 'data': json.dumps(template_data)}
|
|
rv = self.app.put('/v1.0/render_docx',
|
|
data=file_data, follow_redirects=True,
|
|
content_type='multipart/form-data')
|
|
self.assert_success(rv)
|
|
self.assertIsNotNone(rv.data)
|
|
self.assertEqual('application/octet-stream', rv.content_type)
|
|
|
|
def test_list_scripts(self):
|
|
rv = self.app.get('/v1.0/list_scripts')
|
|
self.assert_success(rv)
|
|
scripts = json.loads(rv.get_data(as_text=True))
|
|
self.assertTrue(len(scripts) > 1)
|
|
self.assertIsNotNone(scripts[0]['name'])
|
|
self.assertIsNotNone(scripts[0]['description'])
|
|
|
|
def test_eval_hide_expression(self):
|
|
"""Assures we can use python to process a hide expression from the front end"""
|
|
rv = self.app.put('/v1.0/eval',
|
|
data='{"expression": "x.y==2", "data": {"x":{"y":2}}}', follow_redirects=True,
|
|
content_type='application/json',
|
|
headers=self.logged_in_headers())
|
|
self.assert_success(rv)
|
|
response = json.loads(rv.get_data(as_text=True))
|
|
self.assertEqual(True, response['result'])
|
|
|
|
def test_eval_returns_query(self):
|
|
"""Assures that along with the result, we get the original data and expression.
|
|
This can be useful if the calling client is caching results and needs to hash the expression and data
|
|
when it gets returned."""
|
|
data = '{"expression": "x.y==2", "data": {"x":{"y":2}}}'
|
|
rv = self.app.put('/v1.0/eval',
|
|
data=data, follow_redirects=True,
|
|
content_type='application/json',
|
|
headers=self.logged_in_headers())
|
|
self.assert_success(rv)
|
|
response = json.loads(rv.get_data(as_text=True))
|
|
self.assertEqual("x.y==2", response['expression'])
|
|
self.assertEqual({'x': {'y': 2}}, response['data'])
|
|
|
|
|
|
def test_eval_expression_with_strings(self):
|
|
"""Assures we can use python to process a value expression from the front end"""
|
|
rv = self.app.put('/v1.0/eval',
|
|
data='{"expression": "\'Hello, \' + user.first_name + \' \' + user.last_name + \'!!!\'", '
|
|
'"data": {"user":{"first_name": "Trillian", "last_name": "Astra"}}}',
|
|
follow_redirects=True,
|
|
content_type='application/json',
|
|
headers=self.logged_in_headers())
|
|
self.assert_success(rv)
|
|
response = json.loads(rv.get_data(as_text=True))
|
|
self.assertEqual('Hello, Trillian Astra!!!', response['result'])
|
|
|
|
def test_send_email(self):
|
|
subject = 'CR Connect Test Email'
|
|
address = 'user@example.com'
|
|
data = {'user': 'Person of Interest'}
|
|
message = """
|
|
Dear {{ user }},
|
|
|
|
Thank you for using this email example.
|
|
I hope this makes sense.
|
|
|
|
Yours faithfully,
|
|
CR Connect
|
|
"""
|
|
with mail.record_messages() as outbox:
|
|
rv = self.app.put('/v1.0/send_email?subject=%s&address=%s&data=%s' %
|
|
(subject, address, json.dumps(data)), data=json.dumps(message), headers=self.logged_in_headers())
|
|
self.assert_success(rv)
|
|
self.assertEqual(1, len(outbox))
|
|
self.assertEqual(subject, outbox[0].subject)
|
|
self.assertEqual(['user@example.com'], outbox[0].recipients)
|
|
self.assertIn('Person of Interest', outbox[0].body)
|
|
|
|
def test_eval_to_boolean_expression_with_dot_notation(self):
|
|
"""Assures we can use python to process a value expression from the front end"""
|
|
rv = self.app.put('/v1.0/eval',
|
|
data='{"expression": "test.value", "data": {"test":{"value": true}}}',
|
|
follow_redirects=True,
|
|
content_type='application/json',
|
|
headers=self.logged_in_headers())
|
|
self.assert_success(rv)
|
|
response = json.loads(rv.get_data(as_text=True))
|
|
self.assertEqual(True, response['result'])
|