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())
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())
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)
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)
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)
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()
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)
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)
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)
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'))
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)
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)
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)
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)
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)
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)
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')
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)
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)
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)
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()
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)
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)
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)
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)
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)
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)
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)