class Instance(object):
            def __init__(self):
                self.context = context
                self.request = TestRequest()
                self.request.setPrincipal(self)

            title = 'principal'
 def _getRequest(self, **kw):
     environ = kw.pop('environ', {})
     environ['HTTP_HOST'] = 'foo'
     request = BrowserRequest(BytesIO(), environ=environ, **kw)
     request._cookies = {'edit_languages': 'en,de'}
     request._traversed_names = ['foo', 'bar']
     return request
예제 #3
0
    def test_update(self):
        c = C()
        request = TestRequest()
        v = EV(c, request)
        request.form[Update] = ''
        request.form['field.foo'] = u'r foo'
        request.form['field.bar'] = u'r bar'
        request.form['field.getbaz'] = u'r baz'
        request.form['field.a'] = u'c a'

        message = v.update()
        self.assertTrue(message.startswith('Updated '), message)
        self.assertEqual(c.foo, u'r foo')
        self.assertEqual(c.bar, u'r bar')
        self.assertEqual(c.a  , u'c a')
        self.assertEqual(c.b  , u'c b') # missing from form - unchanged
        self.assertEqual(c.getbaz(), u'r baz')

        # Verify that calling update multiple times has no effect

        c.__dict__.clear()
        self.assertEqual(v.update(), message)
        self.assertEqual(c.foo, u'c foo')
        self.assertEqual(c.bar, u'c bar')
        self.assertEqual(c.a  , u'c a')
        self.assertEqual(c.b  , u'c b')
        self.assertEqual(c.getbaz(), u'c baz')
예제 #4
0
    def test_double_validation(self):
        """ If a field already has an error and it is validated again,
        we cut the validation short and return the original error.

        Here we test that we do not lose the original error in the
        process.  We do that by adding the fieldsets twice in the
        request, which can happen if you have some whacky javascript
        that tries to clone too many inputs.
        """
        dummy = self.makeDummy()
        request = TestRequest()
        alsoProvides(request, IAttributeAnnotatable)
        my_values = field_values.copy()
        my_values['fixedpointfield2'] = 'an_error'
        request.form.update(my_values)
        request.form['fieldset'] = 'default'
        request.form['fieldsets'] = ['default', 'default']
        errors = {}
        dummy.validate(errors=errors, REQUEST=request)
        self.assertTrue(errors, errors)
        # The validation error looks a bit weird because of the
        # [[plone]] domain that is added by the translation testing
        # machinery.
        self.assertEqual(errors['fixedpointfield2'],
                         (u"[[plone][Validation failed(isDecimal): "
                          "'an_error' [[plone][is not a decimal number.]]]]"))
    def test_applyUpdates_and_setPrefix(self):
        registry = TestingRegistrationStack(a, b, c)
        request = TestRequest()
        view = ChangeRegistrations(registry, request)
        view.setPrefix("Pigs")

        # Make sure we don't apply updates unless asked to
        request.form = {'Pigs.active': 'disable'}
        view.applyUpdates()
        data = [(info['active'], info['registration'])
                for info in registry.info()]
        self.assertEqual(data, [(True, a), (False, b), (False, c)])

        # Now test disabling
        request.form = {'submit_update': '', 'Pigs.active': 'disable'}
        view.applyUpdates()
        data = [(info['active'], info['registration'])
                for info in registry.info()]
        self.assertEqual(data, [(False, a), (False, b), (False, c)])

        # Now test enabling c
        request.form = {'submit_update': '', 'Pigs.active': 'c'}
        view.applyUpdates()
        data = [(info['active'], info['registration'])
                for info in registry.info()]
        self.assertEqual(data, [(True, c), (False, a), (False, b)])
예제 #6
0
 def create_viewlet(self, viewlet, context=None, view=None, manager=None):
     if context is None:
         context = self.portal
     request = TestRequest()
     directlyProvides(request, IAttributeAnnotatable)
     request.set = mock.Mock()
     return viewlet(context, request, view, manager)
예제 #7
0
    def test_retry_keeps_everything(self):
        """lowlevel test for retry (see #98440)"""
        from zope.publisher.browser import TestRequest
        from zope.publisher.skinnable import setDefaultSkin
        from zope.publisher.interfaces import IDefaultSkin
        from zope.publisher.interfaces.browser import IBrowserRequest
        from zope.publisher.interfaces.browser import IBrowserSkinType
        # create a retryable request
        request = TestRequest()
        self.assertTrue(request.supportsRetry())
        # create a skin and register it as the default skin
        class ISomeSkin(Interface):
            pass
        alsoProvides(ISomeSkin, IBrowserSkinType)
        provideAdapter(ISomeSkin, (IBrowserRequest,), IDefaultSkin)
        # set the default skin for the request
        setDefaultSkin(request)

        # create a retried request
        retried = request.retry()

        # the requests are not the same
        self.assertTrue(request is not retried)
        # the requests both provide the default skin
        self.assertTrue(ISomeSkin.providedBy(request))
        self.assertTrue(ISomeSkin.providedBy(retried))
