def testUpgradeAllProposed(self): request = self.app.REQUEST oldsite = getattr(self.app, self._SITE_ID) stool = oldsite.portal_setup profile_id = 'Products.CMFDefault:default' upgrades = [] for upgrade_info in stool.listUpgrades(profile_id): if isinstance(upgrade_info, list): for info in upgrade_info: if info['proposed']: upgrades.append(info['id']) continue if upgrade_info['proposed']: upgrades.append(upgrade_info['id']) request.form['profile_id'] = profile_id request.form['upgrades'] = upgrades stool.manage_doUpgrades(request) self.assertEqual(stool.getLastVersionForProfile(profile_id), ('2', '2')) newSecurityManager(None, UnrestrictedUser('god', '', ['Manager'], '')) setSite(self.app.site) expected_export = self.app.site.portal_setup.runAllExportSteps() setSite(oldsite) upgraded_export = stool.runAllExportSteps() expected = TarballImportContext(stool, expected_export['tarball']) upgraded = TarballImportContext(stool, upgraded_export['tarball']) diff = stool.compareConfigurations(upgraded, expected) self.assertEqual(diff, '', diff)
def _getImportContext(self, context_id, should_purge=None, archive=None): """ Crack ID and generate appropriate import context. """ encoding = self.getEncoding() if context_id is not None: if context_id.startswith('profile-'): context_id = context_id[len('profile-'):] info = _profile_registry.getProfileInfo(context_id) if info.get('product'): path = os.path.join(_getProductPath(info['product']), info['path']) else: path = info['path'] if should_purge is None: should_purge = (info.get('type') != EXTENSION) return DirectoryImportContext(self, path, should_purge, encoding) elif context_id.startswith('snapshot-'): context_id = context_id[len('snapshot-'):] if should_purge is None: should_purge = True return SnapshotImportContext(self, context_id, should_purge, encoding) if archive is not None: return TarballImportContext(tool=self, archive_bits=archive, encoding='UTF8', should_purge=should_purge, ) raise KeyError('Unknown context "%s"' % context_id)
def export(self): portal = self.layer['portal'] setup = portal.portal_setup upgraded_export = setup.runAllExportSteps() upgraded = TarballImportContext(setup, upgraded_export['tarball']) return setup.compareConfigurations(upgraded, self.expected)
def afterSetUp(self): self.loginAsPortalOwner() setSite(self.portal) stool = self.portal.portal_setup expected_export = stool.runAllExportSteps() self.expected = TarballImportContext(stool, expected_export['tarball']) setSite(None)
def export(self): oldsite = getattr(self.app, self.site_id) setSite(oldsite) stool = oldsite.portal_setup upgraded_export = stool.runAllExportSteps() upgraded = TarballImportContext(stool, upgraded_export['tarball']) return stool.compareConfigurations(upgraded, self.expected)
def setUp(self): app = self.layer['app'] login(app, SITE_OWNER_NAME) portal = self.layer['portal'] setSite(portal) # Clean out some test setup artifacts portal.portal_membership.deleteMembers([TEST_USER_ID]) del portal['test-folder'] setup = getToolByName(portal, 'portal_setup') expected_export = setup.runAllExportSteps() self.expected = TarballImportContext(setup, expected_export['tarball']) setSite(None)
def handleImport(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return ctx = TarballImportContext(self.context, data['upload']) IFilesystemImporter(self.context).import_(ctx, 'structure', True) self.status = _(u'Form imported.') IStatusMessage(self.request).addStatusMessage(self.status, type='info') url = getMultiAdapter( (self.context, self.request), name='absolute_url')() self.request.response.redirect(url)
def action_import(self, action, data): if data.get('purge', False) == True: # user has requested removal of existing fields self.context.manage_delObjects(ids=self.context.objectIds()) ctx = TarballImportContext(self.context, data['upload']) IFilesystemImporter(self.context).import_(ctx, 'structure', True) message = _(u'Form imported.') IStatusMessage(self.request).addStatusMessage(message, type='info') url = getMultiAdapter((self.context, self.request), name='absolute_url')() self.request.response.redirect(url) return ''