passbolt-styleguide 3.8.4 → 3.9.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 +3 -3
- package/build/css/public.min.css +3 -3
- package/build/css/themes/default/api_authentication.min.css +3 -3
- package/build/css/themes/default/api_cloud.min.css +3 -3
- package/build/css/themes/default/api_main.min.css +3 -3
- package/build/css/themes/default/api_reports.min.css +3 -3
- package/build/css/themes/default/api_webinstaller.min.css +3 -3
- package/build/css/themes/default/ext_app.min.css +3 -3
- package/build/css/themes/default/ext_authentication.min.css +3 -3
- package/build/css/themes/default/ext_external.min.css +2 -2
- package/build/css/themes/default/ext_in_form_cta.min.css +3 -3
- package/build/css/themes/default/ext_in_form_menu.min.css +3 -3
- package/build/css/themes/default/ext_quickaccess.min.css +3 -3
- package/build/css/themes/midgar/api_authentication.min.css +3 -3
- package/build/css/themes/midgar/api_main.min.css +3 -3
- package/build/css/themes/midgar/api_reports.min.css +3 -3
- package/build/css/themes/midgar/ext_app.min.css +3 -3
- package/build/css/themes/midgar/ext_authentication.min.css +3 -3
- package/build/css/themes/midgar/ext_in_form_cta.min.css +3 -3
- package/build/css/themes/midgar/ext_in_form_menu.min.css +3 -3
- package/build/css/themes/midgar/ext_quickaccess.min.css +3 -3
- package/build/css/themes/solarized_dark/api_authentication.min.css +1 -1
- package/build/css/themes/solarized_dark/api_main.min.css +1 -1
- package/build/css/themes/solarized_dark/api_reports.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_app.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_authentication.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_in_form_cta.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_in_form_menu.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_quickaccess.min.css +1 -1
- package/build/css/themes/solarized_light/api_authentication.min.css +1 -1
- package/build/css/themes/solarized_light/api_main.min.css +1 -1
- package/build/css/themes/solarized_light/api_reports.min.css +1 -1
- package/build/css/themes/solarized_light/ext_app.min.css +1 -1
- package/build/css/themes/solarized_light/ext_authentication.min.css +1 -1
- package/build/css/themes/solarized_light/ext_in_form_cta.min.css +1 -1
- package/build/css/themes/solarized_light/ext_in_form_menu.min.css +1 -1
- package/build/css/themes/solarized_light/ext_quickaccess.min.css +1 -1
- package/build/js/dist/api-account-recovery.js +1 -1
- package/build/js/dist/api-app.js +1 -1
- package/build/js/dist/api-app.js.LICENSE.txt +75 -5
- package/build/js/dist/api-feedback.js +2 -0
- package/build/js/dist/api-feedback.js.LICENSE.txt +45 -0
- package/build/js/dist/api-recover.js +1 -1
- package/build/js/dist/api-setup.js +1 -1
- package/build/js/dist/api-triage.js +1 -1
- package/build/js/dist/api-vendors.js +1 -1
- package/build/js/dist/api-vendors.js.LICENSE.txt +19 -9
- package/build/js/dist/src/locales/de-DE/common.json +995 -0
- package/build/js/dist/src/locales/en-UK/common.json +1061 -0
- package/build/js/dist/src/locales/es-ES/common.json +995 -0
- package/build/js/dist/src/locales/fr-FR/common.json +995 -0
- package/build/js/dist/src/locales/ja-JP/common.json +980 -0
- package/build/js/dist/src/locales/lt-LT/common.json +1025 -0
- package/build/js/dist/src/locales/nl-NL/common.json +995 -0
- package/build/js/dist/src/locales/pl-PL/common.json +1025 -0
- package/build/js/dist/src/locales/sv-SE/common.json +995 -0
- package/package.json +18 -1
- package/src/img/controls/attention.svg +1 -0
- package/src/locales/en-UK/common.json +80 -16
- package/src/react-extension/ApiApp.js +17 -5
- package/src/react-extension/ApiFeedback.entry.js +24 -0
- package/src/react-extension/ExtApp.js +12 -5
- package/src/react-extension/ExtAuthenticationLogin.js +17 -15
- package/src/react-extension/ExtAuthenticationLogin.test.stories.js +59 -0
- package/src/react-extension/ExtBootstrapApp.js +1 -0
- package/src/react-extension/components/Administration/AdministrationWorkspace.js +24 -0
- package/src/react-extension/components/Administration/AdministrationWorkspace.test.data.js +3 -3
- package/src/react-extension/components/Administration/AdministrationWorkspace.test.js +13 -1
- package/src/react-extension/components/Administration/AdministrationWorkspace.test.page.js +7 -0
- package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.js +101 -0
- package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.test.data.js +23 -0
- package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.test.stories.js +27 -0
- package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.js +1 -1
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +78 -2
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.data.js +3 -1
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.js +60 -0
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.page.js +23 -4
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationInternationalisationActions/DisplayAdministrationInternationalisationActions.js +125 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationMfaActions/DisplayAdministrationMfaActions.js +131 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSelfRegistrationActions/DisplayAdministrationSelfRegistrationActions.js +103 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSsoActions/DisplayAdministrationSsoActions.js +91 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSubscriptionActions/DisplayAdministrationSubscriptionActions.js +85 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationUserDirectoryActions/DisplayAdministrationUserDirectoryActions.js +228 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +4 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +9 -0
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +3 -3
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.data.js +14 -0
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.page.js +0 -17
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.js +18 -115
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.data.js +11 -13
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.js +38 -43
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.page.js +47 -10
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.stories.js +10 -43
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.js +82 -367
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.data.js +128 -42
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.js +75 -121
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.page.js +46 -16
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +18 -14
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.js +103 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.js +53 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.page.js +81 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.stories.js +34 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.js +125 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.data.js +63 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.js +54 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.page.js +88 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.stories.js +35 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.js +381 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.data.js +69 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.js +332 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.page.js +247 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.stories.js +72 -0
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +19 -19
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.data.js +1717 -1729
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +11 -3
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.page.js +4 -1
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +11 -1784
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.js +41 -140
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.data.js +15 -3
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.js +22 -49
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.page.js +19 -11
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.stories.js +9 -3
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +5 -6
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.data.js +1717 -1728
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +11 -3
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.page.js +4 -1
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.stories.js +11 -1784
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +362 -835
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.data.js +427 -418
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.js +134 -175
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.page.js +108 -11
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +17 -25
- package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +4 -2
- package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.js +3 -3
- package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.js +1 -1
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.js +32 -7
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.data.js +0 -3
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.js +145 -1
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.page.js +52 -1
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.stories.js +15 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.js +340 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.data.js +56 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.js +223 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.page.js +235 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.stories.js +55 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/SsoProviders.data.js +34 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.js +12 -3
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.test.js +27 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.page.js +8 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.js +197 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.data.js +37 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.js +187 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.page.js +120 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.stories.js +31 -0
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +9 -5
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.data.js +4 -0
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.js +11 -42
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.page.js +1 -0
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +9 -5
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.data.js +4 -0
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.js +16 -2
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.page.js +17 -1
- package/src/react-extension/components/AuthenticationLogin/Login/Login.js +159 -61
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.data.js +14 -11
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.js +79 -0
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.page.js +16 -0
- package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxMain.js +2 -0
- package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +4 -0
- package/src/react-extension/components/Common/Error/ApiError/ApiError.js +119 -0
- package/src/react-extension/components/Common/Error/ApiError/ApiError.test.js +43 -0
- package/src/react-extension/components/Common/Error/ApiError/ApiError.test.page.js +108 -0
- package/src/react-extension/components/Common/Error/ApiError/ApiError.test.stories.js +39 -0
- package/src/react-extension/components/Common/Inputs/Autocomplete/Autocomplete.test.js +12 -0
- package/src/react-extension/components/Common/Inputs/Autocomplete/AutocompleteItem.js +2 -2
- package/src/react-extension/components/Common/Legacy/HandleLegacyAppjs.js +1 -1
- package/src/react-extension/components/Common/Navigation/Header/Logo.js +13 -1
- package/src/react-extension/components/Resource/CreateResource/CreateResource.js +103 -30
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.js +44 -10
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.page.js +35 -7
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +3 -3
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesListContextualMenu.js +6 -5
- package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.js +5 -4
- package/src/react-extension/components/Resource/EditResource/EditResource.js +95 -23
- package/src/react-extension/components/Resource/EditResource/EditResource.test.js +45 -13
- package/src/react-extension/components/Resource/EditResource/EditResource.test.page.js +35 -2
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetails.js +2 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.js +3 -2
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +23 -2
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.js +8 -0
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.page.js +26 -2
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +22 -1
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.js +8 -0
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.page.js +25 -2
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetails.js +2 -1
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.js +2 -1
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +14 -1
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.js +8 -0
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.page.js +12 -0
- package/src/react-extension/components/User/CreateUser/CreateUser.js +42 -3
- package/src/react-extension/components/User/CreateUser/CreateUser.test.js +16 -0
- package/src/react-extension/components/User/CreateUser/CreateUser.test.page.js +26 -0
- package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +2 -1
- package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.js +5 -5
- package/src/react-extension/components/User/EditUser/EditUser.js +29 -2
- package/src/react-extension/components/User/EditUser/EditUser.test.js +12 -0
- package/src/react-extension/components/User/EditUser/EditUser.test.page.js +26 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.js +2 -1
- package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.test.data.js +1332 -1331
- package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.js +2 -1
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +19 -1
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.js +9 -0
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.page.js +12 -0
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.js +2 -1
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +16 -1
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.js +8 -0
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.page.js +26 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +6 -4
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.data.js +4 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +21 -11
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.page.js +10 -1
- package/src/react-extension/contexts/AdminSmtpSettingsContext.js +2 -0
- package/src/react-extension/contexts/AdminSmtpSettingsContext.test.data.js +13 -0
- package/src/react-extension/contexts/AdminSmtpSettingsContext.test.js +3 -1
- package/src/react-extension/contexts/AdminSsoContext.js +558 -0
- package/src/react-extension/contexts/AdminSsoContext.test.data.js +51 -0
- package/src/react-extension/contexts/Administration/AdministrationInternationalizationContext/AdministrationInternationalizationContext.js +194 -0
- package/src/react-extension/contexts/Administration/AdministrationInternationalizationContext/AdministrationInternationalizationContext.test.js +111 -0
- package/src/react-extension/contexts/Administration/AdministrationMfa/AdministrationMfaContext.js +265 -0
- package/src/react-extension/contexts/Administration/AdministrationMfa/AdministrationMfaContext.test.js +178 -0
- package/src/react-extension/contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext.js +453 -0
- package/src/react-extension/contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext.test.js +218 -0
- package/src/react-extension/contexts/Administration/AdministrationSubscription/AdministrationSubscription.js +168 -0
- package/src/react-extension/contexts/Administration/AdministrationSubscription/AdministrationSubscription.test.js +73 -0
- package/src/react-extension/contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext.js +353 -0
- package/src/react-extension/contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext.test.js +220 -0
- package/src/react-extension/contexts/AdministrationWorkspaceContext.js +17 -178
- package/src/react-extension/contexts/AdministrationWorkspaceContext.test.js +0 -26
- package/src/react-extension/contexts/ApiAppContext.test.data.js +4 -2
- package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.js +54 -4
- package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.data.js +10 -1
- package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.js +92 -14
- package/src/react-extension/contexts/Authentication/AuthenticationSetupContext.js +1 -0
- package/src/react-extension/contexts/NavigationContext.js +34 -0
- package/src/react-extension/contexts/SsoContext.js +151 -0
- package/src/react-extension/contexts/SsoContext.test.data.js +36 -0
- package/src/react-extension/contexts/SsoContext.test.js +104 -0
- package/src/react-extension/lib/Domain/DomainUtil.js +70 -0
- package/src/react-extension/lib/Domain/DomainUtil.test.js +129 -0
- package/src/react-extension/lib/Domain/Domains.js +6113 -0
- package/src/react-extension/lib/Error/InputValidator.js +24 -0
- package/src/react-extension/lib/Map/DynamicRef.js +49 -0
- package/src/react-extension/lib/Map/DynamicRef.test.js +56 -0
- package/src/react-extension/lib/Map/MapObject.js +48 -0
- package/src/react-extension/lib/Map/MapObject.test.js +43 -0
- package/src/react-quickaccess/ExtQuickAccess.js +7 -4
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.js +3 -1
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.data.js +4 -0
- package/src/react-quickaccess/components/LoginPage/LoginPage.js +115 -4
- package/src/react-quickaccess/components/LoginPage/LoginPage.test.data.js +10 -0
- package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +30 -3
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +33 -1
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.data.js +25 -0
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.js +60 -0
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.page.js +60 -0
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +33 -1
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.js +36 -7
- package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.js +3 -2
- package/src/react-quickaccess/contexts/SsoContext.js +150 -0
- package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +5 -0
- package/src/shared/constants/inputs.const.js +30 -0
- package/src/shared/lib/Browser/clipBoard.js +45 -0
- package/src/shared/lib/Browser/clipBoard.test.js +59 -0
- package/src/shared/models/Mfa/Duo.js +36 -0
- package/src/shared/models/Mfa/Duo.test.js +59 -0
- package/src/shared/models/Mfa/MfaDTO.js +51 -0
- package/src/shared/models/Mfa/MfaDTO.test.js +48 -0
- package/src/shared/models/Mfa/MfaEnumeration.js +17 -0
- package/src/shared/models/Mfa/MfaModel.js +48 -0
- package/src/shared/models/Mfa/MfaModel.test.js +37 -0
- package/src/shared/models/Mfa/Yubikey.js +35 -0
- package/src/shared/models/Mfa/Yubikey.test.js +47 -0
- package/src/shared/models/selfRegistration/SelfRegistrationDomainsViewModel.js +55 -0
- package/src/shared/models/selfRegistration/SelfRegistrationDomainsViewModel.test.js +37 -0
- package/src/shared/models/selfRegistration/SelfRegistrationDto.js +42 -0
- package/src/shared/models/selfRegistration/SelfRegistrationDto.test.js +48 -0
- package/src/shared/models/selfRegistration/SelfRegistrationEnumeration.js +17 -0
- package/src/shared/models/subscription/SubscriptionDto.js +34 -0
- package/src/shared/models/subscription/SubscriptionDto.test.js +31 -0
- package/src/shared/models/subscription/SubscriptionModel.js +33 -0
- package/src/shared/models/subscription/SubscriptionModel.test.js +48 -0
- package/src/shared/models/user/UserModel.js +37 -0
- package/src/shared/models/userDirectory/UserDirectoryDTO.js +57 -0
- package/src/shared/models/userDirectory/UserDirectoryDTO.test.js +40 -0
- package/src/shared/models/userDirectory/UserDirectoryEnum.js +22 -0
- package/src/shared/models/userDirectory/UserDirectoryModel.js +64 -0
- package/src/shared/models/userDirectory/UserDirectoryModel.test.js +37 -0
- package/src/shared/services/actions/subscription/SubscriptionActionService.js +69 -0
- package/src/shared/services/actions/subscription/SubscriptionActionService.test.js +73 -0
- package/src/shared/services/api/Internationalisation/InternationalisationService.js +46 -0
- package/src/shared/services/api/Mfa/MfaService.js +54 -0
- package/src/shared/services/{accountRecovery → api/accountRecovery}/ApiAppAccountRecoveryUserService.js +2 -2
- package/src/shared/services/{accountRecovery → api/accountRecovery}/ExtAppAccountRecoveryUserService.js +0 -0
- package/src/shared/services/api/secrets/pownedService.js +64 -0
- package/src/shared/services/api/secrets/pownedService.test.js +63 -0
- package/src/shared/services/api/selfRegistration/selfRegistrationService.js +64 -0
- package/src/shared/services/api/user/UserService.js +45 -0
- package/src/shared/services/api/userDirectory/UserDirectoryService.js +108 -0
- package/src/shared/services/forms/Mfa/MfaFormService.js +195 -0
- package/src/shared/services/forms/Mfa/MfaFormService.test.js +341 -0
- package/src/shared/services/forms/selfRegistration/SelfRegistrationFormService.js +92 -0
- package/src/shared/services/forms/selfRegistration/SelfRegistrationFormService.test.js +101 -0
- package/src/shared/services/forms/userDirectory/UserDirectoryFormService.js +118 -0
- package/src/shared/services/forms/userDirectory/UserDirectoryFormService.test.js +128 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.js +0 -205
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.data.js +0 -37
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.js +0 -197
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.page.js +0 -133
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2022 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) 2022 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.8.3
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {enableFetchMocks} from 'jest-fetch-mock';
|
|
16
|
+
import {mockApiResponse} from '../../../../../test/mocks/mockApiResponse';
|
|
17
|
+
import {defaultAppContext} from '../../../contexts/ApiAppContext.test.data';
|
|
18
|
+
import DisplaySelfRegistrationAdministrationPage from './DisplaySelfRegistrationAdministration.test.page';
|
|
19
|
+
import {defaultProps, domains, mockResult} from './DisplaySelfRegistrationAdministration.test.data';
|
|
20
|
+
import {waitFor} from '@testing-library/react';
|
|
21
|
+
import * as uuid from 'uuid';
|
|
22
|
+
import {ActionFeedbackContext} from "../../../contexts/ActionFeedbackContext";
|
|
23
|
+
import ConfirmSaveSelfRegistrationSettings from './ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings';
|
|
24
|
+
import ConfirmDeletionSelfRegistrationSettings from './ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings';
|
|
25
|
+
|
|
26
|
+
jest.mock('uuid');
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Unit tests on DisplaySelfRegistrationAdministration in regard of specifications
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
describe("DisplaySelfRegistrationAdministration", () => {
|
|
33
|
+
beforeEach(() => {
|
|
34
|
+
enableFetchMocks();
|
|
35
|
+
jest.resetModules();
|
|
36
|
+
jest.restoreAllMocks();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
let page; // The page to test against
|
|
40
|
+
const props = defaultProps(); // The props to pass
|
|
41
|
+
const context = defaultAppContext();
|
|
42
|
+
const gmailDomain = "gmail.com";
|
|
43
|
+
const requiredDomain = "A domain is required.";
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
describe("As a logged in administrator I can enable the User self registration", () => {
|
|
47
|
+
beforeEach(() => {
|
|
48
|
+
fetch.doMockOnceIf(/self-registration\/settings*/, () => mockApiResponse(mockResult([])));
|
|
49
|
+
page = new DisplaySelfRegistrationAdministrationPage(context, props);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('As a logged in administrator when the User self registration is not configured, I can access the User self registration settings page', async() => {
|
|
53
|
+
fetch.doMockOnceIf(/self-registration\/settings*/, () => mockApiResponse(mockResult(null, false)));
|
|
54
|
+
page = new DisplaySelfRegistrationAdministrationPage(context, props);
|
|
55
|
+
|
|
56
|
+
expect.assertions(7);
|
|
57
|
+
|
|
58
|
+
expect(page.exists()).toBeTruthy();
|
|
59
|
+
expect(page.toggle.checked).toBeFalsy();
|
|
60
|
+
expect(page.disabledDescription).toBeDefined();
|
|
61
|
+
expect(page.helpBox).toBeDefined();
|
|
62
|
+
expect(page.helpBoxButton).toBeDefined();
|
|
63
|
+
expect(page.saveSettingsButton).toBeDefined();
|
|
64
|
+
// We expect to have the button disable for the first usage
|
|
65
|
+
expect(page.saveSettingsButton.className.includes("disabled")).toBeTruthy();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('As a logged in administrator I can enable the User self registration setting', async() => {
|
|
69
|
+
expect.assertions(3);
|
|
70
|
+
|
|
71
|
+
expect(page.helpBoxButton).toBeDefined();
|
|
72
|
+
expect(page.helpBoxButton.textContent).toEqual("Read the documentation");
|
|
73
|
+
expect(page.helpBoxButton.getAttribute('href')).toEqual('https://help.passbolt.com/configure/self-registration');
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('As a logged in administrator I can enable the User self registration setting', async() => {
|
|
77
|
+
expect.assertions(5);
|
|
78
|
+
|
|
79
|
+
await page.clickOnToggle();
|
|
80
|
+
|
|
81
|
+
expect(page.toggle.checked).toBeTruthy();
|
|
82
|
+
expect(page.enabledLabel).toBeDefined();
|
|
83
|
+
expect(page.enabledDescription).toBeDefined();
|
|
84
|
+
// We should pre-populate with profesional domain
|
|
85
|
+
expect(page.firstInputRow.value).toEqual("passbolt.com");
|
|
86
|
+
expect(page.firstDeleteButton.getAttribute("disabled")).toBeNull();
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('As a logged in administrator I can enable the User self registration setting', async() => {
|
|
90
|
+
expect.assertions(5);
|
|
91
|
+
|
|
92
|
+
const contextWithPublicDomain = defaultAppContext({
|
|
93
|
+
loggedInUser: {
|
|
94
|
+
username: "user@gmail.com"
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
fetch.doMockOnceIf(/self-registration\/settings*/, () => mockApiResponse(mockResult([])));
|
|
98
|
+
page = new DisplaySelfRegistrationAdministrationPage(context, defaultProps({
|
|
99
|
+
context: contextWithPublicDomain
|
|
100
|
+
}));
|
|
101
|
+
|
|
102
|
+
await waitFor(() => {});
|
|
103
|
+
await page.clickOnToggle();
|
|
104
|
+
expect(page.toggle.checked).toBeTruthy();
|
|
105
|
+
expect(page.enabledLabel).toBeDefined();
|
|
106
|
+
expect(page.enabledDescription).toBeDefined();
|
|
107
|
+
// We should not pre-populate with public domain
|
|
108
|
+
expect(page.firstInputRow.value).toEqual("");
|
|
109
|
+
expect(page.firstDeleteButton.getAttribute("disabled")).toBeNull();
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe("As a logged administrator I can add domains to the User self registration list", () => {
|
|
113
|
+
beforeEach(() => {
|
|
114
|
+
fetch.doMockOnceIf(/self-registration\/settings*/, () => mockApiResponse(mockResult()));
|
|
115
|
+
page = new DisplaySelfRegistrationAdministrationPage(context, props);
|
|
116
|
+
let index = 0;
|
|
117
|
+
jest.spyOn(uuid, 'v4').mockImplementation(() => (index++).toString());
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it('As a logged in administrator I can add a new input field to the User self registration list', async() => {
|
|
121
|
+
expect.assertions(7);
|
|
122
|
+
// We expect to not have 4 items
|
|
123
|
+
expect(page.inputByIndex(0).value).toBe('passbolt.com');
|
|
124
|
+
expect(page.inputByIndex(1).value).toBe('passbolt.io');
|
|
125
|
+
expect(page.inputByIndex(2).value).toBe('passbolt.lu');
|
|
126
|
+
expect(page.inputByIndex(3)).toBeNull();
|
|
127
|
+
|
|
128
|
+
await page.addDomain();
|
|
129
|
+
|
|
130
|
+
expect(page.inputByIndex(3)).toBeDefined();
|
|
131
|
+
expect(page.inputByIndex(3).value).toBe('');
|
|
132
|
+
//We expected to have a delete button closed to the input
|
|
133
|
+
expect(page.deleteButtonByIndex(3)).toBeDefined();
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it("As an administrator on the self registration admin settings form, I want to see the new row having focus when I click on the add a new row button", async() => {
|
|
137
|
+
expect.assertions(1);
|
|
138
|
+
await page.addDomain();
|
|
139
|
+
|
|
140
|
+
expect(page.hasFocus(page.inputByIndex(3))).toBeTruthy();
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
it('As a logged in administrator I can add a new non-professional domain to the User self registration but I should see a warning message', async() => {
|
|
145
|
+
expect.assertions(7);
|
|
146
|
+
|
|
147
|
+
//Mock API calls
|
|
148
|
+
fetch.doMockIf(/self-registration\/settings*/, () => mockApiResponse(mockResult([gmailDomain])));
|
|
149
|
+
|
|
150
|
+
expect(page.warningMessage).toBeNull();
|
|
151
|
+
|
|
152
|
+
await page.addDomain();
|
|
153
|
+
await page.fillInput(page.inputByIndex(3), gmailDomain);
|
|
154
|
+
await page.focusOut(page.inputByIndex(3));
|
|
155
|
+
|
|
156
|
+
expect(page.warningMessage).toBeDefined();
|
|
157
|
+
expect(page.warningMessage.textContent).toBe("This is not a safe professional domain");
|
|
158
|
+
expect(page.subtitle.classList.contains('warning')).toBeTruthy();
|
|
159
|
+
|
|
160
|
+
//Warning should not block the save
|
|
161
|
+
await page.clickOnSave();
|
|
162
|
+
expect(page.warningMessage).toBeDefined();
|
|
163
|
+
expect(page.warningMessage.textContent).toBe("This is not a safe professional domain");
|
|
164
|
+
expect(page.subtitle.classList.contains('warning')).toBeTruthy();
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
describe("As a logged administrator I can save a list of domains", () => {
|
|
169
|
+
beforeEach(() => {
|
|
170
|
+
mockUuidGeneration();
|
|
171
|
+
jest.spyOn(ActionFeedbackContext._currentValue, 'displaySuccess').mockImplementation(() => {});
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it('As a logged in administrator I can save a list of domains when there is no error and one domain field filled in', async() => {
|
|
175
|
+
expect.assertions(2);
|
|
176
|
+
//Mock API calls
|
|
177
|
+
fetch.doMockIf(/self-registration\/settings*/, () => mockApiResponse(mockResult([])));
|
|
178
|
+
|
|
179
|
+
page = new DisplaySelfRegistrationAdministrationPage(context, props);
|
|
180
|
+
|
|
181
|
+
await waitFor(() => {});
|
|
182
|
+
await page.clickOnToggle();
|
|
183
|
+
await page.clickOnSave();
|
|
184
|
+
|
|
185
|
+
// We expect to have a banner when settings changes are not saved
|
|
186
|
+
expect(page.settingsChangedBanner).not.toBeNull();
|
|
187
|
+
expect(props.dialogContext.open).toHaveBeenCalledWith(ConfirmSaveSelfRegistrationSettings, expect.objectContaining({"domains": new Map(Object.entries(domains))}));
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
it('As a logged in administrator I can save a list of domains when there is no error and at least one domain filled in ', async() => {
|
|
191
|
+
expect.assertions(2);
|
|
192
|
+
//Mock get all
|
|
193
|
+
fetch.doMockIf(/self-registration\/settings*/, () => mockApiResponse(mockResult()));
|
|
194
|
+
|
|
195
|
+
page = new DisplaySelfRegistrationAdministrationPage(context, props);
|
|
196
|
+
|
|
197
|
+
await waitFor(() => {});
|
|
198
|
+
await page.addDomain();
|
|
199
|
+
// fill with non profession domain
|
|
200
|
+
await page.fillInput(page.inputByIndex(3), gmailDomain);
|
|
201
|
+
// We expect to have a banner when settings changes are not saved
|
|
202
|
+
expect(page.settingsChangedBanner).not.toBeNull();
|
|
203
|
+
await page.clickOnSave();
|
|
204
|
+
expect(props.dialogContext.open).toHaveBeenCalledWith(ConfirmSaveSelfRegistrationSettings, expect.objectContaining({"domains": new Map(Object.entries(domains))}));
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it('As a logged in administrator I cannot save the User self registration list when the format is not valid', async() => {
|
|
208
|
+
expect.assertions(7);
|
|
209
|
+
//Mock API calls
|
|
210
|
+
fetch.doMockIf(/self-registration\/settings*/, () => mockApiResponse(mockResult()));
|
|
211
|
+
|
|
212
|
+
page = new DisplaySelfRegistrationAdministrationPage(context, props);
|
|
213
|
+
|
|
214
|
+
await waitFor(() => {});
|
|
215
|
+
jest.spyOn(page.inputByIndex(1), 'focus');
|
|
216
|
+
|
|
217
|
+
// fill with non profession domain
|
|
218
|
+
await page.fillInput(page.inputByIndex(1), "");
|
|
219
|
+
await page.clickOnSave();
|
|
220
|
+
|
|
221
|
+
expect(page.errorMessage.textContent).toBe(requiredDomain);
|
|
222
|
+
expect(page.subtitle.classList.contains('error')).toBeTruthy();
|
|
223
|
+
// Check if input is focus
|
|
224
|
+
expect(page.inputByIndex(1).focus).toHaveBeenCalled();
|
|
225
|
+
|
|
226
|
+
await page.fillInput(page.inputByIndex(1), "127.0.0.1");
|
|
227
|
+
|
|
228
|
+
expect(page.errorMessage.textContent).toBe("This should be a valid domain");
|
|
229
|
+
expect(page.subtitle.classList.contains('error')).toBeTruthy();
|
|
230
|
+
|
|
231
|
+
await page.fillInput(page.inputByIndex(1), "passbolt.com");
|
|
232
|
+
await page.fillInput(page.inputByIndex(2), "passbolt.com");
|
|
233
|
+
|
|
234
|
+
//Check duplication
|
|
235
|
+
expect(page.errorMessage.textContent).toBe("This domain already exist");
|
|
236
|
+
expect(page.subtitle.classList.contains('error')).toBeTruthy();
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
it('As an administrator on the self registration admin settings form, I want to see the warning message on a row domain even when there are errors on other domains rows', async() => {
|
|
240
|
+
expect.assertions(4);
|
|
241
|
+
//Mock API calls
|
|
242
|
+
fetch.doMockIf(/self-registration\/settings*/, () => mockApiResponse(mockResult()));
|
|
243
|
+
|
|
244
|
+
page = new DisplaySelfRegistrationAdministrationPage(context, props);
|
|
245
|
+
|
|
246
|
+
await waitFor(() => {});
|
|
247
|
+
jest.spyOn(page.inputByIndex(1), 'focus');
|
|
248
|
+
|
|
249
|
+
// fill with non profession domain
|
|
250
|
+
await page.fillInput(page.inputByIndex(1), "");
|
|
251
|
+
await page.clickOnSave();
|
|
252
|
+
|
|
253
|
+
expect(page.errorMessage.textContent).toBe("A domain is required.");
|
|
254
|
+
|
|
255
|
+
// Lets add a new domain
|
|
256
|
+
await page.addDomain();
|
|
257
|
+
await page.fillInput(page.inputByIndex(2), gmailDomain);
|
|
258
|
+
await page.focusOut(page.inputByIndex(2));
|
|
259
|
+
|
|
260
|
+
expect(page.warningMessage).toBeDefined();
|
|
261
|
+
expect(page.warningMessage.textContent).toBe("This is not a safe professional domain");
|
|
262
|
+
expect(page.subtitle.classList.contains('warning')).toBeTruthy();
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
describe("As a logged administrator I can remove a domain from the list", () => {
|
|
266
|
+
beforeEach(() => {
|
|
267
|
+
mockUuidGeneration();
|
|
268
|
+
fetch.doMockOnceIf(/self-registration\/settings*/, () => mockApiResponse(mockResult()));
|
|
269
|
+
page = new DisplaySelfRegistrationAdministrationPage(context, props);
|
|
270
|
+
});
|
|
271
|
+
it('As a logged in administrator I can remove a domain from an existing list of domains', async() => {
|
|
272
|
+
expect.assertions(2);
|
|
273
|
+
|
|
274
|
+
expect(page.inputByIndex(1).value).toBe("passbolt.io");
|
|
275
|
+
await page.removeDomain(1);
|
|
276
|
+
expect(page.inputByIndex(1)).toBeNull();
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
it('As a logged in administrator I can not remove the domain when there’s only one item in the list of domains allowed to self register', async() => {
|
|
280
|
+
expect.assertions(4);
|
|
281
|
+
|
|
282
|
+
expect(page.inputByIndex(1).value).toBe("passbolt.io");
|
|
283
|
+
await page.removeDomain(1);
|
|
284
|
+
await page.removeDomain(2);
|
|
285
|
+
expect(page.inputByIndex(1)).toBeNull();
|
|
286
|
+
expect(page.inputByIndex(2)).toBeNull();
|
|
287
|
+
|
|
288
|
+
expect(page.deleteButtonByIndex(0).classList.contains("disabled")).toBeTruthy();
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
it('As a logged in administrator I can reset the “User self registration” settings when I disable and enable the setting', async() => {
|
|
292
|
+
expect.assertions(5);
|
|
293
|
+
//Disable settings
|
|
294
|
+
await page.clickOnToggle();
|
|
295
|
+
await page.clickOnSave();
|
|
296
|
+
|
|
297
|
+
//Test to check that data are not anymore present on the UI
|
|
298
|
+
await page.clickOnToggle();
|
|
299
|
+
|
|
300
|
+
expect(props.dialogContext.open).toHaveBeenCalledWith(ConfirmDeletionSelfRegistrationSettings, expect.objectContaining({onClose: expect.any(Function), onSubmit: expect.any(Function)}));
|
|
301
|
+
//As index are generated by the function, a new input should have an incremented index
|
|
302
|
+
expect(page.inputByIndex(0)).toBeNull();
|
|
303
|
+
expect(page.inputByIndex(2)).toBeNull();
|
|
304
|
+
expect(page.inputByIndex(3)).not.toBeNull();
|
|
305
|
+
//New input should be prepopulate with the domain of the organization
|
|
306
|
+
expect(page.firstInputRow.value).toEqual("passbolt.com");
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
it("As an administrator on the self registration admin settings form, I should not see an error when I enable the settings which previously were containing error", async() => {
|
|
310
|
+
expect.assertions(4);
|
|
311
|
+
|
|
312
|
+
//We generate an error
|
|
313
|
+
await page.fillInput(page.inputByIndex(1), "");
|
|
314
|
+
await page.clickOnSave();
|
|
315
|
+
|
|
316
|
+
expect(page.errorMessage.textContent).toBe(requiredDomain);
|
|
317
|
+
expect(page.subtitle.classList.contains('error')).toBeTruthy();
|
|
318
|
+
|
|
319
|
+
// We disable self registration
|
|
320
|
+
await page.clickOnToggle();
|
|
321
|
+
// We enable it agzain
|
|
322
|
+
await page.clickOnToggle();
|
|
323
|
+
expect(page.errorMessage).toBeNull();
|
|
324
|
+
expect(page.subtitle.classList.contains('error')).toBeFalsy();
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
function mockUuidGeneration() {
|
|
330
|
+
let index = 0;
|
|
331
|
+
jest.spyOn(uuid, 'v4').mockImplementation(() => (index++).toString());
|
|
332
|
+
}
|
|
@@ -0,0 +1,247 @@
|
|
|
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.8.3
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import React from "react";
|
|
16
|
+
import {fireEvent, render, waitFor} from "@testing-library/react";
|
|
17
|
+
import AppContext from "../../../contexts/AppContext";
|
|
18
|
+
import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
|
|
19
|
+
import DisplayAdministrationSelfRegistrationActions from "../DisplayAdministrationWorkspaceActions/DisplayAdministrationSelfRegistrationActions/DisplayAdministrationSelfRegistrationActions";
|
|
20
|
+
import DisplaySelfRegistrationAdministration from "./DisplaySelfRegistrationAdministration";
|
|
21
|
+
import {AdminSelfRegistrationContextProvider} from "../../../contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The DisplaySelfRegistrationAdministration component represented as a page
|
|
25
|
+
*/
|
|
26
|
+
export default class DisplaySelfRegistrationAdministrationPage {
|
|
27
|
+
/**
|
|
28
|
+
* Default constructor
|
|
29
|
+
* @param appContext An app context
|
|
30
|
+
* @param props Props to attach
|
|
31
|
+
*/
|
|
32
|
+
constructor(appContext, props) {
|
|
33
|
+
this._page = render(
|
|
34
|
+
<MockTranslationProvider>
|
|
35
|
+
<AppContext.Provider value={appContext}>
|
|
36
|
+
<AdminSelfRegistrationContextProvider {...props}>
|
|
37
|
+
<DisplayAdministrationSelfRegistrationActions />
|
|
38
|
+
<DisplaySelfRegistrationAdministration {...props}/>
|
|
39
|
+
</AdminSelfRegistrationContextProvider>
|
|
40
|
+
</AppContext.Provider>
|
|
41
|
+
</MockTranslationProvider>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Returns the self registration parent class
|
|
47
|
+
*/
|
|
48
|
+
get selfRegistration() {
|
|
49
|
+
return this._page.container.querySelector('.self-registration ');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
get actions() {
|
|
53
|
+
return this._page.container.querySelector(".actions");
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Returns the save settings button
|
|
57
|
+
*/
|
|
58
|
+
get saveSettingsButton() {
|
|
59
|
+
return this._page.container.querySelector('#save-settings');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Returns the toggle settings
|
|
64
|
+
*/
|
|
65
|
+
get toggle() {
|
|
66
|
+
return this._page.container.querySelector('#settings-toggle');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Returns the first domain row
|
|
71
|
+
*/
|
|
72
|
+
get domainRows() {
|
|
73
|
+
return this._page.container.querySelectorAll('.domain-row');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Returns the first domain row
|
|
78
|
+
*/
|
|
79
|
+
get firstInputRow() {
|
|
80
|
+
return this._page.container.querySelector('.full-width');
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Returns the first delere button row
|
|
85
|
+
*/
|
|
86
|
+
get firstDeleteButton() {
|
|
87
|
+
return this._page.container.querySelector('.button-icon');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Returns the enable description
|
|
92
|
+
*/
|
|
93
|
+
get enabledDescription() {
|
|
94
|
+
return this._page.container.querySelector('#enabled-description');
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Returns the enable label
|
|
99
|
+
*/
|
|
100
|
+
get enabledLabel() {
|
|
101
|
+
return this._page.container.querySelector('#enabled-label');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Returns the save dialog confirmation
|
|
106
|
+
*/
|
|
107
|
+
get saveDialogConfirmation() {
|
|
108
|
+
return this._page.container.querySelector(' save-self-recovery-settings-dialog');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Returns the disable description
|
|
113
|
+
*/
|
|
114
|
+
get disabledDescription() {
|
|
115
|
+
return this._page.container.querySelector('#disabled-description');
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Returns the help box
|
|
120
|
+
*/
|
|
121
|
+
get helpBox() {
|
|
122
|
+
return this._page.container.querySelector('.sidebar-help');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Returns banner for settings changes
|
|
127
|
+
*/
|
|
128
|
+
get settingsChangedBanner() {
|
|
129
|
+
return this._page.container.querySelector("#self-registration-setting-overridden-banner");
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Returns the help box button
|
|
134
|
+
*/
|
|
135
|
+
get helpBoxButton() {
|
|
136
|
+
return this._page.container.querySelector('.sidebar-help .button');
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Returns the add domain button
|
|
141
|
+
*/
|
|
142
|
+
get addDomainButton() {
|
|
143
|
+
return this._page.container.querySelector('.domain-add .button');
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Returns the warning message
|
|
148
|
+
*/
|
|
149
|
+
get warningMessage() {
|
|
150
|
+
return this._page.container.querySelector('.warning-message');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Returns the error message
|
|
155
|
+
*/
|
|
156
|
+
get errorMessage() {
|
|
157
|
+
return this._page.container.querySelector('.error-message');
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Returns the subtitle
|
|
162
|
+
*/
|
|
163
|
+
get subtitle() {
|
|
164
|
+
return this._page.container.querySelector('#self-registration-subtitle');
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* input by index
|
|
169
|
+
*/
|
|
170
|
+
inputByIndex(index) {
|
|
171
|
+
return this._page.container.querySelector(`#input-${index}`);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* row delete button by index
|
|
176
|
+
*/
|
|
177
|
+
deleteButtonByIndex(index) {
|
|
178
|
+
return this._page.container.querySelector(`#delete-${index}`);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Returns true if the page object exists in the container
|
|
183
|
+
*/
|
|
184
|
+
exists() {
|
|
185
|
+
return this.selfRegistration !== null;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* click on toggle to enable/disable setting
|
|
190
|
+
*/
|
|
191
|
+
async clickOnToggle() {
|
|
192
|
+
return this.click(this.toggle);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* click on save settings button
|
|
197
|
+
*/
|
|
198
|
+
async clickOnSave() {
|
|
199
|
+
return this.click(this.saveSettingsButton);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* click on the add button domain
|
|
204
|
+
*/
|
|
205
|
+
async addDomain() {
|
|
206
|
+
return this.click(this.addDomainButton);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* click on the remove button domain
|
|
211
|
+
* @param {number} index
|
|
212
|
+
*/
|
|
213
|
+
async removeDomain(index) {
|
|
214
|
+
const element = this.deleteButtonByIndex(index);
|
|
215
|
+
return this.click(element);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* click on the container to focus out
|
|
220
|
+
*/
|
|
221
|
+
async focusOut(element) {
|
|
222
|
+
element.blur();
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Click on the element
|
|
227
|
+
*
|
|
228
|
+
*/
|
|
229
|
+
async click(element) {
|
|
230
|
+
const leftClick = {button: 0};
|
|
231
|
+
fireEvent.click(element, leftClick);
|
|
232
|
+
await waitFor(() => {
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/** fill the input element with data */
|
|
237
|
+
async fillInput(element, data) {
|
|
238
|
+
element.focus();
|
|
239
|
+
const dataInputEvent = {target: {value: data}};
|
|
240
|
+
fireEvent.change(element, dataInputEvent);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/** check if item has focus */
|
|
244
|
+
hasFocus(element) {
|
|
245
|
+
return element === document.activeElement;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 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) 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.8.3
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import React from "react";
|
|
16
|
+
import PropTypes from "prop-types";
|
|
17
|
+
import {mockApiResponse} from '../../../../../test/mocks/mockApiResponse';
|
|
18
|
+
import MockFetch from '../../../test/mock/MockFetch';
|
|
19
|
+
import DisplaySelfRegistrationAdministration from "./DisplaySelfRegistrationAdministration";
|
|
20
|
+
import {AdminSelfRegistrationContextProvider} from "../../../contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext";
|
|
21
|
+
import {defaultProps, mockResult} from "./DisplaySelfRegistrationAdministration.test.data";
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
export default {
|
|
25
|
+
title: 'Components/Administration/DisplaySelfRegistrationAdministration',
|
|
26
|
+
component: DisplaySelfRegistrationAdministration
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
let currentStory = null;
|
|
30
|
+
const mockFetch = new MockFetch();
|
|
31
|
+
mockFetch.addGetFetchRequest(/self-registration\/settings\.json/, async() => {
|
|
32
|
+
switch (currentStory) {
|
|
33
|
+
case 'components-administration-displayselfregistrationadministration--default': {
|
|
34
|
+
return mockApiResponse(mockResult(null));
|
|
35
|
+
}
|
|
36
|
+
case 'components-administration-displayselfregistrationadministration--with-profesionnal-domains': {
|
|
37
|
+
return mockApiResponse(mockResult());
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
throw new Error("Unsupported story");
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const decorators = [
|
|
44
|
+
(Story, context) => {
|
|
45
|
+
currentStory = context.id;
|
|
46
|
+
return <>
|
|
47
|
+
<Story/>
|
|
48
|
+
</>;
|
|
49
|
+
}
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
const Template = args =>
|
|
54
|
+
<AdminSelfRegistrationContextProvider {...args}>
|
|
55
|
+
<div className="panel middle">
|
|
56
|
+
<div className="grid grid-responsive-12">
|
|
57
|
+
<DisplaySelfRegistrationAdministration {...args}/>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</AdminSelfRegistrationContextProvider>;
|
|
61
|
+
|
|
62
|
+
Template.propTypes = {
|
|
63
|
+
context: PropTypes.object,
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const Default = Template.bind({});
|
|
67
|
+
Default.args = defaultProps();
|
|
68
|
+
Default.decorators = decorators;
|
|
69
|
+
|
|
70
|
+
export const withProfesionnalDomains = Template.bind({});
|
|
71
|
+
withProfesionnalDomains.args = defaultProps();
|
|
72
|
+
withProfesionnalDomains.decorators = decorators;
|