예제 #8
0
    def __call__(self, filename, title, description, content_type, data,
                 portal_type):
        context = aq_inner(self.context)
        error = ''
        result = {}
        result['success'] = None
        newid = get_id_from_filename(filename, context)
        chooser = INameChooser(context)
        newid = chooser.chooseName(newid, context)
        # consolidation because it's different upon Plone versions
        if not title:
            # try to split filenames because we don't want
            # big titles without spaces
            title = filename.rsplit('.', 1)[0]\
                .replace('_', ' ')\
                .replace('-', ' ')

        if newid in context:
            # only here for flashupload method since a check_id is done
            # in standard uploader - see also XXX in quick_upload.py
            raise NameError, 'Object id %s already exists' % newid
        else:
            upload_lock.acquire()
            try:
                transaction.begin()
                try:
                    from zope.publisher.browser import TestRequest
                    request = TestRequest()
                    dataobj = FileObj(data)
                    dataobj.filename = filename
                    request.form['doc'] = dataobj
                    request.form['ajax'] = '1'
                    from fhnw.office2plone.browser.docx_importer import DocxImporter
                    docximport = DocxImporter(self.context, request)
                    docximport.docx_import()
                except ImportError:
                    error = ''
                except Unauthorized:
                    error = u'serverErrorNoPermission'
                except ConflictError:
                    # rare with xhr upload / happens sometimes with flashupload
                    error = u'serverErrorZODBConflict'
                except ValueError:
                    error = u'serverErrorDisallowedType'
                except Exception, e:
                    error = u'serverError'
                    logger.exception(e)

                if error:
                    if error == u'serverError':
                        logger.info(
                            "An error happens with setId from filename, "
                            "the file has been created with a bad id, "
                            "can't find %s", newid)
                else:
                    pass

                #@TODO : rollback if there has been an error
                transaction.commit()
            finally:
예제 #9
0
    def testUnauthorized(self):
        exception = Exception()
        try:
            raise exception
        except:
            pass
        request = TestRequest()
        request.setPrincipal(DummyPrincipal(23))
        u = Unauthorized(exception, request)
        u.issueChallenge()

        # Make sure the response status was set
        self.assertEqual(request.response.getStatus(), 403)

        # check headers that work around squid "negative_ttl"
        self.assertEqual(request.response.getHeader('Expires'),
                         'Mon, 26 Jul 1997 05:00:00 GMT')
        self.assertEqual(request.response.getHeader('Pragma'),
                         'no-cache')
        self.assertEqual(request.response.getHeader('Cache-Control'),
                         'no-store, no-cache, must-revalidate')
        
        # Make sure the auth utility was called
        self.failUnless(self.auth.request is request)
        self.assertEqual(self.auth.principal_id, 23)
예제 #10
0
    def testUnauthorized(self):
        component.provideAdapter(DummyTemplate, name="default")
        exception = Exception()
        try:
            raise exception
        except:
            pass
        request = TestRequest()
        request.setPrincipal(DummyPrincipal(23))
        u = Unauthorized(exception, request)
        res = u()

        # Make sure that we rendered the expected template
        self.assertEqual("You are not authorized", res)

        # Make sure the response status was set
        self.assertEqual(request.response.getStatus(), 403)

        # check headers that work around squid "negative_ttl"
        self.assertEqual(request.response.getHeader('Expires'),
                         'Mon, 26 Jul 1997 05:00:00 GMT')
        self.assertEqual(request.response.getHeader('Pragma'),
                         'no-cache')
        self.assertEqual(request.response.getHeader('Cache-Control'),
                         'no-store, no-cache, must-revalidate')

        # Make sure the auth utility was called
        self.failUnless(self.auth.request is request)
        self.assertEqual(self.auth.principal_id, 23)
예제 #11
0
 def test_do_GET_minimal(self):
     from sqlalchemy.orm import object_session
     from zope.publisher.browser import TestRequest
     from euphorie.client.model import Risk
     self.loginAsPortalOwner()
     (account, survey, survey_session) = _setup_session(self.portal)
     survey['1'].title = u'Module title.'
     risk = survey['1']['2']
     risk.title = u'Everything is under control.'
     risk.problem_description = u'Not everything under control.'
     risk.description = None
     risk.evaluation_method = 'direct'
     risk.image = None
     request = TestRequest()
     request.survey = survey
     risk = object_session(survey_session).query(Risk).first()
     view = self.View(risk, request)
     response = view.do_GET()
     self.assertEqual(
             set(response),
             set(['id', 'type', 'title', 'module-title',
                   'problem-description', 'show-not-applicable',
                   'evaluation-method', 'present', 'priority', 'comment']))
     self.assertEqual(response['id'], 2)
     self.assertEqual(response['type'], 'risk')
     self.assertEqual(response['title'], u'Everything is under control.')
     self.assertEqual(response['module-title'], u'Module title.')
     self.assertEqual(
             response['problem-description'],
             u'Not everything under control.')
     self.assertEqual(response['show-not-applicable'], False)
     self.assertEqual(response['evaluation-method'], 'direct')
     self.assertEqual(response['present'], None)
     self.assertEqual(response['priority'], u'high')
예제 #12
0
 def testGlobalInVirtualHost(self):
     req = TestRequest()
     req.setVirtualHostRoot(['x', 'y'])
     r = Resource(req)
     req._vh_root = support.site
     r.__parent__ = support.site
     r.__name__ = 'foo'
     self.assertEqual(r(), 'http://127.0.0.1/x/y/@@/foo')
예제 #13
0
 def testURL(self):
     request = TestRequest()
     request._vh_root = support.site
     path = os.path.join(test_directory, 'testfiles')
     files = DirectoryResourceFactory(path, checker, 'test_files')(request)
     files.__parent__ = support.site
     file = files['test.gif']
     self.assertEquals(file(), 'http://127.0.0.1/@@/test_files/test.gif')
