예제 #1
0
파일: test_webdav.py 프로젝트: uggla/tracim
    def test_unit__create_content__ok(self):
        provider = self._get_provider(self.app_config)
        environ = self._get_environ(
            provider,
            '*****@*****.**',
        )
        result = provider.getResourceInst(
            '/Recipes/Salads/greek_salad.txt',
            environ,
        )

        eq_(None,
            result,
            msg='Result should be None instead {0}'.format(result))

        result = self._put_new_text_file(
            provider,
            environ,
            '/Recipes/Salads/greek_salad.txt',
            b'Greek Salad\n',
        )

        assert result, 'Result should not be None instead {0}'.format(result)
        eq_(b'Greek Salad\n',
            result.content.depot_file.file.read(),
            msg='fiel content should be "Greek Salad\n" but it is {0}'.format(
                result.content.depot_file.file.read()))
예제 #2
0
파일: test_webdav.py 프로젝트: uggla/tracim
    def test_unit__rename_content__ok(self):
        provider = self._get_provider(self.app_config)
        environ = self._get_environ(
            provider,
            '*****@*****.**',
        )
        pie = provider.getResourceInst(
            '/Recipes/Desserts/Apple_Pie.txt',
            environ,
        )

        content_pie = self.session.query(ContentRevisionRO) \
            .filter(Content.label == 'Apple_Pie') \
            .one()  # It must exist only one revision, cf fixtures
        assert content_pie, 'Apple_Pie should be exist'
        content_pie_id = content_pie.content_id

        pie.moveRecursive('/Recipes/Desserts/Apple_Pie_RENAMED.txt')

        # Database content is renamed
        content_pie = self.session.query(ContentRevisionRO) \
            .filter(ContentRevisionRO.content_id == content_pie_id) \
            .order_by(ContentRevisionRO.revision_id.desc()) \
            .first()
        eq_('Apple_Pie_RENAMED',
            content_pie.label,
            msg='File should be labeled Apple_Pie_RENAMED, not {0}'.format(
                content_pie.label))
예제 #3
0
    def test_unit__move_content__ok__another_workspace(self):
        provider = self._get_provider(self.app_config)
        environ = self._get_environ(provider, "*****@*****.**")
        content_to_move_res = provider.getResourceInst(
            "/Recipes/Desserts/Apple_Pie.txt", environ)

        content_to_move = (self.session.query(ContentRevisionRO).filter(
            Content.label == "Apple_Pie").one()
                           )  # It must exist only one revision, cf fixtures
        assert content_to_move, "Apple_Pie should be exist"
        content_to_move_id = content_to_move.content_id
        content_to_move_parent = content_to_move.parent
        eq_(content_to_move_parent.label,
            "Desserts",
            msg="field parent should be Desserts")

        content_to_move_res.moveRecursive(
            "/Business/Menus/Apple_Pie.txt")  # move in Business, f1

        # Database content is moved
        content_to_move = (self.session.query(ContentRevisionRO).filter(
            ContentRevisionRO.content_id == content_to_move_id).order_by(
                ContentRevisionRO.revision_id.desc()).first())

        assert content_to_move.parent, "Content should have a parent"

        assert (content_to_move.parent.label == "Menus"
                ), "file should be moved in Infos but is in {0}".format(
                    content_to_move.parent.label)
예제 #4
0
    def test_new_revision(self):
        admin = self.session.query(User).filter(
            User.email == '*****@*****.**').one()
        workspace = self._create_workspace_and_test(name='workspace_1',
                                                    user=admin)
        folder = self._create_content_and_test(
            name='folder_1',
            workspace=workspace,
            type=content_type_list.Folder.slug)
        page = self._create_content_and_test(workspace=workspace,
                                             parent=folder,
                                             name='file_1',
                                             description='content of file_1',
                                             type=content_type_list.Page.slug,
                                             owner=admin)

        self.session.flush()

        # Model create a new instance with list of column
        new_revision_by_model = ContentRevisionRO.new_from(page.revision)
        # Test create a new instance from dynamic listing of model
        # columns mapping
        new_revision_by_test = self._new_from(page.revision)

        new_revision_by_model_dict = self._get_dict_representation(
            new_revision_by_model)
        new_revision_by_test_dict = self._get_dict_representation(
            new_revision_by_test)

        # They must be identical
        eq_(new_revision_by_model_dict, new_revision_by_test_dict)
