Пример #1
0
 def test_create_two_workspaces_same_name_different_user(self):
     # Context
     number_workspace = len(workspace_api.get_all())
     user1 = UserFixtures().create_user(username="******")
     user2 = UserFixtures().create_user(username="******")
     # Act
     workspace_api.create_and_save(TITLE_1, user1.id)
     workspace_api.create_and_save(TITLE_1, user2.id)
     # Assert
     self.assertEqual(number_workspace + 2, len(workspace_api.get_all()))
Пример #2
0
    def test_create_workspace(self):
        # Context
        workspace_count = len(workspace_api.get_all())
        self.assertEqual(workspace_count, 0)

        # Act
        WorkspaceFixtures().create_workspace("1", TITLE)

        # Assert
        list_workspace = workspace_api.get_all()
        self.assertEqual(list_workspace[0].title, TITLE)
        self.assertEqual(len(list_workspace), workspace_count + 1)
Пример #3
0
    def __init__(self, user, list_current_workspace=[], is_administration=False, show_global_workspace=False):
        self.WORKSPACES_OPTIONS = []
        self.WORKSPACES_OPTIONS.append(('', '-----------'))

        # We retrieve all workspaces with write access, or all workspaces if administration
        if is_administration:
            all_workspaces = workspace_api.get_all()
        else:
            all_workspaces = list(workspace_api.get_all_workspaces_with_write_access_by_user(user))
            if show_global_workspace:
                workspace_global = workspace_api.get_global_workspace()
                if workspace_global not in all_workspaces:
                    all_workspaces.append(workspace_global)

        if len(all_workspaces) == 0:
            raise DoesNotExist("You don't have access to any workspaces with sufficient rights to assign a " + get_data_label() + ".")

        # We sort by title, case insensitive
        sort_workspaces = sorted(all_workspaces, key=lambda s: s.title.lower())

        # We add them
        for workspace in sort_workspaces:
            is_workspace_global = workspace_api.is_workspace_global(workspace)
            if (list_current_workspace == [] or\
                    (len(list_current_workspace) > 0 and workspace not in list_current_workspace)) \
                            and ((show_global_workspace and is_workspace_global) or not is_workspace_global):

                self.WORKSPACES_OPTIONS.append((workspace.id,
                                                workspace.title + " (" + ("GLOBAL" if is_workspace_global else user_api.get_user_by_id(workspace.owner).username) + ")"))

        super(ChangeWorkspaceForm, self).__init__()
        self.fields['workspaces'].choices = []
        self.fields['workspaces'].choices = self.WORKSPACES_OPTIONS
Пример #4
0
    def get(self, request):
        """ Get all user workspaces

        Args:

            request: HTTP request

        Returns:

            - code: 200
              content: List of workspace
            - code: 500
              content: Internal server error
        """
        try:
            if request.user.is_superuser:
                workspace_list = workspace_api.get_all()
            else:
                workspace_list = workspace_api.get_all_by_owner(request.user)

            # Serialize object
            serializer = WorkspaceSerializer(workspace_list, many=True)

            # Return response
            return Response(serializer.data, status=status.HTTP_200_OK)
        except Exception as api_exception:
            content = {'message': api_exception.message}
            return Response(content,
                            status=status.HTTP_500_INTERNAL_SERVER_ERROR)
Пример #5
0
    def get(self, request, *args, **kwargs):
        """ Method GET

        Args:
            request:
            args:
            kwargs:

        Returns:
        """

        if self.administration:
            user_workspaces = workspace_api.get_all()
        else:
            # Get the workspace the user can read
            user_workspace_read = list(
                workspace_api.get_all_workspaces_with_read_access_by_user(
                    request.user))
            # Get the workspace the user can write
            user_workspace_write = list(
                workspace_api.get_all_workspaces_with_write_access_by_user(
                    request.user))
            # Get the merged list without doublons
            user_workspaces = user_workspace_read + list(
                set(user_workspace_write) - set(user_workspace_read))

        detailed_user_workspaces = []
        for user_workspace in user_workspaces:
            detailed_user_workspaces.append({
                'user':
                user_api.get_user_by_id(user_workspace.owner).username
                if not workspace_api.is_workspace_global(user_workspace) else
                "GLOBAL",
                'is_owner':
                self.administration
                or user_workspace.owner == str(request.user.id),
                'name':
                user_workspace.title,
                'workspace':
                user_workspace,
                'can_read':
                self.administration or user_workspace in user_workspace_read,
                'can_write':
                self.administration or user_workspace in user_workspace_write,
                'is_public':
                workspace_api.is_workspace_public(user_workspace),
                'is_global':
                workspace_api.is_workspace_global(user_workspace)
            })

        context = {
            'number_total': len(user_workspaces),
            'workspace_form': WorkspaceForm(),
            'user_data': detailed_user_workspaces,
            'document': dashboard_constants.FUNCTIONAL_OBJECT_ENUM.WORKSPACE,
            'template':
            dashboard_constants.DASHBOARD_WORKSPACES_TEMPLATE_TABLE,
            'create_workspace': not self.administration,
            'can_set_public': settings.CAN_SET_WORKSPACE_PUBLIC
        }

        modals = [dashboard_constants.MODALS_COMMON_DELETE]

        assets = {
            "css":
            copy.deepcopy(dashboard_constants.CSS_COMMON),
            "js": [
                {
                    "path": dashboard_constants.JS_USER_SELECTED_ELEMENT,
                    "is_raw": True
                },
                {
                    "path": dashboard_constants.JS_COMMON_FUNCTION_DELETE,
                    "is_raw": False
                },
                {
                    "path": 'core_dashboard_common_app/user/js/init.raw.js',
                    "is_raw": True
                },
            ]
        }

        if not self.administration:
            modals.append(
                "core_main_app/user/workspaces/list/create_workspace.html")
            assets['js'].append({
                "path": 'core_main_app/user/js/workspaces/create_workspace.js',
                "is_raw": False
            })

        if settings.CAN_SET_WORKSPACE_PUBLIC:
            modals.append(
                "core_main_app/user/workspaces/list/modals/set_public.html")
            assets['js'].append({
                "path":
                'core_main_app/user/js/workspaces/list/modals/set_public.js',
                "is_raw": False
            })
            modals.append(
                "core_main_app/user/workspaces/list/modals/set_private.html")
            assets['js'].append({
                "path":
                'core_main_app/user/js/workspaces/list/modals/set_private.js',
                "is_raw": False
            })

        return self.common_render(request,
                                  self.template,
                                  context=context,
                                  assets=assets,
                                  modals=modals)