예제 #14
0
def lockingSetUp(test):
    placelesssetup.setUp(test)
    z3c.etree.testing.etreeSetup(test)

    # create principal
    participation = TestRequest(environ = {"REQUEST_METHOD": "PUT"})
    participation.setPrincipal(Principal("michael"))
    if queryInteraction() is not None:
        queryInteraction().add(participation)
    else:
        newInteraction(participation)

    events = test.globs["events"] = []
    zope.event.subscribers.append(events.append)

    gsm = zope.component.getGlobalSiteManager()

    gsm.registerAdapter(DemoKeyReference,
                        (IDemo,),
                        zope.app.keyreference.interfaces.IKeyReference)
    gsm.registerAdapter(PhysicallyLocatable, (Demo,))
    gsm.registerAdapter(PhysicallyLocatable, (DemoFolder,))
    gsm.registerAdapter(DemoKeyReference, (IDemoFolder,),
                        zope.app.keyreference.interfaces.IKeyReference)
    gsm.registerAdapter(SiteManagerAdapter,
                        (zope.interface.Interface,), IComponentLookup)
    gsm.registerAdapter(DemoAbsoluteURL,
                        (IDemo, zope.interface.Interface),
                        zope.traversing.browser.interfaces.IAbsoluteURL)
    gsm.registerAdapter(DemoAbsoluteURL,
                        (IDemoFolder, zope.interface.Interface),
                        zope.traversing.browser.interfaces.IAbsoluteURL)

    # register some IDAVWidgets so that we can render the activelock and
    # supportedlock widgets.
    gsm.registerAdapter(z3c.dav.widgets.ListDAVWidget,
                        (zope.schema.interfaces.IList,
                         z3c.dav.interfaces.IWebDAVRequest))
    gsm.registerAdapter(z3c.dav.widgets.ObjectDAVWidget,
                        (zope.schema.interfaces.IObject,
                         z3c.dav.interfaces.IWebDAVRequest))
    gsm.registerAdapter(z3c.dav.widgets.TextDAVWidget,
                        (zope.schema.interfaces.IText,
                         z3c.dav.interfaces.IWebDAVRequest))
    gsm.registerAdapter(z3c.dav.properties.OpaqueWidget,
                        (z3c.dav.properties.DeadField,
                         z3c.dav.interfaces.IWebDAVRequest))
    gsm.registerAdapter(z3c.dav.widgets.TextDAVWidget,
                        (zope.schema.interfaces.IURI,
                         z3c.dav.interfaces.IWebDAVRequest))

    # Need connection to a database to manage locking
    db = test.globs["db"] = ZODB.DB(ZODB.MappingStorage.MappingStorage())
    test.globs["conn"] = db.open()

    # expose these classes to the test
    test.globs["Demo"] = Demo
    test.globs["DemoFolder"] = DemoFolder
예제 #15
0
    def test_hooks(self):

        @implementer(IAdding)
        class Adding(object):
            pass

        adding = Adding()
        self._invoke_add()
        (descriminator, callable, args, kw) = self._context.last_action
        factory = AddViewFactory(*args)
        request = TestRequest()

        request.form.update(dict([
            ("field.%s" % k, v)
            for (k, v) in dict(SampleData.__dict__).items()
            ]))
        request.form[Update] = ''
        view = getMultiAdapter((adding, request), name='addthis')

        # Add hooks to V

        l=[None]

        def add(aself, ob):
            l[0] = ob
            self.assertEqual(
                ob.__dict__,
                {'args': ("bar", "baz"),
                 'kw': {'email': '*****@*****.**'},
                 '_foo': 'foo',
                 })
            return ob

        V.add = add

        V.nextURL = lambda self: 'next'

        try:
            self.assertEqual(view.update(), '')

            self.assertEqual(view.errors, ())

            self.assertEqual(l[0].extra1, "extra1")
            self.assertEqual(l[0].extra2, "extra2")
            self.assertEqual(l[0].name, "foo")
            self.assertEqual(l[0].address, "aa")

            self.assertEqual(request.response.getHeader("Location"), "next")

            # Verify that calling update again doesn't do anything.
            l[0] = None
            self.assertEqual(view.update(), '')
            self.assertEqual(l[0], None)

        finally:
            # Uninstall hooks
            del V.add
            del V.nextURL
예제 #16
0
 def testNull(self):
     container = self.Container({'foo': 42})
     request = TestRequest()
     request.method = 'PUT'
     traverser = self.Traverser(container, request)
     null = traverser.publishTraverse(request, 'bar')
     self.assertEqual(null.__class__, NullResource)
     self.assertEqual(null.container, container)
     self.assertEqual(null.name, 'bar')
예제 #17
0
 def test_recipient_from_request(self):
     request = TestRequest(mail=self.ascii)
     request.form['recipient'] = '*****@*****.**'
     view = getMultiAdapter((self.portal, request), name='mail-inbound')
     self.assertEquals('*****@*****.**', view.recipient())
     request = TestRequest(mail=self.resent)
     request.form['recipient'] = '*****@*****.**'
     view = getMultiAdapter((self.portal, request), name='mail-inbound')
     self.assertEquals('*****@*****.**', view.recipient())
예제 #18
0
 def test_allowable_content_types_ok(self):
     dummy = self.makeDummy()
     request = TestRequest()
     request.form.update(field_values)
     request.form['fieldset'] = 'default'
     dummy.REQUEST = request
     errors = {}
     dummy.validate(REQUEST=request, errors=errors)
     self.assertFalse(errors, errors)
예제 #19
0
 def testGlobal(self):
     req = TestRequest()
     r = Resource(req)
     req._vh_root = support.site
     r.__parent__ = support.site
     r.__name__ = 'foo'
     self.assertEqual(r(), 'http://127.0.0.1/@@/foo')
     r.__name__ = '++resource++foo'
     self.assertEqual(r(), 'http://127.0.0.1/@@/foo')
