def test_leaves_new_private_folder_untouched_if_old_one_doesnt_exist(self):
        self.login('hans.muster')
        create_members_folder(self.root)
        private_folder = self.root['hans.muster']

        dossier = create(
            Builder('private_dossier').within(private_folder).titled(
                u'Dossier in old private folder'))
        create(
            Builder('document').within(dossier).titled(
                u'Doc in old private folder'))

        self.login('manager')
        results = PrivateFoldersMigrator(self.portal, {
            'HANS.MUSTER': 'hans.muster'
        }, 'move').migrate()

        self.assertEquals([], results['private_folders']['moved'])

        # New folder should contain dossier
        self.assertItemsEqual(['dossier-1'],
                              self.root['hans.muster'].objectIds())

        # Old document should be in new location and properly reindexed
        self.assertItemsEqual([
            '/plone/private/hans.muster/dossier-1/document-1'
        ], [
            b.getPath()
            for b in self.catalog(portal_type='opengever.document.document')
        ])
Example #2
0
    def test_adds_additonal_roles_after_creation(self):
        self.login(self.dossier_responsible)
        create_members_folder(self.private_root)

        folder = self.private_root.get(self.dossier_responsible.getId())
        self.assertItemsEqual(
            ['Publisher', 'Authenticated', 'Owner', 'Editor', 'Reader',
             'Contributor', 'Reviewer', 'Member'],
            api.user.get_roles(username=self.dossier_responsible.getId(), obj=folder))
    def test_private_folder_defaults(self):
        self.login(self.regular_user)

        # This will trigger member folder creation by MembershipTool
        with freeze(FROZEN_NOW):
            create_members_folder(self.private_root)

        private_folder = self.portal.private[api.user.get_current().id]

        persisted_values = get_persisted_values_for_obj(private_folder)
        expected = self.get_type_defaults()

        self.assertDictEqual(expected, persisted_values)
    def test_private_folder_defaults(self):
        self.login(self.regular_user)

        # This will trigger member folder creation by MembershipTool
        with freeze(FROZEN_NOW):
            create_members_folder(self.private_root)

        private_folder = self.portal.private[api.user.get_current().id]

        persisted_values = get_persisted_values_for_obj(private_folder)
        expected = self.get_type_defaults()

        self.assertDictEqual(expected, persisted_values)
    def test_merges_private_folder_contents_into_new_one(self):
        self.login('HANS.MUSTER')
        create_members_folder(self.root)
        private_folder = self.root['HANS.MUSTER']

        dossier = create(
            Builder('private_dossier').within(private_folder).titled(
                u'Dossier in old private folder'))
        create(
            Builder('document').within(dossier).titled(
                u'Doc in old private folder'))

        self.login('hans.muster')
        create_members_folder(self.root)
        new_private_folder = self.root['hans.muster']

        new_dossier = create(
            Builder('private_dossier').within(new_private_folder).titled(
                u'Dossier in new private folder'))
        create(
            Builder('document').within(new_dossier).titled(
                u'Doc in new private folder'))

        self.login('manager')
        results = PrivateFoldersMigrator(self.portal, {
            'HANS.MUSTER': 'hans.muster'
        }, 'move').migrate()

        self.assertEquals(
            [('/plone/private/HANS.MUSTER', 'HANS.MUSTER', 'hans.muster')],
            results['private_folders']['moved'])

        # Old folder shouldn't exist any more
        self.assertEqual(['test_user_1_', 'hans.muster'],
                         self.root.objectIds())

        # New folder should contain all dossiers
        self.assertItemsEqual(['dossier-1', 'dossier-2'],
                              self.root['hans.muster'].objectIds())

        # Old document should be in new location and properly reindexed
        self.assertItemsEqual([
            '/plone/private/hans.muster/dossier-1/document-1',
            '/plone/private/hans.muster/dossier-2/document-2'
        ], [
            b.getPath()
            for b in self.catalog(portal_type='opengever.document.document')
        ])
    def test_size_usage_table(self, browser):
        self.grant('Manager')

        user_folder = create_members_folder(create(Builder('private_root')))
        user_dossier = create(Builder('dossier').within(user_folder))
        document = create(Builder('document')
                          .attach_file_containing('1234')
                          .within(user_dossier))

        browser.login().open(user_folder).find('Usage').click()
        self.assertEquals(
            [['Usage', '4.0 Bytes'],
             ['Soft limit', 'unlimited'],
             ['Hard limit', 'unlimited']],
            browser.css('table.usage').first.lists())

        document.file = NamedBlobFile('X' * 30, filename=u'test.txt')
        notify(ObjectModifiedEvent(document))
        settings = getUtility(IRegistry).forInterface(
            IPrivateFolderQuotaSettings)
        settings.size_soft_limit = 40
        settings.size_hard_limit = 50
        transaction.commit()
        browser.reload()
        self.assertEquals(
            [['Usage', '30.0 Bytes'],
             ['Soft limit', '40.0 Bytes (75.0%)'],
             ['Hard limit', '50.0 Bytes (60.0%)']],
            browser.css('table.usage').first.lists())

        browser.find('Back').click()
        self.assertEquals(user_folder.absolute_url(), browser.url)
    def test_warning_visible_when_quota_exceeded(self, browser):
        user_folder = create_members_folder(create(Builder('private_root')))
        settings = getUtility(IRegistry).forInterface(
            IPrivateFolderQuotaSettings)
        create(Builder('document').attach_file_containing('X' * 100)
               .within(user_folder))

        browser.login().open(user_folder)
        statusmessages.assert_no_messages()

        settings.size_soft_limit = 70
        transaction.commit()
        browser.reload()
        statusmessages.assert_message(
            u'The quota of your private folder will exceed soon.')

        settings.size_hard_limit = 80
        transaction.commit()
        browser.reload()
        statusmessages.assert_message(
            u'The quota of your private folder has exceeded,'
            ' you can not add any new files or mails.')

        settings.size_soft_limit = 0
        settings.size_hard_limit = 0
        transaction.commit()
        browser.reload()
        statusmessages.assert_no_messages()
    def setUp(self):
        super(TestPrivateFolderWorkflow, self).setUp()
        self.root = create(Builder('private_root'))
        self.folder = create_members_folder(self.root)

        self.hugo = create(Builder('user')
                           .named('Hugo', 'Boss')
                           .with_roles('Member'))
        self.admin = create(Builder('user')
                            .named('Ad', 'Min')
                            .with_roles('Member', 'Administrator'))
    def test_configured_quota_settings_are_available_in_qutoa_adapter(self):
        private_folder = create_members_folder(create(Builder('private_root')))
        self.assertEquals(0, IQuotaSizeSettings(private_folder).get_soft_limit())
        self.assertEquals(0, IQuotaSizeSettings(private_folder).get_hard_limit())

        settings = getUtility(IRegistry).forInterface(
            IPrivateFolderQuotaSettings)
        settings.size_soft_limit = 77
        settings.size_hard_limit = 88
        self.assertEquals(77, IQuotaSizeSettings(private_folder).get_soft_limit())
        self.assertEquals(88, IQuotaSizeSettings(private_folder).get_hard_limit())
    def setUp(self):
        super(TestPrivateFoldersMigrator, self).setUp()
        self.portal = self.layer['portal']
        self.catalog = api.portal.get_tool('portal_catalog')
        self.root = create(
            Builder('private_root').within(self.portal).having(id='private'))

        create_members_folder(self.root)

        self.old_ogds_user = create(
            Builder('ogds_user').id('HANS.MUSTER').having(active=False))
        self.new_ogds_user = create(
            Builder('ogds_user').id('hans.muster').having(active=True))

        create(Builder('user').with_userid('manager').with_roles('Manager'))

        create(
            Builder('user').with_userid('HANS.MUSTER').with_roles(
                'Reader', 'Editor', 'Contributor'))

        create(
            Builder('user').with_userid('hans.muster').with_roles(
                'Reader', 'Editor', 'Contributor'))
