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.
Files changed (318) hide show
  1. package/build/css/help.min.css +3 -3
  2. package/build/css/public.min.css +3 -3
  3. package/build/css/themes/default/api_authentication.min.css +3 -3
  4. package/build/css/themes/default/api_cloud.min.css +3 -3
  5. package/build/css/themes/default/api_main.min.css +3 -3
  6. package/build/css/themes/default/api_reports.min.css +3 -3
  7. package/build/css/themes/default/api_webinstaller.min.css +3 -3
  8. package/build/css/themes/default/ext_app.min.css +3 -3
  9. package/build/css/themes/default/ext_authentication.min.css +3 -3
  10. package/build/css/themes/default/ext_external.min.css +2 -2
  11. package/build/css/themes/default/ext_in_form_cta.min.css +3 -3
  12. package/build/css/themes/default/ext_in_form_menu.min.css +3 -3
  13. package/build/css/themes/default/ext_quickaccess.min.css +3 -3
  14. package/build/css/themes/midgar/api_authentication.min.css +3 -3
  15. package/build/css/themes/midgar/api_main.min.css +3 -3
  16. package/build/css/themes/midgar/api_reports.min.css +3 -3
  17. package/build/css/themes/midgar/ext_app.min.css +3 -3
  18. package/build/css/themes/midgar/ext_authentication.min.css +3 -3
  19. package/build/css/themes/midgar/ext_in_form_cta.min.css +3 -3
  20. package/build/css/themes/midgar/ext_in_form_menu.min.css +3 -3
  21. package/build/css/themes/midgar/ext_quickaccess.min.css +3 -3
  22. package/build/css/themes/solarized_dark/api_authentication.min.css +1 -1
  23. package/build/css/themes/solarized_dark/api_main.min.css +1 -1
  24. package/build/css/themes/solarized_dark/api_reports.min.css +1 -1
  25. package/build/css/themes/solarized_dark/ext_app.min.css +1 -1
  26. package/build/css/themes/solarized_dark/ext_authentication.min.css +1 -1
  27. package/build/css/themes/solarized_dark/ext_in_form_cta.min.css +1 -1
  28. package/build/css/themes/solarized_dark/ext_in_form_menu.min.css +1 -1
  29. package/build/css/themes/solarized_dark/ext_quickaccess.min.css +1 -1
  30. package/build/css/themes/solarized_light/api_authentication.min.css +1 -1
  31. package/build/css/themes/solarized_light/api_main.min.css +1 -1
  32. package/build/css/themes/solarized_light/api_reports.min.css +1 -1
  33. package/build/css/themes/solarized_light/ext_app.min.css +1 -1
  34. package/build/css/themes/solarized_light/ext_authentication.min.css +1 -1
  35. package/build/css/themes/solarized_light/ext_in_form_cta.min.css +1 -1
  36. package/build/css/themes/solarized_light/ext_in_form_menu.min.css +1 -1
  37. package/build/css/themes/solarized_light/ext_quickaccess.min.css +1 -1
  38. package/build/js/dist/api-account-recovery.js +1 -1
  39. package/build/js/dist/api-app.js +1 -1
  40. package/build/js/dist/api-app.js.LICENSE.txt +75 -5
  41. package/build/js/dist/api-feedback.js +2 -0
  42. package/build/js/dist/api-feedback.js.LICENSE.txt +45 -0
  43. package/build/js/dist/api-recover.js +1 -1
  44. package/build/js/dist/api-setup.js +1 -1
  45. package/build/js/dist/api-triage.js +1 -1
  46. package/build/js/dist/api-vendors.js +1 -1
  47. package/build/js/dist/api-vendors.js.LICENSE.txt +19 -9
  48. package/build/js/dist/src/locales/de-DE/common.json +995 -0
  49. package/build/js/dist/src/locales/en-UK/common.json +1061 -0
  50. package/build/js/dist/src/locales/es-ES/common.json +995 -0
  51. package/build/js/dist/src/locales/fr-FR/common.json +995 -0
  52. package/build/js/dist/src/locales/ja-JP/common.json +980 -0
  53. package/build/js/dist/src/locales/lt-LT/common.json +1025 -0
  54. package/build/js/dist/src/locales/nl-NL/common.json +995 -0
  55. package/build/js/dist/src/locales/pl-PL/common.json +1025 -0
  56. package/build/js/dist/src/locales/sv-SE/common.json +995 -0
  57. package/package.json +18 -1
  58. package/src/img/controls/attention.svg +1 -0
  59. package/src/locales/en-UK/common.json +80 -16
  60. package/src/react-extension/ApiApp.js +17 -5
  61. package/src/react-extension/ApiFeedback.entry.js +24 -0
  62. package/src/react-extension/ExtApp.js +12 -5
  63. package/src/react-extension/ExtAuthenticationLogin.js +17 -15
  64. package/src/react-extension/ExtAuthenticationLogin.test.stories.js +59 -0
  65. package/src/react-extension/ExtBootstrapApp.js +1 -0
  66. package/src/react-extension/components/Administration/AdministrationWorkspace.js +24 -0
  67. package/src/react-extension/components/Administration/AdministrationWorkspace.test.data.js +3 -3
  68. package/src/react-extension/components/Administration/AdministrationWorkspace.test.js +13 -1
  69. package/src/react-extension/components/Administration/AdministrationWorkspace.test.page.js +7 -0
  70. package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.js +101 -0
  71. package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.test.data.js +23 -0
  72. package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.test.stories.js +27 -0
  73. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.js +1 -1
  74. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +78 -2
  75. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.data.js +3 -1
  76. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.js +60 -0
  77. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.page.js +23 -4
  78. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationInternationalisationActions/DisplayAdministrationInternationalisationActions.js +125 -0
  79. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationMfaActions/DisplayAdministrationMfaActions.js +131 -0
  80. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSelfRegistrationActions/DisplayAdministrationSelfRegistrationActions.js +103 -0
  81. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSsoActions/DisplayAdministrationSsoActions.js +91 -0
  82. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSubscriptionActions/DisplayAdministrationSubscriptionActions.js +85 -0
  83. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationUserDirectoryActions/DisplayAdministrationUserDirectoryActions.js +228 -0
  84. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +4 -0
  85. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +9 -0
  86. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +3 -3
  87. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.data.js +14 -0
  88. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.page.js +0 -17
  89. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.js +18 -115
  90. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.data.js +11 -13
  91. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.js +38 -43
  92. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.page.js +47 -10
  93. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.stories.js +10 -43
  94. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.js +82 -367
  95. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.data.js +128 -42
  96. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.js +75 -121
  97. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.page.js +46 -16
  98. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +18 -14
  99. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.js +103 -0
  100. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.js +53 -0
  101. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.page.js +81 -0
  102. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.stories.js +34 -0
  103. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.js +125 -0
  104. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.data.js +63 -0
  105. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.js +54 -0
  106. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.page.js +88 -0
  107. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.stories.js +35 -0
  108. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.js +381 -0
  109. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.data.js +69 -0
  110. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.js +332 -0
  111. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.page.js +247 -0
  112. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.stories.js +72 -0
  113. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +19 -19
  114. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.data.js +1717 -1729
  115. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +11 -3
  116. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.page.js +4 -1
  117. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +11 -1784
  118. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.js +41 -140
  119. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.data.js +15 -3
  120. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.js +22 -49
  121. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.page.js +19 -11
  122. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.stories.js +9 -3
  123. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +5 -6
  124. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.data.js +1717 -1728
  125. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +11 -3
  126. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.page.js +4 -1
  127. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.stories.js +11 -1784
  128. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +362 -835
  129. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.data.js +427 -418
  130. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.js +134 -175
  131. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.page.js +108 -11
  132. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +17 -25
  133. package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +4 -2
  134. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.js +3 -3
  135. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.js +1 -1
  136. package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.js +32 -7
  137. package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.data.js +0 -3
  138. package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.js +145 -1
  139. package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.page.js +52 -1
  140. package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.stories.js +15 -0
  141. package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.js +340 -0
  142. package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.data.js +56 -0
  143. package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.js +223 -0
  144. package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.page.js +235 -0
  145. package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.stories.js +55 -0
  146. package/src/react-extension/components/Administration/ManageSsoSettings/SsoProviders.data.js +34 -0
  147. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.js +12 -3
  148. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.test.js +27 -0
  149. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.page.js +8 -0
  150. package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.js +197 -0
  151. package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.data.js +37 -0
  152. package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.js +187 -0
  153. package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.page.js +120 -0
  154. package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.stories.js +31 -0
  155. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +9 -5
  156. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.data.js +4 -0
  157. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.js +11 -42
  158. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.page.js +1 -0
  159. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +9 -5
  160. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.data.js +4 -0
  161. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.js +16 -2
  162. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.page.js +17 -1
  163. package/src/react-extension/components/AuthenticationLogin/Login/Login.js +159 -61
  164. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.data.js +14 -11
  165. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.js +79 -0
  166. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.page.js +16 -0
  167. package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxMain.js +2 -0
  168. package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +4 -0
  169. package/src/react-extension/components/Common/Error/ApiError/ApiError.js +119 -0
  170. package/src/react-extension/components/Common/Error/ApiError/ApiError.test.js +43 -0
  171. package/src/react-extension/components/Common/Error/ApiError/ApiError.test.page.js +108 -0
  172. package/src/react-extension/components/Common/Error/ApiError/ApiError.test.stories.js +39 -0
  173. package/src/react-extension/components/Common/Inputs/Autocomplete/Autocomplete.test.js +12 -0
  174. package/src/react-extension/components/Common/Inputs/Autocomplete/AutocompleteItem.js +2 -2
  175. package/src/react-extension/components/Common/Legacy/HandleLegacyAppjs.js +1 -1
  176. package/src/react-extension/components/Common/Navigation/Header/Logo.js +13 -1
  177. package/src/react-extension/components/Resource/CreateResource/CreateResource.js +103 -30
  178. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.js +44 -10
  179. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.page.js +35 -7
  180. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +3 -3
  181. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesListContextualMenu.js +6 -5
  182. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.js +5 -4
  183. package/src/react-extension/components/Resource/EditResource/EditResource.js +95 -23
  184. package/src/react-extension/components/Resource/EditResource/EditResource.test.js +45 -13
  185. package/src/react-extension/components/Resource/EditResource/EditResource.test.page.js +35 -2
  186. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetails.js +2 -1
  187. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.js +3 -2
  188. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +23 -2
  189. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.js +8 -0
  190. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.page.js +26 -2
  191. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +22 -1
  192. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.js +8 -0
  193. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.page.js +25 -2
  194. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetails.js +2 -1
  195. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.js +2 -1
  196. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +14 -1
  197. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.js +8 -0
  198. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.page.js +12 -0
  199. package/src/react-extension/components/User/CreateUser/CreateUser.js +42 -3
  200. package/src/react-extension/components/User/CreateUser/CreateUser.test.js +16 -0
  201. package/src/react-extension/components/User/CreateUser/CreateUser.test.page.js +26 -0
  202. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +2 -1
  203. package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.js +5 -5
  204. package/src/react-extension/components/User/EditUser/EditUser.js +29 -2
  205. package/src/react-extension/components/User/EditUser/EditUser.test.js +12 -0
  206. package/src/react-extension/components/User/EditUser/EditUser.test.page.js +26 -0
  207. package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.js +2 -1
  208. package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.test.data.js +1332 -1331
  209. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.js +2 -1
  210. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +19 -1
  211. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.js +9 -0
  212. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.page.js +12 -0
  213. package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.js +2 -1
  214. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +16 -1
  215. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.js +8 -0
  216. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.page.js +26 -1
  217. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +1 -1
  218. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +6 -4
  219. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.data.js +4 -1
  220. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +21 -11
  221. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.page.js +10 -1
  222. package/src/react-extension/contexts/AdminSmtpSettingsContext.js +2 -0
  223. package/src/react-extension/contexts/AdminSmtpSettingsContext.test.data.js +13 -0
  224. package/src/react-extension/contexts/AdminSmtpSettingsContext.test.js +3 -1
  225. package/src/react-extension/contexts/AdminSsoContext.js +558 -0
  226. package/src/react-extension/contexts/AdminSsoContext.test.data.js +51 -0
  227. package/src/react-extension/contexts/Administration/AdministrationInternationalizationContext/AdministrationInternationalizationContext.js +194 -0
  228. package/src/react-extension/contexts/Administration/AdministrationInternationalizationContext/AdministrationInternationalizationContext.test.js +111 -0
  229. package/src/react-extension/contexts/Administration/AdministrationMfa/AdministrationMfaContext.js +265 -0
  230. package/src/react-extension/contexts/Administration/AdministrationMfa/AdministrationMfaContext.test.js +178 -0
  231. package/src/react-extension/contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext.js +453 -0
  232. package/src/react-extension/contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext.test.js +218 -0
  233. package/src/react-extension/contexts/Administration/AdministrationSubscription/AdministrationSubscription.js +168 -0
  234. package/src/react-extension/contexts/Administration/AdministrationSubscription/AdministrationSubscription.test.js +73 -0
  235. package/src/react-extension/contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext.js +353 -0
  236. package/src/react-extension/contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext.test.js +220 -0
  237. package/src/react-extension/contexts/AdministrationWorkspaceContext.js +17 -178
  238. package/src/react-extension/contexts/AdministrationWorkspaceContext.test.js +0 -26
  239. package/src/react-extension/contexts/ApiAppContext.test.data.js +4 -2
  240. package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.js +54 -4
  241. package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.data.js +10 -1
  242. package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.js +92 -14
  243. package/src/react-extension/contexts/Authentication/AuthenticationSetupContext.js +1 -0
  244. package/src/react-extension/contexts/NavigationContext.js +34 -0
  245. package/src/react-extension/contexts/SsoContext.js +151 -0
  246. package/src/react-extension/contexts/SsoContext.test.data.js +36 -0
  247. package/src/react-extension/contexts/SsoContext.test.js +104 -0
  248. package/src/react-extension/lib/Domain/DomainUtil.js +70 -0
  249. package/src/react-extension/lib/Domain/DomainUtil.test.js +129 -0
  250. package/src/react-extension/lib/Domain/Domains.js +6113 -0
  251. package/src/react-extension/lib/Error/InputValidator.js +24 -0
  252. package/src/react-extension/lib/Map/DynamicRef.js +49 -0
  253. package/src/react-extension/lib/Map/DynamicRef.test.js +56 -0
  254. package/src/react-extension/lib/Map/MapObject.js +48 -0
  255. package/src/react-extension/lib/Map/MapObject.test.js +43 -0
  256. package/src/react-quickaccess/ExtQuickAccess.js +7 -4
  257. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.js +3 -1
  258. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.data.js +4 -0
  259. package/src/react-quickaccess/components/LoginPage/LoginPage.js +115 -4
  260. package/src/react-quickaccess/components/LoginPage/LoginPage.test.data.js +10 -0
  261. package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +30 -3
  262. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +33 -1
  263. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.data.js +25 -0
  264. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.js +60 -0
  265. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.page.js +60 -0
  266. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +33 -1
  267. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.js +36 -7
  268. package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.js +3 -2
  269. package/src/react-quickaccess/contexts/SsoContext.js +150 -0
  270. package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +5 -0
  271. package/src/shared/constants/inputs.const.js +30 -0
  272. package/src/shared/lib/Browser/clipBoard.js +45 -0
  273. package/src/shared/lib/Browser/clipBoard.test.js +59 -0
  274. package/src/shared/models/Mfa/Duo.js +36 -0
  275. package/src/shared/models/Mfa/Duo.test.js +59 -0
  276. package/src/shared/models/Mfa/MfaDTO.js +51 -0
  277. package/src/shared/models/Mfa/MfaDTO.test.js +48 -0
  278. package/src/shared/models/Mfa/MfaEnumeration.js +17 -0
  279. package/src/shared/models/Mfa/MfaModel.js +48 -0
  280. package/src/shared/models/Mfa/MfaModel.test.js +37 -0
  281. package/src/shared/models/Mfa/Yubikey.js +35 -0
  282. package/src/shared/models/Mfa/Yubikey.test.js +47 -0
  283. package/src/shared/models/selfRegistration/SelfRegistrationDomainsViewModel.js +55 -0
  284. package/src/shared/models/selfRegistration/SelfRegistrationDomainsViewModel.test.js +37 -0
  285. package/src/shared/models/selfRegistration/SelfRegistrationDto.js +42 -0
  286. package/src/shared/models/selfRegistration/SelfRegistrationDto.test.js +48 -0
  287. package/src/shared/models/selfRegistration/SelfRegistrationEnumeration.js +17 -0
  288. package/src/shared/models/subscription/SubscriptionDto.js +34 -0
  289. package/src/shared/models/subscription/SubscriptionDto.test.js +31 -0
  290. package/src/shared/models/subscription/SubscriptionModel.js +33 -0
  291. package/src/shared/models/subscription/SubscriptionModel.test.js +48 -0
  292. package/src/shared/models/user/UserModel.js +37 -0
  293. package/src/shared/models/userDirectory/UserDirectoryDTO.js +57 -0
  294. package/src/shared/models/userDirectory/UserDirectoryDTO.test.js +40 -0
  295. package/src/shared/models/userDirectory/UserDirectoryEnum.js +22 -0
  296. package/src/shared/models/userDirectory/UserDirectoryModel.js +64 -0
  297. package/src/shared/models/userDirectory/UserDirectoryModel.test.js +37 -0
  298. package/src/shared/services/actions/subscription/SubscriptionActionService.js +69 -0
  299. package/src/shared/services/actions/subscription/SubscriptionActionService.test.js +73 -0
  300. package/src/shared/services/api/Internationalisation/InternationalisationService.js +46 -0
  301. package/src/shared/services/api/Mfa/MfaService.js +54 -0
  302. package/src/shared/services/{accountRecovery → api/accountRecovery}/ApiAppAccountRecoveryUserService.js +2 -2
  303. package/src/shared/services/{accountRecovery → api/accountRecovery}/ExtAppAccountRecoveryUserService.js +0 -0
  304. package/src/shared/services/api/secrets/pownedService.js +64 -0
  305. package/src/shared/services/api/secrets/pownedService.test.js +63 -0
  306. package/src/shared/services/api/selfRegistration/selfRegistrationService.js +64 -0
  307. package/src/shared/services/api/user/UserService.js +45 -0
  308. package/src/shared/services/api/userDirectory/UserDirectoryService.js +108 -0
  309. package/src/shared/services/forms/Mfa/MfaFormService.js +195 -0
  310. package/src/shared/services/forms/Mfa/MfaFormService.test.js +341 -0
  311. package/src/shared/services/forms/selfRegistration/SelfRegistrationFormService.js +92 -0
  312. package/src/shared/services/forms/selfRegistration/SelfRegistrationFormService.test.js +101 -0
  313. package/src/shared/services/forms/userDirectory/UserDirectoryFormService.js +118 -0
  314. package/src/shared/services/forms/userDirectory/UserDirectoryFormService.test.js +128 -0
  315. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.js +0 -205
  316. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.data.js +0 -37
  317. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.js +0 -197
  318. 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;