def test_bad_funcName(self): """ Check that FSM.save_graph() catches bad plugin funcName. """ nodeDictBad = dict(START=dict(title="start here", path="ct:home", funcName="fsm.fsm_plugin.testme.invalid")) try: FSM.save_graph(self.fsmDict, nodeDictBad, (), "jacob") except AttributeError: pass else: raise AssertionError("FSM.save_graph() failed to catch bad plugin funcName")
def test_bad_funcName(self): """ Check that FSM.save_graph() catches bad plugin funcName. """ nodeDictBad = dict( START=dict(title='start here', path='ct:home', funcName='fsm.fsm_plugin.testme.invalid') ) try: FSM.save_graph(self.fsmDict, nodeDictBad, (), 'jacob') except AttributeError: pass else: raise AssertionError('FSM.save_graph() failed to catch bad plugin funcName')
def test_load(self): """ Check loading an FSM graph, and replacing it. """ f = FSM.save_graph(self.fsmDict, self.nodeDict, self.edgeDict, 'jacob') self.assertEqual(f.fsmnode_set.count(), 3) self.assertEqual(f.startNode.name, 'START') self.assertEqual(f.startNode.outgoing.count(), 1) e = f.startNode.outgoing.all()[0] self.assertEqual(e.name, 'next') self.assertEqual(e.toNode.name, 'END') f2 = FSM.save_graph(self.fsmDict, self.nodeDict, self.edgeDict, 'jacob') # replace self.assertEqual(FSM.objects.get(pk=f.pk).name, 'testOLD') # renamed self.assertNotEqual(f.startNode, f2.startNode) self.assertEqual(f.startNode.name, f2.startNode.name)
def test_start3(self): """ Check that FSMState saves unitLesson, select_ data, and logging. """ f = FSM.save_graph(self.fsmDict, self.nodeDict, self.edgeDict, 'jacob') fsmStack = self.do_start(f, unitLesson=self.unitLesson) self.assertEqual(fsmStack.state.unitLesson, self.unitLesson) request = FakeRequest(self.user, method='GET') # check logging on the MID node fsmStack.event(request, None) # send a render event to log self.assertEqual(fsmStack.state.activity.fsmName, 'test') ae = fsmStack.state.activityEvent self.assertEqual(ae.nodeName, 'MID') self.assertEqual(ae.unitLesson, self.unitLesson) self.assertIsNotNone(ae.startTime) self.assertIsNone(ae.endTime) request = FakeRequest(self.user) # now try a select_ event fsmStack.event(request, 'select_Lesson', lesson=self.lesson) self.assertEqual(fsmStack.state.get_data_attr('lesson'), self.lesson) # check that exit from MID node was logged self.assertIsNotNone(ae.endTime) self.assertTrue(ae.endTime > ae.startTime) self.assertEqual(ae.exitEvent, 'select_Lesson') self.assertIsNone(fsmStack.state.activityEvent)
def save_graph(self, *args, **kwargs): """ Load this FSM specification into the database. """ return FSM.save_graph(self.fsmData, self.nodeData, self.edgeData, fsmGroups=self.fsmGroups, *args, **kwargs)
def test_trivial_plugin(self): """ Check trivial plugin import and call. """ f = FSM.save_graph(self.fsmDict, self.nodeDict, self.edgeDict, "jacob") request = FakeRequest(self.user) fsmStack = FSMStack(request) fsmStack.state = FSMState(user=self.user, fsmNode=f.startNode) self.assertEqual(f.startNode.event(fsmStack, request, "start"), "/ct/about/") self.assertEqual(f.startNode.get_path(fsmStack.state, request), "/ct/some/where/else/")
def test_trivial_plugin(self): """ Check trivial plugin import and call. """ f = FSM.save_graph(self.fsmDict, self.nodeDict, self.edgeDict, 'jacob') request = FakeRequest(self.user) fsmStack = FSMStack(request) fsmStack.state = FSMState(user=self.user, fsmNode=f.startNode) self.assertEqual(f.startNode.event(fsmStack, request, 'start'), '/ct/about/') self.assertEqual(f.startNode.get_path(fsmStack.state, request), '/ct/some/where/else/')
def save_graph(self, *args, **kwargs): """ Load this FSM specification into the database. """ return FSM.save_graph( self.fsmData, self.nodeData, self.edgeData, fsmGroups=self.fsmGroups, *args, **kwargs )
def test_json_blob4(self): """ Check roundtrip dump/load via db storage. """ f = FSM.save_graph(self.fsmDict, self.nodeDict, self.edgeDict, "jacob") d = f.startNode.load_json_data() self.assertEqual(d, {}) d["fruity"] = self.unit d["anumber"] = 3 d["astring"] = "jeff" f.startNode.save_json_data(d) node = FSMNode.objects.get(pk=f.startNode.pk) d2 = node.load_json_data() self.assertEqual(d2, {"fruity": self.unit, "anumber": 3, "astring": "jeff"})
def test_json_blob4(self): """ Check roundtrip dump/load via db storage. """ f = FSM.save_graph(self.fsmDict, self.nodeDict, self.edgeDict, 'jacob') d = f.startNode.load_json_data() self.assertEqual(d, {}) d['fruity'] = self.unit d['anumber'] = 3 d['astring'] = 'jeff' f.startNode.save_json_data(d) node = FSMNode.objects.get(pk=f.startNode.pk) d2 = node.load_json_data() self.assertEqual(d2, {'fruity': self.unit, 'anumber': 3, 'astring': 'jeff'})
def load_fsm2(username): 'load an FSM that displays a standard node page' fsmDict = dict(name='test2', title='try this') nodeDict = dict( START=dict(title='Welcome, Stranger', path='fsm:fsm_node', description='Thanks for your valuable input!'), END=dict(title='end here', path='ct:home'), ) edgeDict = (dict( name='next', fromNode='START', toNode='END', title='Write an Amazing Question', description='''Your mission, should you choose to accept it, is to write an amazing question that yields wonderful insights.''' ), ) return FSM.save_graph(fsmDict, nodeDict, edgeDict, username)
def load_fsm2(username): "load an FSM that displays a standard node page" fsmDict = dict(name="test2", title="try this") nodeDict = dict( START=dict(title="Welcome, Stranger", path="fsm:fsm_node", description="Thanks for your valuable input!"), END=dict(title="end here", path="ct:home"), ) edgeDict = ( dict( name="next", fromNode="START", toNode="END", title="Write an Amazing Question", description="""Your mission, should you choose to accept it, is to write an amazing question that yields wonderful insights.""", ), ) return FSM.save_graph(fsmDict, nodeDict, edgeDict, username)
def load_fsm2(username): 'load an FSM that displays a standard node page' fsmDict = dict(name='test2', title='try this') nodeDict = dict( START=dict( title='Welcome, Stranger', path='fsm:fsm_node', description='Thanks for your valuable input!' ), END=dict(title='end here', path='ct:home'), ) edgeDict = ( dict( name='next', fromNode='START', toNode='END', title='Write an Amazing Question', description='''Your mission, should you choose to accept it, is to write an amazing question that yields wonderful insights.''' ), ) return FSM.save_graph(fsmDict, nodeDict, edgeDict, username)
def test_start(self): """ Check basic startup of new FSM instance. """ f = FSM.save_graph(self.fsmDict, self.nodeDict, self.edgeDict, 'jacob') self.do_start(f)