Example #11
0
    def test_quota_hard_limit_exceeded_message(self, browser):
        settings = getUtility(IRegistry).forInterface(
            IPrivateFolderQuotaSettings)
        settings.size_hard_limit = 12

        user_folder = create_members_folder(create(Builder('private_root')))
        user_dossier = create(Builder('dossier').within(user_folder))

        browser.login().open(user_dossier)
        factoriesmenu.add('Document')
        browser.fill({'File': ('Some data', 'file.txt', 'text/plain')}).save()
        statusmessages.assert_no_error_messages()

        browser.open(user_dossier)
        factoriesmenu.add('Document')
        browser.fill({'File': ('Some data', 'file.txt', 'text/plain')}).save()
        statusmessages.assert_message(
            'Can not add this item because it exhausts the quota.')
Example #12
0
    def test_exceeded_limit(self):
        user_folder = create_members_folder(create(Builder('private_root')))
        create(Builder('document').attach_file_containing('X' * 100)
               .within(user_folder))
        quota = ISizeQuota(user_folder)
        settings = getUtility(IRegistry).forInterface(
            IPrivateFolderQuotaSettings)

        self.assertEqual(100, quota.get_usage())
        self.assertEqual(None, quota.exceeded_limit())

        settings.size_soft_limit = 70
        self.assertEqual(SOFT_LIMIT_EXCEEDED, quota.exceeded_limit())

        settings.size_hard_limit = 80
        self.assertEqual(HARD_LIMIT_EXCEEDED, quota.exceeded_limit())

        settings.size_soft_limit = 110
        settings.size_hard_limit = 120
        self.assertEqual(None, quota.exceeded_limit())