예제 #5
0
    def test_unit__list_workspaces_with_admin__ok(self):
        provider = self._get_provider(self.app_config)
        root = provider.getResourceInst(
            '/',
            self._get_environ(
                provider,
                '*****@*****.**',
            )
        )
        assert root, 'Path / should return a RootResource instance'
        assert isinstance(root, RootResource), 'Path / should return a RootResource instance'

        children = root.getMemberList()
        eq_(
            2,
            len(children),
            msg='RootResource should return 3 workspaces instead {0}'.format(
                len(children),
            )
        )

        workspaces_names = [w.name for w in children]
        assert 'Recipes' in workspaces_names, 'Recipes should be in names ({0})'.format(
            workspaces_names,
        )
        assert 'Business' in workspaces_names, 'Business should be in names ({0})'.format(
            workspaces_names,
        )
예제 #6
0
    def test_unit__move_content__ok(self):
        provider = self._get_provider(self.app_config)
        environ = self._get_environ(provider, "*****@*****.**")
        pie = provider.getResourceInst("/Recipes/Desserts/Apple_Pie.txt",
                                       environ)

        content_pie = (self.session.query(ContentRevisionRO).filter(
            Content.label == "Apple_Pie").one()
                       )  # It must exist only one revision, cf fixtures
        assert content_pie, "Apple_Pie should be exist"
        content_pie_id = content_pie.content_id
        content_pie_parent = content_pie.parent
        eq_(content_pie_parent.label,
            "Desserts",
            msg="field parent should be Desserts")

        pie.moveRecursive("/Recipes/Salads/Apple_Pie.txt")  # move in f2

        # Database content is moved
        content_pie = (self.session.query(ContentRevisionRO).filter(
            ContentRevisionRO.content_id == content_pie_id).order_by(
                ContentRevisionRO.revision_id.desc()).first())

        assert (content_pie.parent.label != content_pie_parent.label
                ), "file should be moved in Salads but is in {0}".format(
                    content_pie.parent.label)
예제 #7
0
    def test_unit__move_and_rename_content__ok(self):
        provider = self._get_provider(self.app_config)
        environ = self._get_environ(provider, "*****@*****.**")
        pie = provider.getResourceInst("/Recipes/Desserts/Apple_Pie.txt",
                                       environ)

        content_pie = (self.session.query(ContentRevisionRO).filter(
            Content.label == "Apple_Pie").one()
                       )  # It must exist only one revision, cf fixtures
        assert content_pie, "Apple_Pie should be exist"
        content_pie_id = content_pie.content_id
        content_pie_parent = content_pie.parent
        eq_(content_pie_parent.label,
            "Desserts",
            msg="field parent should be Desserts")

        pie.moveRecursive("/Business/Menus/Apple_Pie_RENAMED.txt")
        content_pie = (self.session.query(ContentRevisionRO).filter(
            ContentRevisionRO.content_id == content_pie_id).order_by(
                ContentRevisionRO.revision_id.desc()).first())
        assert (content_pie.parent.label != content_pie_parent.label
                ), "file should be moved in Recipesf2 but is in {0}".format(
                    content_pie.parent.label)
        eq_(
            "Apple_Pie_RENAMED",
            content_pie.label,
            msg="File should be labeled Apple_Pie_RENAMED, not {0}".format(
                content_pie.label),
        )
예제 #8
0
파일: test_webdav.py 프로젝트: uggla/tracim
    def test_unit__move_content__ok(self):
        provider = self._get_provider(self.app_config)
        environ = self._get_environ(
            provider,
            '*****@*****.**',
        )
        pie = provider.getResourceInst(
            '/Recipes/Desserts/Apple_Pie.txt',
            environ,
        )

        content_pie = self.session.query(ContentRevisionRO) \
            .filter(Content.label == 'Apple_Pie') \
            .one()  # It must exist only one revision, cf fixtures
        assert content_pie, 'Apple_Pie should be exist'
        content_pie_id = content_pie.content_id
        content_pie_parent = content_pie.parent
        eq_(
            content_pie_parent.label,
            'Desserts',
            msg='field parent should be Desserts',
        )

        pie.moveRecursive('/Recipes/Salads/Apple_Pie.txt')  # move in f2

        # Database content is moved
        content_pie = self.session.query(ContentRevisionRO) \
            .filter(ContentRevisionRO.content_id == content_pie_id) \
            .order_by(ContentRevisionRO.revision_id.desc()) \
            .first()

        assert content_pie.parent.label != content_pie_parent.label,\
            'file should be moved in Salads but is in {0}'.format(
                content_pie.parent.label
        )
