box-ui-elements-mlh
Version:
788 lines (748 loc) • 54.6 kB
JavaScript
import {
API_TO_USM_PERMISSION_LEVEL_MAP,
convertAccessLevelsDisabledReasons,
convertAllowedAccessLevels,
convertCollab,
convertCollabsRequest,
convertCollabsResponse,
convertGroupContactsResponse,
convertIsDownloadSettingAvailable,
convertItemResponse,
convertSharedLinkPermissions,
convertSharedLinkSettings,
convertUserContactsResponse,
convertUserContactsByEmailResponse,
convertUserResponse,
convertEffectiveSharedLinkPermission,
} from '../convertData';
import {
TYPE_FILE,
TYPE_FOLDER,
PERMISSION_CAN_DOWNLOAD,
PERMISSION_CAN_PREVIEW,
ACCESS_COLLAB,
ACCESS_COMPANY,
ACCESS_OPEN,
} from '../../../../constants';
import {
ALLOWED_ACCESS_LEVELS,
ANYONE_IN_COMPANY,
ANYONE_WITH_LINK,
CAN_VIEW_DOWNLOAD,
CAN_VIEW_ONLY,
DISABLED_REASON_ACCESS_POLICY,
PEOPLE_IN_ITEM,
} from '../../constants';
import {
bdlDarkBlue50,
bdlGray20,
bdlGreenLight50,
bdlLightBlue50,
bdlOrange50,
bdlPurpleRain50,
bdlWatermelonRed50,
bdlYellow50,
} from '../../../../styles/variables';
import {
MOCK_AVATAR_URL_MAP,
MOCK_COLLABS_API_RESPONSE,
MOCK_COLLABS_CONVERTED_REQUEST,
MOCK_COLLAB_IDS_CONVERTED,
MOCK_CONTACTS_API_RESPONSE,
MOCK_CONTACTS_API_RESPONSE_UNSORTED,
MOCK_CONTACTS_CONVERTED_RESPONSE,
MOCK_CONTACTS_BY_EMAIL_CONVERTED_RESPONSE,
MOCK_COLLABS_CONVERTED_GROUPS,
MOCK_COLLABS_REQUEST_GROUPS_ONLY,
MOCK_COLLABS_CONVERTED_USERS,
MOCK_COLLABS_REQUEST_USERS_ONLY,
MOCK_COLLABS_REQUEST_USERS_AND_GROUPS,
MOCK_CONVERTED_DISABLED_REASONS,
MOCK_DISABLED_REASONS_FROM_API,
MOCK_GROUP_CONTACTS_API_RESPONSE,
MOCK_GROUP_CONTACTS_CONVERTED_RESPONSE,
MOCK_ITEM_PERMISSIONS,
MOCK_OWNER,
MOCK_OWNER_ID,
MOCK_OWNER_EMAIL,
MOCK_PASSWORD,
MOCK_SERVER_URL,
MOCK_SETTINGS_WITH_ALL_FEATURES,
MOCK_SETTINGS_DOWNLOAD_PERMISSIONS,
MOCK_SETTINGS_PREVIEW_PERMISSIONS,
MOCK_SETTINGS_WITHOUT_DOWNLOAD,
MOCK_SETTINGS_WITHOUT_EXPIRATION,
MOCK_SETTINGS_WITHOUT_PASSWORD,
MOCK_SETTINGS_WITHOUT_VANITY_URL,
MOCK_TIMESTAMP_MILLISECONDS,
MOCK_TIMESTAMP_ISO_STRING,
MOCK_USER_IDS_CONVERTED,
MOCK_VANITY_URL,
MOCK_GROUP_CONTACTS_API_RESPONSE_UNSORTED,
} from '../__mocks__/USMMocks';
jest.mock('../../../../utils/file', () => ({
...jest.requireActual('../../../../utils/file'),
getTypedFileId: () => 'f_190457309',
getTypedFolderId: () => 'd_190457309',
}));
describe('convertAccessLevelsDisabledReasons', () => {
// The "collaborators" access level will never have a disabled reason.
test.each`
disabledReasonsFromAPI | convertedDisabledReasons | description
${MOCK_DISABLED_REASONS_FROM_API} | ${MOCK_CONVERTED_DISABLED_REASONS} | ${'both company and open'}
${{ company: DISABLED_REASON_ACCESS_POLICY }} | ${{ peopleInYourCompany: DISABLED_REASON_ACCESS_POLICY }} | ${'company only'}
${{ open: DISABLED_REASON_ACCESS_POLICY }} | ${{ peopleWithTheLink: DISABLED_REASON_ACCESS_POLICY }} | ${'open only'}
`(
'should convert access levels disabled reasons when given reasons for $description',
({ disabledReasonsFromAPI, convertedDisabledReasons }) => {
expect(convertAccessLevelsDisabledReasons(disabledReasonsFromAPI)).toEqual(convertedDisabledReasons);
},
);
});
describe('convertAllowedAccessLevels', () => {
// The "collaborators" access level is always allowed.
test.each`
allowedAccessLevelsFromAPI | convertedAllowedAccessLevels | description
${['collaborators', 'open', 'company']} | ${ALLOWED_ACCESS_LEVELS} | ${'all'}
${['collaborators', 'company']} | ${{ peopleInThisItem: true, peopleInYourCompany: true, peopleWithTheLink: false }} | ${'only collaborators and company'}
${['collaborators', 'open']} | ${{ peopleInThisItem: true, peopleInYourCompany: false, peopleWithTheLink: true }} | ${'only collaborators and open'}
${['collaborators']} | ${{ peopleInThisItem: true, peopleInYourCompany: false, peopleWithTheLink: false }} | ${'only collaborators and open'}
`(
'should convert allowed access levels when $description levels are allowed',
({ allowedAccessLevelsFromAPI, convertedAllowedAccessLevels }) => {
expect(convertAllowedAccessLevels(allowedAccessLevelsFromAPI)).toEqual(convertedAllowedAccessLevels);
},
);
});
describe('convertItemResponse()', () => {
const TYPED_FILE_ID = 'f_190457309';
const TYPED_FOLDER_ID = 'd_190457309';
const ITEM_ID = '190457309';
const ITEM_NAME = '<3 Box UI Elements <3';
const ITEM_DESCRIPTION = 'Why we <3 Box UI Elements';
const ITEM_SHARED_LINK_URL = 'https://cloud.box.com/s/boxuielementsarethebest';
const ITEM_SHARED_DOWNLOAD_URL = 'https://cloud.box.com/shared/static/boxuielementsarethebest';
const ITEM_EXTENSION = 'png';
const ITEM_EXTENSION_GDOC = 'gdoc';
const ITEM_SHARED_LINK = {
access: 'company',
download_count: 0,
download_url: ITEM_SHARED_DOWNLOAD_URL,
effective_access: 'company',
effective_permission: 'can_download',
is_password_enabled: false,
permissions: {
can_preview: true,
can_download: true,
},
preview_count: 0,
unshared_at: MOCK_TIMESTAMP_ISO_STRING,
url: ITEM_SHARED_LINK_URL,
vanity_name: null,
vanity_url: null,
};
const FULL_PERMISSIONS = {
can_download: true,
can_upload: true,
can_rename: true,
can_delete: true,
can_share: true,
can_invite_collaborator: true,
can_set_share_access: true,
};
const DOWNLOAD_PERMISSIONS = {
can_download: true,
can_upload: false,
can_rename: false,
can_delete: false,
can_share: false,
can_invite_collaborator: false,
can_set_share_access: false,
};
const INVITE_COLLAB_PERMISSIONS = {
can_download: true,
can_upload: false,
can_rename: false,
can_delete: false,
can_share: true,
can_invite_collaborator: true,
can_set_share_access: false,
};
const SET_SHARE_ACCESS_PERMISSIONS = {
can_download: true,
can_upload: false,
can_rename: false,
can_delete: false,
can_share: true,
can_invite_collaborator: true,
can_set_share_access: true,
};
const ALL_SHARED_LINK_FEATURES = {
vanity_name: true,
download_url: true,
password: true,
};
const VANITY_NAME_ONLY = {
vanity_name: true,
download_url: false,
password: false,
};
const DOWNLOAD_URL_ONLY = {
vanity_name: false,
download_url: true,
password: false,
};
const PASSWORD_ONLY = {
vanity_name: false,
download_url: false,
password: true,
};
test.each`
itemType | extension | sharedLink | sharedLinkFeatures | permissions | typedID | description
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${ALL_SHARED_LINK_FEATURES} | ${FULL_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, full permissions, and all shared link features'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${ALL_SHARED_LINK_FEATURES} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, download permissions, and all shared link features'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${ALL_SHARED_LINK_FEATURES} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, invite collabs permissions, and all shared link features'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${ALL_SHARED_LINK_FEATURES} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, set share access permissions, and all shared link features'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${ALL_SHARED_LINK_FEATURES} | ${FULL_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, full permissions, and all shared link features'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${ALL_SHARED_LINK_FEATURES} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, download permissions, and all shared link features'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${ALL_SHARED_LINK_FEATURES} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, invite collabs permissions, and all shared link features'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${ALL_SHARED_LINK_FEATURES} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, set share access permissions, and all shared link features'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${VANITY_NAME_ONLY} | ${FULL_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, full permissions, and the vanity URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${VANITY_NAME_ONLY} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, download permissions, and the vanity URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${VANITY_NAME_ONLY} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, invite collabs permissions, and the vanity URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${VANITY_NAME_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, set share access permissions, and the vanity URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${VANITY_NAME_ONLY} | ${FULL_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, full permissions, and the vanity URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${VANITY_NAME_ONLY} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, download permissions, and the vanity URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${VANITY_NAME_ONLY} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, invite collabs permissions, and the vanity URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${VANITY_NAME_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, set share access permissions, and the vanity URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${DOWNLOAD_URL_ONLY} | ${FULL_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, full permissions, and the download URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${DOWNLOAD_URL_ONLY} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, download permissions, and the download URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${DOWNLOAD_URL_ONLY} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, invite collabs permissions, and the download URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${DOWNLOAD_URL_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, set share access permissions, and the download URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${DOWNLOAD_URL_ONLY} | ${FULL_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, full permissions, and the download URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${DOWNLOAD_URL_ONLY} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, download permissions, and the download URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${DOWNLOAD_URL_ONLY} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, invite collabs permissions, and the download URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${DOWNLOAD_URL_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, set share access permissions, and the download URL feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${PASSWORD_ONLY} | ${FULL_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, full permissions, and the password feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${PASSWORD_ONLY} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, download permissions, and the password feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${PASSWORD_ONLY} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, invite collabs permissions, and the password feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${null} | ${PASSWORD_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with no shared link, set share access permissions, and the password feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${PASSWORD_ONLY} | ${FULL_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, full permissions, and the password feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${PASSWORD_ONLY} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, download permissions, and the password feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${PASSWORD_ONLY} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, invite collabs permissions, and the password feature'}
${TYPE_FILE} | ${ITEM_EXTENSION} | ${ITEM_SHARED_LINK} | ${PASSWORD_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FILE_ID} | ${'files with a shared link, set share access permissions, and the password feature'}
${TYPE_FILE} | ${ITEM_EXTENSION_GDOC} | ${ITEM_SHARED_LINK} | ${PASSWORD_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FILE_ID} | ${'g suite files with a shared link, set share access permissions, and the password feature'}
${TYPE_FOLDER} | ${null} | ${null} | ${ALL_SHARED_LINK_FEATURES} | ${FULL_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, full permissions, and all shared link features'}
${TYPE_FOLDER} | ${null} | ${null} | ${ALL_SHARED_LINK_FEATURES} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, download permissions, and all shared link features'}
${TYPE_FOLDER} | ${null} | ${null} | ${ALL_SHARED_LINK_FEATURES} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, invite collabs permissions, and all shared link features'}
${TYPE_FOLDER} | ${null} | ${null} | ${ALL_SHARED_LINK_FEATURES} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, set share access permissions, and all shared link features'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${ALL_SHARED_LINK_FEATURES} | ${FULL_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, full permissions, and all shared link features'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${ALL_SHARED_LINK_FEATURES} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, download permissions, and all shared link features'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${ALL_SHARED_LINK_FEATURES} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, invite collabs permissions, and all shared link features'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${ALL_SHARED_LINK_FEATURES} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, set share access permissions, and all shared link features'}
${TYPE_FOLDER} | ${null} | ${null} | ${VANITY_NAME_ONLY} | ${FULL_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, full permissions, and the vanity URL feature'}
${TYPE_FOLDER} | ${null} | ${null} | ${VANITY_NAME_ONLY} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, download permissions, and the vanity URL feature'}
${TYPE_FOLDER} | ${null} | ${null} | ${VANITY_NAME_ONLY} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, invite collabs permissions, and the vanity URL feature'}
${TYPE_FOLDER} | ${null} | ${null} | ${VANITY_NAME_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, set share access permissions, and the vanity URL feature'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${VANITY_NAME_ONLY} | ${FULL_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, full permissions, and the vanity URL feature'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${VANITY_NAME_ONLY} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, download permissions, and the vanity URL feature'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${VANITY_NAME_ONLY} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, invite collabs permissions, and the vanity URL feature'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${VANITY_NAME_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, set share access permissions, and the vanity URL feature'}
${TYPE_FOLDER} | ${null} | ${null} | ${DOWNLOAD_URL_ONLY} | ${FULL_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, full permissions, and the download URL feature'}
${TYPE_FOLDER} | ${null} | ${null} | ${DOWNLOAD_URL_ONLY} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, download permissions, and the download URL feature'}
${TYPE_FOLDER} | ${null} | ${null} | ${DOWNLOAD_URL_ONLY} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, invite collabs permissions, and the download URL feature'}
${TYPE_FOLDER} | ${null} | ${null} | ${DOWNLOAD_URL_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, set share access permissions, and the download URL feature'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${DOWNLOAD_URL_ONLY} | ${FULL_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, full permissions, and the download URL feature'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${DOWNLOAD_URL_ONLY} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, download permissions, and the download URL feature'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${DOWNLOAD_URL_ONLY} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, invite collabs permissions, and the download URL feature'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${DOWNLOAD_URL_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, set share access permissions, and the download URL feature'}
${TYPE_FOLDER} | ${null} | ${null} | ${PASSWORD_ONLY} | ${FULL_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, full permissions, and the password feature'}
${TYPE_FOLDER} | ${null} | ${null} | ${PASSWORD_ONLY} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, download permissions, and the password feature'}
${TYPE_FOLDER} | ${null} | ${null} | ${PASSWORD_ONLY} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, invite collabs permissions, and the password feature'}
${TYPE_FOLDER} | ${null} | ${null} | ${PASSWORD_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with no shared link, set share access permissions, and the password feature'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${PASSWORD_ONLY} | ${FULL_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, full permissions, and the password feature'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${PASSWORD_ONLY} | ${DOWNLOAD_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, download permissions, and the password feature'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${PASSWORD_ONLY} | ${INVITE_COLLAB_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, invite collabs permissions, and the password feature'}
${TYPE_FOLDER} | ${null} | ${ITEM_SHARED_LINK} | ${PASSWORD_ONLY} | ${SET_SHARE_ACCESS_PERMISSIONS} | ${TYPED_FOLDER_ID} | ${'folders with a shared link, set share access permissions, and the password feature'}
`(
'should convert $description',
({ itemType, extension, sharedLink, sharedLinkFeatures, permissions, typedID }) => {
const responseFromAPI = {
allowed_invitee_roles: ['editor', 'viewer'],
description: ITEM_DESCRIPTION,
etag: '1',
extension,
id: ITEM_ID,
name: ITEM_NAME,
owned_by: MOCK_OWNER,
permissions,
shared_link: sharedLink,
shared_link_features: sharedLinkFeatures,
type: itemType,
};
const { can_download, can_invite_collaborator, can_preview, can_set_share_access, can_share } = permissions;
const { download_url, effective_permission, is_password_enabled, url, vanity_name } = Object(sharedLink);
const { download_url: isDirectLinkAvailable, password } = sharedLinkFeatures;
const isDownloadAvailable = can_download && extension !== ITEM_EXTENSION_GDOC;
const convertedResponse = {
item: {
canUserSeeClassification: false,
description: ITEM_DESCRIPTION,
extension,
grantedPermissions: {
itemShare: can_share,
},
hideCollaborators: false,
id: ITEM_ID,
name: ITEM_NAME,
ownerEmail: MOCK_OWNER_EMAIL,
ownerID: MOCK_OWNER_ID,
permissions,
type: itemType,
typedID,
},
sharedLink: sharedLink
? {
accessLevel: ANYONE_IN_COMPANY,
accessLevelsDisabledReason: {},
allowedAccessLevels: ALLOWED_ACCESS_LEVELS,
canChangeAccessLevel: can_set_share_access,
canChangeDownload: can_set_share_access && isDownloadAvailable,
canChangeExpiration: can_set_share_access,
canChangePassword: can_set_share_access && password,
canChangeVanityName: false,
canInvite: can_invite_collaborator,
directLink: download_url,
expirationTimestamp: MOCK_TIMESTAMP_MILLISECONDS,
isDirectLinkAvailable,
isDownloadAllowed: isDownloadAvailable,
isDownloadAvailable,
isDownloadEnabled: isDownloadAvailable,
isDownloadSettingAvailable: isDownloadAvailable,
isEditAllowed: true,
isNewSharedLink: false,
isPasswordAvailable: password,
isPasswordEnabled: is_password_enabled,
isPreviewAllowed: can_preview,
permissionLevel:
extension !== ITEM_EXTENSION_GDOC
? API_TO_USM_PERMISSION_LEVEL_MAP[effective_permission]
: CAN_VIEW_ONLY,
url,
vanityName: vanity_name || '',
}
: { canInvite: can_invite_collaborator },
};
expect(convertItemResponse(responseFromAPI)).toEqual(convertedResponse);
},
);
test.each`
access | permission | expectedIsDownloadAllowed | expectedCanChangeDownload | description
${ACCESS_COLLAB} | ${PERMISSION_CAN_DOWNLOAD} | ${true} | ${false} | ${'access is "collab" and shared link permission is "can_download"'}
${ACCESS_COMPANY} | ${PERMISSION_CAN_DOWNLOAD} | ${true} | ${true} | ${'access is "company" and shared link permission is "can_download"'}
${ACCESS_OPEN} | ${PERMISSION_CAN_DOWNLOAD} | ${true} | ${true} | ${'access is "open" and shared link permission is "can_download"'}
${ACCESS_COLLAB} | ${PERMISSION_CAN_PREVIEW} | ${false} | ${false} | ${'access is "collab" and shared link permission is "can_preview"'}
${ACCESS_COMPANY} | ${PERMISSION_CAN_PREVIEW} | ${false} | ${true} | ${'access is "company" and shared link permission is "can_preview"'}
${ACCESS_OPEN} | ${PERMISSION_CAN_PREVIEW} | ${false} | ${true} | ${'access is "open" and shared link permission is "can_preview"'}
`(
'should set download properties correctly when $description',
({ access, permission, expectedIsDownloadAllowed, expectedCanChangeDownload }) => {
const responseFromAPI = {
allowed_invitee_roles: ['editor', 'viewer'],
description: ITEM_DESCRIPTION,
etag: '1',
id: ITEM_ID,
name: ITEM_NAME,
owned_by: MOCK_OWNER,
permissions: MOCK_ITEM_PERMISSIONS,
shared_link: { ...ITEM_SHARED_LINK, effective_access: access, effective_permission: permission },
shared_link_features: ALL_SHARED_LINK_FEATURES,
type: TYPE_FILE,
};
const {
sharedLink: { canChangeDownload, isDownloadAllowed },
} = convertItemResponse(responseFromAPI);
expect(canChangeDownload).toBe(expectedCanChangeDownload);
expect(isDownloadAllowed).toBe(expectedIsDownloadAllowed);
},
);
test.each`
hexCode | colorID | colorName
${bdlYellow50} | ${0} | ${'a yellow'}
${bdlOrange50} | ${1} | ${'an orange'}
${bdlWatermelonRed50} | ${2} | ${'a red'}
${bdlPurpleRain50} | ${3} | ${'a purple'}
${bdlLightBlue50} | ${4} | ${'a light blue'}
${bdlDarkBlue50} | ${5} | ${'a dark blue'}
${bdlGreenLight50} | ${6} | ${'a green'}
${bdlGray20} | ${7} | ${'a gray'}
`('should convert classification with $colorName background', ({ hexCode, colorID }) => {
const classificationName = 'internal';
const definition = 'For internal purposes only.';
const responseFromAPI = {
allowed_invitee_roles: ['editor', 'viewer'],
classification: {
color: hexCode,
definition,
name: classificationName,
},
description: ITEM_DESCRIPTION,
etag: '1',
id: ITEM_ID,
name: ITEM_NAME,
owned_by: MOCK_OWNER,
permissions: FULL_PERMISSIONS,
shared_link: ITEM_SHARED_LINK,
shared_link_features: ALL_SHARED_LINK_FEATURES,
type: TYPE_FOLDER,
};
const {
item: { bannerPolicy, classification },
} = convertItemResponse(responseFromAPI);
expect(bannerPolicy).toEqual({
body: definition,
colorID,
});
expect(classification).toBe(classificationName);
});
test.each`
disabledReasonsFromAPI | convertedDisabledReasons | description
${MOCK_DISABLED_REASONS_FROM_API} | ${MOCK_CONVERTED_DISABLED_REASONS} | ${'disabled reasons when they are returned from the API'}
${undefined} | ${{}} | ${'default disabled reasons when the API does not return disabled reasons'}
`('should return $description', ({ disabledReasonsFromAPI, convertedDisabledReasons }) => {
const responseFromAPI = {
allowed_invitee_roles: ['editor', 'viewer'],
allowed_shared_link_access_levels_disabled_reasons: disabledReasonsFromAPI,
description: ITEM_DESCRIPTION,
etag: '1',
id: ITEM_ID,
name: ITEM_NAME,
owned_by: MOCK_OWNER,
permissions: FULL_PERMISSIONS,
shared_link: ITEM_SHARED_LINK,
shared_link_features: ALL_SHARED_LINK_FEATURES,
type: TYPE_FOLDER,
};
const {
sharedLink: { accessLevelsDisabledReason, allowedAccessLevels },
} = convertItemResponse(responseFromAPI);
expect(accessLevelsDisabledReason).toEqual(convertedDisabledReasons);
expect(allowedAccessLevels).toEqual(ALLOWED_ACCESS_LEVELS);
});
});
describe('convertUserResponse()', () => {
const USER_ID = '79035428903';
const ENTERPRISE_NAME = 'Best Enterprise Ever';
const ENTERPRISE = {
name: ENTERPRISE_NAME,
};
const HOSTNAME = 'https://cloud.box.com/';
test.each`
enterprise | hostname | enterpriseName | serverURL | description
${ENTERPRISE} | ${HOSTNAME} | ${ENTERPRISE_NAME} | ${MOCK_SERVER_URL} | ${'enterprise and hostname exist'}
${ENTERPRISE} | ${null} | ${ENTERPRISE_NAME} | ${''} | ${'enterprise exists, but not hostname'}
${null} | ${HOSTNAME} | ${''} | ${MOCK_SERVER_URL} | ${'hostname exists, but not enterprise'}
${null} | ${null} | ${''} | ${''} | ${'neither enterprise nor hostname exists'}
`('should convert data when $description', ({ enterprise, hostname, enterpriseName, serverURL }) => {
const responseFromAPI = {
enterprise,
hostname,
id: USER_ID,
};
const convertedResponse = {
id: USER_ID,
userEnterpriseData: {
enterpriseName,
serverURL,
},
};
expect(convertUserResponse(responseFromAPI)).toEqual(convertedResponse);
});
});
describe('convertSharedLinkPermissions', () => {
test.each`
permissionLevel | result
${CAN_VIEW_DOWNLOAD} | ${{ [PERMISSION_CAN_DOWNLOAD]: true, [PERMISSION_CAN_PREVIEW]: false }}
${CAN_VIEW_ONLY} | ${{ [PERMISSION_CAN_DOWNLOAD]: false, [PERMISSION_CAN_PREVIEW]: true }}
`('should return the correct result for the $permissionLevel permission level', ({ permissionLevel, result }) => {
expect(convertSharedLinkPermissions(permissionLevel)).toEqual(result);
});
});
describe('convertSharedLinkSettings', () => {
test.each`
newSettings | permissions | unsharedAt | vanityUrl | serverURL | description
${MOCK_SETTINGS_WITH_ALL_FEATURES} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${MOCK_VANITY_URL} | ${MOCK_SERVER_URL} | ${'with all features'}
${MOCK_SETTINGS_WITHOUT_DOWNLOAD} | ${MOCK_SETTINGS_PREVIEW_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${MOCK_VANITY_URL} | ${MOCK_SERVER_URL} | ${'without disallowed direct downloads'}
${MOCK_SETTINGS_WITHOUT_EXPIRATION} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${null} | ${MOCK_VANITY_URL} | ${MOCK_SERVER_URL} | ${'without an expiration date'}
${MOCK_SETTINGS_WITHOUT_PASSWORD} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${MOCK_VANITY_URL} | ${MOCK_SERVER_URL} | ${'without a password'}
${MOCK_SETTINGS_WITHOUT_VANITY_URL} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${''} | ${MOCK_SERVER_URL} | ${'without a vanity name'}
${MOCK_SETTINGS_WITH_ALL_FEATURES} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${''} | ${null} | ${'without a server URL'}
`(
'should convert a shared link settings USM object $description when the accessLevel is ANYONE_IN_COMPANY',
({ newSettings, permissions, unsharedAt, serverURL, vanityUrl }) => {
// "password" should not exist in the converted object
expect(convertSharedLinkSettings(newSettings, ANYONE_IN_COMPANY, true, serverURL)).toEqual({
permissions,
unshared_at: unsharedAt,
vanity_url: vanityUrl,
});
},
);
test.each`
newSettings | unsharedAt | vanityUrl | serverURL | description
${MOCK_SETTINGS_WITH_ALL_FEATURES} | ${MOCK_TIMESTAMP_ISO_STRING} | ${MOCK_VANITY_URL} | ${MOCK_SERVER_URL} | ${'with all features'}
${MOCK_SETTINGS_WITHOUT_DOWNLOAD} | ${MOCK_TIMESTAMP_ISO_STRING} | ${MOCK_VANITY_URL} | ${MOCK_SERVER_URL} | ${'without disallowed direct downloads'}
${MOCK_SETTINGS_WITHOUT_EXPIRATION} | ${null} | ${MOCK_VANITY_URL} | ${MOCK_SERVER_URL} | ${'without an expiration date'}
${MOCK_SETTINGS_WITHOUT_PASSWORD} | ${MOCK_TIMESTAMP_ISO_STRING} | ${MOCK_VANITY_URL} | ${MOCK_SERVER_URL} | ${'without a password'}
${MOCK_SETTINGS_WITHOUT_VANITY_URL} | ${MOCK_TIMESTAMP_ISO_STRING} | ${''} | ${MOCK_SERVER_URL} | ${'without a vanity name'}
${MOCK_SETTINGS_WITH_ALL_FEATURES} | ${MOCK_TIMESTAMP_ISO_STRING} | ${''} | ${null} | ${'without a server URL'}
`(
'should convert a shared link settings USM object $description when the accessLevel is PEOPLE_IN_ITEM',
({ newSettings, unsharedAt, serverURL, vanityUrl }) => {
// "password" and "permissions" should not exist in the converted object
expect(convertSharedLinkSettings(newSettings, PEOPLE_IN_ITEM, true, serverURL)).toEqual({
unshared_at: unsharedAt,
vanity_url: vanityUrl,
});
},
);
test.each`
newSettings | permissions | unsharedAt | vanityUrl | password | serverURL | description
${MOCK_SETTINGS_WITH_ALL_FEATURES} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${MOCK_VANITY_URL} | ${MOCK_PASSWORD} | ${MOCK_SERVER_URL} | ${'with all features'}
${MOCK_SETTINGS_WITHOUT_DOWNLOAD} | ${MOCK_SETTINGS_PREVIEW_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${MOCK_VANITY_URL} | ${MOCK_PASSWORD} | ${MOCK_SERVER_URL} | ${'without disallowed direct downloads'}
${MOCK_SETTINGS_WITHOUT_EXPIRATION} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${null} | ${MOCK_VANITY_URL} | ${MOCK_PASSWORD} | ${MOCK_SERVER_URL} | ${'without an expiration date'}
${MOCK_SETTINGS_WITHOUT_PASSWORD} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${MOCK_VANITY_URL} | ${null} | ${MOCK_SERVER_URL} | ${'without a password'}
${MOCK_SETTINGS_WITHOUT_VANITY_URL} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${''} | ${MOCK_PASSWORD} | ${MOCK_SERVER_URL} | ${'without a vanity name'}
${MOCK_SETTINGS_WITH_ALL_FEATURES} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${''} | ${MOCK_PASSWORD} | ${null} | ${'without a server URL'}
`(
'should convert a shared link settings USM object $description when the accessLevel is ANYONE_WITH_LINK',
({ newSettings, password, permissions, unsharedAt, serverURL, vanityUrl }) => {
// All fields should exist in the converted object
expect(convertSharedLinkSettings(newSettings, ANYONE_WITH_LINK, true, serverURL)).toEqual({
password,
permissions,
unshared_at: unsharedAt,
vanity_url: vanityUrl,
});
},
);
test.each`
newSettings | permissions | unsharedAt | vanityUrl | password | serverURL | description
${MOCK_SETTINGS_WITH_ALL_FEATURES} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${MOCK_VANITY_URL} | ${MOCK_PASSWORD} | ${MOCK_SERVER_URL} | ${'with all features'}
${MOCK_SETTINGS_WITHOUT_DOWNLOAD} | ${MOCK_SETTINGS_PREVIEW_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${MOCK_VANITY_URL} | ${MOCK_PASSWORD} | ${MOCK_SERVER_URL} | ${'without disallowed direct downloads'}
${MOCK_SETTINGS_WITHOUT_EXPIRATION} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${null} | ${MOCK_VANITY_URL} | ${MOCK_PASSWORD} | ${MOCK_SERVER_URL} | ${'without an expiration date'}
${MOCK_SETTINGS_WITHOUT_PASSWORD} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${MOCK_VANITY_URL} | ${null} | ${MOCK_SERVER_URL} | ${'without a password'}
${MOCK_SETTINGS_WITHOUT_VANITY_URL} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${''} | ${MOCK_PASSWORD} | ${MOCK_SERVER_URL} | ${'without a vanity name'}
${MOCK_SETTINGS_WITH_ALL_FEATURES} | ${MOCK_SETTINGS_DOWNLOAD_PERMISSIONS} | ${MOCK_TIMESTAMP_ISO_STRING} | ${''} | ${MOCK_PASSWORD} | ${null} | ${'without a server URL'}
`(
'should convert a shared link settings USM object $description when isDownloadEnabled is false',
({ newSettings, password, permissions, unsharedAt, serverURL, vanityUrl }) => {
// can_download should never be in permissions
expect(convertSharedLinkSettings(newSettings, ANYONE_WITH_LINK, false, serverURL)).toEqual({
password,
permissions: {
can_preview: !permissions.can_download,
},
unshared_at: unsharedAt,
vanity_url: vanityUrl,
});
},
);
});
describe('convertCollabsResponse', () => {
test.each`
isCurrentUserOwner | avatarURLMap | ownerDescription | avatarURLMapDescription
${true} | ${{}} | ${'the owner'} | ${'empty'}
${false} | ${{}} | ${'not the owner'} | ${'empty'}
${true} | ${null} | ${'the owner'} | ${'null'}
${false} | ${null} | ${'not the owner'} | ${'null'}
`(
'should correctly convert a Collaborations API response when the current user is $ownerDescription and the avatar URL map is $avatarURLMapDescription',
({ isCurrentUserOwner, avatarURLMap }) => {
const convertedResponse = {
collaborators: [
{
collabID: MOCK_COLLAB_IDS_CONVERTED[0],
email: 'contentexplorer@box.com',
hasCustomAvatar: false,
imageURL: undefined,
isExternalCollab: false,
name: 'Content Explorer',
translatedRole: 'Editor',
type: 'user',
userID: MOCK_USER_IDS_CONVERTED[0],
},
{
collabID: MOCK_COLLAB_IDS_CONVERTED[1],
email: 'contentpreview@box.com',
hasCustomAvatar: false,
imageURL: undefined,
isExternalCollab: false,
name: 'Content Preview',
translatedRole: 'Editor',
type: 'user',
userID: MOCK_USER_IDS_CONVERTED[1],
},
{
collabID: MOCK_COLLAB_IDS_CONVERTED[2],
email: 'contentpicker@box.com',
expiration: {
executeAt: '2020-07-09T14:53:12-08:00',
},
hasCustomAvatar: false,
imageURL: undefined,
isExternalCollab: false,
name: 'Content Picker',
translatedRole: 'Editor',
type: 'user',
userID: MOCK_USER_IDS_CONVERTED[2],
},
{
collabID: MOCK_COLLAB_IDS_CONVERTED[3],
email: 'contentuploader@box.com',
hasCustomAvatar: false,
imageURL: undefined,
isExternalCollab: false,
name: 'Content Uploader',
translatedRole: 'Editor',
type: 'user',
userID: MOCK_USER_IDS_CONVERTED[3],
},
{
collabID: MOCK_COLLAB_IDS_CONVERTED[4],
email: 'demo@boxworks.com',
hasCustomAvatar: false,
imageURL: undefined,
isExternalCollab: !!isCurrentUserOwner,
name: 'BoxWorks Demo',
translatedRole: 'Viewer',
type: 'user',
userID: MOCK_USER_IDS_CONVERTED[4],
},
],
};
expect(
convertCollabsResponse(MOCK_COLLABS_API_RESPONSE, avatarURLMap, MOCK_OWNER_EMAIL, isCurrentUserOwner),
).toEqual(convertedResponse);
},
);
test('should correctly convert a Collaborations API response with avatar URLs', () => {
const convertedResponse = {
collaborators: [
{
collabID: MOCK_COLLAB_IDS_CONVERTED[0],
email: 'contentexplorer@box.com',
hasCustomAvatar: true,
imageURL: MOCK_AVATAR_URL_MAP[MOCK_USER_IDS_CONVERTED[0]],
isExternalCollab: false,
name: 'Content Explorer',
translatedRole: 'Editor',
type: 'user',
userID: MOCK_USER_IDS_CONVERTED[0],
},
{
collabID: MOCK_COLLAB_IDS_CONVERTED[1],
email: 'contentpreview@box.com',
hasCustomAvatar: true,
imageURL: MOCK_AVATAR_URL_MAP[MOCK_USER_IDS_CONVERTED[1]],
isExternalCollab: false,
name: 'Content Preview',
translatedRole: 'Editor',
type: 'user',
userID: MOCK_USER_IDS_CONVERTED[1],
},
{
collabID: MOCK_COLLAB_IDS_CONVERTED[2],
email: 'contentpicker@box.com',
expiration: {
executeAt: '2020-07-09T14:53:12-08:00',
},
hasCustomAvatar: true,
imageURL: MOCK_AVATAR_URL_MAP[MOCK_USER_IDS_CONVERTED[2]],
isExternalCollab: false,
name: 'Content Picker',
translatedRole: 'Editor',
type: 'user',
userID: MOCK_USER_IDS_CONVERTED[2],
},
{
collabID: MOCK_COLLAB_IDS_CONVERTED[3],
email: 'contentuploader@box.com',
hasCustomAvatar: true,
imageURL: MOCK_AVATAR_URL_MAP[MOCK_USER_IDS_CONVERTED[3]],
isExternalCollab: false,
name: 'Content Uploader',
translatedRole: 'Editor',
type: 'user',
userID: MOCK_USER_IDS_CONVERTED[3],
},
{
collabID: MOCK_COLLAB_IDS_CONVERTED[4],
email: 'demo@boxworks.com',
hasCustomAvatar: true,
imageURL: MOCK_AVATAR_URL_MAP[MOCK_USER_IDS_CONVERTED[4]],
isExternalCollab: true,
name: 'BoxWorks Demo',
translatedRole: 'Viewer',
type: 'user',
userID: MOCK_USER_IDS_CONVERTED[4],
},
],
};
expect(convertCollabsResponse(MOCK_COLLABS_API_RESPONSE, MOCK_AVATAR_URL_MAP, MOCK_OWNER_EMAIL, true)).toEqual(
convertedResponse,
);
});
test.each`
avatarURLMap | description
${null} | ${'null'}
${{}} | ${'empty'}
${MOCK_AVATAR_URL_MAP} | ${'not empty'}
`(
'should return an object with an empty array if there are no collaborations and the avatar URL map is $description',
({ avatarURLMap }) => {
expect(
convertCollabsResponse({ total_count: 0, entries: [] }, avatarURLMap, MOCK_OWNER_EMAIL, true),
).toEqual({
collaborators: [],
});
},
);
});
describe('convertCollab()', () => {
test('should convert a new collaborator', () => {
const convertedCollaborator = {
collabID: MOCK_COLLAB_IDS_CONVERTED[0],
email: 'contentexplorer@box.com',
hasCustomAvatar: false,
imageURL: undefined,
isExternalCollab: false,
name: 'Content Explorer',
translatedRole: 'Editor',
type: 'user',
userID: MOCK_USER_IDS_CONVERTED[0],
};
expect(
convertCollab({
collab: MOCK_COLLABS_API_RESPONSE.entries[0],
ownerEmail: MOCK_OWNER_EMAIL,
isCurrentUserOwner: true,
}),
).toEqual(convertedCollaborator);
});
test.each`
collab | expectedResponse | description
${{ collab: { status: 'pending' } }} | ${null} | ${'status is pending'}
${{ collab: undefined }} | ${null} | ${'collab does not exist'}
`('should return null when $description', ({ collab, expectedResponse }) => {
expect(convertCollab(collab, undefined, undefined, true)).toEqual(expectedResponse);
});
});
describe('convertUserContactsResponse()', () => {
test('should return all active users except the current user', () => {
expect(convertUserContactsResponse(MOCK_CONTACTS_API_RESPONSE, MOCK_OWNER_ID)).toEqual(
MOCK_CONTACTS_CONVERTED_RESPONSE,
);
});
test('should return users sorted by name', () => {
expect(convertUserContac