Example #13
0
    def setUp(self):
        super(TestPrivateFolderWorkflow, self).setUp()
        self.root = create(Builder('private_root'))

        private_policy_id = 'opengever_private_policy'
        # enable opengever.private placeful workflow policy
        self.root.manage_addProduct[
            'CMFPlacefulWorkflow'].manage_addWorkflowPolicyConfig()
        pwf_tool = api.portal.get_tool('portal_placeful_workflow')
        policy_config = pwf_tool.getWorkflowPolicyConfig(self.root)
        policy_config.setPolicyIn(private_policy_id, update_security=False)
        policy_config.setPolicyBelow(private_policy_id, update_security=False)

        self.folder = create_members_folder(self.root)
        self.hugo = create(
            Builder('user').named('Hugo',
                                  'Boss').with_roles('Member', 'Reader'))
        self.admin = create(
            Builder('user').named('Ad',
                                  'Min').with_roles('Member', 'Administrator'))
        self.member_admin = create(
            Builder('user').named('MemberAreaAdmin', 'MAdm').with_roles(
                'Member', 'MemberAreaAdministrator'))
 def setUp(self):
     super(TestPrivateFolderTabbedView, self).setUp()
     self.root = create(Builder('private_root').titled(u'Private root'))
     self.folder = create_members_folder(self.root)
 def setUp(self):
     super(TestPrivateFolder, self).setUp()
     self.root = create(Builder('private_root'))
     self.folder = create_members_folder(self.root)
 def setUp(self):
     super(TestMyRepositoryAction, self).setUp()
     self.root = create(Builder('private_root'))
     self.folder = create_members_folder(self.root)
Example #17
0
 def setUp(self):
     super(TestPrivateDossier, self).setUp()
     self.root = create(Builder('private_root'))
     self.folder = create_members_folder(self.root)
Example #18
0
 def setUp(self):
     super(TestPrivateFolderTabbedView, self).setUp()
     self.root = create(Builder('private_root'))
     self.folder = create_members_folder(self.root)
Example #19
0
    def test_content_modifications_update_usage(self):
        """Test that adding, updating, removing and moving update the usage.

        This test is implemented as story so that we do not create that many
        objects in order to speed up tests.
        As soon as we can use fixtures these tests can be refactored.
        """
        self.grant('Manager')

        user_root = create(Builder('private_root'))
        user_folder = create_members_folder(user_root)
        user_dossier = create(Builder('dossier').within(user_folder))
        shared_dossier = create(Builder('dossier'))
        self.assertEqual(0, ISizeQuota(user_folder).get_usage(),
                         'Expected usage to be 0 for an empty root.')

        with self.assert_usage_change(user_folder, +1,
                                      'add first document'):
            doc1 = create(Builder('document')
                          .attach_file_containing('X')
                          .within(user_dossier))

        with self.assert_usage_change(user_folder, -1 + 2,
                                      'update document'):
            doc1.file = NamedBlobFile('XX', filename=u'test.txt')
            notify(ObjectModifiedEvent(doc1))

        with self.assert_usage_change(user_folder, +3,
                                      'add second document'):
            doc2 = create(Builder('document')
                          .attach_file_containing('XXX')
                          .within(user_dossier))

        with self.assert_usage_change(user_folder, -3,
                                      'move away from quota container'):
            shared_dossier.manage_pasteObjects(
                user_dossier.manage_cutObjects([doc2.getId()]))

        with self.assert_usage_change(user_folder, +3,
                                      'move back into quota container'):
            user_dossier.manage_pasteObjects(
                shared_dossier.manage_cutObjects([doc2.getId()]))

        with self.assert_usage_change(user_folder, -3, 'trash document'):
            ITrashable(doc2).trash()

        with self.assert_usage_change(user_folder, +3, 'restore document'):
            ITrashable(doc2).untrash()

        with self.assert_usage_change(user_folder, -3,
                                      'delete'):
            user_dossier.manage_delObjects([doc2.getId()])

        # clear and recalculate
        self.assertEqual(2, ISizeQuota(user_folder).get_usage())
        ISizeQuota(user_folder).get_usage_map(for_writing=True).clear()
        self.assertEqual(0, ISizeQuota(user_folder).get_usage())
        ISizeQuota(user_folder).recalculate()
        self.assertEqual(2, ISizeQuota(user_folder).get_usage())

        # changes to foreign user folders should never affect our user folder
        with self.assert_usage_change(user_folder, 0,
                                      'create and fill foreign user folder'):
            john_doe = create(Builder('user').named('John', 'Deo')
                              .with_roles('Contributor', 'Editor', 'Reader'))
            login(self.portal, john_doe.getId())
            other_user_folder = create_members_folder(user_root)
            other_user_dossier = create(Builder('dossier').within(
                other_user_folder))
            create(Builder('document')
                   .attach_file_containing('XXX')
                   .within(other_user_dossier))
            login(self.portal, TEST_USER_NAME)

        with self.assert_usage_change(user_folder, 0,
                                      'recalculate without change'):
            ISizeQuota(user_folder).get_usage_map(
                for_writing=True)['purge-me'] = 999
            ISizeQuota(user_folder).recalculate()