예제 #20
0
    def test_make_extra_principal(self):
        class MockPrincipal(object):
            id = 'foo'

        request = TestRequest()
        request.setPrincipal(MockPrincipal())
        reporter = SentryAwareLoggingErrorReporting()
        result = reporter.make_extra(request)
        self.assertTrue('sentry.interfaces.User' in result)
        self.assertEqual('foo', result['sentry.interfaces.User']['id'])
예제 #21
0
 def testSelectedFacetValues(self):
     request = TestRequest()
     selected = SearchFacetsView(Dummy(), request).selected
     info = lambda: [(i["title"], i["value"]) for i in selected()]
     request.form["fq"] = 'foo:"xy"'
     self.assertEqual(info(), [("foo", "Title of Xy")])
     request.form["fq"] = ['foo:"x"', 'bar:"y"']
     self.assertEqual(info(), [("foo", "Title of X"), ("bar", "Title of Y")])
     request.form["fq"] = ['foo:"x"', 'bar:"y"', 'bah:"z"']
     self.assertEqual(info(), [("foo", "Title of X"), ("bar", "Title of Y"), ("bah", "Title of Z")])
예제 #22
0
 def test_allowable_content_types_fail(self):
     dummy = self.makeDummy()
     request = TestRequest()
     request.form.update(field_values)
     request.form.update({'imagefield_file': pdf_file})
     request.form['fieldset'] = 'default'
     dummy.REQUEST = request
     errors = {}
     dummy.validate(REQUEST=request, errors=errors)
     self.assertTrue(errors, errors)
예제 #23
0
 def test_raising_with_xmlrpc_request(self):
     # Test ErrorReportingUtility.raising() with an XML-RPC request.
     request = TestRequest()
     directlyProvides(request, IXMLRPCRequest)
     request.getPositionalArguments = lambda: (1, 2)
     utility = ErrorReportingUtility()
     del utility._oops_config.publishers[:]
     try:
         raise ArbitraryException('xyz\nabc')
     except ArbitraryException:
         report = utility.raising(sys.exc_info(), request)
     self.assertEqual("(1, 2)", report['req_vars']['xmlrpc args'])
    def test_validation_visible_fields(self):
        """ we assume that every field is visible """

        dummy = self.makeDummy()
        request = TestRequest()
        alsoProvides(request, IAttributeAnnotatable)
        field_values['fixedpointfield2'] = 'an_error'
        request.form.update(field_values)
        request.form['fieldset'] = 'default'
        errors = {}
        dummy.validate(errors=errors, REQUEST=request)
        self.assertTrue(errors, errors)
 def test___call__(self, IAdapter):
     from DateTime import DateTime
     from Products.ATContentTypes.interfaces.event import IATEvent
     request = TestRequest()
     adapter = getMultiAdapter((self.portal, request), ISearchEventResults)
     request.form = {'start': '2013-05-09'}
     IAdapter().portal_path.return_value = 'PORTAL_PATH'
     adapter(limit=2)
     IAdapter().get_content_listing.assert_called_with(IATEvent,
         end={'query': [DateTime('2013-05-09')], 'range': 'min'},
         b_size=10, sort_on='start', SearchableText='',
         start={'query': [None], 'range': 'max'}, sort_limit=2, b_start=0, path='PORTAL_PATH')
예제 #26
0
    def test_browserAddTheme(self):
        request = TestRequest()
        setDefaultSkin(request)
        view = getMultiAdapter((self.portal, request),
                               name='minaraad_config.html')

        lastId = max([x[0] for x in view.themeManager.themes])

        request.form['theme_name'] = 'blah'
        view._addTheme()

        self.failUnless(view.themeManager.themes[-1] == (lastId + 1, 'blah'))
예제 #27
0
 def test_invalid_input(self):
     import json
     import StringIO
     from zope.publisher.browser import TestRequest
     request = TestRequest()
     request.stdin = StringIO.StringIO('invalid json')
     view = self.JsonView(None, request)
     response = view()
     self.assertEqual(
             json.loads(response),
             {'type': 'error',
              'message': 'Invalid JSON input'})
예제 #28
0
 def testSelectedFacetValues(self):
     request = TestRequest()
     selected = SearchFacetsView(Dummy(), request).selected
     info = lambda: [(i['title'], i['value']) for i in selected()]
     request.form['fq'] = 'foo:"xy"'
     self.assertEqual(info(), [('foo', 'Title of Xy')])
     request.form['fq'] = ['foo:"x"', 'bar:"y"']
     self.assertEqual(info(),
                      [('foo', 'Title of X'), ('bar', 'Title of Y')])
     request.form['fq'] = ['foo:"x"', 'bar:"y"', 'bah:"z"']
     self.assertEqual(info(), [('foo', 'Title of X'), ('bar', 'Title of Y'),
                               ('bah', 'Title of Z')])