예제 #9
0
    def test_unit__list_content__ok(self):
        provider = self._get_provider(self.app_config)
        Salads = provider.getResourceInst(
            "/Recipes/Desserts", self._get_environ(provider, "*****@*****.**"))
        assert Salads, "Path /Salads should return a Wrkspace instance"

        children = Salads.getMemberList()
        eq_(5,
            len(children),
            msg="Salads should list 5 Files instead {0}".format(len(children)))

        content_names = [c.name for c in children]
        assert (
            "Brownie Recipe.html" in content_names
        ), "Brownie Recipe.html should be in names ({0})".format(content_names)

        assert ("Best Cakesʔ.thread.html" in content_names
                ), "Best Cakesʔ.thread.html should be in names ({0})".format(
                    content_names)
        assert "Apple_Pie.txt" in content_names, "Apple_Pie.txt should be in names ({0})".format(
            content_names)

        assert (
            "Fruits Desserts" in content_names
        ), "Fruits Desserts should be in names ({0})".format(content_names)

        assert (
            "Tiramisu Recipe.document.html" in content_names
        ), "Tiramisu Recipe.document.html should be in names ({0})".format(
            content_names)
예제 #10
0
    def test_unit__list_workspace_folders__ok(self):
        provider = self._get_provider(self.app_config)
        Recipes = provider.getResourceInst(
            '/Recipes/',
            self._get_environ(
                provider,
                '*****@*****.**',
            )
        )
        assert Recipes, 'Path /Recipes should return a Wrkspace instance'

        children = Recipes.getMemberList()
        eq_(
            2,
            len(children),
            msg='Recipes should list 2 folders instead {0}'.format(
                len(children),
            ),
        )

        folders_names = [f.name for f in children]
        assert 'Salads' in folders_names, 'Salads should be in names ({0})'.format(
                folders_names,
        )
        assert 'Desserts' in folders_names, 'Desserts should be in names ({0})'.format(
                folders_names,
        )
예제 #11
0
    def test_unit__user_with_email_exists__ok__nominal_case(self):
        api = UserApi(current_user=None, session=self.session, config=self.app_config)
        u = api.create_minimal_user("bibi@bibi")
        api.update(u, "bibi", "bibi@bibi", "password", do_save=True)
        transaction.commit()

        eq_(True, api.user_with_email_exists("bibi@bibi"))
        eq_(False, api.user_with_email_exists("unknown"))
예제 #12
0
    def test_unit__get_content__ok(self):
        provider = self._get_provider(self.app_config)
        pie = provider.getResourceInst(
            "/Recipes/Desserts/Apple_Pie.txt",
            self._get_environ(provider, "*****@*****.**"))

        assert pie, "Apple_Pie should be found"
        eq_("Apple_Pie.txt", pie.name)
예제 #13
0
    def test_notifier_factory_method(self):
        u = User()
        self.app_config.EMAIL__NOTIFICATION__ACTIVATED = True
        notifier = NotifierFactory.create(self.app_config, u)
        eq_(EmailNotifier, notifier.__class__)

        self.app_config.EMAIL__NOTIFICATION__ACTIVATED = False
        notifier = NotifierFactory.create(self.app_config, u)
        eq_(DummyNotifier, notifier.__class__)
예제 #14
0
    def test_get_one_by_email(self):
        api = UserApi(current_user=None, session=self.session, config=self.app_config)
        u = api.create_minimal_user("bibi@bibi")
        self.session.flush()
        api.update(u, "bibi", "bibi@bibi", "password", do_save=True)
        uid = u.user_id
        transaction.commit()

        eq_(uid, api.get_one_by_email("bibi@bibi").user_id)
예제 #15
0
 def test_unit__get_one__ok__nominal_case(self):
     api = UserApi(
         current_user=None,
         session=self.session,
         config=self.app_config,
     )
     u = api.create_minimal_user('titi@titi')
     api.update(u, 'titi', 'titi@titi', 'password', do_save=True)
     one = api.get_one(u.user_id)
     eq_(u.user_id, one.user_id)
