mcdev 5.0.2 → 5.2.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 (237) hide show
  1. package/.coverage-comment-template.svelte +177 -161
  2. package/.eslintrc.json +4 -4
  3. package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
  4. package/.github/PULL_REQUEST_TEMPLATE.md +2 -2
  5. package/.github/dependabot.yml +8 -0
  6. package/.github/workflows/coverage-base-update.yml +6 -2
  7. package/.github/workflows/coverage-develop-branch.yml +7 -8
  8. package/.github/workflows/coverage-main-branch.yml +7 -8
  9. package/.github/workflows/coverage.yml +7 -4
  10. package/.husky/post-checkout +4 -2
  11. package/.husky/post-merge +1 -0
  12. package/.vscode/extensions.json +4 -0
  13. package/docs/dist/documentation.md +756 -294
  14. package/lib/Deployer.js +28 -28
  15. package/lib/MetadataTypeDefinitions.js +1 -1
  16. package/lib/MetadataTypeInfo.js +1 -1
  17. package/lib/Retriever.js +1 -1
  18. package/lib/cli.js +184 -6
  19. package/lib/index.js +493 -22
  20. package/lib/metadataTypes/Asset.js +10 -11
  21. package/lib/metadataTypes/AttributeGroup.js +76 -2
  22. package/lib/metadataTypes/AttributeSet.js +260 -0
  23. package/lib/metadataTypes/Automation.js +771 -247
  24. package/lib/metadataTypes/DataExtension.js +7 -7
  25. package/lib/metadataTypes/DataExtensionField.js +1 -1
  26. package/lib/metadataTypes/Event.js +2 -3
  27. package/lib/metadataTypes/Folder.js +1 -1
  28. package/lib/metadataTypes/Journey.js +5 -6
  29. package/lib/metadataTypes/MetadataType.js +187 -60
  30. package/lib/metadataTypes/MobileKeyword.js +8 -8
  31. package/lib/metadataTypes/MobileMessage.js +5 -5
  32. package/lib/metadataTypes/Query.js +47 -5
  33. package/lib/metadataTypes/Script.js +3 -3
  34. package/lib/metadataTypes/TransactionalSMS.js +5 -5
  35. package/lib/metadataTypes/TriggeredSend.js +25 -50
  36. package/lib/metadataTypes/User.js +7 -4
  37. package/lib/metadataTypes/definitions/Asset.definition.js +1 -0
  38. package/lib/metadataTypes/definitions/AttributeGroup.definition.js +117 -106
  39. package/lib/metadataTypes/definitions/{SetDefinition.definition.js → AttributeSet.definition.js} +54 -27
  40. package/lib/metadataTypes/definitions/Automation.definition.js +74 -21
  41. package/lib/metadataTypes/definitions/DataExtension.definition.js +1 -0
  42. package/lib/metadataTypes/definitions/DataExtract.definition.js +1 -0
  43. package/lib/metadataTypes/definitions/EmailSend.definition.js +1 -0
  44. package/lib/metadataTypes/definitions/Event.definition.js +1 -0
  45. package/lib/metadataTypes/definitions/Filter.definition.js +1 -0
  46. package/lib/metadataTypes/definitions/ImportFile.definition.js +37 -6
  47. package/lib/metadataTypes/definitions/MobileKeyword.definition.js +1 -0
  48. package/lib/metadataTypes/definitions/Query.definition.js +1 -0
  49. package/lib/metadataTypes/definitions/Role.definition.js +1 -0
  50. package/lib/metadataTypes/definitions/TriggeredSend.definition.js +2 -0
  51. package/lib/metadataTypes/definitions/User.definition.js +1 -0
  52. package/lib/util/cache.js +9 -4
  53. package/lib/util/cli.js +40 -0
  54. package/lib/util/devops.js +13 -11
  55. package/lib/util/file.js +2 -2
  56. package/lib/util/init.js +84 -0
  57. package/lib/util/util.js +268 -137
  58. package/package.json +11 -11
  59. package/test/general.test.js +26 -0
  60. package/test/mockRoot/.mcdevrc.json +1 -1
  61. package/test/mockRoot/deploy/testInstance/testBU/automation/testExisting_automation.automation-meta.json +52 -0
  62. package/test/mockRoot/deploy/testInstance/testBU/automation/testNew_automation.automation-meta.json +45 -0
  63. package/test/mockRoot/deploy/testInstance/testBU/dataExtract/testExisting_dataExtract.dataExtract-meta.json +35 -0
  64. package/test/mockRoot/deploy/testInstance/testBU/dataExtract/testNew_dataExtract.dataExtract-meta.json +35 -0
  65. package/test/mockRoot/deploy/testInstance/testBU/fileTransfer/testExisting_fileTransfer.fileTransfer-meta.json +17 -0
  66. package/test/mockRoot/deploy/testInstance/testBU/fileTransfer/testNew_fileTransfer.fileTransfer-meta.json +17 -0
  67. package/test/mockRoot/deploy/testInstance/testBU/importFile/testExisting_importFile.importFile-meta.json +29 -0
  68. package/test/mockRoot/deploy/testInstance/testBU/importFile/testNew_importFile.importFile-meta.json +29 -0
  69. package/test/mockRoot/deploy/testInstance/testBU/query/{testExistingQuery.query-meta.json → testExisting_query.query-meta.json} +2 -2
  70. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.json +11 -0
  71. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.sql +6 -0
  72. package/test/mockRoot/deploy/testInstance/testBU/query/{testNewQuery.query-meta.json → testNew_query.query-meta.json} +2 -2
  73. package/test/mockRoot/deploy/testInstance/testBU/script/testExisting_script.script-meta.json +6 -0
  74. package/test/mockRoot/deploy/testInstance/testBU/script/testExisting_script.script-meta.ssjs +1 -0
  75. package/test/mockRoot/deploy/testInstance/testBU/script/testNew_script.script-meta.json +6 -0
  76. package/test/mockRoot/deploy/testInstance/testBU/script/testNew_script.script-meta.ssjs +1 -0
  77. package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testExisting_triggeredSend.triggeredSend-meta.json +29 -0
  78. package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testNew_triggeredSend.triggeredSend-meta.json +29 -0
  79. package/test/resourceFactory.js +132 -24
  80. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-response.xml +27 -0
  81. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=falseANDEmaillike@-response.xml +156 -0
  82. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml +87 -0
  83. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDEmaillike@-response.xml +156 -0
  84. package/test/resources/1111111/accountUser/retrieve-CustomerKey=testExisting_userANDActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml +27 -0
  85. package/test/resources/1111111/accountUserAccount/retrieve-AccountUser.AccountUserID=700301950-response.xml +60 -0
  86. package/test/resources/1111111/user/retrieve-expected.md +4 -2
  87. package/test/resources/9999999/attributeGroup/retrieve-expected.json +25 -0
  88. package/test/resources/9999999/attributeSet/retrieve-expected.json +748 -0
  89. package/test/resources/9999999/automation/build-expected.json +57 -0
  90. package/test/resources/9999999/automation/create-expected.json +45 -0
  91. package/test/resources/9999999/automation/create-testNew_automation-expected.md +28 -0
  92. package/test/resources/9999999/automation/delete-response.xml +40 -0
  93. package/test/resources/9999999/automation/patch_fixKeys-pause-expected.json +44 -0
  94. package/test/resources/9999999/automation/patch_fixKeys-schedule-expected.json +44 -0
  95. package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +42 -0
  96. package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-fixKey_pause-response.xml +42 -0
  97. package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-fixKey_schedule-response.xml +42 -0
  98. package/test/resources/9999999/automation/perform-a8afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +42 -0
  99. package/test/resources/9999999/automation/retrieve-expected.json +57 -0
  100. package/test/resources/9999999/automation/retrieve-testExisting_automation-expected.md +30 -0
  101. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +52 -0
  102. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-ad2e-pause-response.xml +38 -0
  103. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-fixKey_pause-response.xml +52 -0
  104. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-fixKey_schedule-response.xml +52 -0
  105. package/test/resources/9999999/automation/schedule-a8afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +52 -0
  106. package/test/resources/9999999/automation/template-expected.json +57 -0
  107. package/test/resources/9999999/automation/update-expected.json +45 -0
  108. package/test/resources/9999999/automation/update-testExisting_automation-expected.md +28 -0
  109. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +85 -0
  110. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-1f7f8788c560/patch-response.json +85 -0
  111. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-pause/get-response.json +85 -0
  112. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-pause/patch-response.json +85 -0
  113. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/get-response.json +85 -0
  114. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/patch-response.json +85 -0
  115. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/get-response.json +85 -0
  116. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/patch-response.json +85 -0
  117. package/test/resources/9999999/automation/v1/automations/a8afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +85 -0
  118. package/test/resources/9999999/automation/v1/automations/post-response.json +86 -0
  119. package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/get-response.json +38 -0
  120. package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/patch-response.json +38 -0
  121. package/test/resources/9999999/automation/v1/dataextracts/get-response.json +20 -0
  122. package/test/resources/9999999/automation/v1/dataextracts/post-response.json +38 -0
  123. package/test/resources/9999999/automation/v1/dataextracttypes/get-response.json +50 -0
  124. package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/get-response.json +18 -0
  125. package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/patch-response.json +18 -0
  126. package/test/resources/9999999/automation/v1/filetransfers/get-response.json +15 -0
  127. package/test/resources/9999999/automation/v1/filetransfers/post-response.json +18 -0
  128. package/test/resources/9999999/automation/v1/ftplocations/get-response.json +18 -0
  129. package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/patch-response.json +31 -0
  130. package/test/resources/9999999/automation/v1/imports/get-response.json +38 -0
  131. package/test/resources/9999999/automation/v1/imports/post-response.json +30 -0
  132. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dae/actions/start/post-response.txt +1 -0
  133. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/actions/start/post-response.txt +1 -0
  134. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/get-response.json +2 -2
  135. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +2 -2
  136. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeys/get-response.json +17 -0
  137. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeys/patch-response.json +18 -0
  138. package/test/resources/9999999/automation/v1/queries/get-response.json +22 -5
  139. package/test/resources/9999999/automation/v1/queries/post-response.json +2 -2
  140. package/test/resources/9999999/automation/v1/scripts/39f6a488-20eb-4ba0-b0b9-023725b574e4/patch-response.json +10 -0
  141. package/test/resources/9999999/automation/v1/scripts/get-response.json +27 -0
  142. package/test/resources/9999999/automation/v1/scripts/post-response.json +10 -0
  143. package/test/resources/9999999/dataExtension/retrieve-Name=testExisting_dataExtension-response.xml +52 -0
  144. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtension-response.xml +98 -0
  145. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionORDataExtension.CustomerKey=testExisting_dataExtension-response.xml +99 -0
  146. package/test/resources/9999999/dataExtract/build-expected.json +35 -0
  147. package/test/resources/9999999/dataExtract/get-expected.json +39 -0
  148. package/test/resources/9999999/dataExtract/patch-expected.json +37 -0
  149. package/test/resources/9999999/dataExtract/post-expected.json +37 -0
  150. package/test/resources/9999999/dataExtract/template-expected.json +35 -0
  151. package/test/resources/9999999/dataFolder/retrieve-ContentType=automations-response.xml +48 -0
  152. package/test/resources/9999999/dataFolder/retrieve-ContentType=contextual_suppression_listORContentType=publicationORContentType=suppression_listORContentType=mysubsORContentType=list-response.xml +136 -0
  153. package/test/resources/9999999/dataFolder/retrieve-ContentType=queryactivity-response.xml +48 -0
  154. package/test/resources/9999999/dataFolder/retrieve-ContentType=ssjsactivity-response.xml +48 -0
  155. package/test/resources/9999999/dataFolder/retrieve-ContentType=triggered_send_journeybuilderORContentType=triggered_sendORContentType=hidden-response.xml +276 -0
  156. package/test/resources/9999999/dataFolder/retrieve-response.xml +45 -0
  157. package/test/resources/9999999/email/retrieve-response.xml +203 -0
  158. package/test/resources/9999999/emailSendDefinition/retrieve-IsPlatformObject=falseANDDescriptionnotEqualsSFSendDefinition-response.xml +85 -0
  159. package/test/resources/9999999/fileTransfer/build-expected.json +15 -0
  160. package/test/resources/9999999/fileTransfer/get-expected.json +17 -0
  161. package/test/resources/9999999/fileTransfer/patch-expected.json +17 -0
  162. package/test/resources/9999999/fileTransfer/post-expected.json +17 -0
  163. package/test/resources/9999999/fileTransfer/template-expected.json +15 -0
  164. package/test/resources/9999999/hub/v1/contacts/schema/attributeGroups/get-response.json +585 -0
  165. package/test/resources/9999999/hub/v1/contacts/schema/setDefinitions/get-response.json +19807 -0
  166. package/test/resources/9999999/importFile/build-expected.json +27 -0
  167. package/test/resources/9999999/importFile/get-expected.json +29 -0
  168. package/test/resources/9999999/importFile/patch-expected.json +29 -0
  169. package/test/resources/9999999/importFile/post-expected.json +29 -0
  170. package/test/resources/9999999/importFile/template-expected.json +27 -0
  171. package/test/resources/9999999/legacy/v1/beta/automations/notifications/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/get-response.json +21 -0
  172. package/test/resources/9999999/legacy/v1/beta/automations/notifications/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/post-response.json +0 -0
  173. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/get-response.json +30 -0
  174. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation-response.xml +30 -0
  175. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_pause-response.xml +32 -0
  176. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_schedule-response.xml +32 -0
  177. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_paused-response.xml +32 -0
  178. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_scheduled-response.xml +32 -0
  179. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_pause-response.xml +30 -0
  180. package/test/resources/9999999/program/retrieve-CustomerKey=testNew_automation-response.xml +30 -0
  181. package/test/resources/9999999/program/retrieve-Name=testExisting_automation-response.xml +31 -0
  182. package/test/resources/9999999/program/retrieve-response.xml +50 -0
  183. package/test/resources/9999999/query/build-expected.json +2 -2
  184. package/test/resources/9999999/query/get-expected.json +2 -2
  185. package/test/resources/9999999/query/get2-expected.json +2 -2
  186. package/test/resources/9999999/query/patch-expected.json +2 -2
  187. package/test/resources/9999999/query/patch_fixKeys-expected.json +11 -0
  188. package/test/resources/9999999/query/patch_fixKeys-expected.sql +6 -0
  189. package/test/resources/9999999/query/post-expected.json +2 -2
  190. package/test/resources/9999999/query/template-expected.json +2 -2
  191. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysANDStatus=Active-response.xml +30 -0
  192. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixedKeysANDStatus=Active-response.xml +30 -0
  193. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testNew_queryANDStatus=Active-response.xml +30 -0
  194. package/test/resources/9999999/script/build-expected.json +6 -0
  195. package/test/resources/9999999/script/build-expected.ssjs +1 -0
  196. package/test/resources/9999999/script/get-expected.json +8 -0
  197. package/test/resources/9999999/script/get-expected.ssjs +1 -0
  198. package/test/resources/9999999/script/get_noScriptTag-expected.html +1 -0
  199. package/test/resources/9999999/script/get_noScriptTag-expected.json +8 -0
  200. package/test/resources/9999999/script/patch-expected.json +8 -0
  201. package/test/resources/9999999/script/patch-expected.ssjs +1 -0
  202. package/test/resources/9999999/script/post-expected.json +8 -0
  203. package/test/resources/9999999/script/post-expected.ssjs +1 -0
  204. package/test/resources/9999999/script/template-expected.json +6 -0
  205. package/test/resources/9999999/script/template-expected.ssjs +1 -0
  206. package/test/resources/9999999/triggeredSend/build-expected.json +29 -0
  207. package/test/resources/9999999/triggeredSend/get-expected.json +29 -0
  208. package/test/resources/9999999/triggeredSend/patch-expected.json +29 -0
  209. package/test/resources/9999999/triggeredSend/post-expected.json +29 -0
  210. package/test/resources/9999999/triggeredSend/template-expected.json +29 -0
  211. package/test/resources/9999999/triggeredSendDefinition/create-response.xml +75 -0
  212. package/test/resources/9999999/triggeredSendDefinition/delete-response.xml +36 -0
  213. package/test/resources/9999999/triggeredSendDefinition/{retrieve-response.xml → retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml} +4 -4
  214. package/test/resources/9999999/triggeredSendDefinition/update-response.xml +74 -0
  215. package/test/type.attributeGroup.test.js +55 -0
  216. package/test/type.attributeSet.test.js +55 -0
  217. package/test/type.automation.test.js +886 -0
  218. package/test/type.dataExtension.test.js +3 -1
  219. package/test/type.dataExtract.test.js +187 -0
  220. package/test/type.fileTransfer.test.js +185 -0
  221. package/test/type.importFile.test.js +186 -0
  222. package/test/type.mobileKeyword.test.js +0 -1
  223. package/test/type.query.test.js +497 -33
  224. package/test/type.script.test.js +367 -0
  225. package/test/type.triggeredSend.test.js +152 -0
  226. package/test/type.user.test.js +37 -11
  227. package/test/utils.js +10 -6
  228. package/.coverage-comment-template.md +0 -20
  229. package/lib/metadataTypes/SetDefinition.js +0 -37
  230. /package/test/mockRoot/deploy/testInstance/testBU/query/{testExistingQuery.query-meta.sql → testExisting_query.query-meta.sql} +0 -0
  231. /package/test/mockRoot/deploy/testInstance/testBU/query/{testNewQuery.query-meta.sql → testNew_query.query-meta.sql} +0 -0
  232. /package/test/resources/1111111/accountUser/{retrieve-response.xml → retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-response.xml} +0 -0
  233. /package/test/resources/1111111/accountUserAccount/{retrieve-response.xml → retrieve-AccountUser.AccountUserIDIN700301950,700301951,7471228-response.xml} +0 -0
  234. /package/test/resources/1111111/businessUnit/{retrieve-response.xml → retrieve-ID=1111111-response.xml} +0 -0
  235. /package/test/resources/1111111/list/{retrieve-response.xml → retrieve-CustomerKey=All SubscribersORListName=All Subscribers-response.xml} +0 -0
  236. /package/test/resources/1111111/role/{retrieve-response.xml → retrieve-IsPrivate=false-response.xml} +0 -0
  237. /package/test/resources/9999999/queryDefinition/{retrieve-response.xml → retrieve-CustomerKey=testExisting_queryANDStatus=Active-response.xml} +0 -0
