@rockcarver/frodo-cli 0.10.4 → 0.11.1-0

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 (215) hide show
  1. package/.github/README.md +44 -104
  2. package/.github/workflows/pipeline.yml +9 -1
  3. package/CHANGELOG.md +5 -1
  4. package/README.md +3 -3
  5. package/package.json +8 -8
  6. package/src/app.js +5 -4
  7. package/src/cli/_template/cmd-delete.js +9 -8
  8. package/src/cli/_template/cmd-describe.js +9 -8
  9. package/src/cli/_template/cmd-export.js +9 -8
  10. package/src/cli/_template/cmd-import.js +9 -8
  11. package/src/cli/_template/cmd-list.js +9 -8
  12. package/src/cli/_template/cmd-sub1-delete.js +9 -8
  13. package/src/cli/_template/cmd-sub1-describe.js +9 -8
  14. package/src/cli/_template/cmd-sub1-export.js +9 -8
  15. package/src/cli/_template/cmd-sub1-import.js +9 -8
  16. package/src/cli/_template/cmd-sub1-list.js +9 -8
  17. package/src/cli/_template/cmd-sub2-delete.js +9 -8
  18. package/src/cli/_template/cmd-sub2-describe.js +9 -8
  19. package/src/cli/_template/cmd-sub2-export.js +9 -8
  20. package/src/cli/_template/cmd-sub2-import.js +9 -8
  21. package/src/cli/_template/cmd-sub2-list.js +9 -8
  22. package/src/cli/admin/admin-add-autoid-static-user-mapping.js +12 -12
  23. package/src/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +15 -18
  24. package/src/cli/admin/admin-get-access-token.js +12 -12
  25. package/src/cli/admin/admin-grant-oauth2-client-admin-privileges.js +13 -13
  26. package/src/cli/admin/admin-hide-generic-extension-attributes.js +13 -13
  27. package/src/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +13 -13
  28. package/src/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +14 -13
  29. package/src/cli/admin/admin-list-static-user-mappings.js +12 -12
  30. package/src/cli/admin/admin-remove-static-user-mapping.js +12 -12
  31. package/src/cli/admin/admin-repair-org-model.js +13 -13
  32. package/src/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +13 -13
  33. package/src/cli/admin/admin-show-generic-extension-attributes.js +13 -13
  34. package/src/cli/app/app-delete.js +9 -8
  35. package/src/cli/app/app-describe.js +9 -8
  36. package/src/cli/app/app-export.js +15 -15
  37. package/src/cli/app/app-import.js +11 -11
  38. package/src/cli/app/app-list.js +11 -12
  39. package/src/cli/conn/conn-add.js +11 -11
  40. package/src/cli/conn/conn-delete.js +3 -1
  41. package/src/cli/conn/conn-describe.js +3 -1
  42. package/src/cli/conn/conn-list.js +3 -4
  43. package/src/cli/email/email-template-export.js +16 -16
  44. package/src/cli/email/email-template-import.js +16 -16
  45. package/src/cli/email/email-template-list.js +11 -11
  46. package/src/cli/esv/esv-apply.js +12 -12
  47. package/src/cli/esv/esv-secret-create.js +11 -11
  48. package/src/cli/esv/esv-secret-delete.js +13 -13
  49. package/src/cli/esv/esv-secret-describe.js +11 -11
  50. package/src/cli/esv/esv-secret-export.js +9 -8
  51. package/src/cli/esv/esv-secret-import.js +9 -8
  52. package/src/cli/esv/esv-secret-list.js +11 -11
  53. package/src/cli/esv/esv-secret-set.js +11 -11
  54. package/src/cli/esv/esv-secret-version-activate.js +12 -12
  55. package/src/cli/esv/esv-secret-version-create.js +11 -11
  56. package/src/cli/esv/esv-secret-version-deactivate.js +12 -12
  57. package/src/cli/esv/esv-secret-version-delete.js +13 -13
  58. package/src/cli/esv/esv-secret-version-list.js +11 -11
  59. package/src/cli/esv/esv-variable-create.js +11 -11
  60. package/src/cli/esv/esv-variable-delete.js +13 -16
  61. package/src/cli/esv/esv-variable-describe.js +11 -11
  62. package/src/cli/esv/esv-variable-export.js +9 -8
  63. package/src/cli/esv/esv-variable-import.js +9 -8
  64. package/src/cli/esv/esv-variable-list.js +11 -11
  65. package/src/cli/esv/esv-variable-set.js +13 -16
  66. package/src/cli/idm/idm-count.js +11 -11
  67. package/src/cli/idm/idm-export.js +16 -16
  68. package/src/cli/idm/idm-list.js +11 -11
  69. package/src/cli/idp/idp-export.js +15 -19
  70. package/src/cli/idp/idp-import.js +18 -18
  71. package/src/cli/idp/idp-list.js +12 -12
  72. package/src/cli/info/info.js +23 -19
  73. package/src/cli/journey/{journey-delete.e2e.test.js → journey-delete.e2e.test_.js} +0 -0
  74. package/src/cli/journey/journey-delete.js +14 -14
  75. package/src/cli/journey/journey-describe.js +26 -35
  76. package/src/cli/journey/journey-export.js +15 -18
  77. package/src/cli/journey/journey-import.js +17 -17
  78. package/src/cli/journey/{journey-list.e2e.test.js → journey-list.e2e.test_.js} +1 -0
  79. package/src/cli/journey/journey-list.js +12 -12
  80. package/src/cli/journey/journey-prune.js +12 -12
  81. package/src/cli/logging/logs-list.js +33 -28
  82. package/src/cli/logging/logs-tail.js +26 -22
  83. package/src/cli/realm/realm-add-custom-domain.js +13 -13
  84. package/src/cli/realm/realm-describe.js +14 -14
  85. package/src/cli/realm/realm-list.js +11 -11
  86. package/src/cli/realm/realm-remove-custom-domain.js +16 -13
  87. package/src/cli/saml/saml-cot-export.js +16 -16
  88. package/src/cli/saml/saml-cot-import.js +18 -18
  89. package/src/cli/saml/saml-cot-list.js +12 -12
  90. package/src/cli/saml/saml-describe.js +12 -12
  91. package/src/cli/saml/saml-export.js +16 -19
  92. package/src/cli/saml/saml-import.js +19 -18
  93. package/src/cli/saml/saml-list.js +12 -12
  94. package/src/cli/saml/saml-metadata-export.js +15 -19
  95. package/src/cli/script/script-delete.js +9 -8
  96. package/src/cli/script/script-describe.js +9 -8
  97. package/src/cli/script/script-export.js +18 -20
  98. package/src/cli/script/script-import.js +13 -12
  99. package/src/cli/script/script-list.js +12 -12
  100. package/src/cli/theme/{theme-delete.e2e.test.js → theme-delete.e2e.test_.js} +0 -0
  101. package/src/cli/theme/theme-delete.js +17 -21
  102. package/src/cli/theme/theme-export.js +19 -18
  103. package/src/cli/theme/theme-import.js +21 -20
  104. package/src/cli/theme/{theme-list.e2e.test.js → theme-list.e2e.test_.js} +0 -0
  105. package/src/cli/theme/theme-list.js +12 -12
  106. package/test/client_cli/en/conn-add.test.js +37 -0
  107. package/test/client_cli/en/conn-delete.test.js +37 -0
  108. package/test/client_cli/en/conn-list.test.js +37 -0
  109. package/test/client_cli/en/conn.test.js +65 -0
  110. package/test/client_cli/en/email-template-import.test.js +156 -0
  111. package/test/client_cli/en/email-template.test.js +79 -0
  112. package/test/client_cli/en/email-templates-export.test.js +208 -0
  113. package/test/client_cli/en/email-templates-list.test.js +139 -0
  114. package/test/client_cli/en/idm-count.test.js +131 -0
  115. package/test/client_cli/en/idm-export.test.js +149 -0
  116. package/test/client_cli/en/{idm_import.test_.js → idm-import.test_.js} +59 -61
  117. package/test/client_cli/en/idm-list.test.js +109 -0
  118. package/test/client_cli/en/idm.test.js +55 -84
  119. package/test/client_cli/en/info.test.js +85 -74
  120. package/test/client_cli/en/journey-describe.test.js +194 -0
  121. package/test/client_cli/en/journey-export.test.js +231 -0
  122. package/test/client_cli/en/journey-import.test.js +212 -0
  123. package/test/client_cli/en/journey-list.test.js +173 -0
  124. package/test/client_cli/en/{journey_prune.test.js → journey-prune.test.js} +102 -91
  125. package/test/client_cli/en/journey.test.js +76 -92
  126. package/test/client_cli/en/logs-list.test.js +81 -0
  127. package/test/client_cli/en/logs-tail.test.js +130 -0
  128. package/test/client_cli/en/logs.test.js +44 -58
  129. package/test/client_cli/en/root.test.js +61 -59
  130. package/test/client_cli/en/script-export.test.js +230 -0
  131. package/test/client_cli/en/script-import.test.js +176 -0
  132. package/test/client_cli/en/script-list.test.js +159 -0
  133. package/test/client_cli/en/script.test.js +52 -50
  134. package/test/client_cli/utils/utils.js +48 -17
  135. package/src/api/AuthenticateApi.js +0 -33
  136. package/src/api/BaseApi.js +0 -242
  137. package/src/api/CirclesOfTrustApi.js +0 -87
  138. package/src/api/EmailTemplateApi.js +0 -37
  139. package/src/api/IdmConfigApi.js +0 -88
  140. package/src/api/LogApi.js +0 -45
  141. package/src/api/ManagedObjectApi.js +0 -62
  142. package/src/api/OAuth2ClientApi.js +0 -69
  143. package/src/api/OAuth2OIDCApi.js +0 -73
  144. package/src/api/OAuth2ProviderApi.js +0 -32
  145. package/src/api/RealmApi.js +0 -99
  146. package/src/api/Saml2Api.js +0 -176
  147. package/src/api/ScriptApi.js +0 -84
  148. package/src/api/SecretsApi.js +0 -151
  149. package/src/api/ServerInfoApi.js +0 -41
  150. package/src/api/SocialIdentityProvidersApi.js +0 -114
  151. package/src/api/StartupApi.js +0 -45
  152. package/src/api/ThemeApi.js +0 -181
  153. package/src/api/TreeApi.js +0 -207
  154. package/src/api/VariablesApi.js +0 -104
  155. package/src/api/utils/ApiUtils.js +0 -77
  156. package/src/api/utils/Base64.js +0 -62
  157. package/src/ops/AdminOps.js +0 -901
  158. package/src/ops/AuthenticateOps.js +0 -342
  159. package/src/ops/CirclesOfTrustOps.js +0 -350
  160. package/src/ops/ConnectionProfileOps.js +0 -254
  161. package/src/ops/EmailTemplateOps.js +0 -326
  162. package/src/ops/IdmOps.js +0 -227
  163. package/src/ops/IdpOps.js +0 -342
  164. package/src/ops/JourneyOps.js +0 -2026
  165. package/src/ops/LogOps.js +0 -357
  166. package/src/ops/ManagedObjectOps.js +0 -34
  167. package/src/ops/OAuth2ClientOps.js +0 -151
  168. package/src/ops/OrganizationOps.js +0 -85
  169. package/src/ops/RealmOps.js +0 -139
  170. package/src/ops/SamlOps.js +0 -541
  171. package/src/ops/ScriptOps.js +0 -211
  172. package/src/ops/SecretsOps.js +0 -288
  173. package/src/ops/StartupOps.js +0 -114
  174. package/src/ops/ThemeOps.js +0 -379
  175. package/src/ops/VariablesOps.js +0 -185
  176. package/src/ops/templates/OAuth2ClientTemplate.json +0 -270
  177. package/src/ops/templates/OrgModelUserAttributesTemplate.json +0 -149
  178. package/src/ops/templates/cloud/GenericExtensionAttributesTemplate.json +0 -392
  179. package/src/ops/templates/cloud/managed.json +0 -4119
  180. package/src/ops/utils/Console.js +0 -434
  181. package/src/ops/utils/DataProtection.js +0 -92
  182. package/src/ops/utils/ExportImportUtils.js +0 -146
  183. package/src/ops/utils/OpsUtils.js +0 -76
  184. package/src/ops/utils/Wordwrap.js +0 -11
  185. package/src/storage/SessionStorage.js +0 -45
  186. package/test/client_cli/en/connections.test.js +0 -62
  187. package/test/client_cli/en/connections_add.test.js +0 -34
  188. package/test/client_cli/en/connections_delete.test.js +0 -34
  189. package/test/client_cli/en/connections_list.test.js +0 -34
  190. package/test/client_cli/en/email_templates.test.js +0 -77
  191. package/test/client_cli/en/email_templates_export.test.js +0 -196
  192. package/test/client_cli/en/email_templates_import.test.js +0 -145
  193. package/test/client_cli/en/email_templates_list.test.js +0 -130
  194. package/test/client_cli/en/idm_count.test.js +0 -121
  195. package/test/client_cli/en/idm_export.test.js +0 -136
  196. package/test/client_cli/en/idm_exportAll.test.js +0 -156
  197. package/test/client_cli/en/idm_exportAllRaw.test.js +0 -120
  198. package/test/client_cli/en/idm_importAll.test_.js +0 -103
  199. package/test/client_cli/en/idm_list.test.js +0 -103
  200. package/test/client_cli/en/journey_describe.test.js +0 -196
  201. package/test/client_cli/en/journey_export.test.js +0 -213
  202. package/test/client_cli/en/journey_import.test.js +0 -195
  203. package/test/client_cli/en/journey_importAll.test.js +0 -180
  204. package/test/client_cli/en/journey_list.test.js +0 -162
  205. package/test/client_cli/en/logs_list.test.js +0 -83
  206. package/test/client_cli/en/logs_tail.test.js +0 -118
  207. package/test/client_cli/en/script_export.test.js +0 -213
  208. package/test/client_cli/en/script_import.test.js +0 -163
  209. package/test/client_cli/en/script_list.test.js +0 -148
  210. package/test/e2e/setup.js +0 -98
  211. package/test/global/setup.js +0 -65
  212. package/test/lib_api/unit_tests/ApiUtils.test.js +0 -186
  213. package/test/lib_api/unit_tests/Base64URL.test.js +0 -22
  214. package/test/lib_api/unit_tests/DataProtection.test.js +0 -25
  215. package/test/lib_api/unit_tests/ExportImportUtils.test.js +0 -121