예제 #16
0
    def test_notifier_factory_method(self):
        u = User()

        self.app_config.EMAIL_NOTIFICATION_ACTIVATED = True
        notifier = NotifierFactory.create(self.app_config, u)
        eq_(EmailNotifier, notifier.__class__)

        self.app_config.EMAIL_NOTIFICATION_ACTIVATED = False
        notifier = NotifierFactory.create(self.app_config, u)
        eq_(DummyNotifier, notifier.__class__)
예제 #17
0
 def test_unit__get_one__ok__nominal_case(self):
     api = UserApi(
         current_user=None,
         session=self.session,
         config=self.app_config,
     )
     u = api.create_minimal_user('titi@titi')
     api.update(u, 'titi', 'titi@titi', 'password', do_save=True)
     one = api.get_one(u.user_id)
     eq_(u.user_id, one.user_id)
예제 #18
0
파일: test_webdav.py 프로젝트: uggla/tracim
    def test_unit__get_content__ok(self):
        provider = self._get_provider(self.app_config)
        pie = provider.getResourceInst(
            '/Recipes/Desserts/Apple_Pie.txt',
            self._get_environ(
                provider,
                '*****@*****.**',
            ))

        assert pie, 'Apple_Pie should be found'
        eq_('Apple_Pie.txt', pie.name)
예제 #19
0
    def test_unit__user_with_email_exists__ok__nominal_case(self):
        api = UserApi(
            current_user=None,
            session=self.session,
            config=self.config,
        )
        u = api.create_minimal_user('bibi@bibi')
        api.update(u, 'bibi', 'bibi@bibi', 'pass', do_save=True)
        transaction.commit()

        eq_(True, api.user_with_email_exists('bibi@bibi'))
        eq_(False, api.user_with_email_exists('unknown'))
예제 #20
0
    def test_unit__user_with_email_exists__ok__nominal_case(self):
        api = UserApi(
            current_user=None,
            session=self.session,
            config=self.app_config,
        )
        u = api.create_minimal_user('bibi@bibi')
        api.update(u, 'bibi', 'bibi@bibi', 'password', do_save=True)
        transaction.commit()

        eq_(True, api.user_with_email_exists('bibi@bibi'))
        eq_(False, api.user_with_email_exists('unknown'))
예제 #21
0
    def test_get_one_by_email(self):
        api = UserApi(
            current_user=None,
            session=self.session,
            config=self.app_config,
        )
        u = api.create_minimal_user('bibi@bibi')
        self.session.flush()
        api.update(u, 'bibi', 'bibi@bibi', 'password', do_save=True)
        uid = u.user_id
        transaction.commit()

        eq_(uid, api.get_one_by_email('bibi@bibi').user_id)
예제 #22
0
    def test_get_one_by_email(self):
        api = UserApi(
            current_user=None,
            session=self.session,
            config=self.config,
        )
        u = api.create_minimal_user('bibi@bibi')
        self.session.flush()
        api.update(u, 'bibi', 'bibi@bibi', 'pass', do_save=True)
        uid = u.user_id
        transaction.commit()

        eq_(uid, api.get_one_by_email('bibi@bibi').user_id)
예제 #23
0
 def test_children(self):
     admin = self.session.query(User).filter(
         User.email == "*****@*****.**").one()
     self._create_thread_and_test(workspace_name="workspace_1",
                                  folder_name="folder_1",
                                  thread_name="thread_1",
                                  user=admin)
     workspace = self.session.query(Workspace).filter(
         Workspace.label == "workspace_1").one()
     content_api = ContentApi(session=self.session,
                              current_user=admin,
                              config=self.app_config)
     folder = content_api.get_canonical_query().filter(
         Content.label == "folder_1").one()
     eq_([folder], list(workspace.get_valid_children()))
예제 #24
0
    def test_unit__list_workspace_folders__ok(self):
        provider = self._get_provider(self.app_config)
        Recipes = provider.getResourceInst(
            "/Recipes/", self._get_environ(provider, "*****@*****.**"))
        assert Recipes, "Path /Recipes should return a Wrkspace instance"

        children = Recipes.getMemberList()
        eq_(2,
            len(children),
            msg="Recipes should list 2 folders instead {0}".format(
                len(children)))

        folders_names = [f.name for f in children]
        assert "Salads" in folders_names, "Salads should be in names ({0})".format(
            folders_names)
        assert "Desserts" in folders_names, "Desserts should be in names ({0})".format(
            folders_names)
