def test_listing(self): self.login(self.records_manager) with freeze(datetime(2016, 11, 1, 11, 0)): storage = IHistoryStorage(self.disposition) storage.add('edited', api.user.get_current().getId(), []) with freeze(datetime(2016, 11, 6, 12, 33)), elevated_privileges(): api.content.transition(self.disposition, 'disposition-transition-appraise') api.content.transition(self.disposition, 'disposition-transition-dispose') with freeze(datetime(2016, 11, 16, 8, 12)), elevated_privileges(): api.content.transition(self.disposition, 'disposition-transition-archive') rows = self.get_listing_rows(self.disposition, 'disposition_history', self.disposition.get_history()) expected_rows = [ ['Nov 16, 2016 08:12 AM', 'Flucht Ramon (ramon.flucht)', 'disposition-transition-archive'], ['Nov 06, 2016 12:33 PM', 'Flucht Ramon (ramon.flucht)', 'disposition-transition-dispose'], ['Nov 06, 2016 12:33 PM', 'Flucht Ramon (ramon.flucht)', 'disposition-transition-appraise'], ['Nov 01, 2016 11:00 AM', 'Flucht Ramon (ramon.flucht)', 'Disposition edited'], ['Aug 31, 2016 07:05 PM', 'Flucht Ramon (ramon.flucht)', 'Disposition added']] for row, expected_row in zip(rows, expected_rows): self.assert_row_values(expected_row, row)
def test_add_history_entry_when_created_a_disposition(self): entry = IHistoryStorage(self.disposition).get_history()[0] self.assertTrue(isinstance(entry, Added)) self.assertEquals('add', entry.css_class) self.assertEquals(u'Added by {}'.format(self.user_link), translate(entry.msg(), context=self.request))
def disposition_added(context, event): storage = IHistoryStorage(context) storage.add('added', api.user.get_current().getId(), context.get_dossier_representations()) DispositionAddedActivity(context, getRequest()).record() context.register_watchers()
def disposition_modified(context, event): # Skip modified events during dossier destruction if IDuringDossierDestruction.providedBy(context.REQUEST): return storage = IHistoryStorage(context) storage.add('edited', api.user.get_current().getId(), context.get_dossier_representations())
def test_add_history_entry_when_finalize_appraisal_a_disposition(self): api.content.transition(obj=self.disposition, transition='disposition-transition-appraise') entry = IHistoryStorage(self.disposition).get_history()[0] self.assertTrue(isinstance(entry, Appraised)) self.assertEquals('appraise', entry.css_class) self.assertEquals(u'Appraisal finalized by {}'.format(self.user_link), translate(entry.msg(), context=self.request))
def test_add_history_entry_when_editing_a_disposition(self, browser): browser.login().open(self.disposition, view='edit') browser.fill({'Dossiers': [self.dossier1, self.dossier2]}) browser.find('Save').click() entry = IHistoryStorage(self.disposition).get_history()[0] self.assertTrue(isinstance(entry, Edited)) self.assertEquals('edit', entry.css_class) self.assertEquals(u'Edited by {}'.format(self.user_link), translate(entry.msg(), context=self.request))
def test_add_history_entry_when_refuse_a_disposition(self): self.grant('Archivist') api.content.transition(obj=self.disposition, transition='disposition-transition-refuse') entry = IHistoryStorage(self.disposition).get_history()[0] self.assertTrue(isinstance(entry, Refused)) self.assertEquals('refuse', entry.css_class) self.assertEquals( u'Disposition refused by {}'.format(self.user_link), translate(entry.msg(), context=self.request))
def test_add_history_entry_when_editing_a_disposition(self, browser): self.login(self.records_manager, browser) browser.open(self.disposition, view='edit') browser.fill({'Dossiers': [self.expired_dossier, self.offered_dossier_to_archive, self.offered_dossier_to_destroy]}) browser.find('Save').click() entry = IHistoryStorage(self.disposition).get_history()[0] self.assertTrue(isinstance(entry, Edited)) self.assertEquals('edit', entry.css_class) self.assertEquals(u'Edited by {}'.format(self.current_user_link), translate(entry.msg(), context=self.request))
def disposition_state_changed(context, event): if event.action == 'disposition-transition-appraise': context.finalize_appraisal() if event.action == 'disposition-transition-archive': context.mark_dossiers_as_archived() if event.action == 'disposition-transition-close': context.destroy_dossiers() storage = IHistoryStorage(context) storage.add(event.action, api.user.get_current().getId(), context.get_dossier_representations())
def test_transition_label_for_added_and_edited_entries_is_translated_correctly(self): self.login(self.records_manager) storage = IHistoryStorage(self.disposition) storage.add('edited', api.user.get_current().getId(), []) rows = self.get_listing_rows(self.disposition, 'disposition_history', self.disposition.get_history()) self.assert_row_values( ['Disposition edited'], rows[0][2]) self.assert_row_values( ['Disposition added'], rows[1][2])
def test_add_history_entry_when_archive_a_disposition(self): api.content.transition(obj=self.disposition, transition='disposition-transition-appraise') api.content.transition(obj=self.disposition, transition='disposition-transition-dispose') api.content.transition(obj=self.disposition, transition='disposition-transition-archive') entry = IHistoryStorage(self.disposition).get_history()[0] self.assertTrue(isinstance(entry, Archived)) self.assertEquals('archive', entry.css_class) self.assertEquals( u'The archiving confirmed by {}'.format(self.user_link), translate(entry.msg(), context=self.request))
def test_add_history_entry_when_dispose_a_disposition(self): self.login(self.records_manager) with elevated_privileges(): api.content.transition(obj=self.disposition, transition='disposition-transition-appraise') api.content.transition(obj=self.disposition, transition='disposition-transition-dispose') entry = IHistoryStorage(self.disposition).get_history()[0] self.assertTrue(isinstance(entry, Disposed)) self.assertEquals('dispose', entry.css_class) self.assertEquals( u'Disposition disposed for the archive by {}'.format(self.current_user_link), translate(entry.msg(), context=self.request))
def test_add_history_entry_when_directly_close_a_disposition(self): IAppraisal(self.disposition).update(dossier=self.dossier1, archive=False) api.content.transition(obj=self.disposition, transition='disposition-transition-appraise') api.content.transition(obj=self.disposition, transition='disposition-transition-appraised-to-closed') entry = IHistoryStorage(self.disposition).get_history()[0] self.assertTrue(isinstance(entry, AppraisedToClosed)) self.assertEquals('close', entry.css_class) self.assertEquals( u'Disposition closed and all dossiers destroyed by {}'.format( self.user_link), translate(entry.msg(), context=self.request))
def test_add_history_entry_when_dispose_a_disposition(self): self.login(self.records_manager) with elevated_privileges(): api.content.transition( obj=self.disposition, transition='disposition-transition-appraise') api.content.transition(obj=self.disposition, transition='disposition-transition-dispose') entry = IHistoryStorage(self.disposition).get_history()[0] self.assertTrue(isinstance(entry, Disposed)) self.assertEquals('dispose', entry.css_class) self.assertEquals( u'Disposition disposed for the archive by {}'.format( self.current_user_link), translate(entry.msg(), context=self.request))
def test_add_history_entry_when_editing_a_disposition(self, browser): self.login(self.records_manager, browser) browser.open(self.disposition, view='edit') browser.fill({ 'Dossiers': [ self.expired_dossier, self.offered_dossier_to_archive, self.offered_dossier_to_destroy ] }) browser.find('Save').click() entry = IHistoryStorage(self.disposition).get_history()[0] self.assertTrue(isinstance(entry, Edited)) self.assertEquals('edit', entry.css_class) self.assertEquals(u'Edited by {}'.format(self.current_user_link), translate(entry.msg(), context=self.request))
def test_add_history_entry_when_directly_close_a_disposition(self): self.login(self.records_manager) IAppraisal(self.disposition).update(dossier=self.offered_dossier_to_archive, archive=False) with elevated_privileges(): api.content.transition(obj=self.disposition, transition='disposition-transition-appraise') api.content.transition(obj=self.disposition, transition='disposition-transition-appraised-to-closed') entry = IHistoryStorage(self.disposition).get_history()[0] self.assertTrue(isinstance(entry, AppraisedToClosed)) self.assertEquals('close', entry.css_class) self.assertEquals( u'Disposition closed and all dossiers destroyed by {}'.format( self.current_user_link), translate(entry.msg(), context=self.request))
def test_transition_label_for_added_and_edited_entries_is_translated_correctly(self): disposition = create(Builder('disposition')) storage = IHistoryStorage(disposition) storage.add('added', api.user.get_current().getId(), []) storage.add('edited', api.user.get_current().getId(), []) self.listing = getMultiAdapter( (disposition, disposition.REQUEST, self), ILaTexListing, name='disposition_history') self.listing.items = disposition.get_history() table = lxml.html.fromstring(self.listing.template()) rows = table.xpath(CSSSelector('tbody tr').path) self.assert_row_values( ['Disposition edited'], rows[0][2]) self.assert_row_values( ['Disposition added'], rows[1][2])
def test_add_history_entry_when_directly_close_a_disposition(self): self.login(self.records_manager) IAppraisal(self.disposition).update( dossier=self.offered_dossier_to_archive, archive=False) with elevated_privileges(): api.content.transition( obj=self.disposition, transition='disposition-transition-appraise') api.content.transition( obj=self.disposition, transition='disposition-transition-appraised-to-closed') entry = IHistoryStorage(self.disposition).get_history()[0] self.assertTrue(isinstance(entry, AppraisedToClosed)) self.assertEquals('close', entry.css_class) self.assertEquals( u'Disposition closed and all dossiers destroyed by {}'.format( self.current_user_link), translate(entry.msg(), context=self.request))
def disposition_state_changed(context, event): if event.action == 'disposition-transition-appraise': context.finalize_appraisal() if event.action == 'disposition-transition-archive': context.mark_dossiers_as_archived() if event.action == 'disposition-transition-close': context.destroy_dossiers() if event.action == 'disposition-transition-appraised-to-closed': context.mark_dossiers_as_archived() context.destroy_dossiers() storage = IHistoryStorage(context) storage.add(event.action, api.user.get_current().getId(), context.get_dossier_representations()) DispositionStateChangedActivity( context, getRequest(), storage.get_history()[0]).record()
def test_ignores_modified_events_during_dossier_destruction(self): api.content.transition(obj=self.disposition, transition='disposition-transition-appraise') IAppraisal(self.disposition).update(dossier=self.dossier1, archive=True) api.content.transition(obj=self.disposition, transition='disposition-transition-dispose') api.content.transition(obj=self.disposition, transition='disposition-transition-archive') api.content.transition(obj=self.disposition, transition='disposition-transition-close') history = IHistoryStorage(self.disposition).get_history() self.assertEquals( 'disposition-transition-close', history[0].transition) self.assertEquals( 'disposition-transition-archive', history[1].transition)
def test_ignores_modified_events_during_dossier_destruction(self): self.login(self.records_manager) with elevated_privileges(): api.content.transition( obj=self.disposition, transition='disposition-transition-appraise') IAppraisal(self.disposition).update( dossier=self.offered_dossier_to_destroy, archive=True) api.content.transition(obj=self.disposition, transition='disposition-transition-dispose') api.content.transition(obj=self.disposition, transition='disposition-transition-archive') api.content.transition(obj=self.disposition, transition='disposition-transition-close') self.assertEquals([ 'disposition-transition-close', 'disposition-transition-archive', 'disposition-transition-dispose', 'disposition-transition-appraise', 'added' ], [ item.transition for item in IHistoryStorage(self.disposition).get_history() ])
def test_transition_label_for_added_and_edited_entries_is_translated_correctly( self): disposition = create(Builder('disposition')) storage = IHistoryStorage(disposition) storage.add('added', api.user.get_current().getId(), []) storage.add('edited', api.user.get_current().getId(), []) self.listing = getMultiAdapter( (disposition, disposition.REQUEST, self), ILaTexListing, name='disposition_history') self.listing.items = disposition.get_history() table = lxml.html.fromstring(self.listing.template()) rows = table.xpath(CSSSelector('tbody tr').path) self.assert_row_values(['Disposition edited'], rows[0][2]) self.assert_row_values(['Disposition added'], rows[1][2])
def get_history(self): return IHistoryStorage(self).get_history()
def get_history(self): return IHistoryStorage(self.context).get_history()
def disposition_added(context, event): storage = IHistoryStorage(context) storage.add('added', api.user.get_current().getId(), context.get_dossier_representations())