@@ -0,0 +1,367 @@
1
+ const chai = require('chai');
2
+ const chaiFiles = require('chai-files');
3
+ const assert = chai.assert;
4
+ chai.use(chaiFiles);
5
+ const expect = chai.expect;
6
+ const file = chaiFiles.file;
7
+ // const dir = chaiFiles.dir;
8
+ const cache = require('../lib/util/cache');
9
+ const testUtils = require('./utils');
10
+ const handler = require('../lib/index');
11
+
12
+ describe('type: script', () => {
13
+ beforeEach(() => {
14
+ testUtils.mockSetup();
15
+ });
16
+ afterEach(() => {
17
+ testUtils.mockReset();
18
+ });
19
+
20
+ describe('Retrieve ================', () => {
21
+ it('Should retrieve all scripts', async () => {
22
+ // WHEN
23
+ const retrieve = await handler.retrieve('testInstance/testBU', ['script']);
24
+ // THEN
25
+ assert.equal(process.exitCode, false, 'retrieve should not have thrown an error');
26
+
27
+ // retrieve result
28
+ assert.equal(
29
+ retrieve['testInstance/testBU'].script
30
+ ? Object.keys(retrieve['testInstance/testBU'].script).length
31
+ : 0,
32
+ 2,
33
+ 'only 2 scripts expected in retrieve response'
34
+ );
35
+
36
+ // get results from cache
37
+ const result = cache.getCache();
38
+ assert.equal(
39
+ result.script ? Object.keys(result.script).length : 0,
40
+ 2,
41
+ 'only 2 scripts expected'
42
+ );
43
+ // normal test
44
+ assert.deepEqual(
45
+ await testUtils.getActualJson('testExisting_script', 'script'),
46
+ await testUtils.getExpectedJson('9999999', 'script', 'get'),
47
+ 'returned metadata with correct key was not equal expected'
48
+ );
49
+ expect(file(testUtils.getActualFile('testExisting_script', 'script', 'html'))).to.not
50
+ .exist;
51
+ expect(file(testUtils.getActualFile('testExisting_script', 'script', 'ssjs'))).to.equal(
52
+ file(testUtils.getExpectedFile('9999999', 'script', 'get', 'ssjs'))
53
+ );
54
+
55
+ assert.deepEqual(
56
+ await testUtils.getActualJson('testExisting_script_noScriptTag', 'script'),
57
+ await testUtils.getExpectedJson('9999999', 'script', 'get_noScriptTag'),
58
+ 'returned metadata was not equal expected'
59
+ );
60
+ expect(
61
+ file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'html'))
62
+ ).to.equal(
63
+ file(testUtils.getExpectedFile('9999999', 'script', 'get_noScriptTag', 'html'))
64
+ );
65
+ expect(
66
+ file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'ssjs'))
67
+ ).to.not.exist;
68
+
69
+ assert.equal(
70
+ testUtils.getAPIHistoryLength(),
71
+ 3,
72
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
73
+ );
74
+ return;
75
+ });
76
+ it('Should retrieve one specific script by key', async () => {
77
+ // WHEN
78
+ await handler.retrieve('testInstance/testBU', ['script'], ['testExisting_script']);
79
+ // THEN
80
+ assert.equal(process.exitCode, false, 'retrieve should not have thrown an error');
81
+ // get results from cache
82
+ const result = cache.getCache();
83
+ assert.equal(
84
+ result.script ? Object.keys(result.script).length : 0,
85
+ 1,
86
+ 'only one script expected'
87
+ );
88
+ assert.deepEqual(
89
+ await testUtils.getActualJson('testExisting_script', 'script'),
90
+ await testUtils.getExpectedJson('9999999', 'script', 'get'),
91
+ 'returned metadata was not equal expected'
92
+ );
93
+ expect(file(testUtils.getActualFile('testExisting_script', 'script', 'html'))).to.not
94
+ .exist;
95
+ expect(file(testUtils.getActualFile('testExisting_script', 'script', 'ssjs'))).to.equal(
96
+ file(testUtils.getExpectedFile('9999999', 'script', 'get', 'ssjs'))
97
+ );
98
+
99
+ expect(
100
+ file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'json'))
101
+ ).to.not.exist;
102
+ expect(
103
+ file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'ssjs'))
104
+ ).to.not.exist;
105
+ expect(
106
+ file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'html'))
107
+ ).to.not.exist;
108
+
109
+ assert.equal(
110
+ testUtils.getAPIHistoryLength(),
111
+ 3,
112
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
113
+ );
114
+ return;
115
+ });
116
+ it('Should retrieve one specific script via --like', async () => {
117
+ // WHEN
118
+ handler.setOptions({ like: { key: '%Existing_script' } });
119
+ await handler.retrieve('testInstance/testBU', ['script']);
120
+
121
+ // THEN
122
+ assert.equal(process.exitCode, false, 'retrieve should not have thrown an error');
123
+
124
+ // get results from cache
125
+ const result = cache.getCache();
126
+ assert.equal(
127
+ result.script ? Object.keys(result.script).length : 0,
128
+ 2,
129
+ 'two scripts in cache expected'
130
+ );
131
+ assert.deepEqual(
132
+ await testUtils.getActualJson('testExisting_script', 'script'),
133
+ await testUtils.getExpectedJson('9999999', 'script', 'get'),
134
+ 'returned metadata was not equal expected'
135
+ );
136
+ expect(file(testUtils.getActualFile('testExisting_script', 'script', 'ssjs'))).to.equal(
137
+ file(testUtils.getExpectedFile('9999999', 'script', 'get', 'ssjs'))
138
+ );
139
+
140
+ expect(
141
+ file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'json'))
142
+ ).to.not.exist;
143
+ expect(
144
+ file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'ssjs'))
145
+ ).to.not.exist;
146
+ expect(
147
+ file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'html'))
148
+ ).to.not.exist;
149
+
150
+ assert.equal(
151
+ testUtils.getAPIHistoryLength(),
152
+ 3,
153
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
154
+ );
155
+ return;
156
+ });
157
+ it('Should not retrieve any script via --like and key due to a mismatching filter', async () => {
158
+ // WHEN
159
+ handler.setOptions({ like: { key: 'NotExisting_script' } });
160
+ await handler.retrieve('testInstance/testBU', ['script']);
161
+ // THEN
162
+ assert.equal(process.exitCode, false, 'retrieve should not have thrown an error');
163
+
164
+ // get results from cache
165
+ const result = cache.getCache();
166
+ assert.equal(
167
+ result.script ? Object.keys(result.script).length : 0,
168
+ 2,
169
+ 'two scripts in cache expected'
170
+ );
171
+
172
+ expect(file(testUtils.getActualFile('testExisting_script', 'script', 'ssjs'))).to.not
173
+ .exist;
174
+ assert.equal(
175
+ testUtils.getAPIHistoryLength(),
176
+ 3,
177
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
178
+ );
179
+ return;
180
+ });
181
+ });
182
+ describe('Deploy ================', () => {
183
+ beforeEach(() => {
184
+ testUtils.mockSetup(true);
185
+ });
186
+ it('Should create & upsert a script', async () => {
187
+ // WHEN
188
+ await handler.deploy('testInstance/testBU', ['script']);
189
+ // THEN
190
+ assert.equal(process.exitCode, false, 'deploy should not have thrown an error');
191
+ // get results from cache
192
+ const result = cache.getCache();
193
+ assert.equal(
194
+ result.script ? Object.keys(result.script).length : 0,
195
+ 3,
196
+ 'three scripts expected'
197
+ );
198
+ // confirm created item
199
+ assert.deepEqual(
200
+ await testUtils.getActualJson('testNew_script', 'script'),
201
+ await testUtils.getExpectedJson('9999999', 'script', 'post'),
202
+ 'returned metadata was not equal expected for insert script'
203
+ );
204
+ expect(file(testUtils.getActualFile('testNew_script', 'script', 'ssjs'))).to.equal(
205
+ file(testUtils.getExpectedFile('9999999', 'script', 'post', 'ssjs'))
206
+ );
207
+ // confirm updated item
208
+ assert.deepEqual(
209
+ await testUtils.getActualJson('testExisting_script', 'script'),
210
+ await testUtils.getExpectedJson('9999999', 'script', 'patch'),
211
+ 'returned metadata was not equal expected for insert script'
212
+ );
213
+ expect(file(testUtils.getActualFile('testExisting_script', 'script', 'ssjs'))).to.equal(
214
+ file(testUtils.getExpectedFile('9999999', 'script', 'patch', 'ssjs'))
215
+ );
216
+ // check number of API calls
217
+ assert.equal(
218
+ testUtils.getAPIHistoryLength(),
219
+ 5,
220
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
221
+ );
222
+ return;
223
+ });
224
+ });
225
+ describe('Templating ================', () => {
226
+ it('Should create a script template via retrieveAsTemplate and build it', async () => {
227
+ // GIVEN there is a template
228
+ const result = await handler.retrieveAsTemplate(
229
+ 'testInstance/testBU',
230
+ 'script',
231
+ ['testExisting_script'],
232
+ 'testSourceMarket'
233
+ );
234
+ // WHEN
235
+ assert.equal(
236
+ process.exitCode,
237
+ false,
238
+ 'retrieveAsTemplate should not have thrown an error'
239
+ );
240
+ assert.equal(
241
+ result.script ? Object.keys(result.script).length : 0,
242
+ 1,
243
+ 'only one script expected'
244
+ );
245
+ assert.deepEqual(
246
+ await testUtils.getActualTemplateJson('testExisting_script', 'script'),
247
+ await testUtils.getExpectedJson('9999999', 'script', 'template'),
248
+ 'returned template JSON of retrieveAsTemplate was not equal expected'
249
+ );
250
+ expect(
251
+ file(testUtils.getActualTemplateFile('testExisting_script', 'script', 'ssjs'))
252
+ ).to.equal(file(testUtils.getExpectedFile('9999999', 'script', 'template', 'ssjs')));
253
+ // THEN
254
+ await handler.buildDefinition(
255
+ 'testInstance/testBU',
256
+ 'script',
257
+ 'testExisting_script',
258
+ 'testTargetMarket'
259
+ );
260
+ assert.equal(
261
+ process.exitCode,
262
+ false,
263
+ 'buildDefinition should not have thrown an error'
264
+ );
265
+
266
+ assert.deepEqual(
267
+ await testUtils.getActualDeployJson('testTemplated_script', 'script'),
268
+ await testUtils.getExpectedJson('9999999', 'script', 'build'),
269
+ 'returned deployment JSON was not equal expected'
270
+ );
271
+ expect(
272
+ file(testUtils.getActualDeployFile('testTemplated_script', 'script', 'ssjs'))
273
+ ).to.equal(file(testUtils.getExpectedFile('9999999', 'script', 'build', 'ssjs')));
274
+
275
+ assert.equal(
276
+ testUtils.getAPIHistoryLength(),
277
+ 3,
278
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
279
+ );
280
+ return;
281
+ });
282
+ it('Should create a script template via buildTemplate and build it', async () => {
283
+ // download first before we test buildTemplate
284
+ await handler.retrieve('testInstance/testBU', ['script']);
285
+ // GIVEN there is a template
286
+ const result = await handler.buildTemplate(
287
+ 'testInstance/testBU',
288
+ 'script',
289
+ ['testExisting_script'],
290
+ 'testSourceMarket'
291
+ );
292
+ // WHEN
293
+ assert.equal(process.exitCode, false, 'buildTemplate should not have thrown an error');
294
+
295
+ assert.equal(
296
+ result.script ? Object.keys(result.script).length : 0,
297
+ 1,
298
+ 'only one script expected'
299
+ );
300
+ assert.deepEqual(
301
+ await testUtils.getActualTemplateJson('testExisting_script', 'script'),
302
+ await testUtils.getExpectedJson('9999999', 'script', 'template'),
303
+ 'returned template JSON of buildTemplate was not equal expected'
304
+ );
305
+ expect(
306
+ file(testUtils.getActualTemplateFile('testExisting_script', 'script', 'ssjs'))
307
+ ).to.equal(file(testUtils.getExpectedFile('9999999', 'script', 'template', 'ssjs')));
308
+ // THEN
309
+ await handler.buildDefinition(
310
+ 'testInstance/testBU',
311
+ 'script',
312
+ 'testExisting_script',
313
+ 'testTargetMarket'
314
+ );
315
+ assert.equal(
316
+ process.exitCode,
317
+ false,
318
+ 'buildDefinition should not have thrown an error'
319
+ );
320
+
321
+ assert.deepEqual(
322
+ await testUtils.getActualDeployJson('testTemplated_script', 'script'),
323
+ await testUtils.getExpectedJson('9999999', 'script', 'build'),
324
+ 'returned deployment JSON was not equal expected'
325
+ );
326
+ expect(
327
+ file(testUtils.getActualDeployFile('testTemplated_script', 'script', 'ssjs'))
328
+ ).to.equal(file(testUtils.getExpectedFile('9999999', 'script', 'build', 'ssjs')));
329
+
330
+ assert.equal(
331
+ testUtils.getAPIHistoryLength(),
332
+ 3,
333
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
334
+ );
335
+ return;
336
+ });
337
+ });
338
+ describe('Delete ================', () => {});
339
+ describe('CI/CD ================', () => {
340
+ it('Should return a list of files based on their type and key', async () => {
341
+ // WHEN
342
+ const fileList = await handler.getFilesToCommit('testInstance/testBU', 'script', [
343
+ 'testExisting_script',
344
+ ]);
345
+ // THEN
346
+ assert.equal(
347
+ process.exitCode,
348
+ false,
349
+ 'getFilesToCommit should not have thrown an error'
350
+ );
351
+ assert.equal(fileList.length, 3, 'expected only 3 file paths (html, json, ssjs)');
352
+
353
+ assert.equal(
354
+ fileList[0].split('\\').join('/'),
355
+ 'retrieve/testInstance/testBU/script/testExisting_script.script-meta.json',
356
+ 'wrong JSON path'
357
+ );
358
+ assert.equal(
359
+ fileList[1].split('\\').join('/'),
360
+ 'retrieve/testInstance/testBU/script/testExisting_script.script-meta.ssjs',
361
+ 'wrong JSON path'
362
+ );
363
+ return;
364
+ });
365
+ });
366
+ describe('Execute ================', () => {});
367
+ });
@@ -0,0 +1,152 @@
1
+ const chai = require('chai');
2
+ const chaiFiles = require('chai-files');
3
+ const assert = chai.assert;
4
+ chai.use(chaiFiles);
5
+ const cache = require('../lib/util/cache');
6
+ const testUtils = require('./utils');
7
+ const handler = require('../lib/index');
8
+
9
+ describe('type: triggeredSend', () => {
10
+ beforeEach(() => {
11
+ testUtils.mockSetup();
12
+ });
13
+ afterEach(() => {
14
+ testUtils.mockReset();
15
+ });
16
+
17
+ describe('Retrieve ================', () => {
18
+ it('Should retrieve a triggeredSend', async () => {
19
+ // WHEN
20
+ await handler.retrieve('testInstance/testBU', ['triggeredSend']);
21
+ // THEN
22
+ assert.equal(process.exitCode, false, 'retrieve should not have thrown an error');
23
+ // get results from cache
24
+ const result = cache.getCache();
25
+ assert.equal(
26
+ result.triggeredSend ? Object.keys(result.triggeredSend).length : 0,
27
+ 1,
28
+ 'only one triggeredSend expected'
29
+ );
30
+ assert.deepEqual(
31
+ await testUtils.getActualJson('testExisting_triggeredSend', 'triggeredSend'),
32
+ await testUtils.getExpectedJson('9999999', 'triggeredSend', 'get'),
33
+ 'returned JSON was not equal expected'
34
+ );
35
+ assert.equal(
36
+ testUtils.getAPIHistoryLength(),
37
+ 10,
38
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
39
+ );
40
+ return;
41
+ });
42
+ });
43
+ describe('Deploy ================', () => {
44
+ beforeEach(() => {
45
+ testUtils.mockSetup(true);
46
+ });
47
+ it('Should create & upsert a triggeredSend', async () => {
48
+ // WHEN
49
+ await handler.deploy('testInstance/testBU', ['triggeredSend']);
50
+ // THEN
51
+ assert.equal(process.exitCode, false, 'deploy should not have thrown an error');
52
+ // get results from cache
53
+ const result = cache.getCache();
54
+ assert.equal(
55
+ result.triggeredSend ? Object.keys(result.triggeredSend).length : 0,
56
+ 2,
57
+ 'two triggeredSends expected'
58
+ );
59
+ // confirm created item
60
+ assert.deepEqual(
61
+ await testUtils.getActualJson('testNew_triggeredSend', 'triggeredSend'),
62
+ await testUtils.getExpectedJson('9999999', 'triggeredSend', 'post'),
63
+ 'returned JSON was not equal expected for insert triggeredSend'
64
+ );
65
+ // confirm updated item
66
+ assert.deepEqual(
67
+ await testUtils.getActualJson('testExisting_triggeredSend', 'triggeredSend'),
68
+ await testUtils.getExpectedJson('9999999', 'triggeredSend', 'patch'),
69
+ 'returned JSON was not equal expected for update triggeredSend'
70
+ );
71
+ // check number of API calls
72
+ assert.equal(
73
+ testUtils.getAPIHistoryLength(),
74
+ 12,
75
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
76
+ );
77
+ return;
78
+ });
79
+ });
80
+ describe('Templating ================', () => {
81
+ it('Should create a triggeredSend template via buildTemplate and build it', async () => {
82
+ // download first before we test buildTemplate
83
+ await handler.retrieve('testInstance/testBU', ['triggeredSend']);
84
+ // buildTemplate
85
+ const result = await handler.buildTemplate(
86
+ 'testInstance/testBU',
87
+ 'triggeredSend',
88
+ ['testExisting_triggeredSend'],
89
+ 'testSourceMarket'
90
+ );
91
+ assert.equal(process.exitCode, false, 'buildTemplate should not have thrown an error');
92
+ assert.equal(
93
+ result.triggeredSend ? Object.keys(result.triggeredSend).length : 0,
94
+ 1,
95
+ 'only one triggeredSend expected'
96
+ );
97
+ assert.deepEqual(
98
+ await testUtils.getActualTemplateJson(
99
+ 'testExisting_triggeredSend',
100
+ 'triggeredSend'
101
+ ),
102
+ await testUtils.getExpectedJson('9999999', 'triggeredSend', 'template'),
103
+ 'returned template JSON was not equal expected'
104
+ );
105
+ // buildDefinition
106
+ await handler.buildDefinition(
107
+ 'testInstance/testBU',
108
+ 'triggeredSend',
109
+ 'testExisting_triggeredSend',
110
+ 'testTargetMarket'
111
+ );
112
+ assert.equal(
113
+ process.exitCode,
114
+ false,
115
+ 'buildDefinition should not have thrown an error'
116
+ );
117
+ assert.deepEqual(
118
+ await testUtils.getActualDeployJson('testTemplated_triggeredSend', 'triggeredSend'),
119
+ await testUtils.getExpectedJson('9999999', 'triggeredSend', 'build'),
120
+ 'returned deployment JSON was not equal expected'
121
+ );
122
+ assert.equal(
123
+ testUtils.getAPIHistoryLength(),
124
+ 10,
125
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
126
+ );
127
+ return;
128
+ });
129
+ });
130
+ describe('Delete ================', () => {
131
+ it('Should delete the item', async () => {
132
+ // WHEN
133
+ const result = await handler.deleteByKey('testInstance/testBU', 'triggeredSend', [
134
+ 'testExisting_triggeredSend',
135
+ ]);
136
+ // THEN
137
+ assert.equal(process.exitCode, false, 'delete should not have thrown an error');
138
+
139
+ assert.equal(result, true, 'should have deleted the item');
140
+ return;
141
+ });
142
+ });
143
+ describe('Refresh ================', () => {
144
+ it('Should refresh a triggeredSend by key');
145
+ });
146
+ describe('Start (Execute) ================', () => {
147
+ it('Should start a triggeredSend by key');
148
+ });
149
+ describe('Pause ================', () => {
150
+ it('Should pause a triggeredSend by key');
151
+ });
152
+ });
@@ -7,6 +7,7 @@ const file = chaiFiles.file;
7
7
  const cache = require('../lib/util/cache');
