Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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))
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
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())
Ejemplo n.º 5
0
    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))
Ejemplo n.º 6
0
    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))
Ejemplo n.º 7
0
    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))
Ejemplo n.º 8
0
    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))
Ejemplo n.º 9
0
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())
Ejemplo n.º 10
0
    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])
Ejemplo n.º 11
0
    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])
Ejemplo n.º 12
0
    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))
Ejemplo n.º 13
0
    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))
Ejemplo n.º 14
0
    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))
Ejemplo n.º 15
0
    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))
Ejemplo n.º 16
0
    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))
Ejemplo n.º 17
0
    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))
Ejemplo n.º 18
0
    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))
Ejemplo n.º 19
0
    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])
Ejemplo n.º 20
0
    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))
Ejemplo n.º 21
0
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()
Ejemplo n.º 22
0
    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)
Ejemplo n.º 23
0
    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])
Ejemplo n.º 25
0
 def get_history(self):
     return IHistoryStorage(self).get_history()
Ejemplo n.º 26
0
 def get_history(self):
     return IHistoryStorage(self.context).get_history()
Ejemplo n.º 27
0
def disposition_added(context, event):
    storage = IHistoryStorage(context)
    storage.add('added',
                api.user.get_current().getId(),
                context.get_dossier_representations())