[CalendarServer-changes] [7916] CalendarServer/branches/users/glyph/imip-and-admin-html/ calendarserver/webadmin

source_changes at macosforge.org source_changes at macosforge.org
Thu Aug 11 21:43:04 PDT 2011


Revision: 7916
          http://trac.macosforge.org/projects/calendarserver/changeset/7916
Author:   glyph at apple.com
Date:     2011-08-11 21:43:04 -0700 (Thu, 11 Aug 2011)
Log Message:
-----------
first page-rendering test (for resourceSearch)

Modified Paths:
--------------
    CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/resource.py
    CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/test/test_resource.py

Modified: CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/resource.py
===================================================================
--- CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/resource.py	2011-08-12 04:42:53 UTC (rev 7915)
+++ CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/resource.py	2011-08-12 04:43:04 UTC (rev 7916)
@@ -177,8 +177,7 @@
     def htmlContent(self, directory, request):
 
         def queryValue(arg):
-            query = cgi.parse_qs(urlparse.urlparse(request.uri).query, True)
-            return query.get(arg, [""])[0]
+            return request.args.get(arg, [""])[0]
 
         def queryValues(arg):
             query = cgi.parse_qs(urlparse.urlparse(request.uri).query, True)

Modified: CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/test/test_resource.py
===================================================================
--- CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/test/test_resource.py	2011-08-12 04:42:53 UTC (rev 7915)
+++ CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/test/test_resource.py	2011-08-12 04:43:04 UTC (rev 7916)
@@ -20,11 +20,14 @@
 
 from twisted.trial.unittest import TestCase
 
-from twisted.web.microdom import parseString
+from twisted.web.microdom import parseString, getElementsByTagName
+from twisted.web.domhelpers import gatherTextNodes
+
 from calendarserver.tap.util import FakeRequest
 from twisted.internet.defer import inlineCallbacks
 from twisted.internet.defer import returnValue
 from calendarserver.webadmin.resource import WebAdminResource
+from twistedcaldav.directory.directory import DirectoryRecord
 
 
 
@@ -33,6 +36,17 @@
     Tests for HTML rendering L{WebAdminResource}.
     """
 
+    def expectRecordSearch(self, searchString, result):
+        """
+        Expect that a search will be issued via with the given fields, and will
+        yield the given result.
+        """
+        fields = []
+        for field in 'fullName', 'firstName', 'lastName', 'emailAddresses':
+            fields.append((field, searchString, True, "contains"))
+        self.expectedSearches[tuple(fields)] = result
+
+
     def recordsMatchingFields(self, fields):
         """
         Pretend to be a directory object for the purposes of testing.
@@ -40,20 +54,23 @@
         # 'fields' will be a list of 4-tuples of (fieldName, searchStr, True,
         # "contains"; implement this for tests which will want to call
         # 'search()')
+        return self.expectedSearches[tuple(fields)]
 
 
     def setUp(self):
+        self.expectedSearches = {}
         self.resource = WebAdminResource(self.mktemp(), None, self)
 
 
     @inlineCallbacks
-    def renderPage(self):
+    def renderPage(self, args={}):
         """
         Render a page, returning a Deferred that fires with the HTML as a
-        result..
+        result.
         """
-        req = FakeRequest(method='GET', path='/webadmin',
+        req = FakeRequest(method='GET', path='/admin',
                           rootResource=self.resource)
+        req.args = args
         response = yield self.resource.render(req)
         self.assertEquals(response.code, 200)
         content = response.stream.mem
@@ -71,14 +88,48 @@
         self.assertEquals(document.documentElement.tagName, 'html')
 
 
+    @inlineCallbacks
+    def test_resourceSearch(self):
+        """
+        Searching for resources should result in an HTML table resource search.
+        """
+        self.expectRecordSearch(
+            "bob", [
+                DirectoryRecord(
+                    service=self, recordType='users', guid=None,
+                    authIDs=authIds, emailAddresses=tuple(emails),
+                    shortNames=tuple(shortNames), fullName=fullName
+                )
+                for (shortNames, fullName, authIds, emails)
+                in [
+                    (["bob"], "Bob Bobson", ["boblogin"], [
+                        "bob at example.com",
+                        "bob at other.example.com"]),
+                    (["bobd"], "Bob Dobson", ["bobdlogin"], ["bobd at example.com"]),
+                   ]
+            ])
+        document = yield self.renderPage(dict(resourceSearch=["bob"]))
+        tables = getElementsByTagName(document, "table")
+        # search results are the first table
+        rows = getElementsByTagName(tables[0], 'tr')
+        self.assertEquals(len(rows), 3)
+        firstRowCells = getElementsByTagName(rows[1], 'td')
+        self.assertEquals([gatherTextNodes(cell) for cell in firstRowCells[1:]],
+                         ["Bob Bobson", "User", "bob", "boblogin",
+                          "bob at example.com, bob at other.example.com"])
 
+
+    realmName = 'Fake'
+    guid = '28c57671-2bf8-4ebd-bc45-fda5ffcee1e8'
+
+
 class NewRenderingTests(RenderingTests):
     """
     Tests for new L{WebAdminPage} renderer.
     """
 
     @inlineCallbacks
-    def renderPage(self):
+    def renderPage(self, args={}):
         self.resource.render = self.resource.renderNew
         returnValue((yield super(NewRenderingTests, self).renderPage()))
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110811/4a559216/attachment-0001.html>


More information about the calendarserver-changes mailing list