|
|
|
import sys
|
|
|
|
import unittest
|
|
|
|
sys.path.insert(0, '../src')
|
|
|
|
import scriptform
|
|
|
|
from StringIO import StringIO
|
|
|
|
import json
|
|
|
|
import os
|
|
|
|
import copy
|
|
|
|
import thread
|
|
|
|
import time
|
|
|
|
|
|
|
|
base_config = {
|
|
|
|
"title": "test",
|
|
|
|
"forms": [
|
|
|
|
{
|
|
|
|
"name": "test",
|
|
|
|
"title": "title",
|
|
|
|
"description": "description",
|
|
|
|
"script": "test.sh",
|
|
|
|
"fields": [],
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
def run_server(sf):
|
|
|
|
def server_thread(sf):
|
|
|
|
sf.run(listen_port=8002)
|
|
|
|
thread.start_new_thread(server_thread, (sf, ))
|
|
|
|
# Wait until the webserver is ready
|
|
|
|
while True:
|
|
|
|
time.sleep(0.1)
|
|
|
|
if sf.running:
|
|
|
|
break
|
|
|
|
|
|
|
|
class FormConfigTestCase(unittest.TestCase):
|
|
|
|
|
|
|
|
def testMissing(self):
|
|
|
|
"""Missing script callbacks should raise an OSError"""
|
|
|
|
config = copy.deepcopy(base_config)
|
|
|
|
config["forms"][0]["script"] = "nonexisting.sh"
|
|
|
|
file('test.json', 'w').write(json.dumps(config))
|
|
|
|
self.assertRaises(OSError, scriptform.ScriptForm, 'test.json')
|
|
|
|
|
|
|
|
def testNoExec(self):
|
|
|
|
"""Nonn-executable script callbacks should raise an ScriptFormError"""
|
|
|
|
config = copy.deepcopy(base_config)
|
|
|
|
config["forms"][0]["script"] = "test_noexec.sh"
|
|
|
|
file('test.json', 'w').write(json.dumps(config))
|
|
|
|
self.assertRaises(scriptform.ScriptFormError, scriptform.ScriptForm, 'test.json')
|
|
|
|
|
|
|
|
def testHidden(self):
|
|
|
|
"""Hidden forms should not show up in the list of forms"""
|
|
|
|
config = copy.deepcopy(base_config)
|
|
|
|
config["forms"][0]["hidden"] = True
|
|
|
|
file('test.json', 'w').write(json.dumps(config))
|
|
|
|
sf = scriptform.ScriptForm('test.json')
|
|
|
|
fc = sf.get_form_config()
|
|
|
|
self.assertTrue(fc.get_visible_forms() == [])
|
|
|
|
|
|
|
|
class ScriptFormTestCase(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
|
|
config = copy.deepcopy(base_config)
|
|
|
|
file('test.json', 'w').write(json.dumps(config))
|
|
|
|
self.sf = scriptform.ScriptForm('test.json', cache=False)
|
|
|
|
run_server(self.sf)
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
self.sf.shutdown()
|
|
|
|
|
|
|
|
def testShutdown(self):
|
|
|
|
self.assertTrue(True)
|
|
|
|
if os.path.exists('test.json'):
|
|
|
|
os.unlink('test.json')
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main()
|