@@ -1,111 +1,82 @@
1
1
  import cp from 'child_process';
2
2
  import { promisify } from 'util';
3
- import { crudeMultilineTakeUntil, collapseWhitespace } from '../utils/utils';
3
+ import {
4
+ crudeMultilineTakeUntil,
5
+ collapseWhitespace,
6
+ node14Compatibility,
7
+ } from '../utils/utils.js';
8
+
9
+ node14Compatibility();
4
10
 
5
11
  const exec = promisify(cp.exec);
6
12
  const CMD = 'frodo idm --help';
7
13
  const { stdout } = await exec(CMD);
8
14
 
9
15
  test("CLI help interface for 'idm' Usage should be expected english", async () => {
10
- // Arrange
11
- const expected = `
16
+ // Arrange
17
+ const expected = `
12
18
  Usage: frodo idm [options] [command]
13
19
  `.trim();
14
- // Act
15
- const testLine = stdout
16
- .split(/\n/)
17
- .find(line => line.trim().startsWith('Usage:'))
18
- .trim();
19
- // Assert
20
- expect(testLine).toBe(expected);
20
+ // Act
21
+ const testLine = stdout
22
+ .split(/\n/)
23
+ .find((line) => line.trim().startsWith('Usage:'))
24
+ .trim();
25
+ // Assert
26
+ expect(testLine).toBe(expected);
21
27
  });
22
28
 
23
-
24
29
  test("CLI help interface 'idm' description at line 2 should be expected english", async () => {
25
- // Arrange
26
- const expected = `
30
+ // Arrange
31
+ const expected = `
27
32
  Manage IDM configuration.
28
33
  `.trim();
29
- // Act
30
- const testLine = stdout
31
- .split(/\n/)
32
- .map(line => line.trim())
33
- .at(2)
34
- // Assert
35
- expect(testLine).toBe(expected);
34
+ // Act
35
+ const testLine = stdout
36
+ .split(/\n/)
37
+ .map((line) => line.trim())
38
+ .at(2);
39
+ // Assert
40
+ expect(testLine).toBe(expected);
36
41
  });