예제 #25
0
    def test_unit__list_content__ok(self):
        provider = self._get_provider(self.app_config)
        Salads = provider.getResourceInst(
            '/Recipes/Desserts',
            self._get_environ(
                provider,
                '*****@*****.**',
            )
        )
        assert Salads, 'Path /Salads should return a Wrkspace instance'

        children = Salads.getMemberList()
        eq_(
            5,
            len(children),
            msg='Salads should list 5 Files instead {0}'.format(
                len(children),
            ),
        )

        content_names = [c.name for c in children]
        assert 'Brownie Recipe.html' in content_names, \
            'Brownie Recipe.html should be in names ({0})'.format(
                content_names,
        )

        assert 'Best Cakesʔ.thread.html' in content_names,\
            'Best Cakesʔ.thread.html should be in names ({0})'.format(
                content_names,
        )
        assert 'Apple_Pie.txt' in content_names,\
            'Apple_Pie.txt should be in names ({0})'.format(content_names,)

        assert 'Fruits Desserts' in content_names, \
            'Fruits Desserts should be in names ({0})'.format(
                content_names,
        )

        assert 'Tiramisu Recipe.document.html' in content_names,\
            'Tiramisu Recipe.document.html should be in names ({0})'.format(
                content_names,
        )
예제 #26
0
    def test_unit__move_and_rename_content__ok(self):
        provider = self._get_provider(self.app_config)
        environ = self._get_environ(
            provider,
            '*****@*****.**',
        )
        pie = provider.getResourceInst(
            '/Recipes/Desserts/Apple_Pie.txt',
            environ,
        )

        content_pie = self.session.query(ContentRevisionRO) \
            .filter(Content.label == 'Apple_Pie') \
            .one()  # It must exist only one revision, cf fixtures
        assert content_pie, 'Apple_Pie should be exist'
        content_pie_id = content_pie.content_id
        content_pie_parent = content_pie.parent
        eq_(
            content_pie_parent.label,
            'Desserts',
            msg='field parent should be Desserts',
        )

        pie.moveRecursive('/Others/Infos/Apple_Pie_RENAMED.txt')

        # Database content is moved
        content_pie = self.session.query(ContentRevisionRO) \
            .filter(ContentRevisionRO.content_id == content_pie_id) \
            .order_by(ContentRevisionRO.revision_id.desc()) \
            .first()
        assert content_pie.parent.label != content_pie_parent.label,\
            'file should be moved in Recipesf2 but is in {0}'.format(
                content_pie.parent.label
        )
        eq_(
            'Apple_Pie_RENAMED',
            content_pie.label,
            msg='File should be labeled Apple_Pie_RENAMED, not {0}'.format(
                content_pie.label
            )
        )
예제 #27
0
    def test_unit__list_workspaces_with_admin__ok(self):
        provider = self._get_provider(self.app_config)
        root = provider.getResourceInst(
            "/", self._get_environ(provider, "*****@*****.**"))
        assert root, "Path / should return a RootResource instance"
        assert isinstance(
            root, RootResource), "Path / should return a RootResource instance"

        children = root.getMemberList()
        eq_(
            2,
            len(children),
            msg="RootResource should return 3 workspaces instead {0}".format(
                len(children)),
        )

        workspaces_names = [w.name for w in children]
        assert "Recipes" in workspaces_names, "Recipes should be in names ({0})".format(
            workspaces_names)
        assert "Business" in workspaces_names, "Business should be in names ({0})".format(
            workspaces_names)
예제 #28
0
파일: test_webdav.py 프로젝트: uggla/tracim
    def test_unit__delete_content__ok(self):
        provider = self._get_provider(self.app_config)
        pie = provider.getResourceInst(
            '/Recipes/Desserts/Apple_Pie.txt',
            self._get_environ(
                provider,
                '*****@*****.**',
            ))

        content_pie = self.session.query(ContentRevisionRO) \
            .filter(Content.label == 'Apple_Pie') \
            .one()  # It must exist only one revision, cf fixtures
        eq_(False,
            content_pie.is_deleted,
            msg='Content should not be deleted !')
        content_pie_id = content_pie.content_id

        pie.delete()

        self.session.flush()
        content_pie = self.session.query(ContentRevisionRO) \
            .filter(Content.content_id == content_pie_id) \
            .order_by(Content.revision_id.desc()) \
            .first()
        eq_(True, content_pie.is_deleted, msg='Content should be deleted!')

        result = provider.getResourceInst(
            '/Recipes/Desserts/Apple_Pie.txt',
            self._get_environ(
                provider,
                '*****@*****.**',
            ))
        eq_(None,
            result,
            msg='Result should be None instead {0}'.format(result))
