Пример #1
0
 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")
Пример #2
0
 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')
Пример #3
0
 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)
Пример #4
0
 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)
Пример #5
0
 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)
Пример #6
0
 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)
Пример #7
0
 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)
Пример #8
0
 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/")
Пример #9
0
 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/')
Пример #10
0
 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
     )
Пример #11
0
 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"})
Пример #12
0
 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'})
Пример #13
0
 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'})
Пример #14
0
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)
Пример #15
0
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)
Пример #16
0
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)
Пример #17
0
 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)
Пример #18
0
 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)