예제 #29
0
    def afterSetUp(self):
        """  Set up
        """
        from zope.publisher.browser import TestRequest
        from eea.design.browser.frontpage import Frontpage

        portal = self.portal
        wf = portal.portal_workflow

        # Create the 'spotlight' and 'multimedia' promotion categories:
        self.setRoles(['Manager'])
        portal.SITE.invokeFactory('Folder', id='quicklinks')
        portal.SITE.quicklinks.invokeFactory(
            'Folder', id='spotlight', title=u'Spotlight')
        portal.SITE.quicklinks.invokeFactory(
            'Folder', id='multimedia', title=u'Multimedia')
        portal.SITE.reindexObject()
        portal.SITE.quicklinks.reindexObject()
        portal.SITE.quicklinks.spotlight.reindexObject()
        portal.SITE.quicklinks.multimedia.reindexObject()
        wf.doActionFor(portal.SITE, 'publish')
        wf.doActionFor(portal.SITE.quicklinks, 'publish')
        wf.doActionFor(portal.SITE.quicklinks.spotlight, 'publish')
        wf.doActionFor(portal.SITE.quicklinks.multimedia, 'publish')

        # Also make sure promotion categories with non-ascii titles work:
        portal.SITE.quicklinks.invokeFactory(
            'Folder', id='mat', title=u'Räksmörgås')
        wf.doActionFor(portal.SITE.quicklinks.mat, 'publish')

        # Set up the frontpage:
        portal_properties = getToolByName(portal, 'portal_properties')
        frontpage_properties = getattr(portal_properties,
                                       'frontpage_properties')
        frontpage_properties.manage_changeProperties(
            promotionFolder='/plone/SITE/quicklinks')

        request = TestRequest()
        request.RESPONSE = DummyResponse()
        frontpage = Frontpage(self.portal, request)

        # Create a news item:
        self.setRoles(['Manager'])
        nid = portal.invokeFactory('News Item', id='test')
        item = portal[nid]
        item.setTitle(u'Foobar')
        wf.doActionFor(item, 'publish')

        self.item = item
        self.frontpage = frontpage
        self.request = request
예제 #30
0
 def test_survey_info_filter_by_language(self):
     from zope.publisher.browser import TestRequest
     from euphorie.content.survey import Survey
     from euphorie.client.sector import ClientSector
     sector = ClientSector(id='ict', title=u'ICT')
     sector['gaming'] = Survey(id='gaming', title=u'Gaming',
             language='nl')
     request = TestRequest()
     request.form['language'] = 'en'
     response = self.View(sector, request).do_GET()
     self.assertEqual(len(response['surveys']), 0)
     request.form['language'] = 'nl'
     response = self.View(sector, request).do_GET()
     self.assertEqual(len(response['surveys']), 1)
예제 #31
0
 def makeRequest(self, cookie):
     session = self.folder.pas.session
     return TestRequest(**{session.cookie_name: cookie})
예제 #32
0
 def test_show_paste(self):
     view = ContentsView(self.folder, TestRequest())
     self.assertFalse(view.show_paste())
예제 #33
0
    def save_images(self, context):
        """Save images from ZODB to temp directory
        """
        portal = getSite()
        portal_url = portal.absolute_url()
        if not portal_url.endswith('/'):
            portal_url += '/'

        portal_path = '/'.join(portal.getPhysicalPath())

        reference_tool = getToolByName(portal, 'reference_catalog')
        mtool = getToolByName(portal, 'portal_membership')
        for filename, image in self.images:
            size = None

            # Traverse methods mess with unicode
            if type(image) is unicode:
                image = str(image)
            path = image.replace(portal_url, '')

            item = None
            # using uid
            if 'resolveuid' in image:
                # uid is the traversed value coming after "resolveuid/"
                resolveuidpath = image.split('/')
                resolveuid_idx = resolveuidpath.index('resolveuid')
                try:
                    uuid = resolveuidpath[resolveuid_idx + 1]
                except IndexError:
                    logger.error("Failed to get image uid from %s", image)
                    continue

                item = reference_tool.lookupObject(uuid)

                if len(resolveuidpath) >= resolveuid_idx + 2:
                    size = resolveuidpath[resolveuid_idx + 2]

                logger.debug("Get image from uid %s", uuid)

            if not item:
                # relative url
                try:
                    item = context.restrictedTraverse(image)
                    logger.debug("Get image from context")
                except Unauthorized:
                    logger.warning(
                        "Unauthorized to get image from context path %s", item)
                except:
                    logger.debug("Failed to get image from context path %s",
                                 image)

            if not item:
                # plone.app.imaging
                if '@@images' in path and AnnotationStorage:
                    context_path, images_str, uid_filename = path.rsplit(
                        '/', 2)
                    image_context = portal.restrictedTraverse(context_path)
                    uid, ext = uid_filename.rsplit('.', 1)
                    storage = AnnotationStorage(image_context)
                    info = storage.get(uid)
                    if info is not None:
                        request = TestRequest()
                        scale_view = ImageScale(image_context, request, **info)
                        item = scale_view.__of__(image_context)

            if not item:
                # absolute url
                image_path = '/'.join((portal_path, path))
                try:
                    item = portal.restrictedTraverse(image_path)
                    logger.debug("Get image from portal")
                except Unauthorized:
                    logger.warning("Unauthorized to get from context path %s",
                                   image_path)
                except:
                    logger.error("Failed to get image from portal path %s",
                                 image_path)
                    continue

            if not mtool.checkPermission('View', item):
                logger.warning("Unauthorized to get image %s", item)
                continue

            if item and size:
                try:
                    item = item.restrictedTraverse(size)
                except Unauthorized:
                    logger.warning("Unauthorized to get size %s from image %s",
                                   size, image)
                except:
                    logger.error("Failed to get size %s from image %s", size,
                                 image)
                    pass

            # Eek, we should put an adapter for various image providers (overkill ?).
            data = get_image_data(item)

            if data:
                _write_file(data, self.fsinfo, filename)
        return
예제 #34
0
 def test_get_ids(self):
     request = TestRequest(form={'form.select_ids': ['DummyItem1',
                                                     'DummyItem3']})
     view = ContentsView(self.folder, request)
     self.assertEqual(view._get_ids(), ['DummyItem1', 'DummyItem3'])