예제 #29
0
 def test_get_notifiable_roles(self):
     admin = self.session.query(User) \
         .filter(User.email == '*****@*****.**').one()
     wapi = WorkspaceApi(
         session=self.session,
         config=self.app_config,
         current_user=admin,
     )
     w = wapi.create_workspace(label='workspace w', save_now=True)
     uapi = UserApi(session=self.session,
                    current_user=admin,
                    config=self.app_config)
     u = uapi.create_minimal_user(email='[email protected]', save_now=True)
     eq_([], wapi.get_notifiable_roles(workspace=w))
     rapi = RoleApi(
         session=self.session,
         current_user=admin,
         config=self.app_config,
     )
     r = rapi.create_one(u, w, UserRoleInWorkspace.READER, with_notif=True)
     eq_([
         r,
     ], wapi.get_notifiable_roles(workspace=w))
     u.is_active = False
     eq_([], wapi.get_notifiable_roles(workspace=w))
예제 #30
0
 def test_children(self):
     admin = self.session.query(User).filter(
         User.email == '*****@*****.**'
     ).one()
     self._create_thread_and_test(
         workspace_name='workspace_1',
         folder_name='folder_1',
         thread_name='thread_1',
         user=admin
     )
     workspace = self.session.query(Workspace).filter(
         Workspace.label == 'workspace_1'
     ).one()
     content_api = ContentApi(
         session=self.session,
         current_user=admin,
         config=self.app_config,
     )
     folder = content_api.get_canonical_query().filter(
         Content.label == 'folder_1'
     ).one()
     eq_([folder, ], list(workspace.get_valid_children()))
예제 #31
0
    def test_new_revision(self):
        admin = self.session.query(User).filter(
            User.email == '*****@*****.**'
        ).one()
        workspace = self._create_workspace_and_test(
            name='workspace_1',
            user=admin
        )
        folder = self._create_content_and_test(
            name='folder_1',
            workspace=workspace,
            type=content_type_list.Folder.slug
        )
        page = self._create_content_and_test(
            workspace=workspace,
            parent=folder,
            name='file_1',
            description='content of file_1',
            type=content_type_list.Page.slug,
            owner=admin
        )

        self.session.flush()

        # Model create a new instance with list of column
        new_revision_by_model = ContentRevisionRO.new_from(page.revision)
        # Test create a new instance from dynamic listing of model
        # columns mapping
        new_revision_by_test = self._new_from(page.revision)

        new_revision_by_model_dict = self._get_dict_representation(
            new_revision_by_model
        )
        new_revision_by_test_dict = self._get_dict_representation(
            new_revision_by_test
        )

        # They must be identical
        eq_(new_revision_by_model_dict, new_revision_by_test_dict)
예제 #32
0
 def test_unit__get_all_manageable(self):
     admin = self.session.query(User) \
         .filter(User.email == '*****@*****.**').one()
     uapi = UserApi(
         session=self.session,
         current_user=admin,
         config=self.app_config,
     )
     # Checks a case without workspaces.
     wapi = WorkspaceApi(
         session=self.session,
         current_user=admin,
         config=self.app_config,
     )
     eq_([], wapi.get_all_manageable())
     # Checks an admin gets all workspaces.
     w4 = wapi.create_workspace(label='w4')
     w3 = wapi.create_workspace(label='w3')
     w2 = wapi.create_workspace(label='w2')
     w1 = wapi.create_workspace(label='w1')
     eq_([w1, w2, w3, w4], wapi.get_all_manageable())
     # Checks a regular user gets none workspace.
     gapi = GroupApi(
         session=self.session,
         current_user=None,
         config=self.app_config,
     )
     u = uapi.create_minimal_user('[email protected]', [gapi.get_one(Group.TIM_USER)],
                                  True)
     wapi = WorkspaceApi(
         session=self.session,
         current_user=u,
         config=self.app_config,
     )
     rapi = RoleApi(
         session=self.session,
         current_user=None,
         config=self.app_config,
     )
     rapi.create_one(u, w4, UserRoleInWorkspace.READER, False)
     rapi.create_one(u, w3, UserRoleInWorkspace.CONTRIBUTOR, False)
     rapi.create_one(u, w2, UserRoleInWorkspace.CONTENT_MANAGER, False)
     rapi.create_one(u, w1, UserRoleInWorkspace.WORKSPACE_MANAGER, False)
     eq_([], wapi.get_all_manageable())
     # Checks a manager gets only its own workspaces.
     u.groups.append(gapi.get_one(Group.TIM_MANAGER))
     rapi.delete_one(u.user_id, w2.workspace_id)
     rapi.create_one(u, w2, UserRoleInWorkspace.WORKSPACE_MANAGER, False)
     eq_([w1, w2], wapi.get_all_manageable())
