from scenarios import * scenario = ( scenarios.simple_channel_join.scenario, send_stanza(""), expect_stanza("/message/body[text()='Mode #bar [+nt] by {irc_host_one}']"), expect_stanza("/presence"), expect_stanza("/message[@from='#bar%{irc_server_one}'][@type='groupchat']/subject[not(text())]"), send_stanza(""), expect_stanza("/message/body[text()='Mode #coucou [+nt] by {irc_host_one}']"), expect_stanza("/presence"), expect_stanza("/message[@from='#coucou%{irc_server_one}'][@type='groupchat']/subject[not(text())]"), # Ask for 0 item send_stanza("0"), # Get 0 item expect_stanza("/iq[@type='result']/disco_items:query"), # Ask for 2 (of 3) items We don’t have the count, # because biboumi doesn’t have the complete list when # it sends us the 2 items send_stanza("2"), expect_stanza("/iq[@type='result']/disco_items:query", "/iq/disco_items:query/disco_items:item[@jid='#bar%{irc_server_one}']", "/iq/disco_items:query/disco_items:item[@jid='#coucou%{irc_server_one}']", "/iq/disco_items:query/rsm:set/rsm:first[text()='#bar%{irc_server_one}'][@index='0']", "/iq/disco_items:query/rsm:set/rsm:last[text()='#coucou%{irc_server_one}']"), # Ask for 12 (of 3) items. We get the whole list, and thus we have the count included. send_stanza("12"), expect_stanza("/iq[@type='result']/disco_items:query", "/iq/disco_items:query/disco_items:item[@jid='#bar%{irc_server_one}']", "/iq/disco_items:query/disco_items:item[@jid='#coucou%{irc_server_one}']", "/iq/disco_items:query/disco_items:item[@jid='#foo%{irc_server_one}']", "/iq/disco_items:query/rsm:set/rsm:first[text()='#bar%{irc_server_one}'][@index='0']", "/iq/disco_items:query/rsm:set/rsm:last[text()='#foo%{irc_server_one}']", "/iq/disco_items:query/rsm:set/rsm:count[text()='3']"), # Ask for 1 item, AFTER the first item (so, # the second). Since we don’t invalidate the cache # with this request, we should have the count # included. send_stanza("#bar%{irc_server_one}1"), expect_stanza("/iq[@type='result']/disco_items:query", "/iq/disco_items:query/disco_items:item[@jid='#coucou%{irc_server_one}']", "/iq/disco_items:query/rsm:set/rsm:first[text()='#coucou%{irc_server_one}'][@index='1']", "/iq/disco_items:query/rsm:set/rsm:last[text()='#coucou%{irc_server_one}']", "/iq/disco_items:query/rsm:set/rsm:count[text()='3']"), # Ask for 1 item, AFTER the second item (so, # the third). send_stanza("#coucou%{irc_server_one}1"), expect_stanza("/iq[@type='result']/disco_items:query", "/iq/disco_items:query/disco_items:item[@jid='#foo%{irc_server_one}']", "/iq/disco_items:query/rsm:set/rsm:first[text()='#foo%{irc_server_one}'][@index='2']", "/iq/disco_items:query/rsm:set/rsm:last[text()='#foo%{irc_server_one}']", "/iq/disco_items:query/rsm:set/rsm:count[text()='3']"), # Ask for 1 item, AFTER the third item (so, # the fourth). Since it doesn't exist, we get 0 item send_stanza("#foo%{irc_server_one}1"), expect_stanza("/iq[@type='result']/disco_items:query", "/iq/disco_items:query/rsm:set/rsm:count[text()='3']"), )