예제 #35
0
 def testNoContextInformation(self):
     request = TestRequest()
     view = getMultiAdapter((None, request), name='absolute_url')
     self.assertEqual(str(view), 'http://127.0.0.1')
     self.assertEqual(absoluteURL(None, request), 'http://127.0.0.1')
예제 #36
0
    def test_interface(self):
        request = TestRequest()
        content = contained(TrivialContent(), Root(), name='a')
        view = getMultiAdapter((content, request), name='absolute_url')

        verifyObject(IAbsoluteURL, view)
예제 #37
0
 def test_list_batch_items(self):
     view = ContentsView(self.folder, TestRequest())
     view._getNavigationVars = lambda: {}
     self.assertEqual(view.listBatchItems(), ())
예제 #38
0
 def test_up_info(self):
     view = ContentsView(self.folder, TestRequest())
     self.assertEqual({'url': u'', 'id': u'Root', 'icon': u''},
                      view.up_info())
예제 #39
0
 def test_view(self):
     view = ContentsView(self.folder, TestRequest())
     self.assertTrue(IBrowserPublisher.providedBy(view))
예제 #40
0
 def test_getNavigationURL(self):
     url = 'http://example.com/folder_contents'
     self._make_batch()
     view = ContentsView(self.folder, TestRequest(ACTUAL_URL=url))
     view._getNavigationVars = lambda: {}
     self.assertTrue(view._getNavigationURL(25) == url + "?form.b_start=25")
예제 #41
0
 def test_folder_not_has_local(self):
     self._make_one()
     view = FolderView(self.folder, TestRequest())
     self.assertFalse(view.has_local())
예제 #42
0
 def test_folder_has_local(self):
     self._make_one('local_pt')
     view = FolderView(self.folder, TestRequest())
     self.assertTrue(view.has_local())
예제 #43
0
 def testNotFound(self):
     from zope.app.publisher.browser.resources import Resources
     from zope.publisher.interfaces import NotFound
     request = TestRequest()
     view = Resources(None, request)
     self.assertRaises(NotFound, view.publishTraverse, request, 'test')
예제 #44
0
파일: log.py 프로젝트: xispa/senaite.core
    def folderitems(self):
        rc = getToolByName(self.context, REFERENCE_CATALOG)
        wf = getToolByName(self.context, 'portal_workflow')
        pr = getToolByName(self.context, 'portal_repository')

        isVersionable = pr.isVersionable(aq_inner(self.context))
        try:
            review_history = wf.getInfoFor(self.context, 'review_history')
            review_history = list(review_history)
            review_history.reverse()
        except WorkflowException:
            review_history = []
        items = []
        for entry in review_history:
            # this folderitems doesn't subclass from the bika_listing.py
            # so we create items from scratch
            review_state = entry.get('review_state')
            state_title = wf.getTitleForStateOnType(review_state,
                                                    self.context.portal_type)
            item = {
                'obj': self.context,
                'id': self.context.id,
                'uid': self.context.UID(),
                'title': self.context.title_or_id(),
                'type_class': '',
                'url': self.context.absolute_url(),
                'relative_url': self.context.absolute_url(),
                'view_url': self.context.absolute_url(),
                'path': "/".join(self.context.getPhysicalPath()),
                'replace': {},
                'before': {},
                'after': {},
                'choices': {},
                'class': {},
                'state_class': '',
                'allow_edit': [],
                'required': [],
                'Version':
                isVersionable and self.context.get('version_id', '') or '0',
                'Date': self.ulocalized_time(entry.get('time')),
                'sortable_date': entry.get('time'),
                'User': entry.get('actor'),
                'Action': entry.get('action') and entry.get('action')
                or 'Create',
                'Description': "review state: %s" % state_title,
            }
            items.append(item)

        if isVersionable:
            request = TestRequest()
            chv = ContentHistoryViewlet(self.context, request, None, None)
            chv.navigation_root_url = chv.site_url = 'http://localhost:8080/bikas'
            version_history = chv.revisionHistory()
        else:
            version_history = []

        for entry in version_history:
            # this folderitems doesn't subclass from the bika_listing.py
            # so we create items from scratch
            # disregard the first entry of version history, as it is
            # represented by the first entry in review_history
            if not entry.get('version_id'):
                continue
            item = {
                'obj': self.context,
                'id': self.context.id,
                'uid': self.context.UID(),
                'title': self.context.title_or_id(),
                'type_class': '',
                'url': self.context.absolute_url(),
                'relative_url': self.context.absolute_url(),
                'view_url': self.context.absolute_url(),
                'path': "/".join(self.context.getPhysicalPath()),
                'replace': {},
                'before': {},
                'after': {},
                'choices': {},
                'class': {},
                'state_class': '',
                'allow_edit': [],
                'required': [],
                'Version': entry.get('version_id'),
                'Date': self.ulocalized_time(DateTime(entry.get('time'))),
                'sortable_date': entry.get('time'),
                'User': entry.get('actor').get('fullname'),
                'Action': entry.get('action') and entry.get('action')
                or 'Create',
                'Description': entry.get('comments'),
            }
            items.append(item)

        items = sorted(items, key=itemgetter('sortable_date'))
        items.reverse()

        return items
예제 #45
0
 def testCalendarView(self):
     view = getMultiAdapter((self.folder, TestRequest()), name='ics_view')
     view.update()
     self.assertEqual(len(view.events), 2)
     self.assertEqual(sorted([e.Title for e in view.events]),
                      ['Plone Conf 2007', 'Plone Conf 2008'])
 def _get_request_interfaces(self):
     request = TestRequest()
     notify(BeforeTraverseEvent(self.portal, request))
     iro = list(request.__provides__.__iro__)
     return iro