37
42
 
38
43
  test("CLI help interface 'idm commands list' description should be expected english", async () => {
39
- // Arrange
40
- const expected = `
41
- list [options] <host> [user] [password] List all IDM configuration objects.
44
+ // Arrange
45
+ const expected = `
46
+ list List all IDM configuration objects.
42
47
  `.trim();
43
- // Act
44
- const testLine = stdout
45
- .split(/\n/)
46
- .find(line => line.trim().startsWith('list'))
47
- .trim();
48
- // Assert
49
- expect(testLine).toBe(expected);
48
+ // Act
49
+ const testLine = stdout
50
+ .split(/\n/)
51
+ .find((line) => line.trim().startsWith('list'))
52
+ .trim();
53
+ // Assert
54
+ expect(testLine).toBe(expected);
50
55
  });
51
56
 
52
57
  test("CLI help interface 'idm commands export' description should be expected english", async () => {
53
- // Arrange
54
- const expected = `
55
- export [options] <host> [user] [password] Export an IDM configuration object.
58
+ // Arrange
59
+ const expected = `
60
+ export Export IDM configuration objects.
56
61
  `.trim();
57
- // Act
58
- const testLine = stdout
59
- .split(/\n/)
60
- .find(line => line.trim().startsWith('export'))
61
- .trim();
62
- // Assert
63
- expect(testLine).toBe(expected);
64
- });
65
-
66
- test("CLI help interface 'idm commands exportAllRaw' description should be expected english", async () => {
67
- // Arrange
68
- const expected = collapseWhitespace(`
69
- exportAllRaw [options] <host> [user] [password] Export all IDM configuration objects into
70
- separate JSON files in a directory
71
- specified by <directory>
72
- `).trim();
73
- // Act
74
- const testLine = collapseWhitespace(crudeMultilineTakeUntil(
75
- stdout,
76
- ' exportAllRaw [options] <host> [user] [password] ',
77
- ' exportAll [options] <host> [user] [password] '
78
- ));
79
- // Assert
80
- expect(testLine).toBe(expected);
81
- });
82
-
83
- test("CLI help interface 'idm commands exportAll' description should be expected english", async () => {
84
- // Arrange
85
- const expected = `
86
- exportAll [options] <host> [user] [password] Export all IDM configuration objects.
87
- `.trim();
88
- // Act
89
- const testLine = stdout
90
- .split(/\n/)
91
- .find(line => line.trim().startsWith('exportAll [options] <host> [user] [password] '))
92
- .trim();
93
- // Assert
94
- expect(testLine).toBe(expected);
62
+ // Act
63
+ const testLine = stdout
64
+ .split(/\n/)
65
+ .find((line) => line.trim().startsWith('export'))
66
+ .trim();
67
+ // Assert
68
+ expect(testLine).toBe(expected);
95
69
  });
