def test_revisionHistory(self): repo_tool = self.portal.portal_repository request = self.app.REQUEST context = getattr(self.folder, 'd1') self.loginAsPortalOwner() repo_tool.save(context, comment='Initial Revision') viewlet = ContentHistoryViewlet(context, request, None, None) viewlet.update() history = viewlet.revisionHistory() self.assertEqual(len(history), 1) self.assertEqual(history[0]['comments'], 'Initial Revision') repo_tool.save(context, comment='Second Revision') viewlet.update() history = viewlet.revisionHistory() self.assertTrue( 'http://nohost/plone/Members/test_user_1_/d1/@@history?one=1&two=0' in history[0]['diff_previous_url'] ) # check diff link does not appear if content is not diffable diff_tool = self.portal.portal_diff diff_tool.setDiffForPortalType('Document', {}) viewlet.update() history = viewlet.revisionHistory() self.assertFalse('diff_previous_url' in history[0])
def test_revertAbility(self): # check revert URL is generated only if the user has the appropriate permission repo_tool = self.portal.portal_repository request = self.app.REQUEST context = getattr(self.folder, 'd1') self.loginAsPortalOwner() repo_tool.save(context, comment='Initial Revision') repo_tool.save(context, comment='Second Revision') viewlet = ContentHistoryViewlet(context, request, None, None) viewlet.update() history = viewlet.revisionHistory() self.assertEqual(history[0]['revert_url'], 'http://nohost/plone/Members/test_user_1_/d1/revertversion') self.portal.manage_permission('CMFEditions: Revert to previous versions', [], False) viewlet.update() history = viewlet.revisionHistory() self.assertEqual(history[0]['revert_url'], None)
def test_revertAbility(self): # check revert URL is generated only if the user has the appropriate permission repo_tool = self.portal.portal_repository request = self.app.REQUEST context = getattr(self.folder, 'd1') self.loginAsPortalOwner() repo_tool.save(context, comment='Initial Revision') repo_tool.save(context, comment='Second Revision') viewlet = ContentHistoryViewlet(context, request, None, None) viewlet.update() history = viewlet.revisionHistory() self.assertTrue( 'http://nohost/plone/Members/test_user_1_/d1/revertversion' in history[0]['revert_url']) # noqa self.portal.manage_permission('CMFEditions: Revert to previous versions', [], False) viewlet.update() history = viewlet.revisionHistory() self.assertEqual(history[0]['revert_url'], None)
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)) review_history = wf.getInfoFor(self.context, 'review_history') review_history.reverse() 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': [], 'Version': isVersionable and self.context.get('version_id', '') or '0', 'Date': TimeOrDate(self.context, entry.get('time'), long_format=1), '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': [], 'Version': entry.get('version_id'), 'Date': TimeOrDate(self.context, DateTime(entry.get('time')), long_format=1), '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
def test_emptyHistory(self): request = self.app.REQUEST context = getattr(self.folder, 'd1') viewlet = ContentHistoryViewlet(context, request, None, None) viewlet.update() self.assertEqual(viewlet.revisionHistory(), [])
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)) review_history = wf.getInfoFor(self.context, 'review_history') review_history = list(review_history) review_history.reverse() 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': [], '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': [], '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