From cf0628099bfde3c4853b5011533acc22b3560509 Mon Sep 17 00:00:00 2001 From: hkad98 Date: Wed, 25 May 2022 09:24:41 +0200 Subject: [PATCH 1/3] NAS-3743 extended tests-support * extended tests-support with user groups inheritance --- tests-support/fixtures/user_group.json | 7 ------- tests-support/fixtures/user_groups.json | 28 +++++++++++++++++++++++++ tests-support/upload_demo_layout.py | 6 ++++-- 3 files changed, 32 insertions(+), 9 deletions(-) delete mode 100644 tests-support/fixtures/user_group.json create mode 100644 tests-support/fixtures/user_groups.json diff --git a/tests-support/fixtures/user_group.json b/tests-support/fixtures/user_group.json deleted file mode 100644 index b6635738e..000000000 --- a/tests-support/fixtures/user_group.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "data": { - "attributes" : {}, - "id" : "demoGroup", - "type" : "userGroup" - } -} diff --git a/tests-support/fixtures/user_groups.json b/tests-support/fixtures/user_groups.json new file mode 100644 index 000000000..9a92c7f64 --- /dev/null +++ b/tests-support/fixtures/user_groups.json @@ -0,0 +1,28 @@ +{ + "userGroups": [ + { + "id": "adminGroup" + }, + { + "id": "demoGroup" + }, + { + "id": "adminQA1Group", + "parents": [ + { + "id": "adminGroup", + "type": "userGroup" + } + ] + }, + { + "id": "visitorsGroup", + "parents": [ + { + "id": "demoGroup", + "type": "userGroup" + } + ] + } + ] +} diff --git a/tests-support/upload_demo_layout.py b/tests-support/upload_demo_layout.py index 4c7d1ebc9..d3461ab54 100644 --- a/tests-support/upload_demo_layout.py +++ b/tests-support/upload_demo_layout.py @@ -88,7 +88,7 @@ def create_entity(entity_id, entity_data, entity_type, api_path, action): def update_layout(): - user_group = read_data_from_file(fixtures_dir / "user_group.json") + user_groups = read_data_from_file(fixtures_dir / "user_groups.json") user_auth = read_data_from_file(fixtures_dir / "user_auth.json") user = read_data_from_file(fixtures_dir / "user.json") data_sources = read_data_from_file(fixtures_dir / "demo_data_sources.json") @@ -98,7 +98,9 @@ def update_layout(): # TODO: use python-sdk support wait_platform_up() - create_entity(user_group["data"]["id"], user_group, "userGroups", "api/entities/userGroups", rest_op_jsonapi) + print("Uploading userGroups", flush=True) + rest_op_default("put", "api/layout/userGroups", user_groups) + response = create_entity(user_auth["email"], user_auth, "user auth", "api/auth/users", rest_op_default) user["data"]["attributes"]["authenticationId"] = response["authenticationId"] create_entity(user["data"]["id"], user, "user", "api/entities/users", rest_op_jsonapi) From 6a286ba0bf94b9f19687fafb1fff3388ffb69614 Mon Sep 17 00:00:00 2001 From: hkad98 Date: Wed, 25 May 2022 09:56:43 +0200 Subject: [PATCH 2/3] NAS-3743 added user service * added user service supporting entities CRUD operations and declarative operations * added convertor from snake to camel case and vice versa --- .../gooddata_sdk/catalog/identifier.py | 11 +++ .../gooddata_sdk/catalog/user/__init__.py | 1 + .../user/declarative_model/__init__.py | 1 + .../catalog/user/declarative_model/user.py | 60 ++++++++++++ .../user/declarative_model/user_group.py | 59 +++++++++++ .../catalog/user/entity_model/__init__.py | 1 + .../catalog/user/entity_model/user.py | 71 ++++++++++++++ .../catalog/user/entity_model/user_group.py | 52 ++++++++++ .../gooddata_sdk/catalog/user/service.py | 97 +++++++++++++++++++ gooddata-sdk/gooddata_sdk/sdk.py | 6 ++ gooddata-sdk/gooddata_sdk/utils.py | 36 ++++++- 11 files changed, 394 insertions(+), 1 deletion(-) create mode 100644 gooddata-sdk/gooddata_sdk/catalog/user/__init__.py create mode 100644 gooddata-sdk/gooddata_sdk/catalog/user/declarative_model/__init__.py create mode 100644 gooddata-sdk/gooddata_sdk/catalog/user/declarative_model/user.py create mode 100644 gooddata-sdk/gooddata_sdk/catalog/user/declarative_model/user_group.py create mode 100644 gooddata-sdk/gooddata_sdk/catalog/user/entity_model/__init__.py create mode 100644 gooddata-sdk/gooddata_sdk/catalog/user/entity_model/user.py create mode 100644 gooddata-sdk/gooddata_sdk/catalog/user/entity_model/user_group.py create mode 100644 gooddata-sdk/gooddata_sdk/catalog/user/service.py diff --git a/gooddata-sdk/gooddata_sdk/catalog/identifier.py b/gooddata-sdk/gooddata_sdk/catalog/identifier.py index 0572eb99c..07ecf78e6 100644 --- a/gooddata-sdk/gooddata_sdk/catalog/identifier.py +++ b/gooddata-sdk/gooddata_sdk/catalog/identifier.py @@ -8,6 +8,7 @@ from gooddata_metadata_client.model.assignee_identifier import AssigneeIdentifier from gooddata_metadata_client.model.grain_identifier import GrainIdentifier from gooddata_metadata_client.model.reference_identifier import ReferenceIdentifier +from gooddata_metadata_client.model.user_group_identifier import UserGroupIdentifier from gooddata_metadata_client.model.workspace_identifier import WorkspaceIdentifier from gooddata_sdk.catalog.base import Base @@ -48,3 +49,13 @@ class CatalogAssigneeIdentifier(Base): @staticmethod def client_class() -> Type[AssigneeIdentifier]: return AssigneeIdentifier + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogUserGroupIdentifier(Base): + id: str + type: str = "userGroup" + + @staticmethod + def client_class() -> Type[UserGroupIdentifier]: + return UserGroupIdentifier diff --git a/gooddata-sdk/gooddata_sdk/catalog/user/__init__.py b/gooddata-sdk/gooddata_sdk/catalog/user/__init__.py new file mode 100644 index 000000000..67106a19b --- /dev/null +++ b/gooddata-sdk/gooddata_sdk/catalog/user/__init__.py @@ -0,0 +1 @@ +# (C) 2022 GoodData Corporation diff --git a/gooddata-sdk/gooddata_sdk/catalog/user/declarative_model/__init__.py b/gooddata-sdk/gooddata_sdk/catalog/user/declarative_model/__init__.py new file mode 100644 index 000000000..67106a19b --- /dev/null +++ b/gooddata-sdk/gooddata_sdk/catalog/user/declarative_model/__init__.py @@ -0,0 +1 @@ +# (C) 2022 GoodData Corporation diff --git a/gooddata-sdk/gooddata_sdk/catalog/user/declarative_model/user.py b/gooddata-sdk/gooddata_sdk/catalog/user/declarative_model/user.py new file mode 100644 index 000000000..a409a5bb5 --- /dev/null +++ b/gooddata-sdk/gooddata_sdk/catalog/user/declarative_model/user.py @@ -0,0 +1,60 @@ +# (C) 2022 GoodData Corporation +from __future__ import annotations + +from pathlib import Path +from typing import List, Optional, Type + +import attr + +from gooddata_metadata_client.model.declarative_user import DeclarativeUser +from gooddata_metadata_client.model.declarative_users import DeclarativeUsers +from gooddata_sdk.catalog.base import Base +from gooddata_sdk.catalog.identifier import CatalogUserGroupIdentifier +from gooddata_sdk.utils import create_directory, get_sorted_yaml_files, read_layout_from_file, write_layout_to_file + +LAYOUT_USERS_DIR = "users" + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogDeclarativeUsers(Base): + users: List[CatalogDeclarativeUser] + + @staticmethod + def client_class() -> Type[DeclarativeUsers]: + return DeclarativeUsers + + @classmethod + def load_from_disk(cls, layout_organization_folder: Path) -> CatalogDeclarativeUsers: + users_directory = layout_organization_folder / LAYOUT_USERS_DIR + user_files = get_sorted_yaml_files(users_directory) + users = [] + for user_file in user_files: + users.append(CatalogDeclarativeUser.load_from_disk(user_file)) + return cls(users=users) + + def store_to_disk(self, layout_organization_folder: Path) -> None: + users_directory = layout_organization_folder / LAYOUT_USERS_DIR + create_directory(users_directory) + for user in self.users: + user.store_to_disk(users_directory) + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogDeclarativeUser(Base): + id: str + auth_id: Optional[str] = None + user_groups: List[CatalogUserGroupIdentifier] = [] + + @staticmethod + def client_class() -> Type[DeclarativeUser]: + return DeclarativeUser + + def store_to_disk(self, users_directory: Path) -> None: + user_path = users_directory / f"{self.id}.yaml" + user_data = self.to_dict(camel_case=True) + write_layout_to_file(user_path, user_data) + + @classmethod + def load_from_disk(cls, users_directory: Path) -> CatalogDeclarativeUser: + data = read_layout_from_file(users_directory) + return cls.from_dict(data, camel_case=True) diff --git a/gooddata-sdk/gooddata_sdk/catalog/user/declarative_model/user_group.py b/gooddata-sdk/gooddata_sdk/catalog/user/declarative_model/user_group.py new file mode 100644 index 000000000..b4e76f833 --- /dev/null +++ b/gooddata-sdk/gooddata_sdk/catalog/user/declarative_model/user_group.py @@ -0,0 +1,59 @@ +# (C) 2022 GoodData Corporation +from __future__ import annotations + +from pathlib import Path +from typing import List, Optional, Type + +import attr + +from gooddata_metadata_client.model.declarative_user_group import DeclarativeUserGroup +from gooddata_metadata_client.model.declarative_user_groups import DeclarativeUserGroups +from gooddata_sdk.catalog.base import Base +from gooddata_sdk.catalog.identifier import CatalogUserGroupIdentifier +from gooddata_sdk.utils import create_directory, get_sorted_yaml_files, read_layout_from_file, write_layout_to_file + +LAYOUT_USER_GROUPS_DIR = "user_groups" + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogDeclarativeUserGroups(Base): + user_groups: List[CatalogDeclarativeUserGroup] = [] + + @staticmethod + def client_class() -> Type[DeclarativeUserGroups]: + return DeclarativeUserGroups + + @classmethod + def load_from_disk(cls, layout_organization_folder: Path) -> CatalogDeclarativeUserGroups: + user_groups_directory = layout_organization_folder / LAYOUT_USER_GROUPS_DIR + user_group_files = get_sorted_yaml_files(user_groups_directory) + user_groups = [] + for user_group_file in user_group_files: + user_groups.append(CatalogDeclarativeUserGroup.load_from_disk(user_group_file)) + return cls(user_groups=user_groups) + + def store_to_disk(self, layout_organization_folder: Path) -> None: + user_groups_directory = layout_organization_folder / LAYOUT_USER_GROUPS_DIR + create_directory(user_groups_directory) + for user_group in self.user_groups: + user_group.store_to_disk(user_groups_directory) + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogDeclarativeUserGroup(Base): + id: str + parents: Optional[List[CatalogUserGroupIdentifier]] = None + + @staticmethod + def client_class() -> Type[DeclarativeUserGroup]: + return DeclarativeUserGroup + + def store_to_disk(self, user_groups_directory: Path) -> None: + user_group_path = user_groups_directory / f"{self.id}.yaml" + user_data = self.to_dict(camel_case=True) + write_layout_to_file(user_group_path, user_data) + + @classmethod + def load_from_disk(cls, user_groups_directory: Path) -> CatalogDeclarativeUserGroup: + data = read_layout_from_file(user_groups_directory) + return cls.from_dict(data, camel_case=True) diff --git a/gooddata-sdk/gooddata_sdk/catalog/user/entity_model/__init__.py b/gooddata-sdk/gooddata_sdk/catalog/user/entity_model/__init__.py new file mode 100644 index 000000000..67106a19b --- /dev/null +++ b/gooddata-sdk/gooddata_sdk/catalog/user/entity_model/__init__.py @@ -0,0 +1 @@ +# (C) 2022 GoodData Corporation diff --git a/gooddata-sdk/gooddata_sdk/catalog/user/entity_model/user.py b/gooddata-sdk/gooddata_sdk/catalog/user/entity_model/user.py new file mode 100644 index 000000000..3b64c95a3 --- /dev/null +++ b/gooddata-sdk/gooddata_sdk/catalog/user/entity_model/user.py @@ -0,0 +1,71 @@ +# (C) 2022 GoodData Corporation +from __future__ import annotations + +from typing import List, Optional, Type + +import attr + +from gooddata_metadata_client.model.json_api_user_in import JsonApiUserIn +from gooddata_metadata_client.model.json_api_user_in_document import JsonApiUserInDocument +from gooddata_sdk.catalog.base import Base +from gooddata_sdk.catalog.user.entity_model.user_group import CatalogUserGroup + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogUserDocument(Base): + data: CatalogUser + + @staticmethod + def client_class() -> Type[JsonApiUserInDocument]: + return JsonApiUserInDocument + + @classmethod + def create_user( + cls, user_id: str, authentication_id: Optional[str] = None, user_groups: Optional[List[str]] = None + ) -> CatalogUserDocument: + attributes = CatalogUserAttributes(authentication_id=authentication_id) + relationships = None + if user_groups is not None: + relationships = CatalogUserRelationships( + user_groups=CatalogUserGroupsData(data=[CatalogUserGroup(id=user_group) for user_group in user_groups]) + ) + user = CatalogUser(id=user_id, attributes=attributes, relationships=relationships) + return cls(data=user) + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogUser(Base): + id: str + attributes: Optional[CatalogUserAttributes] = None + relationships: Optional[CatalogUserRelationships] = None + + @staticmethod + def client_class() -> Type[JsonApiUserIn]: + return JsonApiUserIn + + @property + def get_user_groups(self) -> Optional[List[str]]: + return self.relationships.get_user_groups if self.relationships is not None else None + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogUserAttributes(Base): + authentication_id: Optional[str] = None + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogUserRelationships(Base): + user_groups: Optional[CatalogUserGroupsData] = None + + @property + def get_user_groups(self) -> Optional[List[str]]: + return self.user_groups.get_user_groups if self.user_groups is not None else None + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogUserGroupsData(Base): + data: List[CatalogUserGroup] + + @property + def get_user_groups(self) -> Optional[List[str]]: + return [user_group.id for user_group in self.data] diff --git a/gooddata-sdk/gooddata_sdk/catalog/user/entity_model/user_group.py b/gooddata-sdk/gooddata_sdk/catalog/user/entity_model/user_group.py new file mode 100644 index 000000000..4026c2733 --- /dev/null +++ b/gooddata-sdk/gooddata_sdk/catalog/user/entity_model/user_group.py @@ -0,0 +1,52 @@ +# (C) 2022 GoodData Corporation +from __future__ import annotations + +from typing import List, Optional, Type + +import attr + +from gooddata_metadata_client.model.json_api_user_group_in import JsonApiUserGroupIn +from gooddata_metadata_client.model.json_api_user_group_in_document import JsonApiUserGroupInDocument +from gooddata_sdk.catalog.base import Base + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogUserGroupDocument(Base): + data: CatalogUserGroup + + @staticmethod + def client_class() -> Type[JsonApiUserGroupInDocument]: + return JsonApiUserGroupInDocument + + @classmethod + def create_user_group( + cls, user_group_id: str, user_group_parents_id: Optional[List[str]] = None + ) -> CatalogUserGroupDocument: + relationships = None + if user_group_parents_id is not None: + relationships = CatalogUserGroupRelationships( + parents=CatalogUserGroupParents( + data=[CatalogUserGroup(id=user_group_parent_id) for user_group_parent_id in user_group_parents_id] + ) + ) + return cls(data=CatalogUserGroup(id=user_group_id, relationships=relationships)) + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogUserGroup(Base): + id: str + relationships: Optional[CatalogUserGroupRelationships] = None + + @staticmethod + def client_class() -> Type[JsonApiUserGroupIn]: + return JsonApiUserGroupIn + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogUserGroupRelationships(Base): + parents: Optional[CatalogUserGroupParents] = None + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogUserGroupParents(Base): + data: Optional[List[CatalogUserGroup]] = None diff --git a/gooddata-sdk/gooddata_sdk/catalog/user/service.py b/gooddata-sdk/gooddata_sdk/catalog/user/service.py new file mode 100644 index 000000000..0b0c7df87 --- /dev/null +++ b/gooddata-sdk/gooddata_sdk/catalog/user/service.py @@ -0,0 +1,97 @@ +# (C) 2022 GoodData Corporation +from __future__ import annotations + +import functools +from pathlib import Path +from typing import List, Optional + +from gooddata_sdk.catalog.catalog_service_base import CatalogServiceBase +from gooddata_sdk.catalog.user.declarative_model.user import CatalogDeclarativeUsers +from gooddata_sdk.catalog.user.declarative_model.user_group import CatalogDeclarativeUserGroups +from gooddata_sdk.catalog.user.entity_model.user import CatalogUser, CatalogUserDocument +from gooddata_sdk.catalog.user.entity_model.user_group import CatalogUserGroup, CatalogUserGroupDocument +from gooddata_sdk.utils import load_all_entities, load_all_entities_dict + + +class CatalogUserService(CatalogServiceBase): + def list_users(self) -> List[CatalogUser]: + get_users = functools.partial( + self._entities_api.get_all_entities_users, + include=["userGroups"], + _check_return_type=False, + ) + users = load_all_entities_dict(get_users, camel_case=False) + return [CatalogUser.from_dict(v, camel_case=False) for v in users["data"]] + + def list_user_groups(self) -> List[CatalogUserGroup]: + get_user_groups = functools.partial( + self._entities_api.get_all_entities_user_groups, + include=["userGroups"], + _check_return_type=False, + ) + user_groups = load_all_entities(get_user_groups) + return [CatalogUserGroup.from_api(v) for v in user_groups.data] + + def get_user(self, user_id: str) -> CatalogUser: + user_dict = self._entities_api.get_entity_users(id=user_id, include=["userGroups"]).data.to_dict( + camel_case=False + ) + return CatalogUser.from_dict(user_dict, camel_case=False) + + def create_user( + self, user_id: str, authentication_id: Optional[str] = None, user_groups: Optional[list[str]] = None + ) -> None: + user_document = CatalogUserDocument.create_user(user_id, authentication_id, user_groups) + self._entities_api.create_entity_users(json_api_user_in_document=user_document.to_api()) + + def delete_user(self, user_id: str) -> None: + self._entities_api.delete_entity_users(id=user_id) + + def get_user_group(self, user_group_id: str) -> CatalogUserGroup: + user_group = self._entities_api.get_entity_user_groups(id=user_group_id, include=["ALL"]).data.to_dict( + camel_case=False + ) + return CatalogUserGroup.from_dict(user_group, camel_case=False) + + def create_user_group(self, user_group_id: str, user_group_parents_id: Optional[List[str]] = None) -> None: + user_group_document = CatalogUserGroupDocument.create_user_group( + user_group_id=user_group_id, user_group_parents_id=user_group_parents_id + ) + self._entities_api.create_entity_user_groups(user_group_document.to_api()) + + def delete_user_group(self, user_group_id: str) -> None: + self._entities_api.delete_entity_user_groups(id=user_group_id) + + # Declarative methods for User service are listed below + + def get_declarative_users(self) -> CatalogDeclarativeUsers: + return CatalogDeclarativeUsers.from_api(self._layout_api.get_users_layout()) + + def get_declarative_user_groups(self) -> CatalogDeclarativeUserGroups: + return CatalogDeclarativeUserGroups.from_api(self._layout_api.get_user_groups_layout()) + + def put_declarative_users(self, users: CatalogDeclarativeUsers) -> None: + self._layout_api.put_users_layout(users.to_api()) + + def put_declarative_user_groups(self, user_groups: CatalogDeclarativeUserGroups) -> None: + self._layout_api.put_user_groups_layout(user_groups.to_api()) + + def load_declarative_users(self, layout_root_path: Path = Path.cwd()) -> CatalogDeclarativeUsers: + return CatalogDeclarativeUsers.load_from_disk(self.layout_organization_folder(layout_root_path)) + + def load_declarative_user_groups(self, layout_root_path: Path = Path.cwd()) -> CatalogDeclarativeUserGroups: + return CatalogDeclarativeUserGroups.load_from_disk(self.layout_organization_folder(layout_root_path)) + + def store_declarative_users(self, layout_root_path: Path = Path.cwd()) -> None: + self.get_declarative_users().store_to_disk(self.layout_organization_folder(layout_root_path)) + + def store_declarative_user_groups(self, layout_root_path: Path = Path.cwd()) -> None: + self.get_declarative_user_groups().store_to_disk(self.layout_organization_folder(layout_root_path)) + + def load_and_put_declarative_users(self, layout_root_path: Path = Path.cwd()) -> None: + declarative_users = self.load_declarative_users(layout_root_path) + self.put_declarative_users(declarative_users) + + def load_and_put_declarative_user_groups(self, layout_root_path: Path = Path.cwd()) -> None: + declarative_user_groups = self.load_declarative_user_groups(layout_root_path) + self.put_declarative_user_groups(declarative_user_groups) diff --git a/gooddata-sdk/gooddata_sdk/sdk.py b/gooddata-sdk/gooddata_sdk/sdk.py index 5199affc7..1e4380420 100644 --- a/gooddata-sdk/gooddata_sdk/sdk.py +++ b/gooddata-sdk/gooddata_sdk/sdk.py @@ -5,6 +5,7 @@ from gooddata_sdk.catalog.data_source.service import CatalogDataSourceService from gooddata_sdk.catalog.organization.service import CatalogOrganizationService +from gooddata_sdk.catalog.user.service import CatalogUserService from gooddata_sdk.catalog.workspace.service import CatalogWorkspaceContentService, CatalogWorkspaceService from gooddata_sdk.client import GoodDataApiClient from gooddata_sdk.compute.service import ComputeService @@ -47,6 +48,7 @@ def __init__(self, client: GoodDataApiClient) -> None: self._catalog_workspace_content = CatalogWorkspaceContentService(self._client) self._catalog_data_source = CatalogDataSourceService(self._client) self._catalog_organization = CatalogOrganizationService(self._client) + self._catalog_user = CatalogUserService(self._client) self._compute = ComputeService(self._client) self._insights = InsightService(self._client) self._tables = TableService(self._client) @@ -83,3 +85,7 @@ def tables(self) -> TableService: @property def support(self) -> SupportService: return self._support + + @property + def catalog_user(self) -> CatalogUserService: + return self._catalog_user diff --git a/gooddata-sdk/gooddata_sdk/utils.py b/gooddata-sdk/gooddata_sdk/utils.py index 706aedbb2..035a27ad1 100644 --- a/gooddata-sdk/gooddata_sdk/utils.py +++ b/gooddata-sdk/gooddata_sdk/utils.py @@ -3,8 +3,9 @@ import functools import os +import re from pathlib import Path -from typing import Any, Dict, NamedTuple, Union, cast +from typing import Any, Callable, Dict, NamedTuple, Union, cast import yaml @@ -101,6 +102,14 @@ def load_all_entities(get_page_func: functools.partial[Any], page_size: int = 50 return all_paged_entities +def load_all_entities_dict( + get_page_func: functools.partial[Any], page_size: int = 500, camel_case: bool = False +) -> dict[str, Any]: + all_entities = load_all_entities(get_page_func, page_size) + all_entities_dict = {"data": all_entities.data, "included": all_entities.included} + return all_entities_dict if camel_case else change_case(all_entities_dict, camel_to_snake) + + class SideLoads: def __init__(self, objs: list[Any]) -> None: self._objects = dict([(f"{o['type']}/{o['id']}", o) for o in objs]) @@ -148,3 +157,28 @@ def read_layout_from_file(path: Path) -> Any: return yaml.safe_load(f) except yaml.YAMLError as exc: raise ValueError(f"File [{path}] has wrong yaml format. Following exception was raised during loading: {exc}") + + +def camel_to_snake(camel_case_str: str) -> str: + return re.sub(r"([A-Z]+)", r"_\1", camel_case_str).lower() + + +def snake_to_camel(snake_case_str: str) -> str: + components = snake_case_str.split("_") + return components[0] + "".join(x.title() for x in components[1:]) + + +def change_case_helper(value: Union[list, dict, str], case: Callable[[str], str]) -> Union[list, dict, str]: + if isinstance(value, list): + return [change_case_helper(v, case) for v in value] + elif isinstance(value, dict): + return change_case(value, case) + else: + return value + + +def change_case(dictionary: dict, case: Callable[[str], str]) -> dict: + temp = dict() + for k, v in dictionary.items(): + temp[case(k)] = change_case_helper(v, case) + return temp From 5e1e572e7c769f9026558d7020fe345bc06f8297 Mon Sep 17 00:00:00 2001 From: hkad98 Date: Wed, 25 May 2022 09:58:06 +0200 Subject: [PATCH 3/3] NAS-3743 user service test support * added test support for user service * added test support for utils --- .../expected/declarative_user_groups.json | 28 + .../catalog/expected/declarative_users.json | 33 + .../fixtures/users/create_delete_user.json | 527 ++++++++++++++++ .../users/create_delete_user_group.json | 527 ++++++++++++++++ .../users/get_declarative_user_groups.json | 181 ++++++ .../fixtures/users/get_declarative_users.json | 181 ++++++ .../catalog/fixtures/users/get_user.json | 93 +++ .../fixtures/users/get_user_group.json | 93 +++ .../fixtures/users/list_user_groups.json | 93 +++ .../catalog/fixtures/users/list_users.json | 93 +++ .../load_and_put_declarative_user_groups.json | 597 ++++++++++++++++++ .../users/load_and_put_declarative_users.json | 597 ++++++++++++++++++ .../users/put_declarative_user_groups.json | 591 +++++++++++++++++ .../fixtures/users/put_declarative_users.json | 427 +++++++++++++ .../users/store_declarative_user_groups.json | 521 +++++++++++++++ .../users/store_declarative_users.json | 521 +++++++++++++++ .../default/user_groups/adminGroup.yaml | 2 + .../default/user_groups/adminQA1Group.yaml | 5 + .../default/user_groups/demoGroup.yaml | 2 + .../default/user_groups/visitorsGroup.yaml | 5 + .../gooddata_layouts/default/users/admin.yaml | 5 + .../gooddata_layouts/default/users/demo.yaml | 6 + .../gooddata_layouts/default/users/demo2.yaml | 6 + .../catalog/test_catalog_user_service.py | 279 ++++++++ gooddata-sdk/tests/gd_test_config.yaml | 7 + gooddata-sdk/tests/utils/__init__.py | 1 + gooddata-sdk/tests/utils/test_dictionary.json | 211 +++++++ gooddata-sdk/tests/utils/test_utils.py | 27 + 28 files changed, 5659 insertions(+) create mode 100644 gooddata-sdk/tests/catalog/expected/declarative_user_groups.json create mode 100644 gooddata-sdk/tests/catalog/expected/declarative_users.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/create_delete_user.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/create_delete_user_group.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/get_declarative_user_groups.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/get_declarative_users.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/get_user.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/get_user_group.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/list_user_groups.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/list_users.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_user_groups.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_users.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/put_declarative_user_groups.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/put_declarative_users.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/store_declarative_user_groups.json create mode 100644 gooddata-sdk/tests/catalog/fixtures/users/store_declarative_users.json create mode 100644 gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/adminGroup.yaml create mode 100644 gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/adminQA1Group.yaml create mode 100644 gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/demoGroup.yaml create mode 100644 gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/visitorsGroup.yaml create mode 100644 gooddata-sdk/tests/catalog/load/gooddata_layouts/default/users/admin.yaml create mode 100644 gooddata-sdk/tests/catalog/load/gooddata_layouts/default/users/demo.yaml create mode 100644 gooddata-sdk/tests/catalog/load/gooddata_layouts/default/users/demo2.yaml create mode 100644 gooddata-sdk/tests/catalog/test_catalog_user_service.py create mode 100644 gooddata-sdk/tests/utils/__init__.py create mode 100644 gooddata-sdk/tests/utils/test_dictionary.json create mode 100644 gooddata-sdk/tests/utils/test_utils.py diff --git a/gooddata-sdk/tests/catalog/expected/declarative_user_groups.json b/gooddata-sdk/tests/catalog/expected/declarative_user_groups.json new file mode 100644 index 000000000..9a92c7f64 --- /dev/null +++ b/gooddata-sdk/tests/catalog/expected/declarative_user_groups.json @@ -0,0 +1,28 @@ +{ + "userGroups": [ + { + "id": "adminGroup" + }, + { + "id": "demoGroup" + }, + { + "id": "adminQA1Group", + "parents": [ + { + "id": "adminGroup", + "type": "userGroup" + } + ] + }, + { + "id": "visitorsGroup", + "parents": [ + { + "id": "demoGroup", + "type": "userGroup" + } + ] + } + ] +} diff --git a/gooddata-sdk/tests/catalog/expected/declarative_users.json b/gooddata-sdk/tests/catalog/expected/declarative_users.json new file mode 100644 index 000000000..00a4b9cc5 --- /dev/null +++ b/gooddata-sdk/tests/catalog/expected/declarative_users.json @@ -0,0 +1,33 @@ +{ + "users": [ + { + "id": "admin", + "userGroups": [ + { + "id": "adminGroup", + "type": "userGroup" + } + ] + }, + { + "authId": "CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs", + "id": "demo", + "userGroups": [ + { + "id": "adminGroup", + "type": "userGroup" + } + ] + }, + { + "authId": "CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs", + "id": "demo2", + "userGroups": [ + { + "id": "demoGroup", + "type": "userGroup" + } + ] + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user.json b/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user.json new file mode 100644 index 000000000..2d744e72c --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user.json @@ -0,0 +1,527 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/users?include=userGroups&page=0&size=500", + "body": null, + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "dea9e30125cf8fb7" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":[{\"attributes\":{\"authenticationId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\"},\"id\":\"demo2\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/demo2\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"},{\"attributes\":{},\"id\":\"admin\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/admin\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"},{\"attributes\":{\"authenticationId\":\"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\"},\"id\":\"demo\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/demo\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"}],\"included\":[{\"attributes\":{},\"id\":\"adminGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"}],\"links\":{\"self\":\"http://localhost:3000/api/entities/users?include=userGroups&page=0&size=500\",\"next\":\"http://localhost:3000/api/entities/users?include=userGroups&page=1&size=500\"}}" + } + } + }, + { + "request": { + "method": "POST", + "uri": "http://localhost:3000/api/entities/users", + "body": "{\"data\": {\"type\": \"user\", \"id\": \"newUser\", \"attributes\": {\"authenticationId\": \"newUser_auth_id\"}, \"relationships\": {\"userGroups\": {\"data\": [{\"id\": \"demoGroup\", \"type\": \"userGroup\"}]}}}}", + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 201, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "de7433798c7409e0" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":{\"attributes\":{\"authenticationId\":\"newUser_auth_id\"},\"id\":\"newUser\",\"type\":\"user\"},\"links\":{\"self\":\"http://localhost:3000/api/entities/users/newUser\"}}" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/users/newUser?include=userGroups", + "body": null, + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "fd59b2f59275d29e" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":{\"attributes\":{\"authenticationId\":\"newUser_auth_id\"},\"id\":\"newUser\",\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"},\"included\":[{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"}],\"links\":{\"self\":\"http://localhost:3000/api/entities/users/newUser?include=userGroups\"}}" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/users?include=userGroups&page=0&size=500", + "body": null, + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "ca87d5ba1013ed6b" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":[{\"attributes\":{\"authenticationId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\"},\"id\":\"demo2\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/demo2\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"},{\"attributes\":{},\"id\":\"admin\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/admin\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"},{\"attributes\":{\"authenticationId\":\"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\"},\"id\":\"demo\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/demo\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"},{\"attributes\":{\"authenticationId\":\"newUser_auth_id\"},\"id\":\"newUser\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/newUser\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"}],\"included\":[{\"attributes\":{},\"id\":\"adminGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"}],\"links\":{\"self\":\"http://localhost:3000/api/entities/users?include=userGroups&page=0&size=500\",\"next\":\"http://localhost:3000/api/entities/users?include=userGroups&page=1&size=500\"}}" + } + } + }, + { + "request": { + "method": "DELETE", + "uri": "http://localhost:3000/api/entities/users/newUser", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Server": [ + "nginx" + ], + "Expires": [ + "0" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "7a33256b6369575c" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Connection": [ + "keep-alive" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/users?include=userGroups&page=0&size=500", + "body": null, + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "a5add00c1de453b6" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":[{\"attributes\":{\"authenticationId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\"},\"id\":\"demo2\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/demo2\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"},{\"attributes\":{},\"id\":\"admin\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/admin\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"},{\"attributes\":{\"authenticationId\":\"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\"},\"id\":\"demo\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/demo\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"}],\"included\":[{\"attributes\":{},\"id\":\"adminGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"}],\"links\":{\"self\":\"http://localhost:3000/api/entities/users?include=userGroups&page=0&size=500\",\"next\":\"http://localhost:3000/api/entities/users?include=userGroups&page=1&size=500\"}}" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user_group.json b/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user_group.json new file mode 100644 index 000000000..f99e3c062 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user_group.json @@ -0,0 +1,527 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/userGroups?include=userGroups&page=0&size=500", + "body": null, + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "0f66b1a8a5cad6a1" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":[{\"attributes\":{},\"id\":\"adminGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"adminQA1Group\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminQA1Group\"},\"relationships\":{\"parents\":{\"data\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]}},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"visitorsGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/visitorsGroup\"},\"relationships\":{\"parents\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"userGroup\"}],\"included\":[{\"attributes\":{},\"id\":\"adminGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"}],\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups?include=userGroups&page=0&size=500\",\"next\":\"http://localhost:3000/api/entities/userGroups?include=userGroups&page=1&size=500\"}}" + } + } + }, + { + "request": { + "method": "POST", + "uri": "http://localhost:3000/api/entities/userGroups", + "body": "{\"data\": {\"type\": \"userGroup\", \"id\": \"newUserGroup\", \"relationships\": {\"parents\": {\"data\": [{\"id\": \"demoGroup\", \"type\": \"userGroup\"}]}}}}", + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 201, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "53ff7d8a93c7fce7" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":{\"attributes\":{},\"id\":\"newUserGroup\",\"type\":\"userGroup\"},\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/newUserGroup\"}}" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/userGroups/newUserGroup?include=ALL", + "body": null, + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "ba9678bd6b3ff817" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":{\"attributes\":{},\"id\":\"newUserGroup\",\"relationships\":{\"parents\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"userGroup\"},\"included\":[{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"}],\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/newUserGroup?include=ALL\"}}" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/userGroups?include=userGroups&page=0&size=500", + "body": null, + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "4db4d9ce10f046cf" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":[{\"attributes\":{},\"id\":\"adminGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"adminQA1Group\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminQA1Group\"},\"relationships\":{\"parents\":{\"data\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]}},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"visitorsGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/visitorsGroup\"},\"relationships\":{\"parents\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"newUserGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/newUserGroup\"},\"relationships\":{\"parents\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"userGroup\"}],\"included\":[{\"attributes\":{},\"id\":\"adminGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"}],\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups?include=userGroups&page=0&size=500\",\"next\":\"http://localhost:3000/api/entities/userGroups?include=userGroups&page=1&size=500\"}}" + } + } + }, + { + "request": { + "method": "DELETE", + "uri": "http://localhost:3000/api/entities/userGroups/newUserGroup", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Server": [ + "nginx" + ], + "Expires": [ + "0" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "f76c2879ad72e51b" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Connection": [ + "keep-alive" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/userGroups?include=userGroups&page=0&size=500", + "body": null, + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "53cd92a641b0b79e" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":[{\"attributes\":{},\"id\":\"adminGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"adminQA1Group\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminQA1Group\"},\"relationships\":{\"parents\":{\"data\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]}},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"visitorsGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/visitorsGroup\"},\"relationships\":{\"parents\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"userGroup\"}],\"included\":[{\"attributes\":{},\"id\":\"adminGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"}],\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups?include=userGroups&page=0&size=500\",\"next\":\"http://localhost:3000/api/entities/userGroups?include=userGroups&page=1&size=500\"}}" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_user_groups.json b/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_user_groups.json new file mode 100644 index 000000000..dc09b433e --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_user_groups.json @@ -0,0 +1,181 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "26963d8c57086e42" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"userGroups\":[{\"id\":\"adminGroup\"},{\"id\":\"adminQA1Group\",\"parents\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"id\":\"demoGroup\"},{\"id\":\"visitorsGroup\",\"parents\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "31a5e652f2794983" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"userGroups\":[{\"id\":\"adminGroup\"},{\"id\":\"adminQA1Group\",\"parents\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"id\":\"demoGroup\"},{\"id\":\"visitorsGroup\",\"parents\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_users.json b/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_users.json new file mode 100644 index 000000000..e7fe493c7 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_users.json @@ -0,0 +1,181 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/users", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "83e1db34961c1b75" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"users\":[{\"id\":\"admin\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\",\"id\":\"demo\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\",\"id\":\"demo2\",\"userGroups\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/users", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "5c4a8c5e927fd76c" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"users\":[{\"id\":\"admin\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\",\"id\":\"demo\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\",\"id\":\"demo2\",\"userGroups\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/get_user.json b/gooddata-sdk/tests/catalog/fixtures/users/get_user.json new file mode 100644 index 000000000..6af2d3c27 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/get_user.json @@ -0,0 +1,93 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/users/demo2?include=userGroups", + "body": null, + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "9147fb0d30a9d009" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":{\"attributes\":{\"authenticationId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\"},\"id\":\"demo2\",\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"},\"included\":[{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"}],\"links\":{\"self\":\"http://localhost:3000/api/entities/users/demo2?include=userGroups\"}}" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/get_user_group.json b/gooddata-sdk/tests/catalog/fixtures/users/get_user_group.json new file mode 100644 index 000000000..bb51a51d5 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/get_user_group.json @@ -0,0 +1,93 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/userGroups/demoGroup?include=ALL", + "body": null, + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "c3a2b03c7860ed31" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":{\"attributes\":{},\"id\":\"demoGroup\",\"type\":\"userGroup\"},\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup?include=ALL\"}}" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/list_user_groups.json b/gooddata-sdk/tests/catalog/fixtures/users/list_user_groups.json new file mode 100644 index 000000000..921af7dfd --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/list_user_groups.json @@ -0,0 +1,93 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/userGroups?include=userGroups&page=0&size=500", + "body": null, + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "33b7d56d4ecaf2c0" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":[{\"attributes\":{},\"id\":\"adminGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"adminQA1Group\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminQA1Group\"},\"relationships\":{\"parents\":{\"data\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]}},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"visitorsGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/visitorsGroup\"},\"relationships\":{\"parents\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"userGroup\"}],\"included\":[{\"attributes\":{},\"id\":\"adminGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"}],\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups?include=userGroups&page=0&size=500\",\"next\":\"http://localhost:3000/api/entities/userGroups?include=userGroups&page=1&size=500\"}}" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/list_users.json b/gooddata-sdk/tests/catalog/fixtures/users/list_users.json new file mode 100644 index 000000000..4c0504f5c --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/list_users.json @@ -0,0 +1,93 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/users?include=userGroups&page=0&size=500", + "body": null, + "headers": { + "Accept": [ + "application/vnd.gooddata.api+json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "130103625ed12791" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":[{\"attributes\":{\"authenticationId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\"},\"id\":\"demo2\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/demo2\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"},{\"attributes\":{},\"id\":\"admin\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/admin\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"},{\"attributes\":{\"authenticationId\":\"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\"},\"id\":\"demo\",\"links\":{\"self\":\"http://localhost:3000/api/entities/users/demo\"},\"relationships\":{\"userGroups\":{\"data\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]}},\"type\":\"user\"}],\"included\":[{\"attributes\":{},\"id\":\"adminGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/adminGroup\"},\"type\":\"userGroup\"},{\"attributes\":{},\"id\":\"demoGroup\",\"links\":{\"self\":\"http://localhost:3000/api/entities/userGroups/demoGroup\"},\"type\":\"userGroup\"}],\"links\":{\"self\":\"http://localhost:3000/api/entities/users?include=userGroups&page=0&size=500\",\"next\":\"http://localhost:3000/api/entities/users?include=userGroups&page=1&size=500\"}}" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_user_groups.json b/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_user_groups.json new file mode 100644 index 000000000..59947a5fa --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_user_groups.json @@ -0,0 +1,597 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Server": [ + "nginx" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "X-Frame-Options": [ + "DENY" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Pragma": [ + "no-cache" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Date": [ + "Wed, 25 May 2022 07:10:28 GMT" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "X-GDC-TRACE-ID": [ + "fb24104636e5cdf3" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Content-Type": [ + "application/json" + ], + "Transfer-Encoding": [ + "chunked" + ], + "GoodData-Deployment": [ + "aio" + ], + "Expires": [ + "0" + ], + "Connection": [ + "keep-alive" + ], + "Access-Control-Allow-Credentials": [ + "true" + ] + }, + "body": { + "string": "{\"userGroups\":[{\"id\":\"adminGroup\"},{\"id\":\"adminQA1Group\",\"parents\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"id\":\"demoGroup\"},{\"id\":\"visitorsGroup\",\"parents\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": "{\"userGroups\": [{\"id\": \"adminGroup\"}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "GoodData-Deployment": [ + "aio" + ], + "Pragma": [ + "no-cache" + ], + "Date": [ + "Wed, 25 May 2022 07:10:28 GMT" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Expires": [ + "0" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "X-GDC-TRACE-ID": [ + "b9d1a9e7911f5e0b" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Connection": [ + "keep-alive" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/organization", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 302, + "message": "" + }, + "headers": { + "Server": [ + "nginx" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "X-Frame-Options": [ + "DENY" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Pragma": [ + "no-cache" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Date": [ + "Wed, 25 May 2022 07:10:28 GMT" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "X-GDC-TRACE-ID": [ + "1f70b52477da4a9d" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Transfer-Encoding": [ + "chunked" + ], + "GoodData-Deployment": [ + "aio" + ], + "Expires": [ + "0" + ], + "Connection": [ + "keep-alive" + ], + "Location": [ + "/api/entities/admin/organizations/default" + ], + "Access-Control-Allow-Credentials": [ + "true" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/admin/organizations/default", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Server": [ + "nginx" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "X-Frame-Options": [ + "DENY" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Pragma": [ + "no-cache" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Date": [ + "Wed, 25 May 2022 07:10:28 GMT" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "X-GDC-TRACE-ID": [ + "82d813e1b7bcec12" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Transfer-Encoding": [ + "chunked" + ], + "GoodData-Deployment": [ + "aio" + ], + "Expires": [ + "0" + ], + "Connection": [ + "keep-alive" + ], + "Access-Control-Allow-Credentials": [ + "true" + ] + }, + "body": { + "string": "{\"data\":{\"attributes\":{\"name\":\"Default Organization\",\"hostname\":\"localhost\",\"oauthClientId\":\"ece24885-280b-408a-84a8-540f68a6b954\"},\"id\":\"default\",\"type\":\"organization\"},\"links\":{\"self\":\"http://localhost:3000/api/entities/admin/organizations/default\"}}" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": "{\"userGroups\": [{\"id\": \"adminGroup\"}, {\"id\": \"adminQA1Group\", \"parents\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demoGroup\"}, {\"id\": \"visitorsGroup\", \"parents\": [{\"id\": \"demoGroup\", \"type\": \"userGroup\"}]}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "GoodData-Deployment": [ + "aio" + ], + "Pragma": [ + "no-cache" + ], + "Date": [ + "Wed, 25 May 2022 07:10:28 GMT" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Expires": [ + "0" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "X-GDC-TRACE-ID": [ + "6e328a12b8abd1ec" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Connection": [ + "keep-alive" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Server": [ + "nginx" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "X-Frame-Options": [ + "DENY" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Pragma": [ + "no-cache" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Date": [ + "Wed, 25 May 2022 07:10:28 GMT" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "X-GDC-TRACE-ID": [ + "98f784c44df34d62" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Content-Type": [ + "application/json" + ], + "Transfer-Encoding": [ + "chunked" + ], + "GoodData-Deployment": [ + "aio" + ], + "Expires": [ + "0" + ], + "Connection": [ + "keep-alive" + ], + "Access-Control-Allow-Credentials": [ + "true" + ] + }, + "body": { + "string": "{\"userGroups\":[{\"id\":\"adminGroup\"},{\"id\":\"adminQA1Group\",\"parents\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"id\":\"demoGroup\"},{\"id\":\"visitorsGroup\",\"parents\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": "{\"userGroups\": [{\"id\": \"adminGroup\"}, {\"id\": \"demoGroup\"}, {\"id\": \"adminQA1Group\", \"parents\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"visitorsGroup\", \"parents\": [{\"id\": \"demoGroup\", \"type\": \"userGroup\"}]}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "GoodData-Deployment": [ + "aio" + ], + "Pragma": [ + "no-cache" + ], + "Date": [ + "Wed, 25 May 2022 07:10:28 GMT" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Expires": [ + "0" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "X-GDC-TRACE-ID": [ + "6ed803444397ca4b" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Connection": [ + "keep-alive" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ] + }, + "body": { + "string": "" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_users.json b/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_users.json new file mode 100644 index 000000000..22e6f3783 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_users.json @@ -0,0 +1,597 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/users", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Expires": [ + "0" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "X-GDC-TRACE-ID": [ + "26100ef42445a8d8" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Server": [ + "nginx" + ], + "Content-Type": [ + "application/json" + ], + "Date": [ + "Wed, 25 May 2022 07:10:05 GMT" + ], + "X-Frame-Options": [ + "DENY" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "{\"users\":[{\"id\":\"admin\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\",\"id\":\"demo\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\",\"id\":\"demo2\",\"userGroups\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/users", + "body": "{\"users\": [{\"id\": \"admin\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo\", \"authId\": \"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "b7851ad2390cace7" + ], + "Connection": [ + "keep-alive" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Date": [ + "Wed, 25 May 2022 07:10:05 GMT" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Expires": [ + "0" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Server": [ + "nginx" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/organization", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 302, + "message": "" + }, + "headers": { + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Expires": [ + "0" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Location": [ + "/api/entities/admin/organizations/default" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "X-GDC-TRACE-ID": [ + "c80871ba47114de1" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Server": [ + "nginx" + ], + "Date": [ + "Wed, 25 May 2022 07:10:05 GMT" + ], + "X-Frame-Options": [ + "DENY" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/admin/organizations/default", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Expires": [ + "0" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "X-GDC-TRACE-ID": [ + "908e85d3de0814d8" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Server": [ + "nginx" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Date": [ + "Wed, 25 May 2022 07:10:05 GMT" + ], + "X-Frame-Options": [ + "DENY" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "{\"data\":{\"attributes\":{\"name\":\"Default Organization\",\"hostname\":\"localhost\",\"oauthClientId\":\"ece24885-280b-408a-84a8-540f68a6b954\"},\"id\":\"default\",\"type\":\"organization\"},\"links\":{\"self\":\"http://localhost:3000/api/entities/admin/organizations/default\"}}" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/users", + "body": "{\"users\": [{\"id\": \"admin\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo\", \"authId\": \"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo2\", \"authId\": \"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\", \"userGroups\": [{\"id\": \"demoGroup\", \"type\": \"userGroup\"}]}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "9f2c277a92634de0" + ], + "Connection": [ + "keep-alive" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Date": [ + "Wed, 25 May 2022 07:10:05 GMT" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Expires": [ + "0" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Server": [ + "nginx" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/users", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Expires": [ + "0" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "X-GDC-TRACE-ID": [ + "d93c1bb523bd071d" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Server": [ + "nginx" + ], + "Content-Type": [ + "application/json" + ], + "Date": [ + "Wed, 25 May 2022 07:10:05 GMT" + ], + "X-Frame-Options": [ + "DENY" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "{\"users\":[{\"id\":\"admin\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\",\"id\":\"demo\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\",\"id\":\"demo2\",\"userGroups\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/users", + "body": "{\"users\": [{\"id\": \"admin\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo\", \"authId\": \"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo2\", \"authId\": \"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\", \"userGroups\": [{\"id\": \"demoGroup\", \"type\": \"userGroup\"}]}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "b86f8e3c34399fd4" + ], + "Connection": [ + "keep-alive" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Date": [ + "Wed, 25 May 2022 07:10:05 GMT" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Expires": [ + "0" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Server": [ + "nginx" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_user_groups.json b/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_user_groups.json new file mode 100644 index 000000000..8784bbc04 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_user_groups.json @@ -0,0 +1,591 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "fdaead81ea285fa8" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:02 GMT" + ] + }, + "body": { + "string": "{\"userGroups\":[{\"id\":\"adminGroup\"},{\"id\":\"adminQA1Group\",\"parents\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"id\":\"demoGroup\"},{\"id\":\"visitorsGroup\",\"parents\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/users", + "body": "{\"users\": [{\"id\": \"admin\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo\", \"authId\": \"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Server": [ + "nginx" + ], + "Expires": [ + "0" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "8317fe3b6827606e" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Connection": [ + "keep-alive" + ], + "Date": [ + "Wed, 25 May 2022 05:51:02 GMT" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": "{\"userGroups\": [{\"id\": \"adminGroup\"}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Server": [ + "nginx" + ], + "Expires": [ + "0" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "d7f5da074288a49e" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Connection": [ + "keep-alive" + ], + "Date": [ + "Wed, 25 May 2022 05:51:02 GMT" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": "{\"userGroups\": [{\"id\": \"adminGroup\"}, {\"id\": \"adminQA1Group\", \"parents\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demoGroup\"}, {\"id\": \"visitorsGroup\", \"parents\": [{\"id\": \"demoGroup\", \"type\": \"userGroup\"}]}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Server": [ + "nginx" + ], + "Expires": [ + "0" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "5bfe93353debb089" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Connection": [ + "keep-alive" + ], + "Date": [ + "Wed, 25 May 2022 05:51:02 GMT" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "4bddd064286684c1" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:02 GMT" + ] + }, + "body": { + "string": "{\"userGroups\":[{\"id\":\"adminGroup\"},{\"id\":\"adminQA1Group\",\"parents\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"id\":\"demoGroup\"},{\"id\":\"visitorsGroup\",\"parents\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": "{\"userGroups\": [{\"id\": \"adminGroup\"}, {\"id\": \"demoGroup\"}, {\"id\": \"adminQA1Group\", \"parents\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"visitorsGroup\", \"parents\": [{\"id\": \"demoGroup\", \"type\": \"userGroup\"}]}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Server": [ + "nginx" + ], + "Expires": [ + "0" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "6f38cef447043caa" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Connection": [ + "keep-alive" + ], + "Date": [ + "Wed, 25 May 2022 05:51:02 GMT" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/users", + "body": "{\"users\": [{\"id\": \"admin\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo\", \"authId\": \"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo2\", \"authId\": \"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\", \"userGroups\": [{\"id\": \"demoGroup\", \"type\": \"userGroup\"}]}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Server": [ + "nginx" + ], + "Expires": [ + "0" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "a06c811adee3dd9c" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Connection": [ + "keep-alive" + ], + "Date": [ + "Wed, 25 May 2022 05:51:02 GMT" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_users.json b/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_users.json new file mode 100644 index 000000000..cefc63590 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_users.json @@ -0,0 +1,427 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/users", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "70ac7c0782d93993" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"users\":[{\"id\":\"admin\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\",\"id\":\"demo\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\",\"id\":\"demo2\",\"userGroups\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/users", + "body": "{\"users\": [{\"id\": \"admin\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo\", \"authId\": \"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Server": [ + "nginx" + ], + "Expires": [ + "0" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "329ba841e49767e1" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Connection": [ + "keep-alive" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/users", + "body": "{\"users\": [{\"id\": \"admin\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo\", \"authId\": \"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo2\", \"authId\": \"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\", \"userGroups\": [{\"id\": \"demoGroup\", \"type\": \"userGroup\"}]}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Server": [ + "nginx" + ], + "Expires": [ + "0" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "604b192d53ef89b5" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Connection": [ + "keep-alive" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/users", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "fa0838786186e6a4" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"users\":[{\"id\":\"admin\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\",\"id\":\"demo\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\",\"id\":\"demo2\",\"userGroups\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "PUT", + "uri": "http://localhost:3000/api/layout/users", + "body": "{\"users\": [{\"id\": \"admin\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo\", \"authId\": \"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\", \"userGroups\": [{\"id\": \"adminGroup\", \"type\": \"userGroup\"}]}, {\"id\": \"demo2\", \"authId\": \"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\", \"userGroups\": [{\"id\": \"demoGroup\", \"type\": \"userGroup\"}]}]}", + "headers": { + "Content-Type": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 204, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "X-Frame-Options": [ + "DENY" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "GoodData-Deployment": [ + "aio" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Server": [ + "nginx" + ], + "Expires": [ + "0" + ], + "Pragma": [ + "no-cache" + ], + "X-GDC-TRACE-ID": [ + "9bf8105a8160ebe7" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "Connection": [ + "keep-alive" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "body": { + "string": "" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_user_groups.json b/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_user_groups.json new file mode 100644 index 000000000..f4e080626 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_user_groups.json @@ -0,0 +1,521 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "9453ff1d4af64fb7" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"userGroups\":[{\"id\":\"adminGroup\"},{\"id\":\"adminQA1Group\",\"parents\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"id\":\"demoGroup\"},{\"id\":\"visitorsGroup\",\"parents\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/userGroups", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "33acd914845e64e1" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"userGroups\":[{\"id\":\"adminGroup\"},{\"id\":\"adminQA1Group\",\"parents\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"id\":\"demoGroup\"},{\"id\":\"visitorsGroup\",\"parents\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/organization", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 302, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "643cba80e9a24b80" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Location": [ + "/api/entities/admin/organizations/default" + ], + "Date": [ + "Wed, 25 May 2022 05:51:02 GMT" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/admin/organizations/default", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "2945d897a4fa7907" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:02 GMT" + ] + }, + "body": { + "string": "{\"data\":{\"attributes\":{\"name\":\"Default Organization\",\"hostname\":\"localhost\",\"oauthClientId\":\"ece24885-280b-408a-84a8-540f68a6b954\"},\"id\":\"default\",\"type\":\"organization\"},\"links\":{\"self\":\"http://localhost:3000/api/entities/admin/organizations/default\"}}" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/organization", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 302, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "475e26570acfd923" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Location": [ + "/api/entities/admin/organizations/default" + ], + "Date": [ + "Wed, 25 May 2022 05:51:02 GMT" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/admin/organizations/default", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "6747c834bf7a79af" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:02 GMT" + ] + }, + "body": { + "string": "{\"data\":{\"attributes\":{\"name\":\"Default Organization\",\"hostname\":\"localhost\",\"oauthClientId\":\"ece24885-280b-408a-84a8-540f68a6b954\"},\"id\":\"default\",\"type\":\"organization\"},\"links\":{\"self\":\"http://localhost:3000/api/entities/admin/organizations/default\"}}" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_users.json b/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_users.json new file mode 100644 index 000000000..b3c8a0e63 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_users.json @@ -0,0 +1,521 @@ +{ + "version": 1, + "interactions": [ + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/users", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "2135413271f6735a" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"users\":[{\"id\":\"admin\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\",\"id\":\"demo\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\",\"id\":\"demo2\",\"userGroups\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/layout/users", + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "98fe45785d5bb73f" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"users\":[{\"id\":\"admin\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs\",\"id\":\"demo\",\"userGroups\":[{\"id\":\"adminGroup\",\"type\":\"userGroup\"}]},{\"authId\":\"CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs\",\"id\":\"demo2\",\"userGroups\":[{\"id\":\"demoGroup\",\"type\":\"userGroup\"}]}]}" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/organization", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 302, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "f11a157d2dc9f228" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Location": [ + "/api/entities/admin/organizations/default" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/admin/organizations/default", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "d95f1b4a85530cb2" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":{\"attributes\":{\"name\":\"Default Organization\",\"hostname\":\"localhost\",\"oauthClientId\":\"ece24885-280b-408a-84a8-540f68a6b954\"},\"id\":\"default\",\"type\":\"organization\"},\"links\":{\"self\":\"http://localhost:3000/api/entities/admin/organizations/default\"}}" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/organization", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 302, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "a7bd66cefcf03803" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Location": [ + "/api/entities/admin/organizations/default" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "" + } + } + }, + { + "request": { + "method": "GET", + "uri": "http://localhost:3000/api/entities/admin/organizations/default", + "body": null, + "headers": { + "X-Requested-With": [ + "XMLHttpRequest" + ], + "X-GDC-VALIDATE-RELATIONS": [ + "true" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "" + }, + "headers": { + "Access-Control-Expose-Headers": [ + "Content-Disposition, Content-Length, Content-Range, Set-Cookie" + ], + "Vary": [ + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Access-Control-Allow-Credentials": [ + "true" + ], + "Expires": [ + "0" + ], + "X-GDC-TRACE-ID": [ + "0648a818715b227a" + ], + "X-Frame-Options": [ + "DENY" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "Content-Security-Policy": [ + "default-src 'self' *.wistia.com *.wistia.net; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wistia.com *.wistia.net src.litix.io matomo.anywhere.gooddata.com code.jquery.com unpkg.com cdn.jsdelivr.net cdnjs.cloudflare.com; img-src 'self' data: blob: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net www.gooddata.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com cdn.jsdelivr.net; font-src 'self' data: fonts.gstatic.com *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src 'self'; object-src 'none'; worker-src 'self' blob:; child-src blob:; connect-src 'self' *.tiles.mapbox.com *.mapbox.com *.litix.io *.wistia.com embedwistia-a.akamaihd.net matomo.anywhere.gooddata.com; media-src 'self' blob: data: *.wistia.com *.wistia.net embedwistia-a.akamaihd.net" + ], + "Server": [ + "nginx" + ], + "Pragma": [ + "no-cache" + ], + "Permission-Policy": [ + "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment 'none';" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Set-Cookie": [ + "SPRING_SEC_SECURITY_CONTEXT=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly" + ], + "Content-Type": [ + "application/vnd.gooddata.api+json" + ], + "Connection": [ + "keep-alive" + ], + "Cache-Control": [ + "no-cache, no-store, max-age=0, must-revalidate" + ], + "GoodData-Deployment": [ + "aio" + ], + "Date": [ + "Wed, 25 May 2022 05:51:01 GMT" + ] + }, + "body": { + "string": "{\"data\":{\"attributes\":{\"name\":\"Default Organization\",\"hostname\":\"localhost\",\"oauthClientId\":\"ece24885-280b-408a-84a8-540f68a6b954\"},\"id\":\"default\",\"type\":\"organization\"},\"links\":{\"self\":\"http://localhost:3000/api/entities/admin/organizations/default\"}}" + } + } + } + ] +} diff --git a/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/adminGroup.yaml b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/adminGroup.yaml new file mode 100644 index 000000000..7be1bb437 --- /dev/null +++ b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/adminGroup.yaml @@ -0,0 +1,2 @@ +# (C) 2022 GoodData Corporation +id: adminGroup diff --git a/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/adminQA1Group.yaml b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/adminQA1Group.yaml new file mode 100644 index 000000000..1d8e32bf9 --- /dev/null +++ b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/adminQA1Group.yaml @@ -0,0 +1,5 @@ +# (C) 2022 GoodData Corporation +id: adminQA1Group +parents: +- id: adminGroup + type: userGroup diff --git a/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/demoGroup.yaml b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/demoGroup.yaml new file mode 100644 index 000000000..6e3efada3 --- /dev/null +++ b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/demoGroup.yaml @@ -0,0 +1,2 @@ +# (C) 2022 GoodData Corporation +id: demoGroup diff --git a/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/visitorsGroup.yaml b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/visitorsGroup.yaml new file mode 100644 index 000000000..cc4d1e371 --- /dev/null +++ b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/user_groups/visitorsGroup.yaml @@ -0,0 +1,5 @@ +# (C) 2022 GoodData Corporation +id: visitorsGroup +parents: +- id: demoGroup + type: userGroup diff --git a/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/users/admin.yaml b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/users/admin.yaml new file mode 100644 index 000000000..f6042bc0f --- /dev/null +++ b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/users/admin.yaml @@ -0,0 +1,5 @@ +# (C) 2022 GoodData Corporation +id: admin +userGroups: +- id: adminGroup + type: userGroup diff --git a/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/users/demo.yaml b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/users/demo.yaml new file mode 100644 index 000000000..5beec39ed --- /dev/null +++ b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/users/demo.yaml @@ -0,0 +1,6 @@ +# (C) 2022 GoodData Corporation +authId: CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs +id: demo +userGroups: +- id: adminGroup + type: userGroup diff --git a/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/users/demo2.yaml b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/users/demo2.yaml new file mode 100644 index 000000000..d5e879fac --- /dev/null +++ b/gooddata-sdk/tests/catalog/load/gooddata_layouts/default/users/demo2.yaml @@ -0,0 +1,6 @@ +# (C) 2022 GoodData Corporation +authId: CiQzNzAzYzg1Ni0xNTU0LTRjNjEtOTU1Mi1lMWRjNjliNmIyN2USBWxvY2Fs +id: demo2 +userGroups: +- id: demoGroup + type: userGroup diff --git a/gooddata-sdk/tests/catalog/test_catalog_user_service.py b/gooddata-sdk/tests/catalog/test_catalog_user_service.py new file mode 100644 index 000000000..56386dbeb --- /dev/null +++ b/gooddata-sdk/tests/catalog/test_catalog_user_service.py @@ -0,0 +1,279 @@ +# (C) 2022 GoodData Corporation +from __future__ import annotations + +import json +from pathlib import Path + +import vcr + +import gooddata_metadata_client.apis as metadata_apis +from gooddata_sdk import GoodDataApiClient, GoodDataSdk +from gooddata_sdk.catalog.identifier import CatalogUserGroupIdentifier +from gooddata_sdk.catalog.user.declarative_model.user import CatalogDeclarativeUser, CatalogDeclarativeUsers +from gooddata_sdk.catalog.user.declarative_model.user_group import ( + CatalogDeclarativeUserGroup, + CatalogDeclarativeUserGroups, +) +from gooddata_sdk.utils import create_directory +from tests import VCR_MATCH_ON + +_current_dir = Path(__file__).parent.absolute() +_fixtures_dir = _current_dir / "fixtures" / "users" + +gd_vcr = vcr.VCR(filter_headers=["authorization", "user-agent"], serializer="json", match_on=VCR_MATCH_ON) + + +# ENTITY USERS + + +@gd_vcr.use_cassette(str(_fixtures_dir / "list_users.json")) +def test_list_users(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + users = sdk.catalog_user.list_users() + assert len(users) == 3 + assert set(user.id for user in users) == {"demo2", "admin", "demo"} + + +@gd_vcr.use_cassette(str(_fixtures_dir / "get_user.json")) +def test_get_user(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + user = sdk.catalog_user.get_user(test_config["test_user"]) + assert user.id == test_config["test_user"] + assert user.get_user_groups == [test_config["test_user_group"]] + + +@gd_vcr.use_cassette(str(_fixtures_dir / "create_delete_user.json")) +def test_create_delete_user(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + user_id = test_config["test_new_user"] + authentication_id = f"{user_id}_auth_id" + user_groups = [test_config["test_user_group"]] + + try: + assert len(sdk.catalog_user.list_users()) == 3 + sdk.catalog_user.create_user(user_id=user_id, authentication_id=authentication_id, user_groups=user_groups) + user = sdk.catalog_user.get_user(user_id) + assert len(sdk.catalog_user.list_users()) == 4 + assert user.id == user_id + assert user.get_user_groups == user_groups + assert user.attributes.authentication_id == authentication_id + finally: + sdk.catalog_user.delete_user(user_id) + assert len(sdk.catalog_user.list_users()) == 3 + + +# ENTITY USER GROUPS + + +@gd_vcr.use_cassette(str(_fixtures_dir / "list_user_groups.json")) +def test_list_user_groups(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + user_groups = sdk.catalog_user.list_user_groups() + assert len(user_groups) == 4 + assert set(user_group.id for user_group in user_groups) == { + "adminGroup", + "demoGroup", + "adminQA1Group", + "visitorsGroup", + } + + +@gd_vcr.use_cassette(str(_fixtures_dir / "get_user_group.json")) +def test_get_user_group(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + user_group = sdk.catalog_user.get_user_group(test_config["test_user_group"]) + assert user_group.id == test_config["test_user_group"] + + +@gd_vcr.use_cassette(str(_fixtures_dir / "create_delete_user_group.json")) +def test_create_delete_user_group(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + user_group_id = test_config["test_new_user_group"] + user_group_parents_id = [test_config["test_user_group"]] + + try: + assert len(sdk.catalog_user.list_user_groups()) == 4 + sdk.catalog_user.create_user_group(user_group_id=user_group_id, user_group_parents_id=user_group_parents_id) + user_group = sdk.catalog_user.get_user_group(user_group_id) + assert len(sdk.catalog_user.list_user_groups()) == 5 + assert user_group.id == user_group_id + assert [p.id for p in user_group.relationships.parents.data] == user_group_parents_id + finally: + sdk.catalog_user.delete_user_group(user_group_id) + assert len(sdk.catalog_user.list_user_groups()) == 4 + + +# DECLARATIVE USERS + + +@gd_vcr.use_cassette(str(_fixtures_dir / "get_declarative_users.json")) +def test_get_declarative_users(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + client = GoodDataApiClient(host=test_config["host"], token=test_config["token"]) + layout_api = metadata_apis.LayoutApi(client.metadata_client) + + users = sdk.catalog_user.get_declarative_users() + + assert len(users.users) == 3 + assert [user.id for user in users.users] == ["admin", "demo", "demo2"] + assert users.to_dict(camel_case=True) == layout_api.get_users_layout().to_dict(camel_case=True) + + +@gd_vcr.use_cassette(str(_fixtures_dir / "store_declarative_users.json")) +def test_store_declarative_users(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + path = _current_dir / "store" + create_directory(path) + + users_e = sdk.catalog_user.get_declarative_users() + sdk.catalog_user.store_declarative_users(path) + users_o = sdk.catalog_user.load_declarative_users(path) + + assert users_e == users_o + assert users_e.to_dict(camel_case=True) == users_o.to_dict(camel_case=True) + + +@gd_vcr.use_cassette(str(_fixtures_dir / "put_declarative_users.json")) +def test_put_declarative_users(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + path = _current_dir / "expected" / "declarative_users.json" + users_e = sdk.catalog_user.get_declarative_users() + + try: + _empty_users(sdk, test_config) + + sdk.catalog_user.put_declarative_users(users_e) + users_o = sdk.catalog_user.get_declarative_users() + assert users_e == users_o + assert users_e.to_dict(camel_case=True) == users_o.to_dict(camel_case=True) + finally: + with open(path) as f: + data = json.load(f) + users_o = CatalogDeclarativeUsers.from_dict(data, camel_case=True) + sdk.catalog_user.put_declarative_users(users_o) + + +@gd_vcr.use_cassette(str(_fixtures_dir / "load_and_put_declarative_users.json")) +def test_load_and_put_declarative_users(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + path = _current_dir / "load" + expected_json_path = _current_dir / "expected" / "declarative_users.json" + users_e = sdk.catalog_user.get_declarative_users() + + try: + _empty_users(sdk, test_config) + + sdk.catalog_user.load_and_put_declarative_users(path) + users_o = sdk.catalog_user.get_declarative_users() + assert users_e == users_o + assert users_e.to_dict(camel_case=True) == users_o.to_dict(camel_case=True) + finally: + with open(expected_json_path) as f: + data = json.load(f) + users_o = CatalogDeclarativeUsers.from_dict(data, camel_case=True) + sdk.catalog_user.put_declarative_users(users_o) + + +# DECLARATIVE USER GROUPS + + +@gd_vcr.use_cassette(str(_fixtures_dir / "get_declarative_user_groups.json")) +def test_get_declarative_user_groups(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + client = GoodDataApiClient(host=test_config["host"], token=test_config["token"]) + layout_api = metadata_apis.LayoutApi(client.metadata_client) + + user_groups = sdk.catalog_user.get_declarative_user_groups() + + assert len(user_groups.user_groups) == 4 + assert set(user_group.id for user_group in user_groups.user_groups) == { + "adminGroup", + "demoGroup", + "adminQA1Group", + "visitorsGroup", + } + assert user_groups.to_dict(camel_case=True) == layout_api.get_user_groups_layout().to_dict(camel_case=True) + + +@gd_vcr.use_cassette(str(_fixtures_dir / "store_declarative_user_groups.json")) +def test_store_declarative_user_groups(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + path = _current_dir / "store" + create_directory(path) + + user_groups_e = sdk.catalog_user.get_declarative_user_groups() + sdk.catalog_user.store_declarative_user_groups(path) + user_groups_o = sdk.catalog_user.load_declarative_user_groups(path) + + assert user_groups_e == user_groups_o + assert user_groups_e.to_dict(camel_case=True) == user_groups_o.to_dict(camel_case=True) + + +@gd_vcr.use_cassette(str(_fixtures_dir / "put_declarative_user_groups.json")) +def test_put_declarative_user_groups(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + user_groups_path = _current_dir / "expected" / "declarative_user_groups.json" + users_path = _current_dir / "expected" / "declarative_users.json" + user_groups_e = sdk.catalog_user.get_declarative_user_groups() + + try: + _empty_users(sdk, test_config) + _empty_user_groups(sdk, test_config) + + sdk.catalog_user.put_declarative_user_groups(user_groups_e) + user_groups_o = sdk.catalog_user.get_declarative_user_groups() + assert user_groups_e == user_groups_o + assert user_groups_e.to_dict(camel_case=True) == user_groups_o.to_dict(camel_case=True) + finally: + with open(user_groups_path) as f: + data = json.load(f) + user_groups_o = CatalogDeclarativeUserGroups.from_dict(data, camel_case=True) + sdk.catalog_user.put_declarative_user_groups(user_groups_o) + + with open(users_path) as f: + data = json.load(f) + users_o = CatalogDeclarativeUsers.from_dict(data, camel_case=True) + sdk.catalog_user.put_declarative_users(users_o) + + +@gd_vcr.use_cassette(str(_fixtures_dir / "load_and_put_declarative_user_groups.json")) +def test_load_and_put_declarative_user_groups(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + path = _current_dir / "load" + expected_json_path = _current_dir / "expected" / "declarative_user_groups.json" + user_groups_e = sdk.catalog_user.get_declarative_user_groups() + + try: + _empty_user_groups(sdk, test_config) + + sdk.catalog_user.load_and_put_declarative_user_groups(path) + user_groups_o = sdk.catalog_user.get_declarative_user_groups() + assert user_groups_e == user_groups_o + assert user_groups_e.to_dict(camel_case=True) == user_groups_o.to_dict(camel_case=True) + finally: + with open(expected_json_path) as f: + data = json.load(f) + user_groups_o = CatalogDeclarativeUserGroups.from_dict(data, camel_case=True) + sdk.catalog_user.put_declarative_user_groups(user_groups_o) + + +# Help functions + + +def _empty_users(sdk: GoodDataSdk, test_config) -> None: + # There has to be always admin + demo user + admin_user = CatalogDeclarativeUser( + id="admin", user_groups=[CatalogUserGroupIdentifier(id=test_config["admin_user_group"])] + ) + demo_user = CatalogDeclarativeUser( + id=test_config["demo_user"], + auth_id=test_config["demo_user_auth_id"], + user_groups=[CatalogUserGroupIdentifier(id=test_config["admin_user_group"])], + ) + sdk.catalog_user.put_declarative_users(CatalogDeclarativeUsers(users=[admin_user, demo_user])) + + +def _empty_user_groups(sdk: GoodDataSdk, test_config) -> None: + sdk.catalog_user.put_declarative_user_groups( + CatalogDeclarativeUserGroups(user_groups=[CatalogDeclarativeUserGroup(id=test_config["admin_user_group"])]) + ) diff --git a/gooddata-sdk/tests/gd_test_config.yaml b/gooddata-sdk/tests/gd_test_config.yaml index 6d0bbf970..4c306211a 100644 --- a/gooddata-sdk/tests/gd_test_config.yaml +++ b/gooddata-sdk/tests/gd_test_config.yaml @@ -9,3 +9,10 @@ header_host: localhost data_source: "demo-test-ds" data_source2: "demo-bigquery-ds" workspace_test: "demo_testing" +test_user: "demo2" +test_user_group: "demoGroup" +test_new_user: "newUser" +test_new_user_group: "newUserGroup" +demo_user: "demo" +demo_user_auth_id: "CiRiYWNhZjYxYS00Y2NmLTQxODEtOWE5OC05ZTI5YjExYTBhMDASBWxvY2Fs" +admin_user_group: "adminGroup" diff --git a/gooddata-sdk/tests/utils/__init__.py b/gooddata-sdk/tests/utils/__init__.py new file mode 100644 index 000000000..67106a19b --- /dev/null +++ b/gooddata-sdk/tests/utils/__init__.py @@ -0,0 +1 @@ +# (C) 2022 GoodData Corporation diff --git a/gooddata-sdk/tests/utils/test_dictionary.json b/gooddata-sdk/tests/utils/test_dictionary.json new file mode 100644 index 000000000..3080a32b2 --- /dev/null +++ b/gooddata-sdk/tests/utils/test_dictionary.json @@ -0,0 +1,211 @@ +{ + "dataSources": [ + { + "enableCaching": false, + "id": "demo-test-ds", + "name": "demo-test-ds", + "pdm": { + "tables": [ + { + "columns": [ + { + "dataType": "NUMERIC", + "isPrimaryKey": false, + "name": "budget" + }, + { + "dataType": "STRING", + "isPrimaryKey": true, + "name": "campaign_channel_id" + }, + { + "dataType": "INT", + "isPrimaryKey": false, + "name": "campaign_id", + "referencedTableColumn": "campaign_id", + "referencedTableId": "campaigns" + }, + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "category" + }, + { + "dataType": "NUMERIC", + "isPrimaryKey": false, + "name": "spend" + }, + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "type" + } + ], + "id": "campaign_channels", + "path": [ + "demo", + "campaign_channels" + ], + "type": "TABLE" + }, + { + "columns": [ + { + "dataType": "INT", + "isPrimaryKey": true, + "name": "campaign_id" + }, + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "campaign_name" + } + ], + "id": "campaigns", + "path": [ + "demo", + "campaigns" + ], + "type": "TABLE" + }, + { + "columns": [ + { + "dataType": "INT", + "isPrimaryKey": true, + "name": "customer_id" + }, + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "customer_name" + }, + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "geo__state__location" + }, + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "region" + }, + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "state" + } + ], + "id": "customers", + "path": [ + "demo", + "customers" + ], + "type": "TABLE" + }, + { + "columns": [ + { + "dataType": "INT", + "isPrimaryKey": false, + "name": "campaign_id", + "referencedTableColumn": "campaign_id", + "referencedTableId": "campaigns" + }, + { + "dataType": "INT", + "isPrimaryKey": false, + "name": "customer_id", + "referencedTableColumn": "customer_id", + "referencedTableId": "customers" + }, + { + "dataType": "DATE", + "isPrimaryKey": false, + "name": "date" + }, + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "order_id" + }, + { + "dataType": "STRING", + "isPrimaryKey": true, + "name": "order_line_id" + }, + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "order_status" + }, + { + "dataType": "NUMERIC", + "isPrimaryKey": false, + "name": "price" + }, + { + "dataType": "INT", + "isPrimaryKey": false, + "name": "product_id", + "referencedTableColumn": "product_id", + "referencedTableId": "products" + }, + { + "dataType": "NUMERIC", + "isPrimaryKey": false, + "name": "quantity" + }, + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "wdf__region" + }, + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "wdf__state" + } + ], + "id": "order_lines", + "path": [ + "demo", + "order_lines" + ], + "type": "TABLE" + }, + { + "columns": [ + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "category" + }, + { + "dataType": "INT", + "isPrimaryKey": true, + "name": "product_id" + }, + { + "dataType": "STRING", + "isPrimaryKey": false, + "name": "product_name" + } + ], + "id": "products", + "path": [ + "demo", + "products" + ], + "type": "TABLE" + } + ] + }, + "permissions": [], + "schema": "demo", + "type": "POSTGRESQL", + "url": "jdbc:postgresql://localhost:5432/demo", + "username": "demouser" + } + ] +} diff --git a/gooddata-sdk/tests/utils/test_utils.py b/gooddata-sdk/tests/utils/test_utils.py new file mode 100644 index 000000000..548cd150d --- /dev/null +++ b/gooddata-sdk/tests/utils/test_utils.py @@ -0,0 +1,27 @@ +# (C) 2022 GoodData Corporation +from __future__ import annotations + +import json +from pathlib import Path + +from gooddata_sdk.utils import camel_to_snake, change_case, snake_to_camel + +_current_dir = Path(__file__).parent.absolute() + + +def test_dictionary_case_convertor(test_config): + path = _current_dir / "test_dictionary.json" + with open(path, "r", encoding="utf8") as f: + data = json.load(f) + x = change_case(change_case(data, camel_to_snake), snake_to_camel) + assert data == x + + +def test_snake_to_camel(test_config): + value = "this_is_an_example_of_snake_case" + assert snake_to_camel(value) == "thisIsAnExampleOfSnakeCase" + + +def test_camel_to_snake(test_config): + value = "thisIsAnExampleOfCamelCase" + assert camel_to_snake(value) == "this_is_an_example_of_camel_case"