예제 #33
0
파일: test_webdav.py 프로젝트: uggla/tracim
    def test_unit__move_content__ok__another_workspace(self):
        provider = self._get_provider(self.app_config)
        environ = self._get_environ(
            provider,
            '*****@*****.**',
        )
        content_to_move_res = provider.getResourceInst(
            '/Recipes/Desserts/Apple_Pie.txt',
            environ,
        )

        content_to_move = self.session.query(ContentRevisionRO) \
            .filter(Content.label == 'Apple_Pie') \
            .one()  # It must exist only one revision, cf fixtures
        assert content_to_move, 'Apple_Pie should be exist'
        content_to_move_id = content_to_move.content_id
        content_to_move_parent = content_to_move.parent
        eq_(
            content_to_move_parent.label,
            'Desserts',
            msg='field parent should be Desserts',
        )

        content_to_move_res.moveRecursive(
            '/Business/Menus/Apple_Pie.txt')  # move in Business, f1

        # Database content is moved
        content_to_move = self.session.query(ContentRevisionRO) \
            .filter(ContentRevisionRO.content_id == content_to_move_id) \
            .order_by(ContentRevisionRO.revision_id.desc()) \
            .first()

        assert content_to_move.parent, 'Content should have a parent'

        assert content_to_move.parent.label == 'Menus',\
            'file should be moved in Infos but is in {0}'.format(
                content_to_move.parent.label
        )
예제 #34
0
 def test_unit__get_all_manageable(self):
     admin = self.session.query(User) \
         .filter(User.email == '*****@*****.**').one()
     uapi = UserApi(
         session=self.session,
         current_user=admin,
         config=self.app_config,
     )
     # Checks a case without workspaces.
     wapi = WorkspaceApi(
         session=self.session,
         current_user=admin,
         config=self.app_config,
     )
     eq_([], wapi.get_all_manageable())
     # Checks an admin gets all workspaces.
     w4 = wapi.create_workspace(label='w4')
     w3 = wapi.create_workspace(label='w3')
     w2 = wapi.create_workspace(label='w2')
     w1 = wapi.create_workspace(label='w1')
     eq_([w1, w2, w3, w4], wapi.get_all_manageable())
     # Checks a regular user gets none workspace.
     gapi = GroupApi(
         session=self.session,
         current_user=None,
         config=self.app_config,
     )
     u = uapi.create_minimal_user('[email protected]', [gapi.get_one(Group.TIM_USER)], True)
     wapi = WorkspaceApi(
         session=self.session,
         current_user=u,
         config=self.app_config,
     )
     rapi = RoleApi(
         session=self.session,
         current_user=None,
         config=self.app_config,
     )
     rapi.create_one(u, w4, UserRoleInWorkspace.READER, False)
     rapi.create_one(u, w3, UserRoleInWorkspace.CONTRIBUTOR, False)
     rapi.create_one(u, w2, UserRoleInWorkspace.CONTENT_MANAGER, False)
     rapi.create_one(u, w1, UserRoleInWorkspace.WORKSPACE_MANAGER, False)
     eq_([], wapi.get_all_manageable())
     # Checks a manager gets only its own workspaces.
     u.groups.append(gapi.get_one(Group.TIM_MANAGER))
     rapi.delete_one(u.user_id, w2.workspace_id)
     rapi.create_one(u, w2, UserRoleInWorkspace.WORKSPACE_MANAGER, False)
     eq_([w1, w2], wapi.get_all_manageable())
