Added tests for ipypbx.http.FreeswitchConfigGenerator
authorStas Shtin <antisvin@gmail.com>
Wed, 21 Apr 2010 12:57:49 +0000 (16:57 +0400)
committerStas Shtin <antisvin@gmail.com>
Wed, 21 Apr 2010 12:57:49 +0000 (16:57 +0400)
src/ipypbx/http.py
src/ipypbx/tests/test_http.py

index 3e76ed9..a7cd848 100644 (file)
@@ -37,7 +37,7 @@ Content-Length: %i
 
 %s'''
   
-    def __init__(self, database, parent):
+    def __init__(self, database, parent=None):
         super(FreeswitchConfigServer, self).__init__(parent)
 
         self.host = None
@@ -45,7 +45,7 @@ Content-Length: %i
         self.connection_id = None
         self.is_running = False
         self.generators = [
-            GenClass(database, self) for GenClass in (
+            GenClass(database) for GenClass in (
                 SofiaConfGenerator,)]
         
         self.httpRequestParser = HttpRequestParser()
@@ -65,6 +65,8 @@ Content-Length: %i
         self.port = port
         if connection_id:
             self.connection_id = connection_id
+            for generator in self.generators:
+                generator.connection_id = connection_id
 
         # Restart server if necessary.
         if needs_restart:
@@ -219,15 +221,9 @@ class FreeswitchConfigGenerator(object):
     
     param_match = {}
 
-    def __init__(self, database, parent):
+    def __init__(self, database=None, connection_id=None):
         self.database = database
-        self.parent = parent
-
-#    def database(self):
-#        """
-#        Return database instance.
-#        """
-#        return self.model.controllers['connection'].model.database()
+        self.connection_id = connection_id
 
     def canHandle(self, params):
         """
@@ -254,9 +250,15 @@ class FreeswitchConfigGenerator(object):
         """
         Create params element based on data passed in a list.
         """
+        # Create params element.
+        params_elt = etree.SubElement(parent_elt, 'params')
+
+        # Add param elements to params element.
         for name, value in params:
             etree.SubElement(
-                parent_elt, 'param', name=name, value=str(value))
+                params_elt, 'param', name=name, value=str(value))
+            
+        return parent_elt
             
         
 class SofiaConfGenerator(FreeswitchConfigGenerator):
index 180b124..7434635 100644 (file)
@@ -18,6 +18,7 @@
 import unittest
 from ipypbx import http
 from ipypbx.tests import support
+from xml.etree import ElementTree as etree
 
 
 class TestHttpRequestParser(unittest.TestCase):
@@ -103,6 +104,9 @@ class TestHttpRequestParser(unittest.TestCase):
             self.request.handle(line)        
 
     def test_handle_body(self):
+        """
+        HttpRequestParse.handleBody should parse variables from POST request.
+        """
         self._run_lines(
             'POST / HTTP/1.1',
             '',
@@ -110,14 +114,20 @@ class TestHttpRequestParser(unittest.TestCase):
         self.assertEqual(self.request.data, {'foo': 'bar', 'qwe': 'asd'})
         
     def test_handle_body_with_missing_values(self):
+        """
+        Missing values should give empty results.
+        """
         self._run_lines(
             'POST / HTTP/1.1',
             '',
             'foo=bar&qwe=')
         self.assertEqual(self.request.data, {'foo': 'bar', 'qwe': ''})
                 
-
     def test_non_post_fails(self):
+        """
+        We expect only POST requests from Freeswitch, for anything else we
+        get an error.
+        """
         self.request.handle('GET / HTTP/1.1')
         self.request.handle('')
         self.assertRaises(
@@ -125,6 +135,47 @@ class TestHttpRequestParser(unittest.TestCase):
             'Only post requests work')
 
         
-class TestFreeswitchConfigGenerator(support.InitDatabase, unittest.TestCase):
-    def test_foo(self):
-        print self.db
+class TestFreeswitchConfigGenerator(unittest.TestCase):
+    def setUp(self):
+        self.generator = http.FreeswitchConfigGenerator()
+        
+    def test_can_handle(self):
+        self.generator.param_match = {'foo': 'bar'}
+        self.assertEqual(self.generator.canHandle({'foo': 'bar'}), True)
+        self.assertEqual(self.generator.canHandle({'foo': 'xxx'}), False)
+        self.assertEqual(self.generator.canHandle({'xxx': 'bar'}), False)
+        self.assertEqual(
+            self.generator.canHandle({'foo': 'bar', 'qwe': 'asd'}), True)
+        self.assertEqual(self.generator.canHandle({'qwe': 'asd'}), False)
+
+        self.generator.param_match = {'foo': 'bar', 'baz': '123'}
+        self.assertEqual(self.generator.canHandle({'foo': 'bar'}), False)
+        self.assertEqual(
+            self.generator.canHandle({'foo': 'bar', 'baz': '123'}), True)
+        self.assertEqual(
+            self.generator.canHandle({'foo': 'bar', 'qwe': 'asd'}), False)
+                         
+    def test_base_elements(self):
+        self.generator.param_match = {'section': 'foo'}
+        root_elt, section_elt = self.generator.baseElements
+        self.assertEqual(
+            etree.tostring(root_elt),
+            '<document type="freeswitch/xml"><section name="foo" />'
+            '</document>')
+        self.assertEqual(
+            etree.tostring(section_elt), '<section name="foo" />')
+
+    def test_add_params(self):
+        foo_elt = etree.Element('foo')
+        self.assertEqual(
+            etree.tostring(self.generator.addParams(foo_elt, (('qwe', 'asd'),))),
+            '<foo><params><param name="qwe" value="asd" /></params></foo>')
+
+
+        bar_elt = etree.Element('bar')
+        self.assertEqual(
+            etree.tostring(
+                self.generator.addParams(bar_elt,
+                                         (('qwe', 'asd'), ('zxc', '123')))),
+            '<bar><params><param name="qwe" value="asd" />'
+            '<param name="zxc" value="123" /></params></bar>')