~singpolyma/biboumi

bd625aa59bcd5194dd5ee5eea03e7f465d555ba5 — louiz’ 6 years ago 45f442b
e2etests: we are able to receive optional stanzas
1 files changed, 26 insertions(+), 3 deletions(-)

M tests/end_to_end/__main__.py
M tests/end_to_end/__main__.py => tests/end_to_end/__main__.py +26 -3
@@ 21,6 21,17 @@ class MatchAll(MatcherBase):


class StanzaError(Exception):
    """
    Raised when a step fails.
    """
    pass


class SkipStepError(Exception):
    """
    Raised by a step when it needs to be skiped, by running
    the next available step immediately.
    """
    pass




@@ 69,6 80,10 @@ class XMPPComponent(slixmpp.BaseXMPP):
                self.stanza_checker(stanza)
            except StanzaError as e:
                self.error(e)
            except SkipStepError:
                # Run the next step and then re-handle this same stanza
                self.run_scenario()
                return self.handle_incoming_stanza(stanza)
            self.stanza_checker = None
        self.run_scenario()



@@ 97,6 112,13 @@ def check_xpath(xpaths, stanza):
            raise StanzaError("Received stanza “%s” did not match expected xpath “%s”" % (stanza, xpath))


def check_xpath_optional(xpaths, stanza):
    try:
        check_xpath(xpaths, stanza)
    except StanzaError:
        raise SkipStepError()


class Scenario:
    """Defines a list of actions that are executed in sequence, until one of
    them throws an exception, or until the end.  An action can be something


@@ 170,11 192,12 @@ def send_stanza(stanza, xmpp, biboumi):
    asyncio.get_event_loop().call_soon(xmpp.run_scenario)


def expect_stanza(xpaths, xmpp, biboumi):
def expect_stanza(xpaths, xmpp, biboumi, optional=False):
    check_func = check_xpath if not optional else check_xpath_optional
    if isinstance(xpaths, str):
        xmpp.stanza_checker = partial(check_xpath, [xpaths.format_map(common_replacements)])
        xmpp.stanza_checker = partial(check_func, [xpaths.format_map(common_replacements)])
    elif isinstance(xpaths, tuple):
        xmpp.stanza_checker = partial(check_xpath, [xpath.format_map(common_replacements) for xpath in xpaths])
        xmpp.stanza_checker = partial(check_func, [xpath.format_map(common_replacements) for xpath in xpaths])
    else:
        print("Warning, from argument type passed to expect_stanza: %s" % (type(xpaths)))