예제 #35
0
    def test_unit__rename_content__ok(self):
        provider = self._get_provider(self.app_config)
        environ = self._get_environ(provider, "*****@*****.**")
        pie = provider.getResourceInst("/Recipes/Desserts/Apple_Pie.txt",
                                       environ)

        content_pie = (self.session.query(ContentRevisionRO).filter(
            Content.label == "Apple_Pie").one()
                       )  # It must exist only one revision, cf fixtures
        assert content_pie, "Apple_Pie should be exist"
        content_pie_id = content_pie.content_id

        pie.moveRecursive("/Recipes/Desserts/Apple_Pie_RENAMED.txt")

        # Database content is renamed
        content_pie = (self.session.query(ContentRevisionRO).filter(
            ContentRevisionRO.content_id == content_pie_id).order_by(
                ContentRevisionRO.revision_id.desc()).first())
        eq_(
            "Apple_Pie_RENAMED",
            content_pie.label,
            msg="File should be labeled Apple_Pie_RENAMED, not {0}".format(
                content_pie.label),
        )
예제 #36
0
    def test_unit__update_content__ok(self):
        provider = self._get_provider(self.app_config)
        environ = self._get_environ(
            provider,
            '*****@*****.**',
        )
        result = provider.getResourceInst(
            '/Recipes/Salads/greek_salad.txt',
            environ,
        )

        eq_(None, result, msg='Result should be None instead {0}'.format(
            result
        ))

        result = self._put_new_text_file(
            provider,
            environ,
            '/Recipes/Salads/greek_salad.txt',
            b'hello\n',
        )

        assert result, 'Result should not be None instead {0}'.format(
            result
        )
        eq_(
            b'hello\n',
            result.content.depot_file.file.read(),
            msg='fiel content should be "hello\n" but it is {0}'.format(
                result.content.depot_file.file.read()
            )
        )

        # ReInit DummyNotifier counter
        DummyNotifier.send_count = 0

        # Update file content
        write_object = result.beginWrite(
            contentType='application/octet-stream',
        )
        write_object.write(b'An other line')
        write_object.close()
        result.endWrite(withErrors=False)

        eq_(
            1,
            DummyNotifier.send_count,
            msg='DummyNotifier should send 1 mail, not {}'.format(
                DummyNotifier.send_count
            ),
        )
예제 #37
0
파일: test_webdav.py 프로젝트: uggla/tracim
    def test_unit__create_delete_and_create_file__ok(self):
        provider = self._get_provider(self.app_config)
        environ = self._get_environ(
            provider,
            '*****@*****.**',
        )
        new_file = provider.getResourceInst(
            '/Recipes/Salads/greek_salad.txt',
            environ,
        )

        eq_(None,
            new_file,
            msg='Result should be None instead {0}'.format(new_file))

        # create it
        new_file = self._put_new_text_file(
            provider,
            environ,
            '/Recipes/Salads/greek_salad.txt',
            b'Greek Salad\n',
        )
        assert new_file, 'Result should not be None instead {0}'.format(
            new_file)

        content_new_file = self.session.query(ContentRevisionRO) \
            .filter(Content.label == 'greek_salad') \
            .one()  # It must exist only one revision
        eq_(False,
            content_new_file.is_deleted,
            msg='Content should not be deleted!')
        content_new_file_id = content_new_file.content_id

        # Delete if
        new_file.delete()

        self.session.flush()
        content_pie = self.session.query(ContentRevisionRO) \
            .filter(Content.content_id == content_new_file_id) \
            .order_by(Content.revision_id.desc()) \
            .first()
        eq_(True, content_pie.is_deleted, msg='Content should be deleted!')

        result = provider.getResourceInst(
            '/Recipes/Salads/greek_salad.txt',
            self._get_environ(
                provider,
                '*****@*****.**',
            ))
        eq_(None,
            result,
            msg='Result should be None instead {0}'.format(result))

        # Then create it again
        new_file = self._put_new_text_file(
            provider,
            environ,
            '/Recipes/Salads/greek_salad.txt',
            b'greek_salad\n',
        )
        assert new_file, 'Result should not be None instead {0}'.format(
            new_file)

        # Previous file is still dleeted
        self.session.flush()
        content_pie = self.session.query(ContentRevisionRO) \
            .filter(Content.content_id == content_new_file_id) \
            .order_by(Content.revision_id.desc()) \
            .first()
        eq_(True, content_pie.is_deleted, msg='Content should be deleted!')

        # And an other file exist for this name
        content_new_new_file = self.session.query(ContentRevisionRO) \
            .filter(Content.label == 'greek_salad') \
            .order_by(Content.revision_id.desc()) \
            .first()
        assert content_new_new_file.content_id != content_new_file_id,\
            'Contents ids should not be same!'

        eq_(False,
            content_new_new_file.is_deleted,
            msg='Content should not be deleted!')