Changeset 83:81daaca3d75f for wokkel/test
- Timestamp:
- Jan 5, 2010, 2:55:40 PM (12 years ago)
- Branch:
- default
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
wokkel/test/test_pubsub.py
r82 r83 25 25 NS_PUBSUB_OWNER = 'http://jabber.org/protocol/pubsub#owner' 26 26 NS_PUBSUB_META_DATA = 'http://jabber.org/protocol/pubsub#meta-data' 27 NS_PUBSUB_SUBSCRIBE_OPTIONS = 'http://jabber.org/protocol/pubsub#subscribe_options' 27 28 28 29 def calledAsync(fn): … … 483 484 484 485 486 def test_subscribeWithOptions(self): 487 options = {'pubsub#deliver': False} 488 489 d = self.protocol.subscribe(JID('pubsub.example.org'), 'test', 490 JID('user@example.org'), 491 options=options) 492 iq = self.stub.output[-1] 493 494 # Check options present 495 childNames = [] 496 for element in iq.pubsub.elements(): 497 if element.uri == NS_PUBSUB: 498 childNames.append(element.name) 499 500 self.assertEqual(['subscribe', 'options'], childNames) 501 form = data_form.findForm(iq.pubsub.options, 502 NS_PUBSUB_SUBSCRIBE_OPTIONS) 503 self.assertEqual('submit', form.formType) 504 form.typeCheck({'pubsub#deliver': {'type': 'boolean'}}) 505 self.assertEqual(options, form.getValues()) 506 507 # Send response 508 response = toResponse(iq, 'result') 509 pubsub = response.addElement((NS_PUBSUB, 'pubsub')) 510 subscription = pubsub.addElement('subscription') 511 subscription['node'] = 'test' 512 subscription['jid'] = 'user@example.org' 513 subscription['subscription'] = 'subscribed' 514 self.stub.send(response) 515 516 return d 517 518 485 519 def test_subscribeWithSender(self): 486 520 """ … … 626 660 627 661 662 def test_getOptions(self): 663 def cb(form): 664 self.assertEqual('form', form.formType) 665 self.assertEqual(NS_PUBSUB_SUBSCRIBE_OPTIONS, form.formNamespace) 666 field = form.fields['pubsub#deliver'] 667 self.assertEqual('boolean', field.fieldType) 668 self.assertIdentical(True, field.value) 669 self.assertEqual('Enable delivery?', field.label) 670 671 d = self.protocol.getOptions(JID('pubsub.example.org'), 'test', 672 JID('user@example.org'), 673 sender=JID('user@example.org')) 674 d.addCallback(cb) 675 676 iq = self.stub.output[-1] 677 self.assertEqual('pubsub.example.org', iq.getAttribute('to')) 678 self.assertEqual('get', iq.getAttribute('type')) 679 self.assertEqual('pubsub', iq.pubsub.name) 680 self.assertEqual(NS_PUBSUB, iq.pubsub.uri) 681 children = list(domish.generateElementsQNamed(iq.pubsub.children, 682 'options', NS_PUBSUB)) 683 self.assertEqual(1, len(children)) 684 child = children[0] 685 self.assertEqual('test', child['node']) 686 687 self.assertEqual(0, len(child.children)) 688 689 # Send response 690 form = data_form.Form('form', formNamespace=NS_PUBSUB_SUBSCRIBE_OPTIONS) 691 form.addField(data_form.Field('boolean', var='pubsub#deliver', 692 label='Enable delivery?', 693 value=True)) 694 response = toResponse(iq, 'result') 695 response.addElement((NS_PUBSUB, 'pubsub')) 696 response.pubsub.addElement('options') 697 response.pubsub.options.addChild(form.toElement()) 698 self.stub.send(response) 699 700 return d 701 702 703 def test_setOptions(self): 704 """ 705 setOptions should send out a options-set request. 706 """ 707 options = {'pubsub#deliver': False} 708 709 d = self.protocol.setOptions(JID('pubsub.example.org'), 'test', 710 JID('user@example.org'), 711 options, 712 sender=JID('user@example.org')) 713 714 iq = self.stub.output[-1] 715 self.assertEqual('pubsub.example.org', iq.getAttribute('to')) 716 self.assertEqual('set', iq.getAttribute('type')) 717 self.assertEqual('pubsub', iq.pubsub.name) 718 self.assertEqual(NS_PUBSUB, iq.pubsub.uri) 719 children = list(domish.generateElementsQNamed(iq.pubsub.children, 720 'options', NS_PUBSUB)) 721 self.assertEqual(1, len(children)) 722 child = children[0] 723 self.assertEqual('test', child['node']) 724 725 form = data_form.findForm(child, NS_PUBSUB_SUBSCRIBE_OPTIONS) 726 self.assertEqual('submit', form.formType) 727 form.typeCheck({'pubsub#deliver': {'type': 'boolean'}}) 728 self.assertEqual(options, form.getValues()) 729 730 response = toResponse(iq, 'result') 731 self.stub.send(response) 732 733 return d 734 628 735 629 736 class PubSubRequestTest(unittest.TestCase): 737 738 def test_fromElementUnknown(self): 739 """ 740 An unknown verb raises NotImplementedError. 741 """ 742 743 xml = """ 744 <iq type='set' to='pubsub.example.org' 745 from='user@example.org'> 746 <pubsub xmlns='http://jabber.org/protocol/pubsub'> 747 <non-existing-verb/> 748 </pubsub> 749 </iq> 750 """ 751 752 self.assertRaises(NotImplementedError, 753 pubsub.PubSubRequest.fromElement, parseXml(xml)) 754 755 756 def test_fromElementKnownBadCombination(self): 757 """ 758 Multiple verbs in an unknown configuration raises NotImplementedError. 759 """ 760 761 xml = """ 762 <iq type='set' to='pubsub.example.org' 763 from='user@example.org'> 764 <pubsub xmlns='http://jabber.org/protocol/pubsub'> 765 <publish/> 766 <create/> 767 </pubsub> 768 </iq> 769 """ 770 771 self.assertRaises(NotImplementedError, 772 pubsub.PubSubRequest.fromElement, parseXml(xml)) 630 773 631 774 def test_fromElementPublish(self): … … 753 896 self.assertEqual(NS_PUBSUB_ERRORS, err.appCondition.uri) 754 897 self.assertEqual('jid-required', err.appCondition.name) 898 899 900 def test_fromElementSubscribeWithOptions(self): 901 """ 902 Test parsing a subscription request. 903 """ 904 905 xml = """ 906 <iq type='set' to='pubsub.example.org' 907 from='user@example.org'> 908 <pubsub xmlns='http://jabber.org/protocol/pubsub'> 909 <subscribe node='test' jid='user@example.org/Home'/> 910 <options> 911 <x xmlns="jabber:x:data" type='submit'> 912 <field var='FORM_TYPE' type='hidden'> 913 <value>http://jabber.org/protocol/pubsub#subscribe_options</value> 914 </field> 915 <field var='pubsub#deliver' type='boolean' 916 label='Enable delivery?'> 917 <value>1</value> 918 </field> 919 </x> 920 </options> 921 </pubsub> 922 </iq> 923 """ 924 925 request = pubsub.PubSubRequest.fromElement(parseXml(xml)) 926 self.assertEqual('subscribe', request.verb) 927 request.options.typeCheck({'pubsub#deliver': {'type': 'boolean'}}) 928 self.assertEqual({'pubsub#deliver': True}, request.options.getValues()) 929 930 931 def test_fromElementSubscribeWithOptionsBadFormType(self): 932 """ 933 The options form should have the right type. 934 """ 935 936 xml = """ 937 <iq type='set' to='pubsub.example.org' 938 from='user@example.org'> 939 <pubsub xmlns='http://jabber.org/protocol/pubsub'> 940 <subscribe node='test' jid='user@example.org/Home'/> 941 <options> 942 <x xmlns="jabber:x:data" type='result'> 943 <field var='FORM_TYPE' type='hidden'> 944 <value>http://jabber.org/protocol/pubsub#subscribe_options</value> 945 </field> 946 <field var='pubsub#deliver' type='boolean' 947 label='Enable delivery?'> 948 <value>1</value> 949 </field> 950 </x> 951 </options> 952 </pubsub> 953 </iq> 954 """ 955 956 err = self.assertRaises(error.StanzaError, 957 pubsub.PubSubRequest.fromElement, 958 parseXml(xml)) 959 self.assertEqual('bad-request', err.condition) 960 self.assertEqual("Unexpected form type 'result'", err.text) 961 self.assertEqual(None, err.appCondition) 962 963 964 def test_fromElementSubscribeWithOptionsEmpty(self): 965 """ 966 When no (suitable) form is found, the options are empty. 967 """ 968 969 xml = """ 970 <iq type='set' to='pubsub.example.org' 971 from='user@example.org'> 972 <pubsub xmlns='http://jabber.org/protocol/pubsub'> 973 <subscribe node='test' jid='user@example.org/Home'/> 974 <options/> 975 </pubsub> 976 </iq> 977 """ 978 979 request = pubsub.PubSubRequest.fromElement(parseXml(xml)) 980 self.assertEqual('subscribe', request.verb) 981 self.assertEqual({}, request.options.getValues()) 982 755 983 756 984 def test_fromElementUnsubscribe(self):
Note: See TracChangeset
for help on using the changeset viewer.