예제 #47
0
 def testVirtualHostingWithoutContextInformation(self):
     request = TestRequest()
     request._vh_root = contained(TrivialContent(), Root(), name='a')
     view = getMultiAdapter((None, request), name='absolute_url')
     self.assertEqual(str(view), 'http://127.0.0.1')
     self.assertEqual(absoluteURL(None, request), 'http://127.0.0.1')
    def test_Shimadzu_NexeraLCMS8050Import(self):
        pc = getToolByName(self.portal, 'portal_catalog')
        workflow = getToolByName(self.portal, 'portal_workflow')
        arimport = self.addthing(self.client, 'ARImport')
        arimport.unmarkCreationFlag()
        arimport.setFilename("test1.csv")
        arimport.setOriginalFile("""
Header,      File name,  Client name,  Client ID, Contact,     CC Names - Report, CC Emails - Report, CC Names - Invoice, CC Emails - Invoice, No of Samples, Client Order Number, Client Reference,,
Header Data, test1.csv,  Happy Hills,  HH,        Rita Mohale,                  ,                   ,                    ,                    , 10,            HHPO-001,                            ,,
Batch Header, id,       title,     description,    ClientBatchID, ClientBatchComment, BatchLabels, ReturnSampleToClient,,,
Batch Data,   B15-0123, New Batch, Optional descr, CC 201506,     Just a batch,                  , TRUE                ,,,
Samples,    ClientSampleID,    SamplingDate,DateSampled,Sampler,SamplePoint,SampleMatrix,SampleType,ContainerType,ReportDryMatter,Priority,Total number of Analyses or Profiles,Price excl Tax,CAL1,,,,MicroBio,,
Analysis price,,,,,,,,,,,,,,
"Total Analyses or Profiles",,,,,,,,,,,,,9,,,
Total price excl Tax,,,,,,,,,,,,,,
"Sample 1", HHS14001,          3/9/2014,    3/9/2014,,Toilet,     Liquids,     Water,     Cup,          0,              Normal,  1,                                   0,             0,0,0,0,0,1
        """)

        # check that values are saved without errors
        arimport.setErrors([])
        arimport.save_header_data()
        arimport.save_sample_data()
        arimport.create_or_reference_batch()
        errors = arimport.getErrors()
        if errors:
            self.fail("Unexpected errors while saving data: " + str(errors))
        # check that batch was created and linked to arimport without errors
        if not pc(portal_type='Batch'):
            self.fail("Batch was not created!")
        if not arimport.schema['Batch'].get(arimport):
            self.fail("Batch was created, but not linked to ARImport.")

        # the workflow scripts use response.write(); silence them
        arimport.REQUEST.response.write = lambda x: x

        # check that validation succeeds without any errors
        workflow.doActionFor(arimport, 'validate')
        state = workflow.getInfoFor(arimport, 'review_state')
        if state != 'valid':
            errors = arimport.getErrors()
            self.fail('Validation failed!  %s.Errors: %s' %
                      (arimport.id, errors))

        # Import objects and verify that they exist
        workflow.doActionFor(arimport, 'import')
        state = workflow.getInfoFor(arimport, 'review_state')
        if state != 'imported':
            errors = arimport.getErrors()
            self.fail('Importation failed!  %s.Errors: %s' %
                      (arimport.id, errors))

        bc = getToolByName(self.portal, 'bika_catalog')
        ars = bc(portal_type='AnalysisRequest')
        ar = ars[0]
        api.content.transition(obj=ar.getObject(), transition='receive')
        transaction.commit()
        #Testing Import for Instrument
        path = os.path.dirname(__file__)
        filename = '%s/files/nexera.csv' % path
        if not os.path.isfile(filename):
            self.fail("File %s not found" % filename)
        data = open(filename, 'r').read()
        file = FileUpload(TestFile(cStringIO.StringIO(data)))
        request = TestRequest()
        request = TestRequest(form=dict(submitted=True,
                                        artoapply='received',
                                        override='nooverride',
                                        file=file,
                                        sample='requestid',
                                        instrument=''))
        context = self.portal
        results = Import(context, request)
        transaction.commit()
        text = 'Import finished successfully: 1 ARs and 1 results updated'
        if text not in results:
            self.fail("AR Import failed")
        browser = self.getBrowser(loggedIn=True)
        browser.open(ar.getObject().absolute_url() + "/manage_results")
        content = browser.contents
        if '0.025' not in content:
            self.fail("AR Result did not get updated")
예제 #49
0
 def testBadObject(self):
     request = TestRequest()
     view = getMultiAdapter((42, request), name='absolute_url')
     self.assertRaises(TypeError, view.__str__)
     self.assertRaises(TypeError, absoluteURL, 42, request)
예제 #50
0
 def test_validate_items(self):
     """Cannot validate forms without widgets"""
     view = ContentsView(self.folder, TestRequest())
     self.assertRaises(AttributeError,
                       view.validate_items, "", {'foo': 'bar'})
예제 #51
0
from zope.schema import Field, Int, accessors
from zope.schema.interfaces import IField, IInt

from zope.app.testing import ztapi

from zope.formlibwidget import Widget
from zope.formlibwidget.interfaces import IWidget, IInputWidget, IDisplayWidget
from zope.formlibwidget.interfaces import ConversionError, InputErrors, WidgetsError
from zope.formlibwidget.interfaces import IWidgetFactory
from zope.formlibwidget.utility import no_value, setUpWidget, setUpWidgets
from zope.formlibwidget.utility import setUpEditWidgets, setUpDisplayWidgets
from zope.formlibwidget.utility import getWidgetsData, viewHasInput
from zope.formlibwidget.utility import applyWidgetsChanges
from zope.formlibwidget.tests import utils

