from sleekxmpp import Iq
from sleekxmpp.test import *
from sleekxmpp.plugins.xep_0050 import Command
class TestAdHocCommandStanzas(SleekTest):
    def setUp(self):
        register_stanza_plugin(Iq, Command)
    def testAction(self):
        """Test using the action attribute."""
        iq = self.Iq()
        iq['type'] = 'set'
        iq['command']['node'] = 'foo'
        iq['command']['action'] = 'execute'
        self.failUnless(iq['command']['action'] == 'execute')
        iq['command']['action'] = 'complete'
        self.failUnless(iq['command']['action'] == 'complete')
        iq['command']['action'] = 'cancel'
        self.failUnless(iq['command']['action'] == 'cancel')
    def testSetActions(self):
        """Test setting next actions in a command stanza."""
        iq = self.Iq()
        iq['type'] = 'result'
        iq['command']['node'] = 'foo'
        iq['command']['actions'] = ['prev', 'next']
        self.check(iq, """
          
            
              
                
                
              
            
          
        """)
    def testGetActions(self):
        """Test retrieving next actions from a command stanza."""
        iq = self.Iq()
        iq['command']['node'] = 'foo'
        iq['command']['actions'] = ['prev', 'next']
        results = iq['command']['actions']
        expected = set(['prev', 'next'])
        self.assertEqual(results, expected,
                         "Incorrect next actions: %s" % results)
    def testDelActions(self):
        """Test removing next actions from a command stanza."""
        iq = self.Iq()
        iq['type'] = 'result'
        iq['command']['node'] = 'foo'
        iq['command']['actions'] = ['prev', 'next']
        del iq['command']['actions']
        self.check(iq, """
          
            
          
        """)
    def testAddNote(self):
        """Test adding a command note."""
        iq = self.Iq()
        iq['type'] = 'result'
        iq['command']['node'] = 'foo'
        iq['command'].add_note('Danger!', ntype='warning')
        self.check(iq, """
          
            
              Danger!
            
          
        """)
    def testNotes(self):
        """Test using command notes."""
        iq = self.Iq()
        iq['type'] = 'result'
        iq['command']['node'] = 'foo'
        notes = [('info', 'Interesting...'),
                 ('warning', 'Danger!'),
                 ('error', "I can't let you do that")]
        iq['command']['notes'] = notes
        self.failUnless(iq['command']['notes'] == notes,
                "Notes don't match: %s %s" % (notes, iq['command']['notes']))
        self.check(iq, """
          
            
              Interesting...
              Danger!
              I can't let you do that
            
          
        """)
suite = unittest.TestLoader().loadTestsFromTestCase(TestAdHocCommandStanzas)