passbolt-styleguide
Version:
Passbolt styleguide contains common styling assets used by the different sites, plugin, etc.
330 lines (318 loc) • 11.6 kB
JavaScript
/**
* Passbolt ~ Open source password manager for teams
* Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.passbolt.com Passbolt(tm)
* @since 2.11.0
*/
import { UserWorkspaceFilterTypes } from "../../../contexts/UserWorkspaceContext";
import { defaultAppContext } from "../../../contexts/ExtAppContext.test.data";
import { defaultAccountRecoveryUserContext } from "../../../contexts/AccountRecoveryUserContext.test.data";
import { TEST_ROLE_USER_ID } from "../../../../shared/models/entity/role/roleEntity.test.data";
import { defaultUserWorkspaceContext } from "../../../contexts/UserWorkspaceContext.test.data";
import { defaultAdministratorRbacContext } from "../../../../shared/context/Rbac/RbacContext.test.data";
/**
* Default props
* @returns {any}
*/
export function defaultProps(props) {
return {
context: defaultAppContext(),
rbacContext: defaultAdministratorRbacContext(),
accountRecoveryContext: defaultAccountRecoveryUserContext(),
onChange: () => jest.fn(),
dragContext: {
onDragStart: jest.fn(),
onDragEnd: jest.fn(),
},
contextualMenuContext: {
show: jest.fn(),
hide: jest.fn(),
},
userWorkspaceContext: defaultUserWorkspaceContext({
onUserScrolled: jest.fn(),
scrollTo: {
user: {
id: "54c6278e-f824-5fda-91ff-3e946b18d994",
role_id: TEST_ROLE_USER_ID,
role: {
created: "2012-07-04T13:39:25+00:00",
description: "Logged in user",
id: TEST_ROLE_USER_ID,
modified: "2012-07-04T13:39:25+00:00",
name: "user",
},
username: "dame@passbolt.com",
active: true,
deleted: false,
created: "2020-05-13T07:32:49+00:00",
modified: "2020-05-13T08:32:49+00:00",
profile: {
id: "2766ff6b-87f1-53a9-98fd-72cd32a3df69",
user_id: "54c6278e-f824-5fda-91ff-3e946b18d994",
first_name: "Dame Steve",
last_name: "Shirley",
created: "2020-05-13T09:32:49+00:00",
modified: "2020-05-13T09:32:49+00:00",
avatar: {
id: "81100609-d60d-4dc8-a8c8-de45522eee1b",
user_id: "54c6278e-f824-5fda-91ff-3e946b18d994",
foreign_key: "2766ff6b-87f1-53a9-98fd-72cd32a3df69",
model: "Avatar",
filename: "dame steve.png",
filesize: 20676,
mime_type: "image\/png",
extension: "png",
hash: "f2695972b9009970ac85aae95f907693268cd249",
path: "Avatar\/1b\/9d\/80\/81100609d60d4dc8a8c8de45522eee1b\/81100609d60d4dc8a8c8de45522eee1b.png",
adapter: "Local",
created: "2020-05-13T09:32:51+00:00",
modified: "2020-05-13T09:32:51+00:00",
url: {
medium:
"img\/public\/Avatar\/1b\/9d\/80\/81100609d60d4dc8a8c8de45522eee1b\/81100609d60d4dc8a8c8de45522eee1b.a99472d5.png",
small:
"img\/public\/Avatar\/1b\/9d\/80\/81100609d60d4dc8a8c8de45522eee1b\/81100609d60d4dc8a8c8de45522eee1b.65a0ba70.png",
},
},
},
__placeholder_last_logged_in__: "",
last_logged_in: "",
is_mfa_enabled: false,
},
},
onSorterChanged: jest.fn(),
onUserSelected: {
single: jest.fn(),
},
sorter: {
propertyName: "modified",
asc: true,
},
selectedUsers: [],
filteredUsers: [
{
id: "640ebc06-5ec1-5322-a1ae-6120ed2f3a74",
role_id: TEST_ROLE_USER_ID,
role: {
created: "2012-07-04T13:39:25+00:00",
description: "Logged in user",
id: TEST_ROLE_USER_ID,
modified: "2012-07-04T13:39:25+00:00",
name: "user",
},
username: "carol@passbolt.com",
active: true,
deleted: false,
created: "2020-05-11T09:32:49+00:00",
modified: "2020-05-12T09:32:49+00:00",
profile: {
id: "48bcd9ac-a520-53e0-b3a4-9da7e57b91aa",
user_id: "640ebc06-5ec1-5322-a1ae-6120ed2f3a74",
first_name: "Carol",
last_name: "Shaw",
created: "2020-05-13T09:32:49+00:00",
modified: "2020-05-13T09:32:49+00:00",
avatar: {
id: "0f769127-3053-45e4-bd8e-75e766bb4d52",
user_id: "640ebc06-5ec1-5322-a1ae-6120ed2f3a74",
foreign_key: "48bcd9ac-a520-53e0-b3a4-9da7e57b91aa",
model: "Avatar",
filename: "carol.png",
filesize: 733439,
mime_type: "image\/png",
extension: "png",
hash: "7445a736df60a1ac1bfdab8fc5b842a95c495aec",
path: "Avatar\/73\/09\/19\/0f769127305345e4bd8e75e766bb4d52\/0f769127305345e4bd8e75e766bb4d52.png",
adapter: "Local",
created: "2020-05-13T09:32:51+00:00",
modified: "2020-05-13T09:32:51+00:00",
url: {
medium:
"img\/public\/Avatar\/73\/09\/19\/0f769127305345e4bd8e75e766bb4d52\/0f769127305345e4bd8e75e766bb4d52.a99472d5.png",
small:
"img\/public\/Avatar\/73\/09\/19\/0f769127305345e4bd8e75e766bb4d52\/0f769127305345e4bd8e75e766bb4d52.65a0ba70.png",
},
},
},
__placeholder_last_logged_in__: "",
last_logged_in: "",
is_mfa_enabled: false,
},
{
id: "54c6278e-f824-5fda-91ff-3e946b18d994",
role_id: TEST_ROLE_USER_ID,
role: {
created: "2012-07-04T13:39:25+00:00",
description: "Logged in user",
id: TEST_ROLE_USER_ID,
modified: "2012-07-04T13:39:25+00:00",
name: "user",
},
username: "dame@passbolt.com",
active: true,
deleted: false,
created: "2020-05-13T07:32:49+00:00",
modified: "2020-05-13T08:32:49+00:00",
profile: {
id: "2766ff6b-87f1-53a9-98fd-72cd32a3df69",
user_id: "54c6278e-f824-5fda-91ff-3e946b18d994",
first_name: "Dame Steve",
last_name: "Shirley",
created: "2020-05-13T09:32:49+00:00",
modified: "2020-05-13T09:32:49+00:00",
avatar: {
id: "81100609-d60d-4dc8-a8c8-de45522eee1b",
user_id: "54c6278e-f824-5fda-91ff-3e946b18d994",
foreign_key: "2766ff6b-87f1-53a9-98fd-72cd32a3df69",
model: "Avatar",
filename: "dame steve.png",
filesize: 20676,
mime_type: "image\/png",
extension: "png",
hash: "f2695972b9009970ac85aae95f907693268cd249",
path: "Avatar\/1b\/9d\/80\/81100609d60d4dc8a8c8de45522eee1b\/81100609d60d4dc8a8c8de45522eee1b.png",
adapter: "Local",
created: "2020-05-13T09:32:51+00:00",
modified: "2020-05-13T09:32:51+00:00",
url: {
medium:
"img\/public\/Avatar\/1b\/9d\/80\/81100609d60d4dc8a8c8de45522eee1b\/81100609d60d4dc8a8c8de45522eee1b.a99472d5.png",
small:
"img\/public\/Avatar\/1b\/9d\/80\/81100609d60d4dc8a8c8de45522eee1b\/81100609d60d4dc8a8c8de45522eee1b.65a0ba70.png",
},
},
},
__placeholder_last_logged_in__: "",
last_logged_in: "",
is_mfa_enabled: false,
},
],
filter: {
type: UserWorkspaceFilterTypes.ALL,
},
getTranslatedRoleName: (name) => name,
}),
...props,
};
}
/**
* Props with null users
* @returns {any}
*/
export function propsWithNullUsers() {
return defaultProps({
userWorkspaceContext: defaultUserWorkspaceContext({
filteredUsers: null,
filter: {
type: UserWorkspaceFilterTypes.ALL,
},
}),
});
}
/**
* Props with no users using the text search
* @returns {any}
*/
export function propsWithNoUsersWithTextSearch() {
return defaultProps({
userWorkspaceContext: defaultUserWorkspaceContext({
filteredUsers: [],
filter: {
type: UserWorkspaceFilterTypes.TEXT,
},
}),
});
}
export function propsWithNoUsersWithAllStatusesFilter() {
return defaultProps({
userWorkspaceContext: defaultUserWorkspaceContext({
filteredUsers: [],
filter: {
type: UserWorkspaceFilterTypes.SUSPENDED_USER,
},
}),
});
}
export function propsWithNoUsersAccountRecoveryRequestFilter() {
return defaultProps({
userWorkspaceContext: defaultUserWorkspaceContext({
filteredUsers: [],
filter: {
type: UserWorkspaceFilterTypes.ACCOUNT_RECOVERY_REQUEST,
},
}),
});
}
export function propsWithNoUsersMissingMetadataKeyFilter() {
return defaultProps({
userWorkspaceContext: defaultUserWorkspaceContext({
filteredUsers: [],
filter: {
type: UserWorkspaceFilterTypes.MISSING_METADATA_KEY,
},
}),
});
}
/**
* Props with no users using the text search
* @returns {any}
*/
export function propsWithFirstUserAttentionRequired() {
const props = defaultProps();
props.userWorkspaceContext.filteredUsers[0].pending_account_recovery_request = true;
props.userWorkspaceContext.filteredUsers[1].missing_metadata_key_ids = ["81100609-d60d-4dc8-a8c8-de45522eee1b"];
return props;
}
/**
* Props with specific group configurations for testing getDisabledGroupIds
* @param {Object} options Configuration options
* @param {Array|null} options.groups The groups to set in context
* @param {string|null} options.loggedInUserId The logged in user ID (null to unset loggedInUser)
* @param {Array} options.selectedUsers The selected users for drag operation
* @returns {Object} Props configured for testing
*/
export function propsWithGroups({ groups = [], loggedInUserId = null, selectedUsers = [] } = {}) {
const props = defaultProps();
props.context.groups = groups;
if (loggedInUserId === null) {
props.context.loggedInUser = null;
} else {
props.context.loggedInUser = { ...props.context.loggedInUser, id: loggedInUserId };
}
props.userWorkspaceContext.selectedUsers = selectedUsers;
if (selectedUsers.length > 0) {
props.userWorkspaceContext.filteredUsers = selectedUsers;
}
return props;
}
/**
* Helper to create a group with specific configuration for testing
* @param {Object} options Group configuration
* @param {string} options.id Group ID
* @param {Array} options.members Array of {userId, isAdmin} objects
* @returns {Object} Group object
*/
export function createGroup({ id, members = [] }) {
return {
id,
groups_users: members.map((member) => ({
user_id: member.userId,
is_admin: member.isAdmin || false,
})),
};
}
/**
* Helper to create a minimal user object for testing
* @param {string} id User ID
* @returns {Object} User object
*/
export function createUser(id) {
return { id };
}