96
70
 
97
71
  test("CLI help interface 'idm commands count' description should be expected english multiline", async () => {
98
- // Arrange
99
- const expected = collapseWhitespace(`
100
- count [options] <host> [user] [password] Count number of managed objects of a given
101
- type.
72
+ // Arrange
73
+ const expected = collapseWhitespace(`
74
+ count Count number of managed objects of a given type.
102
75
  `).trim();
103
- // Act
104
- const testLine = collapseWhitespace(crudeMultilineTakeUntil(
105
- stdout,
106
- ' count [options] <host> [user] [password] ',
107
- ' help [command] '
108
- ));
109
- // Assert
110
- expect(testLine).toBe(expected);
111
- });
76
+ // Act
77
+ const testLine = collapseWhitespace(
78
+ crudeMultilineTakeUntil(stdout, ' count ', ' help [command] ')
79
+ );
80
+ // Assert
81
+ expect(testLine).toBe(expected);
82
+ });
@@ -1,92 +1,100 @@
1
1
  import cp from 'child_process';
2
2
  import { promisify } from 'util';
3
- import { crudeMultilineTakeUntil, collapseWhitespace } from '../utils/utils';
3
+ import {
4
+ crudeMultilineTakeUntil,
5
+ collapseWhitespace,
6
+ node14Compatibility,
7
+ } from '../utils/utils.js';
8
+
9
+ node14Compatibility();
4
10
 
5
11
  const exec = promisify(cp.exec);
6
12
  const CMD = 'frodo info --help';
7
13
  const { stdout } = await exec(CMD);
8
14
 
9
15
  test("CLI help interface for 'info' Usage should be expected english", async () => {
10
- // Arrange
11
- const expected = `
16
+ // Arrange
17
+ const expected = `
12
18
  Usage: frodo info [options] <host> [user] [password]
13
19
  `.trim();
14
- // Act
15
- const testLine = stdout
16
- .split(/\n/)
17
- .find(line => line.trim().startsWith('Usage:'))
18
- .trim();
19
- // Assert
20
- expect(testLine).toBe(expected);
20
+ // Act
21
+ const testLine = stdout
22
+ .split(/\n/)
23
+ .find((line) => line.trim().startsWith('Usage:'))
24
+ .trim();
25
+ // Assert
26
+ expect(testLine).toBe(expected);
21
27
  });
22
28
 
23
-
24
29
  test("CLI help interface 'info' description at line 2 should be expected english", async () => {
25
- // Arrange
26
- const expected = `
30
+ // Arrange
31
+ const expected = `
27
32
  Print versions and tokens.
28
33
  `.trim();
29
- // Act
30
- const testLine = stdout
31
- .split(/\n/)
32
- .map(line => line.trim())
33
- .at(2)
34
- // Assert
35
- expect(testLine).toBe(expected);
34
+ // Act
35
+ const testLine = stdout
36
+ .split(/\n/)
37
+ .map((line) => line.trim())
38
+ .at(2);
39
+ // Assert
40
+ expect(testLine).toBe(expected);
36
41
  });
37
42
 
38
43
  test("CLI help interface 'info argument host' description should be expected english multiline", async () => {
39
- // Arrange
40
- const expected = collapseWhitespace(`
44
+ // Arrange
45
+ const expected = collapseWhitespace(`
41
46
  host Access Management base URL, e.g.:
42
47
  https://cdk.iam.example.com/am. To use a connection profile,
43
48
  just specify a unique substring.
44
49
  `);
45
- // Act
46
- const testLine = collapseWhitespace(crudeMultilineTakeUntil(
47
- stdout,
48
- ' host ',
49
- ' user '
50
- ));
50
+ // Act
51
+ const testLine = collapseWhitespace(
52
+ crudeMultilineTakeUntil(
53
+ stdout,
54
+ ' host ',
55
+ ' user '
56
+ )
57
+ );
51
58
 
52
- // Assert
53
- expect(testLine).toBe(expected);
59
+ // Assert
60
+ expect(testLine).toBe(expected);
54
61
  });
55
62
 
56
-
57
63
  test("CLI help interface 'info argument user' description should be expected english multiline", async () => {
58
- // Arrange
59
- const expected = collapseWhitespace(`
64
+ // Arrange
65
+ const expected = collapseWhitespace(`
60
66
  user Username to login with. Must be an admin user with appropriate
61
67
  rights to manage authentication journeys/trees.
62
68
  `);
63
- // Act
64
- const testLine = collapseWhitespace(crudeMultilineTakeUntil(
65
- stdout,
66
- ' user ',
67
- ' password '
68
- ));;
69
- // Assert
70
- expect(testLine).toBe(expected);
69
+ // Act
70
+ const testLine = collapseWhitespace(
71
+ crudeMultilineTakeUntil(
72
+ stdout,
73
+ ' user ',
74
+ ' password '
75
+ )
76
+ );
77
+ // Assert
78
+ expect(testLine).toBe(expected);
71
79
  });
72
80
 
73
81
  test("CLI help interface 'info argument password' description should be expected english", async () => {
74
- // Arrange
75
- const expected = `
76
- password Password.
82
+ // Arrange
83
+ const expected = `
84
+ password Password.
77
85
  `.trim();
78
- // Act
79
- const testLine = stdout
80
- .split(/\n/)
81
- .find(line => line.trim().startsWith('password'))
82
- .trim();
83
- // Assert
84
- expect(testLine).toBe(expected);
86
+ // Act
87
+ const testLine = stdout
88
+ .split(/\n/)
89
+ .find((line) => line.trim().startsWith('password'))
90
+ .trim();
91
+ // Assert
92
+ expect(testLine).toBe(expected);
85
93
  });
86
94
 
87
95
  test("CLI help interface 'info Options -m, --type' description should be expected english", async () => {
88
- // Arrange
89
- const expected = collapseWhitespace(`
96
+ // Arrange
97
+ const expected = collapseWhitespace(`
90
98
  -m, --type <type> Override auto-detected deployment type. Valid values for type:
91
99
  classic: A classic Access Management-only deployment with
92
100
  custom layout and configuration.
@@ -98,28 +106,31 @@ test("CLI help interface 'info Options -m, --type' description should be expecte
98
106
  how to walk through the tenant admin login flow of Identity
99
107
  Cloud and handle MFA (choices: "classic", "cloud", "forgeops")
100
108
  `);
101
- // Act
102
- const testLine = collapseWhitespace(crudeMultilineTakeUntil(
103
- stdout,
104
- ' -m, --type <type> ',
105
- ' -k, --insecure '
106
- ));;
107
- // Assert
108
- expect(testLine).toBe(expected);
109
+ // Act
110
+ const testLine = collapseWhitespace(
111
+ crudeMultilineTakeUntil(
112
+ stdout,
113
+ ' -m, --type <type> ',
114
+ ' -k, --insecure '
115
+ )
116
+ );
117
+ // Assert
118
+ expect(testLine).toBe(expected);
109
119
  });
110
120
 
111
121
  test("CLI help interface 'info Options -k, --insecure' description should be expected english", async () => {
112
- // Arrange
113
- const expected = collapseWhitespace(`
114
- -k, --insecure Allow insecure connections when using SSL/TLS (default: Don't
115
- allow insecure connections)
122
+ // Arrange
123
+ const expected = collapseWhitespace(`
124
+ -k, --insecure Allow insecure connections when using SSL/TLS. Has no effect when using a network proxy for https (HTTPS_PROXY=http://<host>:<port>), in that case the proxy must provide this capability. (default: Don't allow insecure connections) -s, --scriptFriendly Send output of operation to STDOUT in a script-friendly format (JSON) which can be piped to other commands. User messages/warnings are output to STDERR, and are not piped. For example, to only get bearer token: <<< frodo info my-tenant -s 2>/dev/null | jq -r .bearerToken >>> (default: Output as plain text)
116
125
  `);
117
- // Act
118
- const testLine = collapseWhitespace(crudeMultilineTakeUntil(
119
- stdout,
120
- ' -k, --insecure ',
121
- ' -h, --help '
122
- ));;
123
- // Assert
124
- expect(testLine).toBe(expected);
125
- });
126
+ // Act
127
+ const testLine = collapseWhitespace(
128
+ crudeMultilineTakeUntil(
129
+ stdout,
130
+ ' -k, --insecure ',
131
+ ' -h, --help '
132
+ )
133
+ );
134
+ // Assert
135
+ expect(testLine).toBe(expected);
136
+ });
@@ -0,0 +1,194 @@
1
+ import cp from 'child_process';
2
+ import { promisify } from 'util';
3
+ import {
4
+ crudeMultilineTakeUntil,
5
+ collapseWhitespace,
6
+ node14Compatibility,
7
+ } from '../utils/utils.js';
8
+
9
+ node14Compatibility();
10
+
11
+ const exec = promisify(cp.exec);
12
+ const CMD = 'frodo journey describe --help';
13
+ const { stdout } = await exec(CMD);
14
+
15
+ test("CLI help interface for 'journey describe' Usage should be expected english", async () => {
16
+ // Arrange
17
+ const expected = `
18
+ Usage: frodo journey describe [options] <host> [realm] [user] [password]
19
+ `.trim();
20
+ // Act
21
+ const testLine = stdout
22
+ .split(/\n/)
23
+ .find((line) => line.trim().startsWith('Usage:'))
24
+ .trim();
25
+ // Assert
26
+ expect(testLine).toBe(expected);
27
+ });
28
+
29
+ test("CLI help interface 'journey describe' description at line 2 should be expected english", async () => {
30
+ // Arrange
31
+ const expected = `
32
+ If -h is supplied, describe the journey/tree indicated by -i, or all journeys/trees in the realm if no -i is supplied, otherwise describe the journey/tree export file indicated by -f.
33
+ `.trim();
34
+ // Act
35
+ const testLine = stdout
36
+ .split(/\n/)
37
+ .map((line) => line.trim())
38
+ .at(2);
39
+ // Assert
40
+ expect(testLine).toBe(expected);
41
+ });
42
+
43
+ test("CLI help interface 'describe argument host' description should be expected english multiline", async () => {
44
+ // Arrange
45
+ const expected = collapseWhitespace(`
46
+ host Access Management base URL, e.g.: https://cdk.iam.example.com/am.
47
+ To use a connection profile, just specify a unique substring.
48
+ `);
49
+ // Act
50
+ const testLine = collapseWhitespace(
51
+ crudeMultilineTakeUntil(
52
+ stdout,
53
+ ' host ',
54
+ ' realm '
55
+ )
56
+ );
57
+
58
+ // Assert
59
+ expect(testLine).toBe(expected);
60
+ });
61
+
62
+ test("CLI help interface 'describe argument realm' description should be expected english multiline", async () => {
63
+ // Arrange
64
+ const expected = collapseWhitespace(`
65
+ realm Realm. Specify realm as '/' for the root realm or 'realm' or '/parent/child' otherwise. (default:
66
+ "alpha" for Identity Cloud tenants, "/" otherwise.)
67
+ `);
68
+ // Act
69
+ const testLine = collapseWhitespace(
70
+ crudeMultilineTakeUntil(
71
+ stdout,
72
+ ' realm ',
73
+ ' user '
74
+ )
75
+ );
76
+
77
+ // Assert
78
+ expect(testLine).toBe(expected);
79
+ });
80
+
81
+ test("CLI help interface 'describe argument user' description should be expected english multiline", async () => {
82
+ // Arrange
83
+ const expected = collapseWhitespace(`
84
+ user Username to login with. Must be an admin user with appropriate
85
+ rights to manage authentication journeys/trees.
86
+ `);
87
+ // Act
88
+ const testLine = collapseWhitespace(
89
+ crudeMultilineTakeUntil(
90
+ stdout,
91
+ ' user ',
92
+ ' password '
93
+ )
94
+ );
95
+
96
+ // Assert
97
+ expect(testLine).toBe(expected);
98
+ });
99
+
100
+ test("CLI help interface 'describe argument password' description should be expected english", async () => {
101
+ // Arrange
102
+ const expectedDescription = `
103
+ password Password.
104
+ `.trim();
105
+ // Act
106
+ const testLine = stdout
107
+ .split(/\n/)
108
+ .find((line) => line.trim().startsWith('password'))
109
+ .trim();
110
+ // Assert
111
+ expect(testLine).toBe(expectedDescription);
112
+ });
113
+
114
+ test("CLI help interface 'describe option -m, --type <type>' description should be expected english multiline", async () => {
115
+ // Arrange
116
+ const expected = collapseWhitespace(`
117
+ -m, --type <type> Override auto-detected deployment type. Valid values for type:
118
+ classic: A classic Access Management-only deployment with custom
119
+ layout and configuration.
120
+ cloud: A ForgeRock Identity Cloud environment.
121
+ forgeops: A ForgeOps CDK or CDM deployment.
122
+ The detected or provided deployment type controls certain
123
+ behavior like obtaining an Identity Management admin token or not
124
+ and whether to export/import referenced email templates or how to
125
+ walk through the tenant admin login flow of Identity Cloud and
126
+ handle MFA (choices: "classic", "cloud", "forgeops")
127
+ `);
128
+ // Act
129
+ const testLine = collapseWhitespace(
130
+ crudeMultilineTakeUntil(
131
+ stdout,
132
+ ' -m, --type <type> ',
133
+ ' -k, --insecure '
134
+ )
135
+ );
136
+
137
+ // Assert
138
+ expect(testLine).toBe(expected);
139
+ });
140
+
141
+ test("CLI help interface 'describe option -t, --tree <tree>' description should be expected english", async () => {
142
+ // Arrange
143
+ const expectedDescription = `
144
+ -i, --journey-id <journey> Name of a journey/tree. If specified, -a and -A are ignored.
145
+ `.trim();
146
+ // Act
147
+ const testLine = collapseWhitespace(
148
+ crudeMultilineTakeUntil(
149
+ stdout,
150
+ ' -i, --journey-id <journey> ',
151
+ ' -f, --file <file> '
152
+ )
153
+ );
154
+ // Assert
155
+ expect(testLine).toBe(expectedDescription);
156
+ });
157
+
158
+ test("CLI help interface 'describe option -f, --file <file>' description should be expected english", async () => {
159
+ // Arrange
160
+ const expectedDescription = `
161
+ -f, --file <file> Name of the file to write the exported journey(s) to. Ignored with -A.
162
+ `.trim();
163
+ // Act
164
+ const testLine = collapseWhitespace(
165
+ crudeMultilineTakeUntil(
166
+ stdout,
167
+ ' -f, --file <file> ',
168
+ ' -h, --help '
169
+ )
170
+ );
171
+
172
+ // Assert
173
+ expect(testLine).toBe(expectedDescription);
174
+ });
175
+
176
+ test("CLI help interface 'describe option -k, --insecure' description should be expected english multiline", async () => {
177
+ // Arrange
178
+ const expected = collapseWhitespace(`
179
+ -k, --insecure Allow insecure connections when using SSL/TLS. Has no effect when using a network proxy for https
180
+ (HTTPS_PROXY=http://<host>:<port>), in that case the proxy must provide this capability. (default:
181
+ Don't allow insecure connections)
182
+ `);
183
+ // Act
184
+ const testLine = collapseWhitespace(
185
+ crudeMultilineTakeUntil(
186
+ stdout,
187
+ ' -k, --insecure ',
188
+ ' -i, --journey-id <journey> '
189
+ )
190
+ );
191
+
192
+ // Assert
193
+ expect(testLine).toBe(expected);
194
+ });