Add test covering sending data
[bzrirker.git] / tests / testirker.py
index fb7c49d73b99424daace12e4c58ce5e52662f9aa..5352434f5ea40ebe40d808848fe72295a3c5d04f 100644 (file)
@@ -3,11 +3,10 @@
 # Copyright 2012 Neil Muller
 # GPL 2+ - see COPYING for details
 from unittest import TestLoader
+from SocketServer import TCPServer, StreamRequestHandler
+import threading
 
-from bzrlib import (
-    config,
-    tests,
-    )
+from bzrlib import config
 from bzrlib.bzrdir import BzrDir
 from bzrlib.tests import TestCaseInTempDir
 from bzrlib.plugins.bzrirker.irkerhook import IrkerSender
@@ -16,32 +15,39 @@ from bzrlib.plugins.bzrirker.irkerhook import IrkerSender
 def test_suite():
     return TestLoader().loadTestsFromName(__name__)
 
-sample_config=("[DEFAULT]\n"
-        "irker_url=bzr://test.example.test/bzrirker\n"
+sample_config = ("[DEFAULT]\n"
         "irker_project=bzrirker\n"
+        "irker_server=localhost\n"
+        "irker_port=6677\n"
         "irker_channels=irc://chat.example.test/commits\n")
 
-colour_config=("[DEFAULT]\n"
-        "irker_url=bzr://test.example.test/bzrirker\n"
+no_project_config = ("[DEFAULT]\n"
+        "irker_channels=irc://chat.example.test/commits\n")
+
+colour_config = ("[DEFAULT]\n"
         "irker_project=bzrirker\n"
         "irker_colours=mIRC\n"
         "irker_channels=irc://chat.example.test/commits\n")
 
 
-class TestConfigured(TestCaseInTempDir):
+class MyHandler(StreamRequestHandler):
 
-    def test_url(self):
-        irker = self.get_irker()
-        self.assertEqual('bzr://test.example.test/bzrirker', irker.url())
+    def handle(self):
+        data = self.rfile.read()
+        self.server.data = data
 
-    def test_colours(self):
+
+class TestConfigured(TestCaseInTempDir):
+
+    def test_no_colours(self):
         irker = self.get_irker()
         self.assertEqual({
             'bold': '', 'green': '', 'blue': '', 'red': '',
             'yellow': '', 'brown': '', 'magenta': '', 'cyan': '',
             'reset': ''}, irker.colours())
 
-        irker = self.get_irker(color_config)
+    def test_colours(self):
+        irker = self.get_irker(colour_config)
         self.assertEqual({
             'bold': '\x02', 'green': '\x0303', 'blue': '\x0302',
             'red': '\x0305', 'yellow': '\x0307', 'brown': '\x0305',
@@ -51,17 +57,39 @@ class TestConfigured(TestCaseInTempDir):
     def test_message(self):
         irker = self.get_irker()
         self.assertEqual(
-                '', irker._format())
-        irker = self.get_irker(color_config)
+                'bzrirker: Sample <john@example.test> work * 1 /  : foo bar ',
+                irker._format())
+
+    def test_no_project(self):
+        irker = self.get_irker(no_project_config)
+        self.assertEqual(
+                'No Project name set: Sample <john@example.test>'
+                ' work * 1 /  : foo bar ',
+                irker._format())
+
+    def test_message_colour(self):
+        irker = self.get_irker(colour_config)
         self.assertEqual(
-                '', irker._format())
+                '\x02bzrirker:\x0f \x0303Sample <john@example.test>\x0f'
+                ' work * \x021\x0f /  \x02\x0f: foo bar ', irker._format())
 
+    def test_send(self):
+        irker = self.get_irker()
+        server = self.get_server()
+        irker.send()
+        while server.data is None:
+            pass
+        server.shutdown()
+        self.assertEqual(server.data,
+                '{"to": ["irc://chat.example.test/commits"]'
+                ', "privmsg": "bzrirker: Sample <john@example.test>'
+                ' work * 1 /  : foo bar "}\n')
 
-    def get_irker(sef, text=sample_config):
+    def get_irker(self, text=sample_config):
         my_config = config.MemoryStack(text)
         self.branch = BzrDir.create_branch_convenience('.')
         tree = self.branch.bzrdir.open_workingtree()
-        tree.commit('foo bar baz\nfuzzy\nwuzzy', rev_id='A',
+        tree.commit('foo bar\nfuzzy\nwuzzy', rev_id='A',
                 allow_pointless=True,
                 timestamp=1,
                 timezone=0,
@@ -71,5 +99,10 @@ class TestConfigured(TestCaseInTempDir):
         # We're not calling send, so do the setup stuff here
         irker._setup_revision_and_revno()
         return irker
-        
 
+    def get_server(self):
+        server = TCPServer(('localhost', 6677), MyHandler)
+        server.data = None
+        thread = threading.Thread(target=server.serve_forever)
+        thread.start()
+        return server