Пример #1
0
def test_fsm_init():
    with patch_conf(settings_file=ENGINE_SETTINGS_FILE):
        fsm = FSM()
        assert isinstance(fsm.register, RedisRegisterStore)
        assert isinstance(fsm.transitions, list)

        for t in fsm.transitions:
            assert isinstance(t, Transition)
Пример #2
0
async def get_fsm_problems():
    fsm = FSM()
    problems = []

    # noinspection PyTypeChecker
    async for problem in fsm.health_check():
        problems.append(problem)

    return problems
Пример #3
0
def test_fsm_confused_state():
    with patch_conf(settings_file=ENGINE_SETTINGS_FILE):
        fsm = FSM()

        reg = Register({})
        req = Request(MockEmptyMessage(), reg)
        run(req.transform())
        assert fsm._confused_state(req) == BaseTestState

        reg = Register({Register.STATE: 'tests.issue_0001.states.Hello'})
        req = Request(MockEmptyMessage(), reg)
        run(req.transform())
        assert fsm._confused_state(req) == Hello
Пример #4
0
def make_test_fsm() -> Tuple[FSM, TestPlatform]:
    """
    Generate both a FSM and a test platform for unit testing purposes.

    The will use the current configuration to load stories and transitions.
    """

    fsm = FSM()
    run(fsm.async_init())

    platform = TestPlatform()
    # noinspection PyTypeChecker
    platform.on_message(fsm.handle_message)

    return fsm, platform
Пример #5
0
def test_fsm_find_trigger(reg):
    with patch_conf(settings_file=ENGINE_SETTINGS_FILE):
        fsm = FSM()
        run(fsm.async_init())
        req = MockRequest(MockTextMessage('hello'), reg)
        run(req.transform())

        trigger, state, dnr = run(fsm._find_trigger(req))
        assert isinstance(trigger, trig.Text)
        assert state == Hello

        req = MockRequest(MockChoiceMessage(), reg)
        run(req.transform())
        trigger, state, dnr = run(fsm._find_trigger(req))
        assert trigger is None
        assert state is None

        reg = Register({
            Register.STATE: HowAreYou.name(),
            Register.TRANSITION: {
                'choices': {
                    'yes': {
                        'text': 'Yes',
                        'intent': 'YES',
                    },
                    'no': {
                        'text': 'No',
                        'intent': 'NO'
                    },
                },
            },
        })

        req = MockRequest(MockChoiceMessage(), reg)
        run(req.transform())
        trigger, state, dnr = run(fsm._find_trigger(req))
        assert isinstance(trigger, trig.Choice)
        assert state == Great
Пример #6
0
    async def init(self):
        """
        Creates the FSM and the cache. It can be called several times to reset
        stuff (like for unit tests...).

        It also runs all the health checks in order to see if everything is fit
        for running.
        """
        self.fsm = FSM()

        checks = []

        # noinspection PyTypeChecker
        async for check in self.fsm.health_check():
            checks.append(check)
            logger.error('HEALTH CHECK FAIL #%s: %s', check.code, check.reason)

        if checks:
            exit(1)

        await self.fsm.async_init()

        self.platforms = {}