8
8
  const testUtils = require('./utils');
9
9
  const handler = require('../lib/index');
10
+ const File = require('../lib/util/file');
10
11
 
11
12
  describe('type: user', () => {
12
13
  beforeEach(() => {
@@ -25,8 +26,8 @@ describe('type: user', () => {
25
26
  const result = cache.getCache();
26
27
  assert.equal(
27
28
  result.user ? Object.keys(result.user).length : 0,
28
- 1,
29
- 'only one user expected'
29
+ 3,
30
+ 'only three users expected'
30
31
  );
31
32
  assert.deepEqual(
32
33
  await testUtils.getActualJson('testExisting_user', 'user', '_ParentBU_'),
@@ -35,9 +36,22 @@ describe('type: user', () => {
35
36
  'returned metadata was not equal expected'
36
37
  );
37
38
  // check if MD file was created and equals expectations
38
- expect(file(`./docs/user/testInstance.users.md`)).to.equal(
39
- file(testUtils.getExpectedFile('1111111', 'user', 'retrieve', 'md'))
40
- );
39
+ // ! this test needs to update the lastLoginDate counter because it changes with every passing day
40
+ const expectedFile = await File.readFile(
41
+ testUtils.getExpectedFile('1111111', 'user', 'retrieve', 'md'),
42
+ { encoding: 'utf8' }
43
+ );
44
+ const regexFindDaysSinceLogin =
45
+ /\| (\d*) (seconds|minutes|days|weeks|months|years){1} \|/g;
46
+ // fetch expected time since last login
47
+ const expectedDaysSinceLogin = expectedFile.match(regexFindDaysSinceLogin);
48
+ // load actual file and replace days since last login with expected value
49
+ const actualFile = (
50
+ await File.readFile(`./docs/user/testInstance.users.md`, {
51
+ encoding: 'utf8',
52
+ })
53
+ ).replaceAll(regexFindDaysSinceLogin, [expectedDaysSinceLogin[0]]);
54
+ expect(actualFile).to.equal(expectedFile);
41
55
 
42
56
  assert.equal(
43
57
  testUtils.getAPIHistoryLength(),
@@ -69,7 +83,12 @@ describe('type: user', () => {
69
83
  });
70
84
  it('Should create & upsert a user', async () => {
71
85
  // WHEN
72
- const expectedCache = ['testNew_user', 'testExisting_user'];
86
+ const expectedCache = [
87
+ 'testExisting_user',
88
+ 'testExisting_user_inactive',
89
+ '45372cbb-06e0-438e-88d8-008981f7a18b',
90
+ 'testNew_user',
91
+ ];
73
92
  await handler.deploy('testInstance/_ParentBU_', ['user'], expectedCache);
74
93
  // THEN
75
94
  assert.equal(process.exitCode, false, 'deploy should not have thrown an error');
@@ -78,8 +97,8 @@ describe('type: user', () => {
78
97
  const result = cache.getCache();
79
98
  assert.equal(
80
99
  result.user ? Object.keys(result.user).length : 0,
81
- 2,
82
- 'two users expected'
100
+ 4,
101
+ 'four users expected'
83
102
  );
84
103
  // confirm if result.user only includes values from expectedCache
85
104
  assert.deepEqual(
@@ -112,14 +131,22 @@ describe('type: user', () => {
112
131
  });
113
132
  it('Should not deploy user with Marketing Cloud role', async () => {
114
133
  // WHEN
115
- const expectedCache = ['testExisting_user'];
134
+ const expectedCache = [
135
+ 'testExisting_user',
136
+ 'testExisting_user_inactive',
137
+ '45372cbb-06e0-438e-88d8-008981f7a18b',
138
+ ];
116
139
  await handler.deploy('testInstance/_ParentBU_', ['user'], ['testBlocked_user']);
117
140
  // THEN
118
141
  assert.equal(process.exitCode, 1, 'Deployment should have thrown an error');
119
142
 
120
143
  // get results from cache
121
144
  const result = cache.getCache();
122
- assert.equal(result.user ? Object.keys(result.user).length : 0, 1, '1 user expected');
145
+ assert.equal(
146
+ result.user ? Object.keys(result.user).length : 0,
147
+ 3,
148
+ 'three users expected'
149
+ );
123
150
  // confirm if result.user only includes values from expectedCache
124
151
  assert.deepEqual(
125
152
  Object.keys(result.user),
@@ -134,7 +161,6 @@ describe('type: user', () => {
134
161
  );
135
162
  return;
136
163
  });
137
- it('Should change the key during update with --changeKeyValue');
138
164
  });
139
165
  describe('Templating ================', () => {
140
166
  // it('Should create a user template via retrieveAsTemplate and build it', async () => {});