passbolt-styleguide 3.3.3 → 3.4.0-alpha2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/css/help.min.css +4 -4
- package/build/css/public.min.css +5 -6
- package/build/css/themes/default/api_authentication.min.css +3 -3
- package/build/css/themes/default/api_cloud.min.css +3 -7
- package/build/css/themes/default/api_main.min.css +4 -9
- package/build/css/themes/default/api_reports.min.css +4 -9
- package/build/css/themes/default/api_webinstaller.min.css +4 -9
- package/build/css/themes/default/ext_app.min.css +4 -9
- package/build/css/themes/default/ext_authentication.min.css +3 -3
- package/build/css/themes/default/ext_external.min.css +3 -3
- package/build/css/themes/default/ext_in_form_cta.min.css +9 -0
- package/build/css/themes/default/ext_in_form_menu.min.css +9 -0
- package/build/css/themes/default/ext_quickaccess.min.css +3 -3
- package/build/css/themes/midgar/api_authentication.min.css +9 -0
- package/build/css/themes/midgar/api_main.min.css +4 -9
- package/build/css/themes/midgar/api_reports.min.css +4 -9
- package/build/css/themes/midgar/ext_app.min.css +4 -9
- package/build/css/themes/midgar/ext_authentication.min.css +3 -3
- package/build/css/themes/midgar/ext_in_form_cta.min.css +9 -0
- package/build/css/themes/midgar/ext_in_form_menu.min.css +9 -0
- package/build/css/themes/midgar/ext_quickaccess.min.css +3 -3
- package/build/js/dist/api-app.js +1 -1
- package/build/js/dist/api-app.js.LICENSE.txt +5 -5
- package/build/js/dist/api-recover.js +1 -1
- package/build/js/dist/api-recover.js.LICENSE.txt +0 -28
- package/build/js/dist/api-setup.js +1 -1
- package/build/js/dist/api-setup.js.LICENSE.txt +0 -15
- package/build/js/dist/api-triage.js +1 -1
- package/build/js/dist/api-triage.js.LICENSE.txt +0 -14
- package/build/js/dist/api-vendors.js +1 -1
- package/build/js/dist/api-vendors.js.LICENSE.txt +146 -84
- package/package.json +31 -26
- package/src/img/controls/chevron-down_blue.svg +3 -0
- package/src/img/diagrams/functional_overview.png +0 -0
- package/src/img/diagrams/functional_overview.svg +4 -0
- package/src/img/diagrams/howitworks.svg +2797 -0
- package/src/img/diagrams/mobile-transfer.svg +296 -0
- package/src/img/diagrams/sequence_diagram_form_authenticate.png +0 -0
- package/src/img/diagrams/sequence_diagram_gpg_authenticate.png +0 -0
- package/src/img/diagrams/totp.svg +251 -0
- package/src/img/illustrations/pin_passbolt.gif +0 -0
- package/src/img/illustrations/wave-pin_my_extension.svg +1 -0
- package/src/img/logo/icon-32-badge-1.png +0 -0
- package/src/img/logo/icon-32-badge-2.png +0 -0
- package/src/img/logo/icon-32-badge-3.png +0 -0
- package/src/img/logo/icon-32-badge-4.png +0 -0
- package/src/img/logo/icon-32-badge-5+.png +0 -0
- package/src/img/logo/icon-32-badge-5.png +0 -0
- package/src/img/logo/icon-32-signout.png +0 -0
- package/src/img/logo/icon-badge-1.svg +1 -0
- package/src/img/logo/icon-badge-2.svg +1 -0
- package/src/img/logo/icon-badge-3.svg +1 -0
- package/src/img/logo/icon-badge-4.svg +1 -0
- package/src/img/logo/icon-badge-5+.svg +1 -0
- package/src/img/logo/icon-badge-5.svg +1 -0
- package/src/img/logo/icon-inactive.svg +1 -0
- package/src/img/logo/icon-without-badge.svg +1 -0
- package/src/img/third_party/ChromeWebStore_black.svg +1 -0
- package/src/img/third_party/ChromeWebStore_white.svg +1 -0
- package/src/img/third_party/edge-addon-black.svg +1 -0
- package/src/img/third_party/edge-addon-white.svg +1 -0
- package/src/locales/de-DE/common.json +820 -0
- package/src/locales/en-UK/common.json +86 -20
- package/src/locales/fr/common.json +750 -0
- package/src/locales/fr-FR/common.json +92 -22
- package/src/locales/sv-SE/common.json +820 -0
- package/src/react-extension/ExtApp.js +16 -10
- package/src/react-extension/ExtBootstrapApp.js +1 -0
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +2 -2
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.js +2 -2
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +1 -1
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +1 -1
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +22 -8
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.data.js +3 -0
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.js +10 -8
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.js +21 -19
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.page.js +6 -6
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +0 -1
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +1 -1
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +1 -1
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +5 -8
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.js +20 -38
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.data.js +4 -1
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.js +4 -4
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +1 -1
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +1 -1
- package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.js +2 -3
- package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.stories.js +5 -9
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +34 -32
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.js +1 -1
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +0 -3
- package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +1 -1
- package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.test.page.js +2 -2
- package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.js +1 -1
- package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.js +2 -2
- package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.test.js +1 -1
- package/src/react-extension/components/Authentication/CheckMailBox/CheckMailbox.test.stories.js +12 -14
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +2 -1
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.js +1 -2
- package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +9 -19
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.js +1 -1
- package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.data.js +14 -0
- package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.js +65 -0
- package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.page.js +38 -0
- package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.js +15 -6
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.js +27 -0
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.js +107 -0
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.data.js +11 -0
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.js +65 -0
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.page.js +73 -0
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.stories.js +34 -0
- package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.stories.js +8 -11
- package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.js +1 -1
- package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.stories.js +12 -15
- package/src/react-extension/components/AuthenticationLogin/DisplayLoginError/DisplayLoginError.test.stories.js +12 -15
- package/src/react-extension/components/AuthenticationLogin/DisplayLoginInProgress/DisplayLoginProgress.test.stories.js +12 -15
- package/src/react-extension/components/AuthenticationLogin/Login/Login.js +3 -1
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.stories.js +12 -15
- package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.js +2 -1
- package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.js +1 -1
- package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.stories.js +5 -11
- package/src/react-extension/components/AuthenticationRecover/RecoverAuthentication/RecoverAuthentication.js +5 -1
- package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +4 -0
- package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.data.js +0 -2
- package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.js +4 -5
- package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.page.js +0 -1
- package/src/react-extension/components/Common/Avatar/UserAvatar.js +2 -1
- package/src/react-extension/components/Common/Error/ShowErrorDetails/ShowErrorDetails.js +126 -0
- package/src/react-extension/components/Common/Icons/AnimatedFeedback.js +58 -0
- package/src/react-extension/components/Common/Icons/Icon.js +16 -0
- package/src/react-extension/components/Common/Icons/Icon.test.stories.js +78 -0
- package/src/react-extension/components/Common/Inputs/FormSubmitButton/FormSubmitButton.js +4 -0
- package/src/react-extension/components/Common/Loading/LoadingSpinner/LoadingSpinner.js +2 -1
- package/src/react-extension/components/Common/Menu/DisplayMainMenu.js +2 -4
- package/src/react-extension/components/Common/Navigation/Search/SearchBar.js +1 -1
- package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.js +1 -1
- package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.js +1 -1
- package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.stories.js +34 -0
- package/src/react-extension/components/Common/Tab/Tab.js +65 -0
- package/src/react-extension/components/Common/Tab/Tabs.js +87 -0
- package/src/react-extension/components/Resource/CreateResource/CreateResource.js +85 -66
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.data.js +80 -1
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.js +18 -39
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.page.js +27 -8
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.stories.js +70 -4
- package/src/react-extension/components/Resource/DeleteResource/DeleteResource.js +1 -1
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayDragResource.js +68 -0
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +20 -47
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.test.page.js +4 -1
- package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.js +2 -2
- package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.test.data.js +1 -7
- package/src/react-extension/components/Resource/EditResource/EditResource.js +93 -68
- package/src/react-extension/components/Resource/EditResource/EditResource.test.data.js +80 -1
- package/src/react-extension/components/Resource/EditResource/EditResource.test.js +10 -39
- package/src/react-extension/components/Resource/EditResource/EditResource.test.page.js +26 -11
- package/src/react-extension/components/Resource/ExportResources/ExportResources.js +1 -1
- package/src/react-extension/components/Resource/ExportResources/ExportResources.test.stories.js +5 -11
- package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.js +10 -12
- package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.test.stories.js +5 -11
- package/src/react-extension/components/Resource/FilterResourcesByBreadcrumb/FilterResourcesByBreadcrumb.js +4 -4
- package/src/react-extension/components/Resource/FilterResourcesByBreadcrumb/FilterResourcesByBreadcrumb.test.stories.js +0 -1
- package/src/react-extension/components/Resource/FilterResourcesByFolders/DisplayDragFolderItem.js +109 -0
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.js +41 -193
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.data.js +10 -5
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.js +9 -12
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.page.js +6 -2
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.stories.js +0 -1
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.js +83 -58
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.data.js +52 -59
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.js +25 -20
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.page.js +11 -5
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItemContextualMenu.js +1 -1
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByRootFolderContextualMenu.js +7 -2
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByRootFolderContextualMenu.test.js +3 -7
- package/src/react-extension/components/Resource/FilterResourcesByGroups/FilterResourcesByGroups.js +1 -1
- package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.js +1 -1
- package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.page.js +1 -1
- package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.stories.js +0 -1
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.js +1 -1
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.data.js +47 -0
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.js +34 -3
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.page.js +46 -9
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.stories.js +0 -1
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsList.js +124 -4
- package/src/react-extension/components/Resource/FilterResourcesByText/FilterResourcesByText.test.stories.js +0 -2
- package/src/react-extension/components/Resource/ImportResources/ImportResources.js +6 -5
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.js +10 -12
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.test.stories.js +5 -11
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.js +3 -3
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.js +3 -3
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.stories.js +5 -11
- package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.js +1 -1
- package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.page.object.js +1 -1
- package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.stories.js +8 -14
- package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.test.stories.js +5 -11
- package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.test.stories.js +8 -14
- package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.js +9 -8
- package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.page.js +1 -1
- package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.stories.js +8 -15
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsActivity.test.stories.js +0 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.js +1 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.test.stories.js +0 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.js +1 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.stories.js +0 -1
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +2 -2
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.page.js +1 -1
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.stories.js +0 -3
- package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.test.stories.js +0 -6
- package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.test.stories.js +0 -5
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +1 -1
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.page.js +1 -1
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.stories.js +0 -7
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsActivity.test.stories.js +0 -2
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.test.stories.js +0 -2
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsPermissions.test.stories.js +0 -2
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.js +150 -0
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.test.stories.js +30 -0
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.js +191 -0
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.test.stories.js +73 -0
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.js +296 -0
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.test.stories.js +112 -0
- package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.test.stories.js +0 -2
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +1 -1
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.page.js +1 -1
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.stories.js +0 -4
- package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTags.js +2 -2
- package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTags.test.page.js +1 -1
- package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTagsItemViewer.js +5 -1
- package/src/react-extension/components/Share/ShareDialog.test.page.js +1 -1
- package/src/react-extension/components/Share/ShareDialog.test.stories.js +12 -10
- package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.test.stories.js +5 -9
- package/src/react-extension/components/User/CreateUser/CreateUser.js +4 -4
- package/src/react-extension/components/User/CreateUser/CreateUser.test.page.js +3 -3
- package/src/react-extension/components/User/CreateUser/CreateUser.test.stories.js +3 -1
- package/src/react-extension/components/User/DeleteUser/DeleteUser.test.stories.js +5 -8
- package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.test.stories.js +5 -8
- package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +2 -2
- package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.page.js +1 -1
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.js +35 -2
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.data.js +2 -1
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.js +6 -0
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.page.js +19 -6
- package/src/react-extension/components/User/EditUser/EditUser.js +3 -3
- package/src/react-extension/components/User/EditUser/EditUser.test.page.js +2 -2
- package/src/react-extension/components/User/EditUser/EditUser.test.stories.js +3 -1
- package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.js +2 -2
- package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.test.js +1 -1
- package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.test.stories.js +5 -8
- package/src/react-extension/components/User/FilterUsersByGroups/FilterUsersByGroup.js +1 -1
- package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.js +1 -1
- package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.test.stories.js +0 -1
- package/src/react-extension/components/User/FilterUsersByText/FilterUsersByText.test.stories.js +0 -2
- package/src/react-extension/components/UserDetails/DisplayUserDetailsGroups/DisplayUserDetailsGroups.test.stories.js +8 -11
- package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.test.stories.js +8 -11
- package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.stories.js +8 -12
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +1 -1
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.page.js +2 -2
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.stories.js +5 -8
- package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.test.stories.js +5 -8
- package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.test.stories.js +5 -8
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsInformation/DisplayUserGroupDetailsInformation.test.stories.js +8 -11
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.test.stories.js +8 -11
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +11 -3
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.data.js +7 -0
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.page.js +1 -1
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.stories.js +12 -8
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +92 -21
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.data.js +6 -0
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.js +2 -2
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.page.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/DisplayChangePassphraseIntroduction.js +12 -10
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/DownloadRecoveryKit.js +4 -10
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +65 -25
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.data.js +6 -0
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.page.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.js +14 -13
- package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.js +21 -6
- package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.js +1 -1
- package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspace/DisplayUserSettingsWorkspace.js +13 -1
- package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.js +2 -1
- package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.js +3 -3
- package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.js +26 -4
- package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.test.stories.js +7 -10
- package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.js +749 -0
- package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.test.data.js +32 -0
- package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.test.js +60 -0
- package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.test.page.js +110 -0
- package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.js +3 -2
- package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.test.stories.js +5 -8
- package/src/react-extension/contexts/AdministrationWorkspaceContext.js +2 -2
- package/src/react-extension/contexts/ApiAppContext.js +1 -1
- package/src/react-extension/contexts/ApiRecoverContext.js +1 -1
- package/src/react-extension/contexts/ApiSetupContext.js +1 -1
- package/src/react-extension/contexts/AuthenticationContext.js +21 -2
- package/src/react-extension/contexts/AuthenticationContext.test.js +40 -0
- package/src/react-extension/contexts/DragContext.js +122 -0
- package/src/react-extension/contexts/DragContext.test.js +53 -0
- package/src/react-extension/contexts/NavigationContext.js +11 -0
- package/src/react-extension/contexts/ResourcePasswordGeneratorContext.js +144 -0
- package/src/react-extension/contexts/ResourceWorkspaceContext.js +5 -4
- package/src/react-extension/contexts/ResourceWorkspaceContext.test.data.js +0 -1
- package/src/react-extension/contexts/ResourceWorkspaceContext.test.page.js +0 -1
- package/src/react-extension/contexts/UserWorkspaceContext.js +31 -4
- package/src/react-extension/contexts/UserWorkspaceContext.test.data.js +17 -287
- package/src/react-extension/lib/Crypto/sha512.js +17 -0
- package/src/react-extension/test/fixture/Settings/siteSettings.js +6 -0
- package/src/react-extension/test/mock/components/Internationalisation/MockTranslationProvider.js +42 -7
- package/src/react-quickaccess/ExtQuickAccess.js +75 -28
- package/src/react-quickaccess/components/AnimatedSwitch/AnimatedSwitch.js +22 -5
- package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgress.js +41 -0
- package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgressPage.test.stories.js +23 -0
- package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.js +8 -4
- package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.test.stories.js +7 -7
- package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.js +10 -6
- package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.test.stories.js +9 -5
- package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.js +10 -7
- package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.test.stories.js +7 -7
- package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.js +10 -7
- package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.test.stories.js +7 -7
- package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.js +10 -7
- package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.test.stories.js +7 -7
- package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.js +10 -7
- package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.test.stories.js +9 -5
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePassphraseGenerator.js +150 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePassphraseGenerator.test.data.js +20 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePassphraseGenerator.test.js +67 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePassphraseGenerator.test.page.js +109 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.js +189 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.test.data.js +40 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.test.js +67 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.test.page.js +121 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.js +304 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.data.js +102 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.js +76 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.page.js +158 -0
- package/src/react-quickaccess/components/Header/Header.js +10 -8
- package/src/react-quickaccess/components/Header/Header.test.stories.js +4 -7
- package/src/react-quickaccess/components/HomePage/HomePage.js +40 -11
- package/src/react-quickaccess/components/HomePage/HomePage.test.stories.js +14 -10
- package/src/react-quickaccess/components/HomePage/canSuggestUrl.js +8 -3
- package/src/react-quickaccess/components/HomePage/canSuggestUrl.test.js +6 -0
- package/src/react-quickaccess/components/LoginPage/LoginPage.js +58 -18
- package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +4 -6
- package/src/react-quickaccess/components/ManageQuickAccessMode/ManageQuickAccessMode.js +103 -0
- package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.js +2 -2
- package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.test.stories.js +4 -6
- package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.js +5 -3
- package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.test.stories.js +6 -6
- package/src/react-quickaccess/components/PrivateRoute/PrivateRoute.js +1 -0
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +234 -0
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.data.js +28 -0
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.stories.js +44 -0
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +166 -39
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.data.js +108 -2
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.js +28 -25
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.stories.js +6 -6
- package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.js +6 -3
- package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.test.stories.js +5 -3
- package/src/react-quickaccess/components/Search/Search.js +13 -1
- package/src/react-quickaccess/components/Search/Search.test.stories.js +4 -6
- package/src/react-quickaccess/contexts/PrepareResourceContext.js +221 -0
- package/src/react-web-integration/AuthLogin/AuthLogin.js +72 -0
- package/src/react-web-integration/Autofill/Autofill.js +331 -0
- package/src/react-web-integration/BrowserIntegrationBootstrap.js +64 -0
- package/src/react-web-integration/Events/Quickaccess/QuickAccessEvent.js +24 -0
- package/src/react-web-integration/ExtInFormCallToAction.js +56 -0
- package/src/react-web-integration/ExtInFormMenu.js +70 -0
- package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.js +161 -0
- package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.data.js +39 -0
- package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.js +48 -0
- package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.page.js +42 -0
- package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.stories.js +91 -0
- package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.js +360 -0
- package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.test.stories.js +198 -0
- package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenuItem.js +103 -0
- package/src/react-web-integration/contexts/AppContext.js +39 -0
- package/src/react-web-integration/lib/Dom/DomUtils.js +94 -0
- package/src/react-web-integration/lib/InForm/InFormCallToActionField.js +263 -0
- package/src/react-web-integration/lib/InForm/InFormCredentialsFormField.js +118 -0
- package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +77 -0
- package/src/react-web-integration/lib/InForm/InFormManager.js +253 -0
- package/src/react-web-integration/lib/InForm/InformManager.test.data.js +46 -0
- package/src/react-web-integration/lib/InForm/InformManager.test.js +82 -0
- package/src/react-web-integration/lib/InForm/InformManager.test.page.js +116 -0
- package/src/react-web-integration/lib/InForm/InformMenuField.js +182 -0
- package/src/shared/components/Internationalisation/TranslationProvider.js +145 -0
- package/src/shared/lib/Browser/detectBrowserName.js +2 -1
- package/src/shared/lib/Secret/SecretComplexity.js +2 -2
- package/src/shared/lib/SecretGenerator/PassphraseGenerator.js +112 -0
- package/src/shared/lib/SecretGenerator/PassphraseGenerator.test.js +48 -0
- package/src/shared/lib/SecretGenerator/PassphraseGeneratorWords.js +7789 -0
- package/src/shared/lib/SecretGenerator/PasswordGenerator.js +103 -0
- package/src/shared/lib/SecretGenerator/SecretGenerator.js +45 -0
- package/src/shared/lib/SecretGenerator/SecretGeneratorComplexity.js +190 -0
- package/src/shared/lib/SecretGenerator/SecretGeneratorComplexity.test.js +95 -0
- package/src/shared/lib/Settings/SiteSettings.js +8 -0
- package/src/shared/lib/apiClient/apiClient.test.js +1 -1
- package/.babelrc +0 -11
- package/.editorconfig +0 -13
- package/.eslintrc.json +0 -197
- package/.gitlab-ci.yml +0 -28
- package/.jest.config.json +0 -6
- package/.jest.setup.js +0 -8
- package/.jest.transform.js +0 -7
- package/.storybook/main.js +0 -15
- package/.storybook/preview-body.html +0 -5
- package/.storybook/preview.js +0 -6
- package/Gruntfile.js +0 -199
- package/build/css/themes/default/ext_config_debug.min.css +0 -13
- package/build/css/themes/default/ext_legacy.min.css +0 -13
- package/build/css/themes/midgar/ext_legacy.min.css +0 -13
- package/crowdin.yml +0 -4
- package/docker-compose-dev.yml +0 -10
- package/jest.config.json +0 -6
- package/src/img/controls/colorpicker/marker.png +0 -0
- package/src/img/controls/colorpicker/mask.png +0 -0
- package/src/img/controls/colorpicker/wheel.png +0 -0
- package/src/img/controls/overlay-opacity-50.png +0 -0
- package/src/img/third_party/ChromeWebStore_black.png +0 -0
- package/src/img/third_party/ChromeWebStore_white.png +0 -0
- package/src/js/accordion.js +0 -10
- package/src/js/autocomplete.js +0 -241
- package/src/js/autocomplete.min.js +0 -3
- package/src/js/bootstrap-scrollspy.js +0 -172
- package/src/js/chosen.jquery.js +0 -1356
- package/src/js/colorpicker.js +0 -32
- package/src/js/download.js +0 -128
- package/src/js/farbtastic.js +0 -345
- package/src/js/swiper.min.js +0 -18
- package/src/react-quickaccess/components/Internationalisation/TranslationProvider.js +0 -151
- package/storybook-static/favicon.ico +0 -0
- package/storybook-static/iframe.html +0 -133
- package/storybook-static/index.html +0 -47
- package/storybook-static/main.2d01924b12554c6c15af.bundle.js +0 -1
- package/storybook-static/main.b0c44c8759149ccf4f67.bundle.js +0 -3
- package/storybook-static/main.b0c44c8759149ccf4f67.bundle.js.LICENSE.txt +0 -153
- package/storybook-static/main.b0c44c8759149ccf4f67.bundle.js.map +0 -1
- package/storybook-static/runtime~main.6a9b04192e3176eff72a.bundle.js +0 -1
- package/storybook-static/runtime~main.b0c44c8759149ccf4f67.bundle.js +0 -2
- package/storybook-static/runtime~main.b0c44c8759149ccf4f67.bundle.js.map +0 -1
- package/storybook-static/static/media/chosen-sprite.6768c197.png +0 -0
- package/storybook-static/static/media/chosen-sprite@2x.a0b7f3f1.png +0 -0
- package/storybook-static/static/media/dot_black.a2c44078.svg +0 -6
- package/storybook-static/static/media/dot_red.7b34541d.svg +0 -6
- package/storybook-static/static/media/dot_white.f60f7331.svg +0 -6
- package/storybook-static/static/media/fontawesome-webfont.1e59d233.ttf +0 -0
- package/storybook-static/static/media/fontawesome-webfont.20fd1704.woff2 +0 -0
- package/storybook-static/static/media/fontawesome-webfont.8b43027f.eot +0 -0
- package/storybook-static/static/media/fontawesome-webfont.c1e38fd9.svg +0 -2671
- package/storybook-static/static/media/fontawesome-webfont.f691f37e.woff +0 -0
- package/storybook-static/static/media/infinite-bar.f5327dc3.gif +0 -0
- package/storybook-static/static/media/loading_dark.ea474c7f.svg +0 -21
- package/storybook-static/static/media/loading_light.061977b5.svg +0 -15
- package/storybook-static/static/media/logo.e2b062a5.svg +0 -1
- package/storybook-static/static/media/logo_white.cb32e694.svg +0 -1
- package/storybook-static/static/media/opensans-bold.a6b4768c.woff +0 -0
- package/storybook-static/static/media/opensans-regular.7812bd0b.woff +0 -0
- package/storybook-static/static/media/passphrase_intro.37a1ba4e.png +0 -0
- package/storybook-static/vendors~main.4abf29e4f956d5befb41.bundle.js +0 -2
- package/storybook-static/vendors~main.4abf29e4f956d5befb41.bundle.js.LICENSE.txt +0 -105
- package/storybook-static/vendors~main.b0c44c8759149ccf4f67.bundle.js +0 -3
- package/storybook-static/vendors~main.b0c44c8759149ccf4f67.bundle.js.LICENSE.txt +0 -145
- package/storybook-static/vendors~main.b0c44c8759149ccf4f67.bundle.js.map +0 -1
- package/webpack-api.config.js +0 -83
- package/webpack-ext.config.js +0 -84
package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.test.data.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import MockPort from "../../../test/mock/MockPort";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Returns the default app context for the unit test
|
|
5
|
+
* @param appContext An existing app context
|
|
6
|
+
* @returns {any}
|
|
7
|
+
*/
|
|
8
|
+
export function defaultAppContext(appContext) {
|
|
9
|
+
const defaultAppContext = {
|
|
10
|
+
port: new MockPort(),
|
|
11
|
+
loggedInUser: {id: 'f848277c-5398-58f8-a82a-72397af2d450'},
|
|
12
|
+
setContext: function(newContext) {
|
|
13
|
+
// In this scope this reference the object context.
|
|
14
|
+
Object.assign(this, newContext);
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
return Object.assign(defaultAppContext, appContext || {});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Default props
|
|
22
|
+
* @returns {object}
|
|
23
|
+
*/
|
|
24
|
+
export function defaultProps() {
|
|
25
|
+
const props = {
|
|
26
|
+
userSettingsContext: {
|
|
27
|
+
//onDownloadRecoveryKitRequested: jest.fn(),
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
return props;
|
|
32
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.2.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Unit tests on TransferToMobile in regard of specifications
|
|
17
|
+
*/
|
|
18
|
+
import TransferToMobilePage from "./TransferToMobile.test.page";
|
|
19
|
+
import {defaultAppContext, defaultProps} from "./TransferToMobile.test.data";
|
|
20
|
+
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
jest.resetModules();
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
describe("As LU I should be able to configure my account on my mobile phone", () => {
|
|
26
|
+
let page; // The page to test against
|
|
27
|
+
const context = defaultAppContext(); // The applicative context
|
|
28
|
+
const props = defaultProps(); // The props to pass
|
|
29
|
+
|
|
30
|
+
describe('As LU I can start the mobile phone account transfer', () => {
|
|
31
|
+
/**
|
|
32
|
+
* Prerequisite:
|
|
33
|
+
* Given I am a logged in user
|
|
34
|
+
* And I am on the transfer to mobile page
|
|
35
|
+
*/
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
page = new TransferToMobilePage(context, props);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('As LU I should be able to start the transfer to mobile', async() => {
|
|
41
|
+
expect(page.exists()).toBeTruthy();
|
|
42
|
+
expect(page.title).toContain('mobile');
|
|
43
|
+
expect(page.isStep('start')).toBe(true);
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* await page.clickStart();
|
|
47
|
+
*
|
|
48
|
+
* let expectedData = context.user.id;
|
|
49
|
+
* let expectedParameters = ['passbolt.keyring.get-public-key-info-by-user', expectedData];
|
|
50
|
+
* expect(context.port.request).toHaveBeenCalledWith(...expectedParameters);
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
/*
|
|
54
|
+
* expectedData = {folder_parent_id: "some folder parent id", name: "My super folder"};
|
|
55
|
+
* expectedParameters = ['passbolt.mobile.transfer.create', expectedData];
|
|
56
|
+
* expect(context.port.request).toHaveBeenCalledWith(...expectedParameters);
|
|
57
|
+
*/
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.test.page.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.2.0
|
|
13
|
+
*/
|
|
14
|
+
import {fireEvent, render, waitFor} from "@testing-library/react";
|
|
15
|
+
import React from "react";
|
|
16
|
+
import AppContext from "../../../contexts/AppContext";
|
|
17
|
+
import TransferToMobile from "./TransferToMobile";
|
|
18
|
+
import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The TransferToMobile component represented as a page
|
|
22
|
+
*/
|
|
23
|
+
export default class TransferToMobileTestPage {
|
|
24
|
+
/**
|
|
25
|
+
* Default constructor
|
|
26
|
+
* @param appContext An app context
|
|
27
|
+
* @param props Props to attach
|
|
28
|
+
*/
|
|
29
|
+
constructor(appContext, props) {
|
|
30
|
+
this._page = render(
|
|
31
|
+
<MockTranslationProvider>
|
|
32
|
+
<AppContext.Provider value={appContext}>
|
|
33
|
+
<TransferToMobile {...props}/>
|
|
34
|
+
</AppContext.Provider>
|
|
35
|
+
</MockTranslationProvider>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Returns the user confirm passphrase element
|
|
41
|
+
*/
|
|
42
|
+
get transferToMobile() {
|
|
43
|
+
return this._page.container.querySelector('.profile-mobile-transfer');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Returns the title element
|
|
48
|
+
*/
|
|
49
|
+
get title() {
|
|
50
|
+
return this._page.container.querySelector('.profile-mobile-transfer h3').textContent;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Start button
|
|
55
|
+
*/
|
|
56
|
+
get startButton() {
|
|
57
|
+
return this._page.container.querySelector('.profile-mobile-transfer .mobile-transfer-step-start a.button');
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Cancel button
|
|
62
|
+
*/
|
|
63
|
+
get cancelButton() {
|
|
64
|
+
return this._page.container.querySelector('.profile-mobile-transfer a.cancel.button');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Check current step
|
|
69
|
+
* @param {string} step
|
|
70
|
+
* @returns {boolean}
|
|
71
|
+
*/
|
|
72
|
+
isStep(step) {
|
|
73
|
+
switch (step) {
|
|
74
|
+
case 'start':
|
|
75
|
+
return this._page.container.querySelector('.profile-mobile-transfer .mobile-transfer-step-start') !== null;
|
|
76
|
+
case 'in progress':
|
|
77
|
+
return this._page.container.querySelector('.profile-mobile-transfer .mobile-transfer-step-in-progress') !== null;
|
|
78
|
+
case 'cancel':
|
|
79
|
+
return this._page.container.querySelector('.profile-mobile-transfer .mobile-transfer-step-cancel') !== null;
|
|
80
|
+
case 'complete':
|
|
81
|
+
return this._page.container.querySelector('.profile-mobile-transfer .mobile-transfer-step-complete') !== null;
|
|
82
|
+
default:
|
|
83
|
+
throw new Error('Unknown step in TransferToMobile test page.');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Returns true if the page object exists in the container
|
|
89
|
+
*/
|
|
90
|
+
exists() {
|
|
91
|
+
return this.transferToMobile !== null;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Click on the element */
|
|
95
|
+
async click(element) {
|
|
96
|
+
const leftClick = {button: 0};
|
|
97
|
+
fireEvent.click(element, leftClick);
|
|
98
|
+
await waitFor(() => {});
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** click start transfer */
|
|
102
|
+
async clickStart() {
|
|
103
|
+
await this.click(this.startButton);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** click cancel */
|
|
107
|
+
async clickCancel() {
|
|
108
|
+
await this.click(this.cancelButton);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -335,11 +335,12 @@ class UploadUserProfileAvatar extends React.Component {
|
|
|
335
335
|
id="dialog-upload-avatar-input"
|
|
336
336
|
className={`button primary ${this.areActionsAllowed ? "" : "disabled"}`}
|
|
337
337
|
onClick={this.handleSelectFile}>
|
|
338
|
-
<Icon name="upload-a"/>
|
|
338
|
+
<Icon name="upload-a"/>
|
|
339
|
+
<span className='ellipsis'><Trans>Choose a file</Trans></span>
|
|
339
340
|
</a>
|
|
340
341
|
</div>
|
|
341
342
|
{this.state.errors.message &&
|
|
342
|
-
<div className="error
|
|
343
|
+
<div className="error-message">{this.state.errors.message}</div>
|
|
343
344
|
}
|
|
344
345
|
</div>
|
|
345
346
|
</div>
|
|
@@ -2,7 +2,6 @@ import {MemoryRouter, Route} from "react-router-dom";
|
|
|
2
2
|
import React from "react";
|
|
3
3
|
import AppContext from "../../../contexts/AppContext";
|
|
4
4
|
import PropTypes from "prop-types";
|
|
5
|
-
import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
|
|
6
5
|
import UploadUserProfileAvatar from "./UploadUserProfileAvatar";
|
|
7
6
|
|
|
8
7
|
|
|
@@ -47,13 +46,11 @@ const context = {
|
|
|
47
46
|
|
|
48
47
|
|
|
49
48
|
const Template = args =>
|
|
50
|
-
<
|
|
51
|
-
<
|
|
52
|
-
<
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
</AppContext.Provider>
|
|
56
|
-
</MockTranslationProvider>;
|
|
49
|
+
<AppContext.Provider value={context}>
|
|
50
|
+
<MemoryRouter initialEntries={['/']}>
|
|
51
|
+
<Route component={routerProps => <UploadUserProfileAvatar {...args} {...routerProps}/>}></Route>
|
|
52
|
+
</MemoryRouter>
|
|
53
|
+
</AppContext.Provider>;
|
|
57
54
|
|
|
58
55
|
Template.propTypes = {
|
|
59
56
|
context: PropTypes.object,
|
|
@@ -322,9 +322,9 @@ class AdministrationWorkspaceContextProvider extends React.Component {
|
|
|
322
322
|
* @return {Promise<object>}
|
|
323
323
|
*/
|
|
324
324
|
async onGetSynchronizeUsersDirectoryRequested() {
|
|
325
|
-
const apiClientOptions = this.props.context.getApiClientOptions().setResourceName("directorysync");
|
|
325
|
+
const apiClientOptions = this.props.context.getApiClientOptions().setResourceName("directorysync/synchronize");
|
|
326
326
|
const apiClient = new ApiClient(apiClientOptions);
|
|
327
|
-
return apiClient.
|
|
327
|
+
return apiClient.create({});
|
|
328
328
|
}
|
|
329
329
|
|
|
330
330
|
/**
|
|
@@ -102,7 +102,7 @@ class ApiRecoverContextProvider extends React.Component {
|
|
|
102
102
|
*/
|
|
103
103
|
isBrowserSupported() {
|
|
104
104
|
const browserName = detectBrowserName();
|
|
105
|
-
const supportedBrowserNames = [BROWSER_NAMES.CHROME, BROWSER_NAMES.FIREFOX];
|
|
105
|
+
const supportedBrowserNames = [BROWSER_NAMES.CHROME, BROWSER_NAMES.FIREFOX, BROWSER_NAMES.EDGE];
|
|
106
106
|
return supportedBrowserNames.includes(browserName);
|
|
107
107
|
}
|
|
108
108
|
|
|
@@ -102,7 +102,7 @@ class ApiSetupContextProvider extends React.Component {
|
|
|
102
102
|
*/
|
|
103
103
|
isBrowserSupported() {
|
|
104
104
|
const browserName = detectBrowserName();
|
|
105
|
-
const supportedBrowserNames = [BROWSER_NAMES.CHROME, BROWSER_NAMES.FIREFOX];
|
|
105
|
+
const supportedBrowserNames = [BROWSER_NAMES.CHROME, BROWSER_NAMES.FIREFOX, BROWSER_NAMES.EDGE];
|
|
106
106
|
return supportedBrowserNames.includes(browserName);
|
|
107
107
|
}
|
|
108
108
|
|
|
@@ -15,6 +15,7 @@ import React from "react";
|
|
|
15
15
|
import PropTypes from "prop-types";
|
|
16
16
|
import UserSettings from "../../shared/lib/Settings/UserSettings";
|
|
17
17
|
import {withAppContext} from "./AppContext";
|
|
18
|
+
import {BROWSER_NAMES, detectBrowserName} from "../../shared/lib/Browser/detectBrowserName";
|
|
18
19
|
|
|
19
20
|
export const AuthenticationContext = React.createContext({
|
|
20
21
|
port: null, // The contextual port
|
|
@@ -60,6 +61,8 @@ export const AuthenticationContext = React.createContext({
|
|
|
60
61
|
}, // Whenever the check of server key is requested
|
|
61
62
|
onGetServerKeyRequested: () => {
|
|
62
63
|
}, // Whenever the server key is requested.
|
|
64
|
+
onCompleteIntroduceSetupExtension: () => {
|
|
65
|
+
}, // Whenever the setup extension is completed.
|
|
63
66
|
onUnexpectedError: () => {
|
|
64
67
|
}, // Whenever an unexpected error occurred.
|
|
65
68
|
});
|
|
@@ -103,6 +106,7 @@ export class AuthenticationContextProvider extends React.Component {
|
|
|
103
106
|
onVerifyServerKeyRequested: this.onVerifyServerKeyRequested.bind(this),
|
|
104
107
|
onGetServerKeyRequested: this.onGetServerKeyRequested.bind(this),
|
|
105
108
|
onTryLoginAgainRequested: this.onTryLoginAgainRequested.bind(this),
|
|
109
|
+
onCompleteIntroduceSetupExtension: this.onCompleteIntroduceSetupExtension.bind(this),
|
|
106
110
|
onUnexpectedError: this.onUnexpectedError.bind(this),
|
|
107
111
|
};
|
|
108
112
|
}
|
|
@@ -111,12 +115,14 @@ export class AuthenticationContextProvider extends React.Component {
|
|
|
111
115
|
* Initialize the authentication setup
|
|
112
116
|
*/
|
|
113
117
|
async onInitializeSetupRequested() {
|
|
118
|
+
const isFirstInstall = await this.state.port.request('passbolt.setup.is-first-install');
|
|
119
|
+
const isChromeBrowser = detectBrowserName() === BROWSER_NAMES.CHROME;
|
|
114
120
|
const setupInfo = await this.state.port.request('passbolt.setup.info');
|
|
115
121
|
// update the locale to use the user locale
|
|
116
122
|
this.props.context.onRefreshLocaleRequested(setupInfo.locale);
|
|
117
123
|
// In case of error the background page should just disconnect the extension setup application.
|
|
118
124
|
await this.setState({
|
|
119
|
-
state: AuthenticationContextState.SETUP_INITIALIZED,
|
|
125
|
+
state: isFirstInstall && isChromeBrowser ? AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_INITIALIZED : AuthenticationContextState.SETUP_INITIALIZED,
|
|
120
126
|
setupInfo,
|
|
121
127
|
process: AuthenticationContextProcess.SETUP
|
|
122
128
|
});
|
|
@@ -127,12 +133,14 @@ export class AuthenticationContextProvider extends React.Component {
|
|
|
127
133
|
* Initialize the authentication recover
|
|
128
134
|
*/
|
|
129
135
|
async onInitializeRecoverRequested() {
|
|
136
|
+
const isFirstInstall = await this.state.port.request('passbolt.recover.first-install');
|
|
137
|
+
const isChromeBrowser = detectBrowserName() === BROWSER_NAMES.CHROME;
|
|
130
138
|
const recoverInfo = await this.state.port.request('passbolt.recover.info');
|
|
131
139
|
// The user might have already set a locale, the recover info update the background page locale, refresh the locale.
|
|
132
140
|
this.props.context.onRefreshLocaleRequested(recoverInfo.locale);
|
|
133
141
|
// In case of error the background page should just disconnect the extension setup application.
|
|
134
142
|
await this.setState({
|
|
135
|
-
state: AuthenticationContextState.RECOVER_INITIALIZED,
|
|
143
|
+
state: isFirstInstall && isChromeBrowser ? AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_INITIALIZED : AuthenticationContextState.RECOVER_INITIALIZED,
|
|
136
144
|
recoverInfo,
|
|
137
145
|
process: AuthenticationContextProcess.RECOVER
|
|
138
146
|
});
|
|
@@ -194,6 +202,15 @@ export class AuthenticationContextProvider extends React.Component {
|
|
|
194
202
|
await this.setState({state, error});
|
|
195
203
|
}
|
|
196
204
|
|
|
205
|
+
/**
|
|
206
|
+
* Whenever a setup extension is required for first install
|
|
207
|
+
* @returns {Promise<void>}
|
|
208
|
+
*/
|
|
209
|
+
async onCompleteIntroduceSetupExtension() {
|
|
210
|
+
const state = AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_COMPLETED;
|
|
211
|
+
await this.setState({state});
|
|
212
|
+
}
|
|
213
|
+
|
|
197
214
|
/**
|
|
198
215
|
* Whenever the generates of a gpgp key given an user passphrase is requested
|
|
199
216
|
* @param passphrase A passphrase
|
|
@@ -424,6 +441,8 @@ export const AuthenticationContextProcess = {
|
|
|
424
441
|
*/
|
|
425
442
|
export const AuthenticationContextState = {
|
|
426
443
|
INITIAL_STATE: 'Initial State',
|
|
444
|
+
INTRODUCE_SETUP_EXTENSION_INITIALIZED: 'Introduce Setup Extension Initialized',
|
|
445
|
+
INTRODUCE_SETUP_EXTENSION_COMPLETED: 'Introduce Setup Extension Completed',
|
|
427
446
|
SETUP_INITIALIZED: 'Setup Initialized',
|
|
428
447
|
RECOVER_INITIALIZED: 'Recover Initialized',
|
|
429
448
|
SETUP_COMPLETED: 'Setup Completed',
|
|
@@ -14,10 +14,12 @@
|
|
|
14
14
|
|
|
15
15
|
import {defaultProps} from "./AuthenticationContext.test.data";
|
|
16
16
|
import {AuthenticationContextProvider, AuthenticationContextState} from "./AuthenticationContext";
|
|
17
|
+
import {clear, mockUserAgent} from 'jest-useragent-mock';
|
|
17
18
|
|
|
18
19
|
beforeEach(() => {
|
|
19
20
|
jest.resetModules();
|
|
20
21
|
jest.clearAllMocks();
|
|
22
|
+
clear();
|
|
21
23
|
});
|
|
22
24
|
|
|
23
25
|
describe("Authentication Context", () => {
|
|
@@ -42,14 +44,33 @@ describe("Authentication Context", () => {
|
|
|
42
44
|
locale: "fr-FR"
|
|
43
45
|
};
|
|
44
46
|
const requestSetupInfoMock = jest.fn(() => setupInfo);
|
|
47
|
+
jest.spyOn(authenticationContext.state.port, 'request').mockImplementationOnce(jest.fn(() => false));
|
|
45
48
|
jest.spyOn(authenticationContext.state.port, 'request').mockImplementation(requestSetupInfoMock);
|
|
46
49
|
await authenticationContext.onInitializeSetupRequested();
|
|
50
|
+
expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.setup.is-first-install");
|
|
47
51
|
expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.setup.info");
|
|
48
52
|
expect(authenticationContext.props.context.onRefreshLocaleRequested).toHaveBeenCalledWith(setupInfo.locale);
|
|
49
53
|
expect(authenticationContext.state.state).toBe(AuthenticationContextState.SETUP_INITIALIZED);
|
|
50
54
|
expect(authenticationContext.state.process).toBe('setup');
|
|
51
55
|
});
|
|
52
56
|
|
|
57
|
+
it('As AN I should start initially with the INTRODUCE_SETUP_EXTENSION_INITIALIZED state when on chrome with a plugin just installed', async() => {
|
|
58
|
+
mockUserAgent('chrome');
|
|
59
|
+
const setupInfo = {
|
|
60
|
+
locale: "fr-FR"
|
|
61
|
+
};
|
|
62
|
+
const requestSetupInfoMock = jest.fn(() => setupInfo);
|
|
63
|
+
jest.spyOn(authenticationContext.state.port, 'request').mockImplementation(requestSetupInfoMock);
|
|
64
|
+
await authenticationContext.onInitializeSetupRequested();
|
|
65
|
+
expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.setup.is-first-install");
|
|
66
|
+
expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.setup.info");
|
|
67
|
+
expect(authenticationContext.props.context.onRefreshLocaleRequested).toHaveBeenCalledWith(setupInfo.locale);
|
|
68
|
+
expect(authenticationContext.state.state).toBe(AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_INITIALIZED);
|
|
69
|
+
await authenticationContext.onCompleteIntroduceSetupExtension();
|
|
70
|
+
expect(authenticationContext.state.state).toBe(AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_COMPLETED);
|
|
71
|
+
expect(authenticationContext.state.process).toBe('setup');
|
|
72
|
+
});
|
|
73
|
+
|
|
53
74
|
it('As AN I should request to generate a private key', async() => {
|
|
54
75
|
const passphrase = 'some passphrase';
|
|
55
76
|
await authenticationContext.onGenerateGpgKeyRequested(passphrase);
|
|
@@ -146,14 +167,33 @@ describe("Authentication Context", () => {
|
|
|
146
167
|
locale: "fr-FR"
|
|
147
168
|
};
|
|
148
169
|
const requestRecoverInfoMock = jest.fn(() => recoverInfo);
|
|
170
|
+
jest.spyOn(authenticationContext.state.port, 'request').mockImplementationOnce(jest.fn(() => false));
|
|
149
171
|
jest.spyOn(authenticationContext.state.port, 'request').mockImplementation(requestRecoverInfoMock);
|
|
150
172
|
await authenticationContext.onInitializeRecoverRequested();
|
|
151
173
|
expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.recover.info");
|
|
174
|
+
expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.recover.first-install");
|
|
152
175
|
expect(authenticationContext.props.context.onRefreshLocaleRequested).toHaveBeenCalledWith(recoverInfo.locale);
|
|
153
176
|
expect(authenticationContext.state.state).toBe(AuthenticationContextState.RECOVER_INITIALIZED);
|
|
154
177
|
expect(authenticationContext.state.process).toBe('recover');
|
|
155
178
|
});
|
|
156
179
|
|
|
180
|
+
it('As AN I should start initially with the INTRODUCE_SETUP_EXTENSION_INITIALIZED state when on chrome with a plugin just installed', async() => {
|
|
181
|
+
mockUserAgent('chrome');
|
|
182
|
+
const recoverInfo = {
|
|
183
|
+
locale: "fr-FR"
|
|
184
|
+
};
|
|
185
|
+
const requestRecoverInfoMock = jest.fn(() => recoverInfo);
|
|
186
|
+
jest.spyOn(authenticationContext.state.port, 'request').mockImplementation(requestRecoverInfoMock);
|
|
187
|
+
await authenticationContext.onInitializeRecoverRequested();
|
|
188
|
+
expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.recover.info");
|
|
189
|
+
expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.recover.first-install");
|
|
190
|
+
expect(authenticationContext.props.context.onRefreshLocaleRequested).toHaveBeenCalledWith(recoverInfo.locale);
|
|
191
|
+
expect(authenticationContext.state.state).toBe(AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_INITIALIZED);
|
|
192
|
+
await authenticationContext.onCompleteIntroduceSetupExtension();
|
|
193
|
+
expect(authenticationContext.state.state).toBe(AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_COMPLETED);
|
|
194
|
+
expect(authenticationContext.state.process).toBe('recover');
|
|
195
|
+
});
|
|
196
|
+
|
|
157
197
|
it('As AN I should import a gpg key ', async() => {
|
|
158
198
|
const recoverInfo = {
|
|
159
199
|
locale: "fr-FR"
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.4.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import React from "react";
|
|
16
|
+
import PropTypes from "prop-types";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The drag and drop context
|
|
20
|
+
*/
|
|
21
|
+
export const DragContext = React.createContext({
|
|
22
|
+
dragAndDrops: null, // The current component displayed for drag and drop
|
|
23
|
+
dragging: false, // The user dragging or not items
|
|
24
|
+
draggedItems: null, // the dragged items
|
|
25
|
+
onDragStart: () => {}, // on drag start
|
|
26
|
+
onDragEnd: () => {}, // on drag end
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The related context provider
|
|
31
|
+
*/
|
|
32
|
+
export default class dragContextProvider extends React.Component {
|
|
33
|
+
/**
|
|
34
|
+
* Default constructor
|
|
35
|
+
* @param props The component props
|
|
36
|
+
*/
|
|
37
|
+
constructor(props) {
|
|
38
|
+
super(props);
|
|
39
|
+
this.state = this.defaultState;
|
|
40
|
+
this.createRefs();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Create DOM nodes or React elements references in order to be able to access them programmatically.
|
|
45
|
+
*/
|
|
46
|
+
createRefs() {
|
|
47
|
+
this.elementRef = React.createRef();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Returns the default component state
|
|
52
|
+
*/
|
|
53
|
+
get defaultState() {
|
|
54
|
+
return {
|
|
55
|
+
displayDraggedItemsComponent: [],
|
|
56
|
+
dragging: false,
|
|
57
|
+
draggedItems: null,
|
|
58
|
+
onDragStart: this.handleDragStart.bind(this),
|
|
59
|
+
onDragEnd: this.handleDragEnd.bind(this),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Handle drag start
|
|
65
|
+
* @param event
|
|
66
|
+
* @param draggedItemComponent
|
|
67
|
+
* @param draggedItems
|
|
68
|
+
*/
|
|
69
|
+
async handleDragStart(event, draggedItemComponent, draggedItems) {
|
|
70
|
+
await this.setState({displayDraggedItemsComponent: [{draggedItemComponent}], dragging: true, draggedItems});
|
|
71
|
+
event.dataTransfer.setDragImage(this.elementRef.current, 5, 5);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Handle drag end
|
|
76
|
+
*/
|
|
77
|
+
async handleDragEnd() {
|
|
78
|
+
await this.setState({displayDraggedItemsComponent: [], dragging: false, draggedItems: null});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Render the component
|
|
83
|
+
* @returns {JSX}
|
|
84
|
+
*/
|
|
85
|
+
render() {
|
|
86
|
+
return (
|
|
87
|
+
<DragContext.Provider value={this.state}>
|
|
88
|
+
<div ref={this.elementRef}>
|
|
89
|
+
{this.state.displayDraggedItemsComponent.map((displayDraggedItemComponent, index) =>
|
|
90
|
+
<displayDraggedItemComponent.draggedItemComponent
|
|
91
|
+
key={index}/>
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
</div>
|
|
95
|
+
{this.props.children}
|
|
96
|
+
</DragContext.Provider>
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
dragContextProvider.displayName = 'dragContextProvider';
|
|
102
|
+
dragContextProvider.propTypes = {
|
|
103
|
+
children: PropTypes.any
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Contextual Menu Context Consumer HOC
|
|
108
|
+
* @param WrappedComponent
|
|
109
|
+
*/
|
|
110
|
+
export function withDrag(WrappedComponent) {
|
|
111
|
+
return class withDrag extends React.Component {
|
|
112
|
+
render() {
|
|
113
|
+
return (
|
|
114
|
+
<DragContext.Consumer>
|
|
115
|
+
{
|
|
116
|
+
dragContext => <WrappedComponent dragContext={dragContext} {...this.props} />
|
|
117
|
+
}
|
|
118
|
+
</DragContext.Consumer>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.1.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import DragContextProvider from "./DragContext";
|
|
16
|
+
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
jest.resetModules();
|
|
19
|
+
jest.clearAllMocks();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
describe("Drag Context", () => {
|
|
23
|
+
let dragContext; // The context to text
|
|
24
|
+
|
|
25
|
+
describe('As LU I should be able to drag', () => {
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
dragContext = new DragContextProvider();
|
|
28
|
+
const setStateMock = state => dragContext.state = Object.assign(dragContext.state, state);
|
|
29
|
+
jest.spyOn(dragContext, 'setState').mockImplementation(setStateMock);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('As LU I should start dragging', async() => {
|
|
33
|
+
const event = {
|
|
34
|
+
dataTransfer: {
|
|
35
|
+
setDragImage: jest.fn()
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const component = jest.fn();
|
|
39
|
+
const draggedItems = {
|
|
40
|
+
item: "item"
|
|
41
|
+
};
|
|
42
|
+
await dragContext.state.onDragStart(event, component, draggedItems);
|
|
43
|
+
expect(dragContext.state.dragging).toBeTruthy();
|
|
44
|
+
expect(dragContext.state.draggedItems).toBe(draggedItems);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('As LU I should end the dragging', async() => {
|
|
48
|
+
await dragContext.state.onDragEnd();
|
|
49
|
+
expect(dragContext.state.dragging).toBeFalsy();
|
|
50
|
+
expect(dragContext.state.draggedItems).toBe(null);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
});
|
|
@@ -50,6 +50,8 @@ export const NavigationContext = React.createContext({
|
|
|
50
50
|
}, // Whenever the user wants to navigate to the users settings workspace mfa section.
|
|
51
51
|
onGoToUserSettingsKeysRequested: () => {
|
|
52
52
|
}, // Whenever the user wants to navigate to the users settings workspace keys section.
|
|
53
|
+
onGoToUserSettingsMobileRequested: () => {
|
|
54
|
+
}, // Whenever the user wants to navigate to the users settings workspace mobile section.
|
|
53
55
|
onGoToNewTab: () => {
|
|
54
56
|
}, // Whenever the user want to navigate to a new url.
|
|
55
57
|
});
|
|
@@ -92,6 +94,7 @@ class NavigationContextProvider extends React.Component {
|
|
|
92
94
|
onGoToUserSettingsThemeRequested: this.onGoToUserSettingsThemeRequested.bind(this), // Whenever the user wants to navigate to the users settings workspace theme section.
|
|
93
95
|
onGoToUserSettingsMfaRequested: this.onGoToUserSettingsMfaRequested.bind(this), // Whenever the user wants to navigate to the users settings workspace mfa section.
|
|
94
96
|
onGoToUserSettingsKeysRequested: this.onGoToUserSettingsKeysRequested.bind(this), // Whenever the user wants to navigate to the users settings workspace keys section.
|
|
97
|
+
onGoToUserSettingsMobileRequested: this.onGoToUserSettingsMobileRequested.bind(this), // Whenever the user wants to navigate to the users settings workspace mobile section.
|
|
95
98
|
};
|
|
96
99
|
}
|
|
97
100
|
|
|
@@ -279,6 +282,14 @@ class NavigationContextProvider extends React.Component {
|
|
|
279
282
|
await this.goTo("browser-extension", "/app/settings/keys");
|
|
280
283
|
}
|
|
281
284
|
|
|
285
|
+
/**
|
|
286
|
+
* Whenever the user wants to navigate to the users settings workspace keys section.
|
|
287
|
+
* @returns {Promise<void>}
|
|
288
|
+
*/
|
|
289
|
+
async onGoToUserSettingsMobileRequested() {
|
|
290
|
+
await this.goTo("browser-extension", "/app/settings/mobile");
|
|
291
|
+
}
|
|
292
|
+
|
|
282
293
|
/**
|
|
283
294
|
* Render the component
|
|
284
295
|
* @returns {JSX}
|