request = TestRequest()

class IFoo(IField):
    pass
    
class Foo(Field):
    implements(IFoo)
    
class IBar(IField):
    pass
    
class Bar(Field):
    implements(IBar)

class IBaz(IInt):
    pass
예제 #52
0
def geteventobject(principal):
    myevent = TestRequest()
    myevent.setPrincipal(principal)
    return myevent
예제 #53
0
    def test_display_editform(self):
        foo = RadioTest()
        request = TestRequest()

        # display edit view
        html = Form(foo, request)()

        # S3
        self.assert_(patternExists('<select .* name="form.s3".*>', html))
        self.assert_(
            patternExists('<option selected="selected" value="">', html))
        self.assert_(patternExists('<option value="Bob">', html))
        self.assert_(patternExists('<option value="is">', html))
        self.assert_(patternExists('<option value="Your">', html))
        self.assert_(patternExists('<option value="Uncle">', html))

        # S4
        joined_body = "".join(html.split("\n"))
        self.failIf(
            patternExists('<select.*name="form.s4".*>.*<option.*value="".*>',
                          joined_body))
        self.assert_(patternExists('<select .* name="form.s4".*>', html))
        self.assert_(
            patternExists('<option selected="selected" value="1">', html))
        self.assert_(patternExists('<option value="2">', html))
        self.assert_(patternExists('<option value="3">', html))

        request = TestRequest()
        request.form['form.s3'] = u'Bob'
        request.form['form.s4'] = u'2'
        request.form['form.actions.apply'] = u''

        # display edit view
        html = Form(foo, request)()

        self.assert_(
            patternExists('<option selected="selected" value="Bob">', html))
        self.assert_(
            patternExists('<option selected="selected" value="2">', html))

        html = Form(foo, request)()
        self.assert_(
            patternExists('<option selected="selected" value="Bob">', html))
        self.assert_(
            patternExists('<option selected="selected" value="2">', html))

        request = TestRequest()
        request.form['form.s3'] = u''
        request.form['form.actions.apply'] = u''

        html = Form(foo, request)()
        self.assert_(
            patternExists('<option selected="selected" value="">', html))
        self.assert_(
            patternExists('<option selected="selected" value="2">', html))

        request = TestRequest()
        html = Form(foo, request)()

        self.assert_(
            patternExists('<option selected="selected" value="">', html))
예제 #54
0
 def setUp(self):
     self.setUpContent()
     self.request = TestRequest()
     self.widget = self._WidgetFactory(self.field, self.field.value_type,
                                       self.request)
     ztapi.browserViewProviding(ITextLine, DisplayWidget, IDisplayWidget)
예제 #55
0
import zope.interface
import md5
from interfaces import IMainSnippetManager
from Products.ZenUI3.utils.javascript import JavaScriptSnippetManager,\
    JavaScriptSnippet, SCRIPT_TAG_TEMPLATE
from Products.ZenUI3.browser.interfaces import IJavaScriptSrcViewlet,\
    IJavaScriptBundleViewlet, IJavaScriptSrcManager
from Products.Five.viewlet.viewlet import ViewletBase
from Products.ZenUI3.navigation.manager import WeightOrderedViewletManager
from Products.ZenUtils.extdirect.zope.metaconfigure import allDirectRouters
from zope.publisher.browser import TestRequest
from zope.component import getAdapter
from Products.ZenModel.ZVersion import VERSION
from Products.Zuul.decorators import memoize

dummyRequest = TestRequest()


@memoize
def getPathModifiedTime(path):
    """
    This method takes a js request path such as /++resources++zenui/zenoss/file.js and
    returns the last time the file was modified.
    """
    if "++resource++" in path:
        identifier = path.split('/')[1].replace("++resource++", "")
        filePath = path.replace("/++resource++" + identifier, "")
        resource = getAdapter(dummyRequest, name=identifier)
        fullPath = resource.context.path + filePath
        if os.path.exists(fullPath):
            return os.path.getmtime(fullPath)
예제 #56
0
 def test_show_basic(self):
     self._make_one()
     view = ContentsView(self.folder, TestRequest())
     view._getNavigationVars = lambda: {}
     self.assertTrue(view.show_basic())
예제 #57
0
 def testEmptyFacetFieldWithZeroCounts(self):
     fields = dict(foo={'foo': 0, 'bar': 0})
     results = Dummy(facet_counts=dict(facet_fields=fields))
     view = SearchFacetsView(Dummy(), TestRequest())
     view.kw = dict(results=results)
     self.assertEqual(view.facets(), [])
예제 #58
0
 def test_getFormValue_w_default(self):
     field = Text(__name__='foo', title=u"Foo Title", default=u"def")
     request = TestRequest()
     widget = self._WidgetFactory(field, request)
     self.assertEqual(widget._getFormValue(), u'def')
예제 #59
0
 def test_getNavigationURL(self):
     url = 'http://example.com/view'
     self._make_batch()
     view = FolderView(self.folder, TestRequest(ACTUAL_URL=url))
     self.assertEqual(view._getNavigationURL(25), url + "?b_start:int=25")
예제 #60
0
 def setUp(self):
     self.request = TestRequest()
     setRequest(self.request)
     self.portal = self.layer['portal']
     login(self.portal, TEST_USER_NAME)
     setRoles(self.portal, TEST_USER_ID, ['Manager'])