def test_virtual_site_top_level_is_not_unique(self):
        """Test cases where the Silva root is the highest URL you can
        get.
        """
        # Sub case 1
        request = TestRequest(
            application=self.root,
            url='https://complicated/admin/edit',
            headers=[('X-VHM-Url', 'https://complicated')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)

        site = IVirtualSite(request)
        self.assertTrue(verifyObject(IVirtualSite, site))
        self.assertEqual(site.get_root_url(), 'https://complicated/admin')
        self.assertEqual(site.get_root_path(), '/admin')
        self.assertEqual(site.get_top_level_url(), 'https://complicated/admin')
        self.assertEqual(site.get_top_level_path(), '/admin')

        # Sub case 2
        request = TestRequest(
            application=self.root,
            url='https://complicated/site/edit',
            headers=[('X-VHM-Url', 'https://complicated')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)

        site = IVirtualSite(request)
        self.assertTrue(verifyObject(IVirtualSite, site))
        self.assertEqual(site.get_root_url(), 'https://complicated/site')
        self.assertEqual(site.get_root_path(), '/site')
        self.assertEqual(site.get_top_level_url(), 'https://complicated/site')
        self.assertEqual(site.get_top_level_path(), '/site')
    def test_rewrite_url_change_path_multiple_to_one(self):
        """Test cases where rewritting a URL should change its URL path.
        """
        request = TestRequest(
            application=self.root,
            url='http://localhost/man/edit',
            headers=[('X-VHM-Url', 'http://localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)

        self.assertEqual(
            plugin.rewrite_url(
                'https://localhost',
                'http://localhost/man/edit'),
            'https://localhost/docs/dev/man/edit')
        self.assertEqual(
            plugin.rewrite_url(
                'https://localhost',
                'http://localhost/admin/edit'),
            'https://localhost/docs/admin/edit')
        self.assertEqual(
            plugin.rewrite_url(
                'https://localhost',
                'http://localhost/site/docs/users/edit'),
            'https://localhost/docs/users/edit')
    def test_rewrite_url_no_change(self):
        """Test simple cases where rewritting a URL should not changes
        its URL path.
        """
        request = TestRequest(
            application=self.root,
            url='http://localhost/man/edit',
            headers=[('X-VHM-Url', 'http://localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)

        self.assertIsNot(
            plugin.host,
            None)
        self.assertEqual(
            plugin.rewrite_url(None, 'http://localhost/man/edit'),
            '/man/edit')
        self.assertEqual(
            plugin.rewrite_url(
                'http://localhost',
                'http://localhost/man/edit'),
            'http://localhost/man/edit')
        self.assertEqual(
            plugin.rewrite_url(
                'http://localhost',
                'http://localhost/site/docs/users/edit'),
            'http://localhost/site/docs/users/edit')
    def test_root(self):
        """If the header is present, rewriting is applied.
        """
        request = TestRequest(
            application=self.root,
            url='http://localhost/docs',
            headers=[('X-VHM-Url', 'http://localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, self.root)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, ['docs'])

        url = getMultiAdapter((self.root, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            str(url),
            'http://localhost')
        self.assertEqual(
            url.url(),
            'http://localhost')
        self.assertEqual(
            url.url(relative=True),
            '/')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/++preview++')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/++preview++')
        self.assertEqual(
            url.preview(),
            'http://localhost/++preview++')
    def test_activated_default(self):
        request = TestRequest(
            application=self.root,
            url='http://localhost')
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, request.application)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, request.path)

        url = getMultiAdapter((self.root, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            str(url),
            'http://localhost/root')
        self.assertEqual(
            url.url(),
            'http://localhost/root')
        self.assertEqual(
            url.url(relative=True),
            '/root')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/root/++preview++')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/root/++preview++')
        self.assertEqual(
            url.preview(),
            'http://localhost/root/++preview++')
    def test_activated_default(self):
        request = TestRequest(
            application=self.root,
            url='http://localhost')
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, request.application)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, [])

        url = getMultiAdapter((self.root, request), IContentURL)
        self.assertEqual(
            url.breadcrumbs(),
            ({'name': u'root',
              'url': 'http://localhost/root'},))

        url = getMultiAdapter((self.root.docs.dev, request), IContentURL)
        self.assertEqual(
            url.breadcrumbs(),
            ({'name': u'root',
              'url': 'http://localhost/root', },
             {'name': u'Documentation',
              'url': 'http://localhost/root/docs'},
             {'name': u'Developer',
              'url': 'http://localhost/root/docs/dev'}))
    def test_root_not_applied(self):
        """Rewriting is not applied if the header is not present.
        """
        request = TestRequest(
            application=self.root,
            url='http://localhost/docs')
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, request.application)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, ['docs'])
        self.assertEqual('http://localhost/docs', request['ACTUAL_URL'])

        url = getMultiAdapter((self.root, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            str(url),
            'http://localhost/root')
        self.assertEqual(
            url.url(),
            'http://localhost/root')
        self.assertEqual(
            url.url(relative=True),
            '/root')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/root/++preview++')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/root/++preview++')
        self.assertEqual(
            url.preview(),
            'http://localhost/root/++preview++')
 def test_skin_not_activated(self):
     request = TestRequest(
         application=self.root,
         url='http://localhost')
     plugin = request.query_plugin(request.application, IVirtualHosting)
     root, method, path = plugin(request.method, request.path)
     self.assertEqual(root, request.application)
     self.assertEqual(method, 'index_html')
     self.assertEqual(path, [])
     self.assertFalse(IMultiflexSkin.providedBy(request))
 def test_backend_alias(self):
     request = TestRequest(
         application=self.root,
         url='http://admin.localhost/docs/admin',
         headers=[('X-VHM-Url', 'http://backend.localhost')])
     plugin = request.query_plugin(request.application, IVirtualHosting)
     root, method, path = plugin(request.method, request.path)
     self.assertEqual(root, self.root)
     self.assertEqual(method, 'index_html')
     self.assertEqual(path, ['admin', 'docs'])
 def test_skin_folder_not_enforced(self):
     request = TestRequest(
         application=self.root,
         url='http://localhost/user/information',
         headers=[('X-VHM-Url', 'http://localhost')])
     plugin = request.query_plugin(request.application, IVirtualHosting)
     root, method, path = plugin(request.method, request.path)
     self.assertEqual(root, self.root.docs.user)
     self.assertEqual(method, 'index_html')
     self.assertEqual(path, ['information'])
     self.assertTrue(IMultiflexSkin.providedBy(request))
     self.assertFalse(IStandardIssueSkin.providedBy(request))
     self.assertTrue(request.get(SET_SKIN_ALLOWED_FLAG, True))
예제 #11
0
    def test_vhm(self):
        """Test IContentURL url computation while a VHM is used. Zope
        object doesn't support the preview mode.
        """
        request = TestRequest(
            application=self.root,
            url='http://localhost/service_extension',
            headers=[('X-VHM-Url', 'http://infrae.com'),
                     ('X-VHM-Path', '/root')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, self.root)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, ['service_extension'])

        url = component.getMultiAdapter(
            (self.root.service_extensions, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))
        self.assertTrue(IContentURL.extends(IAbsoluteURL))

        self.assertEqual(
            str(url),
            'http://infrae.com/service_extensions')
        self.assertEqual(
            url(),
            'http://infrae.com/service_extensions')
        self.assertEqual(
            url.url(relative=True),
            '/service_extensions')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/service_extensions')
        self.assertEqual(
            url.preview(),
            'http://infrae.com/service_extensions')
        self.assertEqual(
            url.url(host='http://silvacms.org'),
            'http://silvacms.org/service_extensions')
        self.assertEqual(
            url.url(host='http://silvacms.org', preview=True),
            'http://silvacms.org/service_extensions')

        alsoProvides(request, IPreviewLayer)
        self.assertEqual(
            str(url),
            'http://infrae.com/service_extensions')
        self.assertEqual(
            url(),
            'http://infrae.com/service_extensions')
    def test_rewritten_short_activated(self):
        request = TestRequest(
            application=self.root,
            url='http://localhost/admin/manual',
            headers=[('X-VHM-Url', 'http://localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, self.root.docs.admin)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, ['manual'])

        url = getMultiAdapter((self.root.docs.admin, request), IContentURL)
        self.assertEqual(
            url.breadcrumbs(),
            ({'name': u'Administrator',
              'url': 'http://localhost/admin'},))
    def test_virtual_site_simple(self):
        """Test simple cases nothing special is set or done.
        """
        request = TestRequest(
            application=self.root,
            url='http://localhost/man/edit',
            headers=[('X-VHM-Url', 'http://localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)

        site = IVirtualSite(request)
        self.assertTrue(verifyObject(IVirtualSite, site))
        self.assertEqual(site.get_root_url(), 'http://localhost')
        self.assertEqual(site.get_root_path(), '/')
        self.assertEqual(site.get_top_level_url(), 'http://localhost')
        self.assertEqual(site.get_top_level_path(), '/')
    def test_virtual_site_top_level_is_not_root_at_top_level(self):
        """Test cases where the Silva root is not the highest URL you
        can get.
        """
        request = TestRequest(
            application=self.root,
            url='http://localhost/man/edit',
            headers=[('X-VHM-Url', 'http://localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)

        site = IVirtualSite(request)
        self.assertTrue(verifyObject(IVirtualSite, site))
        self.assertEqual(site.get_root_url(), 'http://localhost')
        self.assertEqual(site.get_root_path(), '/')
        self.assertEqual(site.get_top_level_url(), 'http://localhost')
        self.assertEqual(site.get_top_level_path(), '/')
    def test_root_brain(self):
        """If the header is present, rewriting is applied. You can
        compute the URL of a brain inside the same virtual host.
        """
        request = TestRequest(
            application=self.root,
            url='http://localhost/docs/user',
            headers=[('X-VHM-Url', 'http://localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, self.root)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, ['user', 'docs'])

        catalog = root.service_catalog
        brains = catalog(meta_type='Silva Root', path='/root')
        self.assertEqual(len(brains), 1)
        brain = brains[0]

        url = getMultiAdapter((brain, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            brain.getURL(),
            'http://localhost')
        self.assertEqual(
            str(url),
            'http://localhost')
        self.assertEqual(
            url.url(),
            'http://localhost')
        self.assertEqual(
            url.url(relative=True),
            '/')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost')
        self.assertEqual(
            url.preview(),
            'http://localhost')
    def test_rewritten_short_long(self):
        request = TestRequest(
            application=self.root,
            url='http://localhost/hidden/docs/resources/api',
            headers=[('X-VHM-Url', 'http://localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, self.root.docs.dev)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, ['api', 'resources'])

        url = getMultiAdapter(
            (self.root.docs.dev.resources, request),
            IContentURL)
        self.assertEqual(
            url.breadcrumbs(),
            ({'name': u'Developer',
              'url': 'http://localhost/hidden/docs'},
             {'name': u'Resources',
              'url': 'http://localhost/hidden/docs/resources'},))
    def test_root_different_host(self):
        """Rewriting is applied even if the URL have not the same
        domain, but the header is present.
        """
        request = TestRequest(
            application=self.root,
            url='http://development.server.corp/docs',
            headers=[('X-VHM-Url', 'http://localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, self.root)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, ['docs'])
        self.assertEqual('http://localhost/docs', request['ACTUAL_URL'])

        url = getMultiAdapter((self.root, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            str(url),
            'http://localhost')
        self.assertEqual(
            url.url(),
            'http://localhost')
        self.assertEqual(
            url.url(relative=True),
            '/')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/++preview++')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/++preview++')
        self.assertEqual(
            url.preview(),
            'http://localhost/++preview++')
    def test_frontend_alias(self):
        request = TestRequest(
            application=self.root,
            url='http://frontend.localhost/info',
            headers=[('X-VHM-Url', 'http://frontend.localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, self.root)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, [])

        catalog = root.service_catalog
        brains = catalog(meta_type='Silva Folder', path='/root/docs/admin')
        self.assertEqual(len(brains), 1)
        brain = brains[0]

        url = getMultiAdapter((brain, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            brain.getURL(),
            'http://frontend.localhost')
        self.assertEqual(
            str(url),
            'http://frontend.localhost')
        self.assertEqual(
            url.url(),
            'http://frontend.localhost')
        self.assertEqual(
            url.url(relative=True),
            '/')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/')
        self.assertEqual(
            url.url(preview=True),
            'http://frontend.localhost')
        self.assertEqual(
            url.preview(),
            'http://frontend.localhost')

        catalog = root.service_catalog
        brains = catalog(meta_type='Silva Root', path='/root')
        self.assertEqual(len(brains), 1)
        brain = brains[0]

        url = getMultiAdapter((brain, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            brain.getURL(),
            'http://frontend.localhost/info')
        self.assertEqual(
            str(url),
            'http://frontend.localhost/info')
        self.assertEqual(
            url.url(),
            'http://frontend.localhost/info')
        self.assertEqual(
            url.url(relative=True),
            '/info')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/info')
        self.assertEqual(
            url.url(preview=True),
            'http://frontend.localhost/info')
        self.assertEqual(
            url.preview(),
            'http://frontend.localhost/info')
    def test_frontend(self):
        request = TestRequest(
            application=self.root,
            url='http://localhost',
            headers=[('X-VHM-Url', 'http://localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, self.root.docs.admin)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, [])

        url = getMultiAdapter((self.root.docs.admin, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            str(url),
            'http://localhost')
        self.assertEqual(
            url.url(),
            'http://localhost')
        self.assertEqual(
            url.url(relative=True),
            '/')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/++preview++')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/++preview++')
        self.assertEqual(
            url.preview(),
            'http://localhost/++preview++')

        url = getMultiAdapter((self.root.docs, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            str(url),
            'http://localhost/manual')
        self.assertEqual(
            url.url(),
            'http://localhost/manual')
        self.assertEqual(
            url.url(relative=True),
            '/manual')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/manual/++preview++')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/manual/++preview++')
        self.assertEqual(
            url.url(preview=True, host='http://frontend.localhost'),
            'http://frontend.localhost/manual/++preview++')
        self.assertEqual(
            url.url(preview=True, host='http://admin.localhost'),
            'http://admin.localhost/++preview++/docs')
        self.assertEqual(
            url.preview(),
            'http://localhost/manual/++preview++')

        url = getMultiAdapter((self.root, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            str(url),
            'http://localhost/info')
        self.assertEqual(
            url.url(),
            'http://localhost/info')
        self.assertEqual(
            url.url(relative=True),
            '/info')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/info/++preview++')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/info/++preview++')
        self.assertEqual(
            url.preview(),
            'http://localhost/info/++preview++')
    def test_folder_brain_rewritten_long(self):
        """If the header is present, rewriting is applied.
        """
        request = TestRequest(
            application=self.root,
            url='http://localhost/hidden/docs/resources',
            headers=[('X-VHM-Url', 'http://localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, self.root.docs.dev)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, ['resources'])

        catalog = root.service_catalog
        brains = catalog(meta_type='Silva Folder', path='/root/docs/admin')
        self.assertEqual(len(brains), 1)
        brain = brains[0]

        url = getMultiAdapter((brain, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            brain.getURL(),
            'http://localhost/admin')
        self.assertEqual(
            str(url),
            'http://localhost/admin')
        self.assertEqual(
            url.url(),
            'http://localhost/admin')
        self.assertEqual(
            url.url(relative=True),
            '/admin')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/admin')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/admin')
        self.assertEqual(
            url.preview(),
            'http://localhost/admin')

        # Get the URL of a different brain
        catalog = root.service_catalog
        brains = catalog(
            meta_type='Silva Folder',
            path='/root/docs/dev/resources')
        self.assertEqual(len(brains), 1)
        brain = brains[0]

        url = getMultiAdapter((brain, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            brain.getURL(),
            'http://localhost/hidden/docs/resources')
        self.assertEqual(
            str(url),
            'http://localhost/hidden/docs/resources')
        self.assertEqual(
            url.url(),
            'http://localhost/hidden/docs/resources')
        self.assertEqual(
            url.url(relative=True),
            '/hidden/docs/resources')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/hidden/docs/resources')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/hidden/docs/resources')
        self.assertEqual(
            url.preview(),
            'http://localhost/hidden/docs/resources')

        # Get the URL of a different brain
        catalog = root.service_catalog
        brains = catalog(
            meta_type='Silva Publication',
            path='/root/docs')
        self.assertEqual(len(brains), 1)
        brain = brains[0]

        url = getMultiAdapter((brain, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            brain.getURL(),
            'http://localhost/docs')
        self.assertEqual(
            str(url),
            'http://localhost/docs')
        self.assertEqual(
            url.url(),
            'http://localhost/docs')
        self.assertEqual(
            url.url(relative=True),
            '/docs')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/docs')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/docs')
        self.assertEqual(
            url.preview(),
            'http://localhost/docs')
    def test_folder_rewritten_long(self):
        """If the header is present, rewriting is applied.
        """
        request = TestRequest(
            application=self.root,
            url='http://localhost/hidden/docs/resources',
            headers=[('X-VHM-Url', 'http://localhost')])
        plugin = request.query_plugin(request.application, IVirtualHosting)
        root, method, path = plugin(request.method, request.path)
        self.assertEqual(root, self.root.docs.dev)
        self.assertEqual(method, 'index_html')
        self.assertEqual(path, ['resources'])

        url = getMultiAdapter((self.root.docs.admin, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            str(url),
            'http://localhost/admin')
        self.assertEqual(
            url.url(),
            'http://localhost/admin')
        self.assertEqual(
            url.url(relative=True),
            '/admin')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/admin/++preview++')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/admin/++preview++')
        self.assertEqual(
            url.preview(),
            'http://localhost/admin/++preview++')

        # Get the URL of a different folder
        url = getMultiAdapter((root.resources, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            str(url),
            'http://localhost/hidden/docs/resources')
        self.assertEqual(
            url.url(),
            'http://localhost/hidden/docs/resources')
        self.assertEqual(
            url.url(relative=True),
            '/hidden/docs/resources')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/hidden/docs/++preview++/resources')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/hidden/docs/++preview++/resources')
        self.assertEqual(
            url.preview(),
            'http://localhost/hidden/docs/++preview++/resources')

        # Get the URL of a different publication
        url = getMultiAdapter((self.root.docs, request), IContentURL)
        self.assertTrue(verifyObject(IContentURL, url))

        self.assertEqual(
            str(url),
            'http://localhost/docs')
        self.assertEqual(
            url.url(),
            'http://localhost/docs')
        self.assertEqual(
            url.url(relative=True),
            '/docs')
        self.assertEqual(
            url.url(relative=True, preview=True),
            '/++preview++/docs')
        self.assertEqual(
            url.url(preview=True),
            'http://localhost/++preview++/docs')
        self.assertEqual(
            url.preview(),
            'http://localhost/++preview++/docs')