Пример #6
0
    def get(self, request, *args, **kwargs):
        """Method GET

        Args:
            request:
            args:
            kwargs:

        Returns:
        """

        if self.administration:
            user_workspaces = workspace_api.get_all()
            user_workspaces_count = user_workspaces.count()
        else:
            # Get the workspace the user can read
            user_workspace_read = list(
                workspace_api.get_all_workspaces_with_read_access_by_user(request.user)
            )
            # Get the workspace the user can write
            user_workspace_write = list(
                workspace_api.get_all_workspaces_with_write_access_by_user(request.user)
            )
            # Get the merged list without doublons
            user_workspaces = user_workspace_read + list(
                set(user_workspace_write) - set(user_workspace_read)
            )
            user_workspaces_count = len(user_workspaces)

        detailed_user_workspaces = []
        for user_workspace in user_workspaces:
            try:
                username = (
                    user_api.get_user_by_id(user_workspace.owner).username
                    if not workspace_api.is_workspace_global(user_workspace)
                    else "GLOBAL"
                )
            except ObjectDoesNotExist:
                username = "******"
            detailed_user_workspaces.append(
                {
                    "user": username,
                    "is_owner": self.administration
                    or user_workspace.owner == str(request.user.id),
                    "name": user_workspace.title,
                    "workspace": user_workspace,
                    "can_read": self.administration
                    or user_workspace in user_workspace_read,
                    "can_write": self.administration
                    or user_workspace in user_workspace_write,
                    "is_public": workspace_api.is_workspace_public(user_workspace),
                    "is_global": workspace_api.is_workspace_global(user_workspace),
                }
            )

        context = {
            "number_total": user_workspaces_count,
            "workspace_form": WorkspaceForm(),
            "user_data": detailed_user_workspaces,
            "document": dashboard_constants.FUNCTIONAL_OBJECT_ENUM.WORKSPACE.value,
            "template": dashboard_constants.DASHBOARD_WORKSPACES_TEMPLATE_TABLE,
            "create_workspace": not self.administration,
            "can_set_public": settings.CAN_SET_WORKSPACE_PUBLIC,
        }

        modals = [dashboard_constants.MODALS_COMMON_DELETE]

        assets = {
            "css": copy.deepcopy(dashboard_constants.CSS_COMMON),
            "js": [
                {"path": dashboard_constants.JS_USER_SELECTED_ELEMENT, "is_raw": True},
                {
                    "path": dashboard_constants.JS_COMMON_FUNCTION_DELETE,
                    "is_raw": False,
                },
                {
                    "path": "core_dashboard_common_app/user/js/init.raw.js",
                    "is_raw": True,
                },
            ],
        }

        if not self.administration:
            modals.append("core_main_app/user/workspaces/list/create_workspace.html")
            assets["js"].append(
                {
                    "path": "core_main_app/user/js/workspaces/create_workspace.js",
                    "is_raw": False,
                }
            )

        if settings.CAN_SET_WORKSPACE_PUBLIC:
            modals.append("core_main_app/user/workspaces/list/modals/set_public.html")
            assets["js"].append(
                {
                    "path": "core_main_app/user/js/workspaces/list/modals/set_public.js",
                    "is_raw": False,
                }
            )
            modals.append("core_main_app/user/workspaces/list/modals/set_private.html")
            assets["js"].append(
                {
                    "path": "core_main_app/user/js/workspaces/list/modals/set_private.js",
                    "is_raw": False,
                }
            )

        return self.common_render(
            request, self.template, context=context, assets=assets, modals=modals
        )