Exemple #1
0
 def test_copyable(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     self.failUnless(copier.copyable())
Exemple #2
0
 def test_moveable(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     mover = IObjectMover(file)
     self.failUnless(mover.moveable())
Exemple #3
0
 def test_movefolderfromroot2(self):
     root = self.rootFolder
     target = traverse(root, '/folder2/folder2_1/folder2_1_1')
     source = traverse(root, '/folder1')
     mover = IObjectMover(source)
     mover.moveTo(target)
     self.failUnless('folder1' in target)
Exemple #4
0
 def test_movefoldertosibling(self):
     root = self.rootFolder
     target = traverse(root, '/folder2')
     source = traverse(root, '/folder1/folder1_1')
     mover = IObjectMover(source)
     mover.moveTo(target)
     self.failUnless('folder1_1' in target)
Exemple #5
0
    def test_local_utilities(self):
        gsm = zapi.getGlobalSiteManager()
        gsm.provideUtility(IInterface, Foo("global"))
        gsm.provideUtility(IInterface, Foo("global bob"), name="bob")

        sm = zapi.getSiteManager(self.rootFolder)
        default = traverse(self.rootFolder, "++etc++site/default")
        default['foo'] = Foo("local")
        foo = default['foo']
        cm = default.registrationManager

        for name in ('', 'bob'):
            registration = UtilityRegistration(name, IInterface, foo)
            cname = cm.addRegistration(registration)
            registration = traverse(cm, cname)

            gout = name and "foo global "+name or "foo global"
            self.assertEqual(sm.queryUtility(IInterface, name).foo(), gout)

            registration.status = ActiveStatus
            self.assertEqual(
                sm.queryUtility(IInterface, name).foo(), "foo local")

            registration.status = InactiveStatus
            self.assertEqual(sm.queryUtility(IInterface, name).foo(), gout)
Exemple #6
0
    def test_ensureUtility(self):
        self.createRFAndSM()

        db, connection, root, root_folder = getInformationFromEvent(
            EventStub(self.db))

        # TODO: check EventSub
        root_folder = self.root_folder
        for i in range(2):
            cx = self.db.open()
            name = ensureUtility(root_folder, IErrorReportingUtility,
                                 'ErrorReporting', ErrorReportingUtility,
                                 'ErrorReporting')

            if i == 0:
                self.assertEqual(name, 'ErrorReporting')
            else:
                self.assertEqual(name, None)

            root = cx.root()
            root_folder = root[ZopePublication.root_name]

            package_name = '/++etc++site/default'
            package = traverse(self.root_folder, package_name)

            self.assert_(IErrorReportingUtility.providedBy(
                traverse(package, 'ErrorReporting')))
            transaction.commit()

        cx.close()
Exemple #7
0
 def test_copyfolderfromroot2(self):
     root = self.rootFolder
     target = traverse(root, '/folder2/folder2_1/folder2_1_1')
     source = traverse(root, '/folder1')
     copier = IObjectCopier(source)
     copier.copyTo(target)
     self.failUnless('folder1' in target)
Exemple #8
0
 def test_movefoldertosame2(self):
     # Should be a noop, because "moving" to same location
     root = self.rootFolder
     target = traverse(root, '/folder1/folder1_1')
     source = traverse(root, '/folder1/folder1_1/folder1_1_1')
     mover = IObjectMover(source)
     mover.moveTo(target)
     self.failUnless('folder1_1_1' in target)
     self.assertEquals(len(target), 2)
Exemple #9
0
 def test_movetosamewithnewname(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     mover = IObjectMover(file)
     mover.moveTo(container, 'file2')
     self.failIf('file1' in container)
     self.failUnless('file2' in container)
Exemple #10
0
 def test_copyableTo(self):
     #  A file should be copyable to a folder that has an
     #  object with the same id.
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     self.failUnless(copier.copyableTo(container, 'file1'))
Exemple #11
0
 def test_copytosamewithnewname(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     copier.copyTo(container, 'file2')
     self.failUnless('file1' in container)
     self.failUnless('file2' in container)
Exemple #12
0
 def test_movetosame(self):
     # Should be a noop, because "moving" to same location
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     mover = IObjectMover(file)
     mover.moveTo(container, 'file1')
     self.failUnless('file1' in container)
     self.assertEquals(len(container), 3)
Exemple #13
0
 def test_movetoother(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     target = traverse(root, 'folder2')
     file = traverse(root, 'folder1/file1')
     mover = IObjectMover(file)
     mover.moveTo(target, 'file1')
     self.failIf('file1' in container)
     self.failUnless('file1' in target)
Exemple #14
0
 def test_copytoother(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     target = traverse(root, 'folder2')
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     copier.copyTo(target, 'file1')
     self.failUnless('file1' in container)
     self.failUnless('file1' in target)
Exemple #15
0
 def testCutFolder3(self):
     container = traverse(self.rootFolder, '/folder1/folder1_1')
     target = traverse(self.rootFolder, '/folder2/folder2_1')
     fc = self._TestView__newView(container)
     tg = self._TestView__newView(target)
     ids = ['folder1_1_1']
     fc.request.form['ids'] = ids
     fc.cutObjects()
     tg.pasteObjects()
     self.failIf('folder1_1_1' in container)
     self.failIf('folder1_1_1' not in target)
Exemple #16
0
 def test_copytootherwithnamecollision(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     target = traverse(root, 'folder2')
     target['file1'] = File()
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     copier.copyTo(target, 'file1')
     # we do it twice, just to test auto-name generation
     copier.copyTo(target, 'file1')
     self.failUnless('file1' in container)
     self.failUnless('file1' in target)
     self.failUnless('file1-2' in target)
     self.failUnless('file1-3' in target)
Exemple #17
0
    def test_rollback_on_error(self):
        """Tests rollback when a widget error occurs.
        
        When one or more errors are generated by input widgets, the current
        transaction should be rolledback to ensure object integrity.
        """
        self.getRootFolder()['foo'] = Foo()
        self.getRootFolder()['foo'].required_text = u'initial required'
        self.getRootFolder()['foo'].optional_text = u'initial optional'
        transaction.commit()

        # submit form with legal value for optional_text and invalid for 
        # required_text
        response = self.publish('/foo/edit.html', form={
            'field.optional_text': u'',
            'field.required_text': u'',
            'UPDATE_SUBMIT': ''})
        self.assertEqual(response.getStatus(), 200)

        # confirm that one errors exists
        self.assert_(patternExists(
            'There are <strong>1</strong> input errors.', response.getBody()))

        # confirm that foo was not modified
        foo = traverse(self.getRootFolder(), 'foo')
        self.assertEquals(foo.required_text, u'initial required')
        self.assertEquals(foo.optional_text, u'initial optional')
Exemple #18
0
    def test_alternative_missing_value(self):
        """Tests the addition of an empty value at the top of the dropdown
        that, when selected, updates the field with field.missing_value.
        """

        self.getRootFolder()['test'] = IntTest2() # note alt. class
        transaction.commit()

        # display edit form
        response = self.publish('/test/edit.html')
        self.assertEqual(response.getStatus(), 200)

        # confirm that i1 is has a blank item at top with value=""
        self.assert_(patternExists(
            '<select id="field.i1" name="field.i1" .*>', response.getBody()))
        self.assert_(patternExists(
            '<option value="">.*</option>', response.getBody()))
        self.assert_(patternExists(
            '<option selected="selected" value="10">10</option>',
            response.getBody()))

        # submit form as if top item is selected
        response = self.publish('/test/edit.html', form={
            'UPDATE_SUBMIT' : '',
            'field.i1-empty-marker' : '1'})

        self.assertEqual(response.getStatus(), 200)
        self.assert_(updatedMsgExists(response.getBody()))

        # confirm new value is -1 -- i1.missing_value
        object = traverse(self.getRootFolder(), 'test')
        self.assertEqual(object.i1, -1)
Exemple #19
0
    def children_utility(self, container):
        """Return an XML document that contains the children of an object."""
        result = []

        keys = list(container.keys())

        # include the site manager
        keys.append(u'++etc++site')

        for name in keys:

            # Only include items we can traverse to
            item = traverse(container, name, None)
            if item is None:
                continue

            iconUrl = self.getIconUrl(item)
            item_len = self.getLengthOf(item)
            if item_len >= 0:
                result.append(xmlEscape(
                    u'<collection name=%s length=%s icon_url=%s/>',
                    name, item_len, iconUrl))
            else:
                result.append(xmlEscape(
                    u'<item name=%s icon_url=%s/>',
                    name, iconUrl))

        return u' '.join(result)
Exemple #20
0
 def testCutFolder(self):
     container = traverse(self.rootFolder, 'folder1')
     fc = self._TestView__newView(container)
     ids = ['folder1_1']
     fc.request.form['ids'] = ids
     fc.cutObjects()
     fc.pasteObjects()
     self.failIf('folder1_1' not in container)
    def test_missing_value(self):
        # Note: checkbox widget doesn't support a missing value. This
        # test confirms that one cannot set a Bool field to None.

        self.getRootFolder()["test"] = BoolTest()
        transaction.commit()

        # confirm default value of b1 is True
        object = traverse(self.getRootFolder(), "test")
        self.assertEqual(object.b1, True)

        # submit missing for b1
        response = self.publish("/test/edit.html", form={"UPDATE_SUBMIT": "", "field.b1": CheckBoxWidget._missing})
        self.assertEqual(response.getStatus(), 200)
        self.assert_(updatedMsgExists(response.getBody()))

        # confirm b1 is not missing
        object = traverse(self.getRootFolder(), "test")
        self.assert_(object.b1 != Bool.missing_value)
Exemple #22
0
 def test_notify(self):
     for setup in (lambda: None), self.createRootFolder, self.createRFAndSM:
         setup()
     bootStrapSubscriber(EventStub(self.db))
     cx = self.db.open()
     root = cx.root()
     root_folder = root.get(ZopePublication.root_name, None)
     self.assert_(IRootFolder.providedBy(root_folder))
     package_name = '/++etc++site/default'
     package = traverse(root_folder, package_name)
     cx.close()
Exemple #23
0
    def test_submit_text(self):
        self.getRootFolder()['test'] = FileTest()
        transaction.commit()
        object = traverse(self.getRootFolder(), 'test')
        self.assert_(object.f1 is None)
        self.assertEqual(object.f2, 'foo')

        # submit a sample text file
        response = self.publish('/test/edit.html', form={
            'UPDATE_SUBMIT' : '',
            'field.f1' : self.sampleTextFile,
            'field.f2' : self.sampleTextFile,
            'field.f1.used' : '',
            'field.f2.used' : '' })
        self.assertEqual(response.getStatus(), 200)
        self.assert_(updatedMsgExists(response.getBody()))

        # check new values in object
        object = traverse(self.getRootFolder(), 'test')
        self.assertEqual(object.f1, self.sampleText)
        self.assertEqual(object.f2, self.sampleText)
Exemple #24
0
 def testCutPaste(self):
     container = traverse(self.rootFolder, 'folder1')
     fc = self._TestView__newView(container)
     ids=['document1', 'document2']
     for id in ids:
         document = Document()
         container[id] = document
     fc.request.form['ids'] = ids
     fc.cutObjects()
     fc.pasteObjects()
     self.failIf('document1' not in container)
     self.failIf('document2' not in container)
Exemple #25
0
 def testRename(self):
     container = traverse(self.rootFolder, 'folder1')
     fc = self._TestView__newView(container)
     ids=['document1', 'document2']
     for id in ids:
         document = Document()
         container[id] = document
     fc.request.form.update({'rename_ids': ids,
                             'new_value': ['document1_1', 'document2_2']
                             })
     fc.renameObjects()
     self.failIf('document1_1' not in container)
     self.failIf('document1' in container)
Exemple #26
0
    def test_display_editform(self):
        self.getRootFolder()['test'] = DatetimeTest()
        transaction.commit()
        object = traverse(self.getRootFolder(), 'test')

        # display edit view
        response = self.publish('/test/edit.html')
        self.assertEqual(response.getStatus(), 200)

        # confirm date values in form with actual values
        self.assertEqual(getDateForField('d1', response.getBody()), object.d1)
        self.assertEqual(getDateForField('d2', response.getBody()), object.d2)
        self.assert_(getDateForField('d3', response.getBody()) is None)
    def test_submit_editform(self):
        self.getRootFolder()["test"] = BoolTest()
        transaction.commit()

        # submit edit view
        response = self.publish("/test/edit.html", form={"UPDATE_SUBMIT": "", "field.b1": "", "field.b2": "on"})
        self.assertEqual(response.getStatus(), 200)
        self.assert_(updatedMsgExists(response.getBody()))

        # check new values in object
        object = traverse(self.getRootFolder(), "test")
        self.assertEqual(object.b1, False)
        self.assertEqual(object.b2, True)
Exemple #28
0
    def test_submit_editform(self):
        self.getRootFolder()['foo'] = Foo()
        transaction.commit()

        # submit edit view
        response = self.publish('/foo/edit.html', form={
            'UPDATE_SUBMIT' : '',
            'field.bar' : 'off'})
        self.assertEqual(response.getStatus(), 200)
        self.assert_(updatedMsgExists(response.getBody()))

        # check new values in object
        object = traverse(self.getRootFolder(), 'foo')
        self.assertEqual(object.bar, False)
Exemple #29
0
    def test_omitted_value(self):
        self.getRootFolder()['test'] = FloatTest()
        transaction.commit()

        # confirm default values
        object = traverse(self.getRootFolder(), 'test')
        self.assert_(object.f1 is None)
        self.assertEqual(object.f2, 1.1)
        self.assertEqual(object.f3, 2.1)

        # submit change with only f2 present -- note that required
        # field f1 is omitted, which should not cause a validation error
        response = self.publish('/test/edit.html', form={
            'UPDATE_SUBMIT' : '',
            'field.f2' : '' })
        self.assertEqual(response.getStatus(), 200)
        self.assert_(updatedMsgExists(response.getBody()))

        # check new value in object
        object = traverse(self.getRootFolder(), 'test')
        self.assert_(object.f1 is None)
        self.assert_(object.f2 is None)
        self.assertEqual(object.f3, 2.1)
Exemple #30
0
    def test_omitted_value(self):
        self.getRootFolder()['test'] = DatetimeTest()
        transaction.commit()

        # remember default values
        object = traverse(self.getRootFolder(), 'test')
        d1 = object.d1
        d2 = object.d2
        self.assert_(d2 is not None)
        d3 = object.d3

        # submit change with only d2 present -- note that required
        # field d1 is omitted, which should not cause a validation error
        response = self.publish('/test/edit.html', form={
            'UPDATE_SUBMIT' : '',
            'field.d2' : '' })
        self.assertEqual(response.getStatus(), 200)
        self.assert_(updatedMsgExists(response.getBody()))

        # check new value in object
        object = traverse(self.getRootFolder(), 'test')
        self.assertEqual(object.d1, d1)
        self.assert_(object.d2 is None)
        self.assertEqual(object.d3, d3)