diff options
Diffstat (limited to 'tests/test_stanza_xep_0004.py')
-rw-r--r-- | tests/test_stanza_xep_0004.py | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/tests/test_stanza_xep_0004.py b/tests/test_stanza_xep_0004.py new file mode 100644 index 00000000..e183e5e9 --- /dev/null +++ b/tests/test_stanza_xep_0004.py @@ -0,0 +1,198 @@ +from sleekxmpp.test import * +from sleekxmpp.thirdparty import OrderedDict + +import sleekxmpp.plugins.xep_0004 as xep_0004 + + +class TestDataForms(SleekTest): + + def setUp(self): + register_stanza_plugin(Message, xep_0004.Form) + register_stanza_plugin(xep_0004.Form, xep_0004.FormField) + register_stanza_plugin(xep_0004.FormField, xep_0004.FieldOption) + + def testMultipleInstructions(self): + """Testing using multiple instructions elements in a data form.""" + msg = self.Message() + msg['form']['instructions'] = "Instructions\nSecond batch" + + self.check(msg, """ + <message> + <x xmlns="jabber:x:data" type="form"> + <instructions>Instructions</instructions> + <instructions>Second batch</instructions> + </x> + </message> + """) + + def testAddField(self): + """Testing adding fields to a data form.""" + + msg = self.Message() + form = msg['form'] + form.addField(var='f1', + ftype='text-single', + label='Text', + desc='A text field', + required=True, + value='Some text!') + + self.check(msg, """ + <message> + <x xmlns="jabber:x:data" type="form"> + <field var="f1" type="text-single" label="Text"> + <desc>A text field</desc> + <required /> + <value>Some text!</value> + </field> + </x> + </message> + """) + + fields = OrderedDict() + fields['f1'] = {'type': 'text-single', + 'label': 'Username', + 'required': True} + fields['f2'] = {'type': 'text-private', + 'label': 'Password', + 'required': True} + fields['f3'] = {'type': 'text-multi', + 'label': 'Message', + 'value': 'Enter message.\nA long one even.'} + fields['f4'] = {'type': 'list-single', + 'label': 'Message Type', + 'options': [{'label': 'Cool!', + 'value': 'cool'}, + {'label': 'Urgh!', + 'value': 'urgh'}]} + form['fields'] = fields + + + self.check(msg, """ + <message> + <x xmlns="jabber:x:data" type="form"> + <field var="f1" type="text-single" label="Username"> + <required /> + </field> + <field var="f2" type="text-private" label="Password"> + <required /> + </field> + <field var="f3" type="text-multi" label="Message"> + <value>Enter message.</value> + <value>A long one even.</value> + </field> + <field var="f4" type="list-single" label="Message Type"> + <option label="Cool!"> + <value>cool</value> + </option> + <option label="Urgh!"> + <value>urgh</value> + </option> + </field> + </x> + </message> + """) + + def testSetValues(self): + """Testing setting form values""" + + msg = self.Message() + form = msg['form'] + form.add_field(var='foo', ftype='text-single') + form.add_field(var='bar', ftype='list-multi') + + form.setValues({'foo': 'Foo!', + 'bar': ['a', 'b']}) + + self.check(msg, """ + <message> + <x xmlns="jabber:x:data" type="form"> + <field var="foo" type="text-single"> + <value>Foo!</value> + </field> + <field var="bar" type="list-multi"> + <value>a</value> + <value>b</value> + </field> + </x> + </message>""") + + def testSubmitType(self): + """Test that setting type to 'submit' clears extra details""" + msg = self.Message() + form = msg['form'] + + fields = OrderedDict() + fields['f1'] = {'type': 'text-single', + 'label': 'Username', + 'required': True} + fields['f2'] = {'type': 'text-private', + 'label': 'Password', + 'required': True} + fields['f3'] = {'type': 'text-multi', + 'label': 'Message', + 'value': 'Enter message.\nA long one even.'} + fields['f4'] = {'type': 'list-single', + 'label': 'Message Type', + 'options': [{'label': 'Cool!', + 'value': 'cool'}, + {'label': 'Urgh!', + 'value': 'urgh'}]} + form['fields'] = fields + + form['type'] = 'submit' + form['values'] = {'f1': 'username', + 'f2': 'hunter2', + 'f3': 'A long\nmultiline\nmessage', + 'f4': 'cool'} + + self.check(form, """ + <x xmlns="jabber:x:data" type="submit"> + <field var="f1"> + <value>username</value> + </field> + <field var="f2"> + <value>hunter2</value> + </field> + <field var="f3"> + <value>A long</value> + <value>multiline</value> + <value>message</value> + </field> + <field var="f4"> + <value>cool</value> + </field> + </x> + """, use_values=False) + + def testCancelType(self): + """Test that setting type to 'cancel' clears all fields""" + msg = self.Message() + form = msg['form'] + + fields = OrderedDict() + fields['f1'] = {'type': 'text-single', + 'label': 'Username', + 'required': True} + fields['f2'] = {'type': 'text-private', + 'label': 'Password', + 'required': True} + fields['f3'] = {'type': 'text-multi', + 'label': 'Message', + 'value': 'Enter message.\nA long one even.'} + fields['f4'] = {'type': 'list-single', + 'label': 'Message Type', + 'options': [{'label': 'Cool!', + 'value': 'cool'}, + {'label': 'Urgh!', + 'value': 'urgh'}]} + form['fields'] = fields + + form['type'] = 'cancel' + + self.check(form, """ + <x xmlns="jabber:x:data" type="cancel" /> + """) + + +suite = unittest.TestLoader().loadTestsFromTestCase(TestDataForms) |