mcdev 7.0.3 → 7.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 (380) hide show
  1. package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
  2. package/.github/PULL_REQUEST_TEMPLATE/pr_template_release.md +1 -0
  3. package/.github/workflows/code-test.yml +48 -0
  4. package/.husky/post-checkout +1 -1
  5. package/.husky/post-merge +7 -1
  6. package/.husky/pre-commit +3 -1
  7. package/@types/lib/Builder.d.ts +13 -13
  8. package/@types/lib/Builder.d.ts.map +1 -1
  9. package/@types/lib/Deployer.d.ts +19 -16
  10. package/@types/lib/Deployer.d.ts.map +1 -1
  11. package/@types/lib/Retriever.d.ts +15 -15
  12. package/@types/lib/Retriever.d.ts.map +1 -1
  13. package/@types/lib/cli.d.ts +1 -1
  14. package/@types/lib/cli.d.ts.map +1 -1
  15. package/@types/lib/index.d.ts +102 -51
  16. package/@types/lib/index.d.ts.map +1 -1
  17. package/@types/lib/metadataTypes/Asset.d.ts +71 -59
  18. package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
  19. package/@types/lib/metadataTypes/AttributeGroup.d.ts +6 -8
  20. package/@types/lib/metadataTypes/AttributeGroup.d.ts.map +1 -1
  21. package/@types/lib/metadataTypes/AttributeSet.d.ts +10 -21
  22. package/@types/lib/metadataTypes/AttributeSet.d.ts.map +1 -1
  23. package/@types/lib/metadataTypes/Automation.d.ts +47 -49
  24. package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
  25. package/@types/lib/metadataTypes/Campaign.d.ts +12 -18
  26. package/@types/lib/metadataTypes/Campaign.d.ts.map +1 -1
  27. package/@types/lib/metadataTypes/ContentArea.d.ts +13 -31
  28. package/@types/lib/metadataTypes/ContentArea.d.ts.map +1 -1
  29. package/@types/lib/metadataTypes/DataExtension.d.ts +28 -33
  30. package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
  31. package/@types/lib/metadataTypes/DataExtensionField.d.ts +15 -22
  32. package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
  33. package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts +12 -11
  34. package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts.map +1 -1
  35. package/@types/lib/metadataTypes/DataExtract.d.ts +13 -28
  36. package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -1
  37. package/@types/lib/metadataTypes/DataExtractType.d.ts +11 -10
  38. package/@types/lib/metadataTypes/DataExtractType.d.ts.map +1 -1
  39. package/@types/lib/metadataTypes/DeliveryProfile.d.ts +11 -10
  40. package/@types/lib/metadataTypes/DeliveryProfile.d.ts.map +1 -1
  41. package/@types/lib/metadataTypes/Discovery.d.ts +11 -10
  42. package/@types/lib/metadataTypes/Discovery.d.ts.map +1 -1
  43. package/@types/lib/metadataTypes/Email.d.ts +14 -34
  44. package/@types/lib/metadataTypes/Email.d.ts.map +1 -1
  45. package/@types/lib/metadataTypes/EmailSend.d.ts +18 -10
  46. package/@types/lib/metadataTypes/EmailSend.d.ts.map +1 -1
  47. package/@types/lib/metadataTypes/Event.d.ts +22 -16
  48. package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
  49. package/@types/lib/metadataTypes/FileLocation.d.ts +11 -10
  50. package/@types/lib/metadataTypes/FileLocation.d.ts.map +1 -1
  51. package/@types/lib/metadataTypes/FileTransfer.d.ts +12 -18
  52. package/@types/lib/metadataTypes/FileTransfer.d.ts.map +1 -1
  53. package/@types/lib/metadataTypes/Filter.d.ts +11 -10
  54. package/@types/lib/metadataTypes/Filter.d.ts.map +1 -1
  55. package/@types/lib/metadataTypes/Folder.d.ts +49 -35
  56. package/@types/lib/metadataTypes/Folder.d.ts.map +1 -1
  57. package/@types/lib/metadataTypes/ImportFile.d.ts +16 -15
  58. package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
  59. package/@types/lib/metadataTypes/Journey.d.ts +55 -35
  60. package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
  61. package/@types/lib/metadataTypes/List.d.ts +13 -12
  62. package/@types/lib/metadataTypes/List.d.ts.map +1 -1
  63. package/@types/lib/metadataTypes/MetadataType.d.ts +73 -26
  64. package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
  65. package/@types/lib/metadataTypes/MobileCode.d.ts +12 -20
  66. package/@types/lib/metadataTypes/MobileCode.d.ts.map +1 -1
  67. package/@types/lib/metadataTypes/MobileKeyword.d.ts +23 -14
  68. package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
  69. package/@types/lib/metadataTypes/MobileMessage.d.ts +18 -42
  70. package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -1
  71. package/@types/lib/metadataTypes/Query.d.ts +15 -12
  72. package/@types/lib/metadataTypes/Query.d.ts.map +1 -1
  73. package/@types/lib/metadataTypes/Role.d.ts +12 -11
  74. package/@types/lib/metadataTypes/Role.d.ts.map +1 -1
  75. package/@types/lib/metadataTypes/Script.d.ts +18 -25
  76. package/@types/lib/metadataTypes/Script.d.ts.map +1 -1
  77. package/@types/lib/metadataTypes/SendClassification.d.ts +13 -10
  78. package/@types/lib/metadataTypes/SendClassification.d.ts.map +1 -1
  79. package/@types/lib/metadataTypes/SenderProfile.d.ts +12 -25
  80. package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -1
  81. package/@types/lib/metadataTypes/TransactionalEmail.d.ts +18 -12
  82. package/@types/lib/metadataTypes/TransactionalEmail.d.ts.map +1 -1
  83. package/@types/lib/metadataTypes/TransactionalMessage.d.ts +12 -32
  84. package/@types/lib/metadataTypes/TransactionalMessage.d.ts.map +1 -1
  85. package/@types/lib/metadataTypes/TransactionalPush.d.ts +15 -21
  86. package/@types/lib/metadataTypes/TransactionalPush.d.ts.map +1 -1
  87. package/@types/lib/metadataTypes/TransactionalSMS.d.ts +16 -18
  88. package/@types/lib/metadataTypes/TransactionalSMS.d.ts.map +1 -1
  89. package/@types/lib/metadataTypes/TriggeredSend.d.ts +19 -24
  90. package/@types/lib/metadataTypes/TriggeredSend.d.ts.map +1 -1
  91. package/@types/lib/metadataTypes/User.d.ts +23 -40
  92. package/@types/lib/metadataTypes/User.d.ts.map +1 -1
  93. package/@types/lib/metadataTypes/Verification.d.ts +16 -13
  94. package/@types/lib/metadataTypes/Verification.d.ts.map +1 -1
  95. package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts +24 -14
  96. package/@types/lib/metadataTypes/definitions/AttributeGroup.definition.d.ts +3 -0
  97. package/@types/lib/metadataTypes/definitions/AttributeSet.definition.d.ts +5 -0
  98. package/@types/lib/metadataTypes/definitions/Automation.definition.d.ts +16 -0
  99. package/@types/lib/metadataTypes/definitions/Campaign.definition.d.ts +1 -0
  100. package/@types/lib/metadataTypes/definitions/ContentArea.definition.d.ts +1 -0
  101. package/@types/lib/metadataTypes/definitions/DataExtension.definition.d.ts +1 -0
  102. package/@types/lib/metadataTypes/definitions/DataExtensionField.definition.d.ts +1 -0
  103. package/@types/lib/metadataTypes/definitions/DataExtensionTemplate.definition.d.ts +1 -0
  104. package/@types/lib/metadataTypes/definitions/DataExtract.definition.d.ts +1 -0
  105. package/@types/lib/metadataTypes/definitions/DataExtractType.definition.d.ts +1 -0
  106. package/@types/lib/metadataTypes/definitions/DeliveryProfile.definition.d.ts +1 -0
  107. package/@types/lib/metadataTypes/definitions/Discovery.definition.d.ts +1 -0
  108. package/@types/lib/metadataTypes/definitions/Email.definition.d.ts +1 -0
  109. package/@types/lib/metadataTypes/definitions/EmailSend.definition.d.ts +8 -0
  110. package/@types/lib/metadataTypes/definitions/Event.definition.d.ts +10 -1
  111. package/@types/lib/metadataTypes/definitions/FileLocation.definition.d.ts +1 -0
  112. package/@types/lib/metadataTypes/definitions/FileTransfer.definition.d.ts +1 -0
  113. package/@types/lib/metadataTypes/definitions/Filter.definition.d.ts +1 -0
  114. package/@types/lib/metadataTypes/definitions/Folder.definition.d.ts +1 -0
  115. package/@types/lib/metadataTypes/definitions/ImportFile.definition.d.ts +5 -0
  116. package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +13 -0
  117. package/@types/lib/metadataTypes/definitions/List.definition.d.ts +1 -0
  118. package/@types/lib/metadataTypes/definitions/MobileCode.definition.d.ts +1 -0
  119. package/@types/lib/metadataTypes/definitions/MobileKeyword.definition.d.ts +9 -0
  120. package/@types/lib/metadataTypes/definitions/MobileMessage.definition.d.ts +4 -0
  121. package/@types/lib/metadataTypes/definitions/Query.definition.d.ts +3 -0
  122. package/@types/lib/metadataTypes/definitions/Role.definition.d.ts +1 -0
  123. package/@types/lib/metadataTypes/definitions/Script.definition.d.ts +1 -0
  124. package/@types/lib/metadataTypes/definitions/SendClassification.definition.d.ts +3 -0
  125. package/@types/lib/metadataTypes/definitions/SenderProfile.definition.d.ts +1 -0
  126. package/@types/lib/metadataTypes/definitions/TransactionalEmail.definition.d.ts +6 -0
  127. package/@types/lib/metadataTypes/definitions/TransactionalMessage.definition.d.ts +1 -0
  128. package/@types/lib/metadataTypes/definitions/TransactionalPush.definition.d.ts +3 -0
  129. package/@types/lib/metadataTypes/definitions/TransactionalSMS.definition.d.ts +4 -0
  130. package/@types/lib/metadataTypes/definitions/TriggeredSend.definition.d.ts +6 -0
  131. package/@types/lib/metadataTypes/definitions/User.definition.d.ts +1 -0
  132. package/@types/lib/metadataTypes/definitions/Verification.definition.d.ts +3 -0
  133. package/@types/lib/util/auth.d.ts +19 -18
  134. package/@types/lib/util/auth.d.ts.map +1 -1
  135. package/@types/lib/util/businessUnit.d.ts +17 -17
  136. package/@types/lib/util/businessUnit.d.ts.map +1 -1
  137. package/@types/lib/util/cache.d.ts +34 -32
  138. package/@types/lib/util/cache.d.ts.map +1 -1
  139. package/@types/lib/util/cli.d.ts +30 -33
  140. package/@types/lib/util/cli.d.ts.map +1 -1
  141. package/@types/lib/util/config.d.ts +20 -20
  142. package/@types/lib/util/config.d.ts.map +1 -1
  143. package/@types/lib/util/devops.d.ts +21 -21
  144. package/@types/lib/util/devops.d.ts.map +1 -1
  145. package/@types/lib/util/file.d.ts +179 -18
  146. package/@types/lib/util/file.d.ts.map +1 -1
  147. package/@types/lib/util/init.config.d.ts +19 -19
  148. package/@types/lib/util/init.config.d.ts.map +1 -1
  149. package/@types/lib/util/init.d.ts +20 -20
  150. package/@types/lib/util/init.d.ts.map +1 -1
  151. package/@types/lib/util/init.git.d.ts +2 -2
  152. package/@types/lib/util/init.git.d.ts.map +1 -1
  153. package/@types/lib/util/init.npm.d.ts +2 -2
  154. package/@types/lib/util/init.npm.d.ts.map +1 -1
  155. package/@types/lib/util/replaceContentBlockReference.d.ts +55 -32
  156. package/@types/lib/util/replaceContentBlockReference.d.ts.map +1 -1
  157. package/@types/lib/util/util.d.ts +64 -39
  158. package/@types/lib/util/util.d.ts.map +1 -1
  159. package/@types/types/mcdev.d.d.ts +160 -52
  160. package/@types/types/mcdev.d.d.ts.map +1 -1
  161. package/boilerplate/files/.vscode/settings.json +1 -0
  162. package/boilerplate/forcedUpdates.json +4 -0
  163. package/boilerplate/gitignore-template +0 -1
  164. package/eslint.config.js +0 -1
  165. package/lib/Builder.js +13 -8
  166. package/lib/Deployer.js +13 -8
  167. package/lib/Retriever.js +4 -1
  168. package/lib/cli.js +384 -288
  169. package/lib/index.js +620 -241
  170. package/lib/metadataTypes/Asset.js +455 -209
  171. package/lib/metadataTypes/Automation.js +34 -0
  172. package/lib/metadataTypes/DataExtension.js +36 -31
  173. package/lib/metadataTypes/DataExtensionField.js +2 -3
  174. package/lib/metadataTypes/Event.js +227 -37
  175. package/lib/metadataTypes/Folder.js +64 -49
  176. package/lib/metadataTypes/Journey.js +340 -58
  177. package/lib/metadataTypes/MetadataType.js +272 -61
  178. package/lib/metadataTypes/MobileKeyword.js +12 -1
  179. package/lib/metadataTypes/Role.js +9 -7
  180. package/lib/metadataTypes/Script.js +4 -3
  181. package/lib/metadataTypes/SenderProfile.js +18 -5
  182. package/lib/metadataTypes/TransactionalEmail.js +2 -2
  183. package/lib/metadataTypes/TriggeredSend.js +21 -5
  184. package/lib/metadataTypes/User.js +31 -27
  185. package/lib/metadataTypes/definitions/Asset.definition.js +10 -2
  186. package/lib/metadataTypes/definitions/AttributeGroup.definition.js +1 -0
  187. package/lib/metadataTypes/definitions/AttributeSet.definition.js +11 -0
  188. package/lib/metadataTypes/definitions/Automation.definition.js +9 -0
  189. package/lib/metadataTypes/definitions/Campaign.definition.js +1 -0
  190. package/lib/metadataTypes/definitions/ContentArea.definition.js +1 -0
  191. package/lib/metadataTypes/definitions/DataExtension.definition.js +1 -0
  192. package/lib/metadataTypes/definitions/DataExtensionField.definition.js +1 -0
  193. package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +1 -0
  194. package/lib/metadataTypes/definitions/DataExtract.definition.js +2 -1
  195. package/lib/metadataTypes/definitions/DataExtractType.definition.js +1 -0
  196. package/lib/metadataTypes/definitions/DeliveryProfile.definition.js +1 -0
  197. package/lib/metadataTypes/definitions/Discovery.definition.js +1 -0
  198. package/lib/metadataTypes/definitions/Email.definition.js +1 -0
  199. package/lib/metadataTypes/definitions/EmailSend.definition.js +8 -0
  200. package/lib/metadataTypes/definitions/Event.definition.js +9 -8
  201. package/lib/metadataTypes/definitions/FileLocation.definition.js +1 -0
  202. package/lib/metadataTypes/definitions/FileTransfer.definition.js +4 -0
  203. package/lib/metadataTypes/definitions/Filter.definition.js +1 -0
  204. package/lib/metadataTypes/definitions/Folder.definition.js +10 -8
  205. package/lib/metadataTypes/definitions/ImportFile.definition.js +8 -1
  206. package/lib/metadataTypes/definitions/Journey.definition.js +28 -0
  207. package/lib/metadataTypes/definitions/List.definition.js +1 -0
  208. package/lib/metadataTypes/definitions/MobileCode.definition.js +1 -0
  209. package/lib/metadataTypes/definitions/MobileKeyword.definition.js +7 -0
  210. package/lib/metadataTypes/definitions/MobileMessage.definition.js +9 -0
  211. package/lib/metadataTypes/definitions/Query.definition.js +3 -0
  212. package/lib/metadataTypes/definitions/Role.definition.js +1 -0
  213. package/lib/metadataTypes/definitions/Script.definition.js +1 -0
  214. package/lib/metadataTypes/definitions/SendClassification.definition.js +4 -0
  215. package/lib/metadataTypes/definitions/SenderProfile.definition.js +1 -0
  216. package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +7 -0
  217. package/lib/metadataTypes/definitions/TransactionalMessage.definition.js +1 -0
  218. package/lib/metadataTypes/definitions/TransactionalPush.definition.js +3 -0
  219. package/lib/metadataTypes/definitions/TransactionalSMS.definition.js +4 -0
  220. package/lib/metadataTypes/definitions/TriggeredSend.definition.js +10 -3
  221. package/lib/metadataTypes/definitions/User.definition.js +3 -0
  222. package/lib/metadataTypes/definitions/Verification.definition.js +1 -0
  223. package/lib/util/auth.js +0 -1
  224. package/lib/util/cache.js +35 -0
  225. package/lib/util/cli.js +96 -140
  226. package/lib/util/config.js +11 -19
  227. package/lib/util/devops.js +42 -43
  228. package/lib/util/file.js +7 -10
  229. package/lib/util/init.config.js +6 -10
  230. package/lib/util/init.git.js +43 -57
  231. package/lib/util/init.js +35 -59
  232. package/lib/util/replaceContentBlockReference.js +110 -61
  233. package/lib/util/util.js +90 -4
  234. package/package.json +22 -19
  235. package/test/general.test.js +1144 -172
  236. package/test/mockRoot/.mcdevrc.json +1 -1
  237. package/test/mockRoot/deploy/testInstance/testBU/event/testExisting_event.event-meta.json +201 -0
  238. package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withExistingDE.event-meta.json +233 -0
  239. package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withSchema.event-meta.json +194 -0
  240. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD.mobileKeyword-meta.json +1 -0
  241. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD_BLOCKED.mobileKeyword-meta.json +1 -0
  242. package/test/resourceFactory.js +43 -11
  243. package/test/resources/1111111/dataFolder/retrieve-ContentTypeINshared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +364 -0
  244. package/test/resources/9999999/asset/{block-1157-retrieve-expected.html → build-asset_htmlblock-expected.html} +1 -1
  245. package/test/resources/9999999/asset/build-asset_htmlblock-expected.json +29 -0
  246. package/test/resources/9999999/asset/build-templatebasedemail-expected.json +65 -0
  247. package/test/resources/9999999/asset/resolveId-1295064-noPath-expected.json +3 -3
  248. package/test/resources/9999999/asset/resolveId-1295064-withPath-expected.json +3 -3
  249. package/test/resources/9999999/asset/retrieve-templatebasedemail-expected.json +65 -0
  250. package/test/resources/9999999/asset/template-emailTemplate-expected.json +20 -0
  251. package/test/resources/9999999/asset/template-templatebasedemail-expected.json +65 -0
  252. package/test/resources/9999999/asset/template-testExisting_asset_htmlblock-expected.json +29 -0
  253. package/test/resources/9999999/asset/testExisting_asset_htmlblock-retrieve-expected.html +23 -0
  254. package/test/resources/9999999/asset/{block-1157-retrieve-expected.json → testExisting_asset_htmlblock-retrieve-expected.json} +3 -3
  255. package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-key-expected.html +6 -6
  256. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-id-expected.amp +1 -1
  257. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-key-expected.amp +4 -4
  258. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-name-expected.amp +1 -1
  259. package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-key-expected.amp +4 -4
  260. package/test/resources/9999999/asset/v1/content/assets/1295064/get-response.json +4 -4
  261. package/test/resources/9999999/asset/v1/content/assets/1295065/get-response.json +60 -0
  262. package/test/resources/9999999/asset/v1/content/assets/1295066/get-response.json +60 -0
  263. package/test/resources/9999999/asset/v1/content/assets/5289/get-response.json +75 -0
  264. package/test/resources/9999999/asset/v1/content/assets/808714/get-response.json +3 -3
  265. package/test/resources/9999999/asset/v1/content/assets/950143/get-response.json +97 -0
  266. package/test/resources/9999999/asset/v1/content/assets/get-response-customerKey=testExisting_asset.json +1 -1
  267. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN195,196,197,198,199,200,201,202,203,210,211,212,213,3.json +78 -2
  268. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,14,193,194,15,195,196,197,198,199,200,201,202,203,210,211,212,213,3,207,208,209,5,214,4,215,216.json +370 -0
  269. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,14,193,194,15,195,196,197,198,199,200,201,202,203,210,211,212,213,3,215,216,217,218,219,220,221,222.json +243 -0
  270. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1,207,208,209,5.json +229 -0
  271. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1.json +98 -1
  272. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN217,218,219,220,221,222,223,224,225,226,227,228.json +7 -0
  273. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN223,224,225,226,227,228,214,4.json +35 -0
  274. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN223,224,225,226,227,228.json +7 -0
  275. package/test/resources/9999999/asset/v1/content/assets/query/{post-response-customerKey=mcdev-issue-1157.json → post-response-customerKey=testExisting_asset_htmlblock.json} +2 -2
  276. package/test/resources/9999999/automation/v1/queries/get-response-Name=testExisting_query.json +24 -0
  277. package/test/resources/9999999/automation/v1/scripts/get-response-name=testExisting_script.json +17 -0
  278. package/test/resources/9999999/automation/v1/scripts/get-response.json +2 -2
  279. package/test/resources/9999999/dataExtension/retrieve-CustomerKey=testNew_event_withSchema-response.xml +50 -0
  280. package/test/resources/9999999/dataExtension/retrieve-createdViaEvent-response.xml +50 -0
  281. package/test/resources/9999999/dataExtension/retrieve-response.xml +48 -0
  282. package/test/resources/9999999/dataExtension/retrieve_event_withSchema-expected.json +219 -0
  283. package/test/resources/9999999/dataExtension/update-afterCreatedViaEvent-response.xml +55 -0
  284. package/test/resources/9999999/dataExtension/update-callout-afterCreatedViaEvent-expected.xml +1 -0
  285. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_event_withSchema-response.xml +461 -0
  286. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKeyINtestExisting_dataExtension,testNew_dataExtension-response.xml +133 -0
  287. package/test/resources/9999999/dataExtensionField/retrieve-response.xml +870 -0
  288. package/test/resources/9999999/dataFolder/retrieve-ContentType=asset-shared-QAA-response.xml +70 -0
  289. package/test/resources/9999999/dataFolder/retrieve-ContentType=asset-shared-response.xml +70 -0
  290. package/test/resources/9999999/dataFolder/retrieve-ContentType=journey-response.xml +48 -0
  291. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,automatio,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,triggered,triggered,useriniti-response.xml +519 -0
  292. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,dataexten,salesforc,shared_da,shared_da,shared_sa,synchroni,automatio,useriniti,journey,mysubs,list,publicati,queryacti,ssjsactiv,triggered,triggered-response.xml +519 -0
  293. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,journey-response.xml +92 -0
  294. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +115 -0
  295. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,ssjsactivity-response.xml +92 -0
  296. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared-QAA-response.xml +70 -0
  297. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset-shared,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +431 -0
  298. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINautomations,queryactivity-response.xml +70 -0
  299. package/test/resources/9999999/dataFolder/{retrieve-response.xml → retrieve-ContentTypeINdataextension,hidden,queryactivity,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml} +32 -119
  300. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINdataextension,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +117 -0
  301. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINhidden,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +46 -0
  302. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINshared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +251 -0
  303. package/test/resources/9999999/dataFolder/retrieve-response-.xml +519 -0
  304. package/test/resources/9999999/event/build-expected.json +227 -0
  305. package/test/resources/9999999/event/get-expected.json +234 -0
  306. package/test/resources/9999999/event/post_withExistingDE-callout-expected.json +20 -0
  307. package/test/resources/9999999/event/post_withExistingDE-expected.json +23 -0
  308. package/test/resources/9999999/event/post_withSchema-callout-expected.json +199 -0
  309. package/test/resources/9999999/event/post_withSchema-expected.json +234 -0
  310. package/test/resources/9999999/event/put-callout-expected.json +204 -0
  311. package/test/resources/9999999/event/put-expected.json +233 -0
  312. package/test/resources/9999999/event/template-expected.json +227 -0
  313. package/test/resources/9999999/interaction/v1/eventDefinitions/get-response.json +252 -2
  314. package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event/delete-response.txt +0 -0
  315. package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event/put-response.json +242 -0
  316. package/test/resources/9999999/interaction/v1/eventDefinitions/post_withExistingDE-response.json +28 -0
  317. package/test/resources/9999999/interaction/v1/eventDefinitions/post_withSchema-response.json +243 -0
  318. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/delete-response.txt +1 -0
  319. package/test/resources/9999999/interaction/v1/interactions/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/get-response.json +4 -4
  320. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response.json +4 -4
  321. package/test/resources/9999999/interaction/v1/interactions/publishAsync/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/post-response.json +4 -0
  322. package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-failed.json +34 -0
  323. package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-success.json +5 -0
  324. package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-successWarnings.json +36 -0
  325. package/test/resources/9999999/journey/build-expected.json +5 -5
  326. package/test/resources/9999999/journey/get-multistep-expected.json +1 -1
  327. package/test/resources/9999999/journey/get-quicksend-expected.json +5 -5
  328. package/test/resources/9999999/journey/get-quicksend-rcb-id-expected.json +1 -1
  329. package/test/resources/9999999/journey/get-quicksend-rcb-key-expected.json +7 -7
  330. package/test/resources/9999999/journey/get-quicksend-rcb-name-expected.json +1 -1
  331. package/test/resources/9999999/journey/post-expected.json +1 -1
  332. package/test/resources/9999999/journey/publish-callout-expected.json +1 -0
  333. package/test/resources/9999999/journey/put-expected.json +1 -1
  334. package/test/resources/9999999/journey/template-expected.json +5 -5
  335. package/test/resources/9999999/mobileKeyword/build-expected.json +1 -0
  336. package/test/resources/9999999/mobileKeyword/get-expected.json +1 -0
  337. package/test/resources/9999999/mobileKeyword/post-create-expected.json +1 -0
  338. package/test/resources/9999999/mobileKeyword/template-expected.json +1 -0
  339. package/test/resources/{1111111/accountUser/retrieve-CustomerKey=testExisting_userANDActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml → 9999999/queryDefinition/retrieve-CustomerKey=badANDStatus=Active-response.xml} +10 -11
  340. package/test/resources/9999999/script/get_ampincluded-rcb-key-expected.html +2 -2
  341. package/test/resources/9999999/script/get_ampscript-expected.html +1 -0
  342. package/test/resources/9999999/script/get_ampscript-rcb-id-expected.html +1 -0
  343. package/test/resources/9999999/script/get_ampscript-rcb-key-expected.html +3 -2
  344. package/test/resources/9999999/script/get_ampscript-rcb-name-expected.html +3 -0
  345. package/test/resources/9999999/script/get_mixed-expected.html +2 -2
  346. package/test/resources/9999999/script/get_mixed-rcb-key-expected.html +2 -2
  347. package/test/resources/9999999/senderProfile/get-rcb-key-expected.json +4 -4
  348. package/test/resources/9999999/senderProfile/retrieve-response.xml +1 -1
  349. package/test/resources/9999999/triggeredSend/get-rcb-key-expected.json +4 -4
  350. package/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml +1 -1
  351. package/test/type.asset.test.js +189 -42
  352. package/test/type.automation.test.js +135 -59
  353. package/test/type.dataExtension.test.js +4 -4
  354. package/test/type.dataExtract.test.js +4 -4
  355. package/test/type.emailSend.test.js +3 -3
  356. package/test/type.event.test.js +286 -7
  357. package/test/type.journey.test.js +335 -9
  358. package/test/type.query.test.js +33 -29
  359. package/test/type.script.test.js +61 -11
  360. package/test/type.senderProfile.test.js +36 -3
  361. package/test/type.transactionalEmail.test.js +3 -3
  362. package/test/type.triggeredSend.test.js +75 -6
  363. package/test/type.user.test.js +1 -1
  364. package/test/utils.js +31 -9
  365. package/tsconfig.json +6 -1
  366. package/{jsconfig.json → tsconfig.npmScripts.json} +1 -1
  367. package/tsconfig.precommit.json +26 -0
  368. package/types/mcdev.d.js +39 -14
  369. /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-response.xml → retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-QAA-response.xml} +0 -0
  370. /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=falseANDEmaillike@-response.xml → retrieve-ActiveFlag=falseANDEmaillike@-QAA-response.xml} +0 -0
  371. /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-response.xml → retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-QAA-response.xml} +0 -0
  372. /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml → retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-QAA-response.xml} +0 -0
  373. /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=trueANDEmaillike@-response.xml → retrieve-ActiveFlag=trueANDEmaillike@-QAA-response.xml} +0 -0
  374. /package/test/resources/1111111/businessUnit/{retrieve-ID=1111111-response.xml → retrieve-ID=1111111-QAA-response.xml} +0 -0
  375. /package/test/resources/1111111/dataFolder/{retrieve-ContentType=synchronizeddataextensionORContentType=shared_salesforcedataextensionORContentType=shared_dataextensionORContentType=shared_dataORContentType=salesforcedataextensionORContentType=dataextensionORContentType=hidden-response.xml → retrieve-ContentTypeINdataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml} +0 -0
  376. /package/test/resources/1111111/dataFolder/{retrieve-response.xml → retrieve-response-.xml} +0 -0
  377. /package/test/resources/9999999/dataFolder/{retrieve-ContentType=asset-sharedORContentType=asset-response.xml → retrieve-ContentTypeINasset,asset-shared-response.xml} +0 -0
  378. /package/test/resources/9999999/dataFolder/{retrieve-ContentType=contextual_suppression_listORContentType=publicationORContentType=suppression_listORContentType=mysubsORContentType=list-response.xml → retrieve-ContentTypeINcontextual_suppression_list,list,mysubs,publication,suppression_list-response.xml} +0 -0
  379. /package/test/resources/9999999/dataFolder/{retrieve-ContentType=synchronizeddataextensionORContentType=shared_salesforcedataextensionORContentType=shared_dataextensionORContentType=shared_dataORContentType=salesforcedataextensionORContentType=dataextensionORContentType=hidden-response.xml → retrieve-ContentTypeINdataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml} +0 -0
  380. /package/test/resources/9999999/dataFolder/{retrieve-ContentType=triggered_send_journeybuilderORContentType=triggered_sendORContentType=hidden-response.xml → retrieve-ContentTypeINhidden,triggered_send,triggered_send_journeybuilder-response.xml} +0 -0
@@ -61,7 +61,7 @@ describe('GENERAL', () => {
61
61
 
62
62
  assert.equal(
63
63
  testUtils.getAPIHistoryLength(),
64
- 51,
64
+ 36,
65
65
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
66
66
  );
67
67
  return;
@@ -110,7 +110,7 @@ describe('GENERAL', () => {
110
110
 
111
111
  assert.equal(
112
112
  testUtils.getAPIHistoryLength(),
113
- 51,
113
+ 36,
114
114
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
115
115
  );
116
116
  return;
@@ -159,7 +159,7 @@ describe('GENERAL', () => {
159
159
 
160
160
  assert.equal(
161
161
  testUtils.getAPIHistoryLength(),
162
- 51,
162
+ 36,
163
163
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
164
164
  );
165
165
  return;
@@ -181,7 +181,11 @@ describe('GENERAL', () => {
181
181
  // retrieve result
182
182
  assert.deepEqual(
183
183
  replace['testInstance/testBU'].asset,
184
- ['testExisting_asset_message'],
184
+ [
185
+ 'testExisting_asset_htmlblock',
186
+ 'testExisting_htmlblock1',
187
+ 'testExisting_asset_message',
188
+ ],
185
189
  'should have found the right assets that need updating'
186
190
  );
187
191
  assert.deepEqual(
@@ -191,7 +195,11 @@ describe('GENERAL', () => {
191
195
  );
192
196
  assert.deepEqual(
193
197
  replace['testInstance/testBU'].script,
194
- ['testExisting_script_ampincluded', 'testExisting_script_mixed'],
198
+ [
199
+ 'testExisting_script_ampscript',
200
+ 'testExisting_script_ampincluded',
201
+ 'testExisting_script_mixed',
202
+ ],
195
203
  'should have found the right scripts that need updating'
196
204
  );
197
205
  assert.deepEqual(
@@ -222,7 +230,7 @@ describe('GENERAL', () => {
222
230
 
223
231
  assert.equal(
224
232
  testUtils.getAPIHistoryLength(),
225
- 116,
233
+ 83,
226
234
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
227
235
  );
228
236
  return;
@@ -283,7 +291,7 @@ describe('GENERAL', () => {
283
291
 
284
292
  assert.equal(
285
293
  testUtils.getAPIHistoryLength(),
286
- 116,
294
+ 83,
287
295
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
288
296
  );
289
297
  return;
@@ -303,7 +311,11 @@ describe('GENERAL', () => {
303
311
  // retrieve result
304
312
  assert.deepEqual(
305
313
  replace['testInstance/testBU'].asset,
306
- ['testExisting_asset_message'],
314
+ [
315
+ 'testExisting_asset_htmlblock',
316
+ 'testExisting_htmlblock1',
317
+ 'testExisting_asset_message',
318
+ ],
307
319
  'should have found the right assets that need updating'
308
320
  );
309
321
  assert.deepEqual(
@@ -344,7 +356,7 @@ describe('GENERAL', () => {
344
356
 
345
357
  assert.equal(
346
358
  testUtils.getAPIHistoryLength(),
347
- 116,
359
+ 83,
348
360
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
349
361
  );
350
362
  return;
@@ -376,7 +388,7 @@ describe('GENERAL', () => {
376
388
  );
377
389
  assert.equal(
378
390
  testUtils.getAPIHistoryLength(),
379
- 6,
391
+ 3,
380
392
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
381
393
  );
382
394
  });
@@ -461,8 +473,8 @@ describe('GENERAL', () => {
461
473
  );
462
474
  assert.equal(
463
475
  Object.keys(result[buName]['dataExtension']).length,
464
- 5,
465
- 'retrieve should have returned 5 dataExtension'
476
+ 7,
477
+ 'retrieve should have returned 7 dataExtension'
466
478
  );
467
479
  assert.equal(
468
480
  Object.keys(result[buName]['dataExtract']).length,
@@ -510,7 +522,7 @@ describe('GENERAL', () => {
510
522
  assert.equal(deployedTypes[0], 'dataExtract', 'deploy should have returned 1 type');
511
523
  assert.equal(
512
524
  testUtils.getAPIHistoryLength(),
513
- 8,
525
+ 5,
514
526
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
515
527
  );
516
528
  });
@@ -619,14 +631,79 @@ describe('GENERAL', () => {
619
631
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
620
632
  );
621
633
  });
634
+
635
+ it('deploy multiple type with keys and --noUpdate', async () => {
636
+ handler.setOptions({ noUpdate: true });
637
+
638
+ const argvMetadata = [
639
+ 'dataExtension',
640
+ 'dataExtract:wrong-key',
641
+ 'senderProfile:testExisting_senderProfile',
642
+ 'query:testExisting_query',
643
+ 'query:key:wrong-key2',
644
+ ];
645
+ const typeKeyCombo = handler.metadataToTypeKey(argvMetadata);
646
+ assert.notEqual(
647
+ typeof typeKeyCombo,
648
+ 'undefined',
649
+ 'typeKeyCombo should not be undefined'
650
+ );
651
+ const buName = 'testInstance/testBU';
652
+ const result = await handler.deploy(buName, typeKeyCombo);
653
+ // THEN
654
+ assert.equal(process.exitCode, 0, 'deploy should not have thrown an error');
655
+
656
+ const deployedTypes = Object.keys(result[buName]);
657
+ assert.equal(deployedTypes.length, 3, 'deploy should have returned 3 types');
658
+ assert.equal(
659
+ deployedTypes.includes('dataExtension'),
660
+ true,
661
+ 'deploy should have returned dataExtension'
662
+ );
663
+ assert.equal(
664
+ deployedTypes.includes('dataExtract'),
665
+ false,
666
+ 'deploy should have returned dataExtract'
667
+ );
668
+ assert.equal(
669
+ deployedTypes.includes('senderProfile'),
670
+ true,
671
+ 'deploy should have returned senderProfile'
672
+ );
673
+ assert.equal(
674
+ deployedTypes.includes('query'),
675
+ true,
676
+ 'deploy should have returned query'
677
+ );
678
+ assert.equal(
679
+ Object.keys(result[buName]['dataExtension']).length,
680
+ 1,
681
+ 'deploy should have returned 1 dataExtension'
682
+ );
683
+ assert.equal(
684
+ Object.keys(result[buName]['senderProfile']).length,
685
+ 0,
686
+ 'deploy should have returned 0 senderProfile'
687
+ );
688
+ assert.equal(
689
+ Object.keys(result[buName]['query']).length,
690
+ 0,
691
+ 'deploy should have returned 0 query'
692
+ );
693
+ assert.equal(
694
+ testUtils.getAPIHistoryLength(),
695
+ 12,
696
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
697
+ );
698
+ });
622
699
  });
623
700
 
624
701
  describe('template --metadata ~~~', () => {
625
- it('buildDefinition and buildTemplate multiple type with keys', async () => {
702
+ it('buildTemplate + buildDefinition for multiple types with keys', async () => {
626
703
  // download first before we test buildTemplate
627
704
  await handler.retrieve('testInstance/testBU', ['automation', 'query']);
628
705
 
629
- const expectedApiCallsRetrieve = 25;
706
+ const expectedApiCallsRetrieve = 24;
630
707
  assert.equal(
631
708
  testUtils.getAPIHistoryLength(),
632
709
  expectedApiCallsRetrieve,
@@ -730,16 +807,8 @@ describe('GENERAL', () => {
730
807
  );
731
808
  });
732
809
 
733
- it('build multiple type with keys', async () => {
734
- // download first before we test buildTemplate
735
- await handler.retrieve('testInstance/testBU', ['automation', 'query']);
736
-
737
- const expectedApiCallsRetrieve = 25;
738
- assert.equal(
739
- testUtils.getAPIHistoryLength(),
740
- expectedApiCallsRetrieve,
741
- 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
742
- );
810
+ it('buildTemplate + buildDefinition for multiple types with keys and --retrieve', async () => {
811
+ const expectedApiCallsRetrieve = 27;
743
812
 
744
813
  // preparation
745
814
  const argvMetadata = [
@@ -755,25 +824,33 @@ describe('GENERAL', () => {
755
824
  );
756
825
  const buName = 'testInstance/testBU';
757
826
 
758
- // *** build: buildTemplate and buildDefinition chained ***
759
- const definitionResult = await handler.build(
760
- buName,
827
+ handler.setOptions({ retrieve: true });
828
+
829
+ // *** buildTemplate ***
830
+ const templateResult = await handler.buildTemplate(
761
831
  buName,
762
832
  typeKeyCombo,
763
- 'testSourceMarket',
764
- 'testTargetMarket'
833
+ undefined,
834
+ 'testSourceMarket'
765
835
  );
766
- assert.equal(process.exitCode, 0, 'build should not have thrown an error');
767
-
768
- // *** buildTemplate ***
769
-
836
+ assert.equal(process.exitCode, 0, 'buildTemplate should not have thrown an error');
770
837
  // check automation
838
+ assert.equal(
839
+ templateResult.automation ? Object.keys(templateResult.automation).length : 0,
840
+ 1,
841
+ 'only one automation expected'
842
+ );
771
843
  assert.deepEqual(
772
844
  await testUtils.getActualTemplateJson('testExisting_automation', 'automation'),
773
845
  await testUtils.getExpectedJson('9999999', 'automation', 'template'),
774
846
  'returned template was not equal expected'
775
847
  );
776
848
  // check query
849
+ assert.equal(
850
+ templateResult.query ? Object.keys(templateResult.query).length : 0,
851
+ 1,
852
+ 'only one query expected'
853
+ );
777
854
  assert.deepEqual(
778
855
  await testUtils.getActualTemplateJson('testExisting_query', 'query'),
779
856
  await testUtils.getExpectedJson('9999999', 'query', 'template'),
@@ -784,6 +861,17 @@ describe('GENERAL', () => {
784
861
  ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'template', 'sql'));
785
862
 
786
863
  // *** buildDefinition ***
864
+ const definitionResult = await handler.buildDefinition(
865
+ buName,
866
+ typeKeyCombo,
867
+ undefined,
868
+ 'testTargetMarket'
869
+ );
870
+ assert.equal(
871
+ process.exitCode,
872
+ 0,
873
+ 'buildDefinition should not have thrown an error'
874
+ );
787
875
 
788
876
  // check automation
789
877
  assert.equal(
@@ -815,17 +903,17 @@ describe('GENERAL', () => {
815
903
  ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'build', 'sql'));
816
904
 
817
905
  assert.equal(
818
- testUtils.getAPIHistoryLength() - expectedApiCallsRetrieve,
819
- 0,
906
+ testUtils.getAPIHistoryLength(),
907
+ expectedApiCallsRetrieve,
820
908
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
821
909
  );
822
910
  });
823
911
 
824
- it('build multiple type with keys and --bulk', async () => {
912
+ it('buildTemplate + buildDefinition for multiple types with keys and --dependencies', async () => {
825
913
  // download first before we test buildTemplate
826
- await handler.retrieve('testInstance/testBU', ['automation', 'query']);
914
+ await handler.retrieve('testInstance/testBU');
827
915
 
828
- const expectedApiCallsRetrieve = 25;
916
+ const expectedApiCallsRetrieve = 74;
829
917
  assert.equal(
830
918
  testUtils.getAPIHistoryLength(),
831
919
  expectedApiCallsRetrieve,
@@ -846,26 +934,54 @@ describe('GENERAL', () => {
846
934
  );
847
935
  const buName = 'testInstance/testBU';
848
936
 
849
- // *** build: buildTemplate and buildDefinition chained ***
850
- const definitionResult = await handler.build(
937
+ // set skipInteraction to true to skip re-retrieving question
938
+ handler.setOptions({ dependencies: true, skipInteraction: true });
939
+
940
+ // *** buildTemplate ***
941
+ const templateResult = await handler.buildTemplate(
851
942
  buName,
852
- 'ignored',
853
943
  typeKeyCombo,
854
- 'testSourceMarket',
855
- 'deployment-target',
856
- true
944
+ undefined,
945
+ 'testSourceMarket'
857
946
  );
858
- assert.equal(process.exitCode, 0, 'build should not have thrown an error');
947
+ assert.equal(process.exitCode, 0, 'buildTemplate should not have thrown an error');
859
948
 
860
- // *** buildTemplate ***
949
+ // check type list
950
+ assert.deepEqual(
951
+ Object.keys(templateResult),
952
+ [
953
+ 'automation',
954
+ 'query',
955
+ 'dataExtract',
956
+ 'emailSend',
957
+ 'dataExtension',
958
+ 'sendClassification',
959
+ 'senderProfile',
960
+ 'fileTransfer',
961
+ 'importFile',
962
+ 'script',
963
+ 'verification',
964
+ ],
965
+ 'did not create deployment packages for all relevant types'
966
+ );
861
967
 
862
968
  // check automation
969
+ assert.equal(
970
+ templateResult.automation ? Object.keys(templateResult.automation).length : 0,
971
+ 1,
972
+ 'only one automation expected'
973
+ );
863
974
  assert.deepEqual(
864
975
  await testUtils.getActualTemplateJson('testExisting_automation', 'automation'),
865
976
  await testUtils.getExpectedJson('9999999', 'automation', 'template'),
866
977
  'returned template was not equal expected'
867
978
  );
868
979
  // check query
980
+ assert.equal(
981
+ templateResult.query ? Object.keys(templateResult.query).length : 0,
982
+ 1,
983
+ 'only one query expected'
984
+ );
869
985
  assert.deepEqual(
870
986
  await testUtils.getActualTemplateJson('testExisting_query', 'query'),
871
987
  await testUtils.getExpectedJson('9999999', 'query', 'template'),
@@ -875,33 +991,23 @@ describe('GENERAL', () => {
875
991
  await testUtils.getActualTemplateFile('testExisting_query', 'query', 'sql')
876
992
  ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'template', 'sql'));
877
993
 
878
- // *** buildDefinitionBulk ***
879
-
880
- // check automation
881
- assert.equal(
882
- definitionResult.automation?.['testInstance/testBU']?.testSourceMarket
883
- ? Object.keys(
884
- definitionResult.automation?.['testInstance/testBU']?.testSourceMarket
885
- ).length
886
- : 0,
887
- 1,
888
- 'only one automation expected'
994
+ // *** buildDefinition ***
995
+ const definitionResult = await handler.buildDefinition(
996
+ buName,
997
+ typeKeyCombo,
998
+ undefined,
999
+ 'testTargetMarket'
889
1000
  );
890
1001
  assert.equal(
891
- definitionResult.automation?.['testInstance/testBU']?.testTargetMarket
892
- ? Object.keys(
893
- definitionResult.automation?.['testInstance/testBU']?.testTargetMarket
894
- ).length
895
- : 0,
896
- 1,
897
- 'only one automation expected'
1002
+ process.exitCode,
1003
+ 0,
1004
+ 'buildDefinition should not have thrown an error'
898
1005
  );
1006
+
1007
+ // check automation
899
1008
  assert.equal(
900
- definitionResult.automation?.['testInstance/_ParentBU_']?.testTargetMarket
901
- ? Object.keys(
902
- definitionResult.automation?.['testInstance/_ParentBU_']
903
- ?.testTargetMarket
904
- ).length
1009
+ definitionResult.automation
1010
+ ? Object.keys(definitionResult.automation).length
905
1011
  : 0,
906
1012
  1,
907
1013
  'only one automation expected'
@@ -912,50 +1018,9 @@ describe('GENERAL', () => {
912
1018
  'returned deployment file was not equal expected'
913
1019
  );
914
1020
 
915
- // check if files were also created for other BU-market combos
916
- // testBU: testSourceMarket
917
- expect(
918
- await testUtils.getActualDeployFile(
919
- 'testExisting_automation',
920
- 'automation',
921
- 'json'
922
- )
923
- ).to.exist;
924
- // _ParentBU_: testTargetMarket
925
- expect(
926
- await testUtils.getActualDeployFile(
927
- 'testTemplated_automation',
928
- 'automation',
929
- 'json',
930
- '_ParentBU_'
931
- )
932
- ).to.exist;
933
-
934
1021
  // check query
935
1022
  assert.equal(
936
- definitionResult.query?.['testInstance/testBU']?.testSourceMarket
937
- ? Object.keys(
938
- definitionResult.query?.['testInstance/testBU']?.testSourceMarket
939
- ).length
940
- : 0,
941
- 1,
942
- 'only one query expected'
943
- );
944
- assert.equal(
945
- definitionResult.query?.['testInstance/testBU']?.testTargetMarket
946
- ? Object.keys(
947
- definitionResult.query?.['testInstance/testBU']?.testTargetMarket
948
- ).length
949
- : 0,
950
- 1,
951
- 'only one query expected'
952
- );
953
- assert.equal(
954
- definitionResult.query?.['testInstance/_ParentBU_']?.testTargetMarket
955
- ? Object.keys(
956
- definitionResult.query?.['testInstance/_ParentBU_']?.testTargetMarket
957
- ).length
958
- : 0,
1023
+ definitionResult.query ? Object.keys(definitionResult.query).length : 0,
959
1024
  1,
960
1025
  'only one query expected'
961
1026
  );
@@ -968,46 +1033,822 @@ describe('GENERAL', () => {
968
1033
  await testUtils.getActualDeployFile('testTemplated_query', 'query', 'sql')
969
1034
  ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'build', 'sql'));
970
1035
 
971
- // check if files were also created for other BU-market combos
972
- // testBU: testSourceMarket
973
- expect(await testUtils.getActualDeployFile('testExisting_query', 'query', 'json'))
974
- .to.exist;
975
- expect(await testUtils.getActualDeployFile('testExisting_query', 'query', 'sql')).to
976
- .exist;
977
- // _ParentBU_: testTargetMarket
978
- expect(
979
- await testUtils.getActualDeployFile(
980
- 'testTemplated_query',
981
- 'query',
982
- 'json',
983
- '_ParentBU_'
984
- )
985
- ).to.exist;
986
- expect(
987
- await testUtils.getActualDeployFile(
988
- 'testTemplated_query',
989
- 'query',
990
- 'sql',
991
- '_ParentBU_'
992
- )
993
- ).to.exist;
994
-
995
1036
  assert.equal(
996
1037
  testUtils.getAPIHistoryLength() - expectedApiCallsRetrieve,
997
- 0,
1038
+ 4,
998
1039
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
999
1040
  );
1000
1041
  });
1001
1042
 
1002
- it('buildTemplate + builDefinitionBulk multiple type with keys', async () => {
1003
- // download first before we test buildTemplate
1004
- await handler.retrieve('testInstance/testBU', ['automation', 'query']);
1043
+ it('buildTemplate + buildDefinition for multiple types with keys and --dependencies and --retrieve', async () => {
1044
+ const expectedApiCallsRetrieve = 78;
1005
1045
 
1006
- const expectedApiCallsRetrieve = 25;
1007
- assert.equal(
1008
- testUtils.getAPIHistoryLength(),
1009
- expectedApiCallsRetrieve,
1010
- 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1046
+ // preparation
1047
+ const argvMetadata = [
1048
+ 'automation:testExisting_automation',
1049
+ 'query:testExisting_query',
1050
+ 'query:bad',
1051
+ ];
1052
+ const typeKeyCombo = handler.metadataToTypeKey(argvMetadata);
1053
+ assert.notEqual(
1054
+ typeof typeKeyCombo,
1055
+ 'undefined',
1056
+ 'typeKeyCombo should not be undefined'
1057
+ );
1058
+ const buName = 'testInstance/testBU';
1059
+
1060
+ handler.setOptions({ dependencies: true, retrieve: true });
1061
+
1062
+ // *** buildTemplate ***
1063
+ const templateResult = await handler.buildTemplate(
1064
+ buName,
1065
+ typeKeyCombo,
1066
+ undefined,
1067
+ 'testSourceMarket'
1068
+ );
1069
+ assert.equal(process.exitCode, 0, 'buildTemplate should not have thrown an error');
1070
+
1071
+ // check type list
1072
+ assert.deepEqual(
1073
+ Object.keys(templateResult),
1074
+ [
1075
+ 'automation',
1076
+ 'query',
1077
+ 'dataExtract',
1078
+ 'emailSend',
1079
+ 'dataExtension',
1080
+ 'sendClassification',
1081
+ 'senderProfile',
1082
+ 'fileTransfer',
1083
+ 'importFile',
1084
+ 'script',
1085
+ 'verification',
1086
+ ],
1087
+ 'did not create deployment packages for all relevant types'
1088
+ );
1089
+
1090
+ // check automation
1091
+ assert.equal(
1092
+ templateResult.automation ? Object.keys(templateResult.automation).length : 0,
1093
+ 1,
1094
+ 'only one automation expected'
1095
+ );
1096
+ assert.deepEqual(
1097
+ await testUtils.getActualTemplateJson('testExisting_automation', 'automation'),
1098
+ await testUtils.getExpectedJson('9999999', 'automation', 'template'),
1099
+ 'returned template was not equal expected'
1100
+ );
1101
+ // check query
1102
+ assert.equal(
1103
+ templateResult.query ? Object.keys(templateResult.query).length : 0,
1104
+ 1,
1105
+ 'only one query expected'
1106
+ );
1107
+ assert.deepEqual(
1108
+ await testUtils.getActualTemplateJson('testExisting_query', 'query'),
1109
+ await testUtils.getExpectedJson('9999999', 'query', 'template'),
1110
+ 'returned template JSON of retrieveAsTemplate was not equal expected'
1111
+ );
1112
+ expect(
1113
+ await testUtils.getActualTemplateFile('testExisting_query', 'query', 'sql')
1114
+ ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'template', 'sql'));
1115
+
1116
+ // *** buildDefinition ***
1117
+ const definitionResult = await handler.buildDefinition(
1118
+ buName,
1119
+ typeKeyCombo,
1120
+ undefined,
1121
+ 'testTargetMarket'
1122
+ );
1123
+ assert.equal(
1124
+ process.exitCode,
1125
+ 0,
1126
+ 'buildDefinition should not have thrown an error'
1127
+ );
1128
+
1129
+ // check automation
1130
+ assert.equal(
1131
+ definitionResult.automation
1132
+ ? Object.keys(definitionResult.automation).length
1133
+ : 0,
1134
+ 1,
1135
+ 'only one automation expected'
1136
+ );
1137
+ assert.deepEqual(
1138
+ await testUtils.getActualDeployJson('testTemplated_automation', 'automation'),
1139
+ await testUtils.getExpectedJson('9999999', 'automation', 'build'),
1140
+ 'returned deployment file was not equal expected'
1141
+ );
1142
+
1143
+ // check query
1144
+ assert.equal(
1145
+ definitionResult.query ? Object.keys(definitionResult.query).length : 0,
1146
+ 1,
1147
+ 'only one query expected'
1148
+ );
1149
+ assert.deepEqual(
1150
+ await testUtils.getActualDeployJson('testTemplated_query', 'query'),
1151
+ await testUtils.getExpectedJson('9999999', 'query', 'build'),
1152
+ 'returned deployment JSON was not equal expected'
1153
+ );
1154
+ expect(
1155
+ await testUtils.getActualDeployFile('testTemplated_query', 'query', 'sql')
1156
+ ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'build', 'sql'));
1157
+
1158
+ assert.equal(
1159
+ testUtils.getAPIHistoryLength(),
1160
+ expectedApiCallsRetrieve,
1161
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1162
+ );
1163
+ });
1164
+
1165
+ it('buildTemplate + buildDefinitionBulk multiple type with keys', async () => {
1166
+ // download first before we test buildTemplate
1167
+ await handler.retrieve('testInstance/testBU', ['automation', 'query']);
1168
+
1169
+ const expectedApiCallsRetrieve = 24;
1170
+ assert.equal(
1171
+ testUtils.getAPIHistoryLength(),
1172
+ expectedApiCallsRetrieve,
1173
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1174
+ );
1175
+
1176
+ // preparation
1177
+ const argvMetadata = [
1178
+ 'automation:testExisting_automation',
1179
+ 'query:testExisting_query',
1180
+ 'query:bad',
1181
+ ];
1182
+ const typeKeyCombo = handler.metadataToTypeKey(argvMetadata);
1183
+ assert.notEqual(
1184
+ typeof typeKeyCombo,
1185
+ 'undefined',
1186
+ 'typeKeyCombo should not be undefined'
1187
+ );
1188
+ const buName = 'testInstance/testBU';
1189
+
1190
+ // *** buildTemplate ***
1191
+ const templateResult = await handler.buildTemplate(
1192
+ buName,
1193
+ typeKeyCombo,
1194
+ undefined,
1195
+ 'testSourceMarket'
1196
+ );
1197
+ assert.equal(process.exitCode, 0, 'buildTemplate should not have thrown an error');
1198
+ // check automation
1199
+ assert.equal(
1200
+ templateResult.automation ? Object.keys(templateResult.automation).length : 0,
1201
+ 1,
1202
+ 'only one automation expected'
1203
+ );
1204
+ assert.deepEqual(
1205
+ await testUtils.getActualTemplateJson('testExisting_automation', 'automation'),
1206
+ await testUtils.getExpectedJson('9999999', 'automation', 'template'),
1207
+ 'returned template was not equal expected'
1208
+ );
1209
+ // check query
1210
+ assert.equal(
1211
+ templateResult.query ? Object.keys(templateResult.query).length : 0,
1212
+ 1,
1213
+ 'only one query expected'
1214
+ );
1215
+ assert.deepEqual(
1216
+ await testUtils.getActualTemplateJson('testExisting_query', 'query'),
1217
+ await testUtils.getExpectedJson('9999999', 'query', 'template'),
1218
+ 'returned template JSON of retrieveAsTemplate was not equal expected'
1219
+ );
1220
+ expect(
1221
+ await testUtils.getActualTemplateFile('testExisting_query', 'query', 'sql')
1222
+ ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'template', 'sql'));
1223
+
1224
+ // *** buildDefinitionBulk chained ***
1225
+ const definitionResult = await handler.buildDefinitionBulk(
1226
+ 'deployment-target',
1227
+ typeKeyCombo
1228
+ );
1229
+ assert.equal(
1230
+ process.exitCode,
1231
+ 0,
1232
+ 'buildDefinitionBulk should not have thrown an error'
1233
+ );
1234
+
1235
+ // check automation
1236
+ assert.equal(
1237
+ definitionResult.automation?.['testInstance/testBU']?.testSourceMarket
1238
+ ? Object.keys(
1239
+ definitionResult.automation?.['testInstance/testBU']?.testSourceMarket
1240
+ ).length
1241
+ : 0,
1242
+ 1,
1243
+ 'only one automation expected'
1244
+ );
1245
+ assert.equal(
1246
+ definitionResult.automation?.['testInstance/testBU']?.testTargetMarket
1247
+ ? Object.keys(
1248
+ definitionResult.automation?.['testInstance/testBU']?.testTargetMarket
1249
+ ).length
1250
+ : 0,
1251
+ 1,
1252
+ 'only one automation expected'
1253
+ );
1254
+ assert.equal(
1255
+ definitionResult.automation?.['testInstance/_ParentBU_']?.testTargetMarket
1256
+ ? Object.keys(
1257
+ definitionResult.automation?.['testInstance/_ParentBU_']
1258
+ ?.testTargetMarket
1259
+ ).length
1260
+ : 0,
1261
+ 1,
1262
+ 'only one automation expected'
1263
+ );
1264
+ assert.deepEqual(
1265
+ await testUtils.getActualDeployJson('testTemplated_automation', 'automation'),
1266
+ await testUtils.getExpectedJson('9999999', 'automation', 'build'),
1267
+ 'returned deployment file was not equal expected'
1268
+ );
1269
+
1270
+ // check if files were also created for other BU-market combos
1271
+ // testBU: testSourceMarket
1272
+ expect(
1273
+ await testUtils.getActualDeployFile(
1274
+ 'testExisting_automation',
1275
+ 'automation',
1276
+ 'json'
1277
+ )
1278
+ ).to.exist;
1279
+ // _ParentBU_: testTargetMarket
1280
+ expect(
1281
+ await testUtils.getActualDeployFile(
1282
+ 'testTemplated_automation',
1283
+ 'automation',
1284
+ 'json',
1285
+ '_ParentBU_'
1286
+ )
1287
+ ).to.exist;
1288
+
1289
+ // check query
1290
+ assert.equal(
1291
+ definitionResult.query?.['testInstance/testBU']?.testSourceMarket
1292
+ ? Object.keys(
1293
+ definitionResult.query?.['testInstance/testBU']?.testSourceMarket
1294
+ ).length
1295
+ : 0,
1296
+ 1,
1297
+ 'only one query expected'
1298
+ );
1299
+ assert.equal(
1300
+ definitionResult.query?.['testInstance/testBU']?.testTargetMarket
1301
+ ? Object.keys(
1302
+ definitionResult.query?.['testInstance/testBU']?.testTargetMarket
1303
+ ).length
1304
+ : 0,
1305
+ 1,
1306
+ 'only one query expected'
1307
+ );
1308
+ assert.equal(
1309
+ definitionResult.query?.['testInstance/_ParentBU_']?.testTargetMarket
1310
+ ? Object.keys(
1311
+ definitionResult.query?.['testInstance/_ParentBU_']?.testTargetMarket
1312
+ ).length
1313
+ : 0,
1314
+ 1,
1315
+ 'only one query expected'
1316
+ );
1317
+ assert.deepEqual(
1318
+ await testUtils.getActualDeployJson('testTemplated_query', 'query'),
1319
+ await testUtils.getExpectedJson('9999999', 'query', 'build'),
1320
+ 'returned deployment JSON was not equal expected'
1321
+ );
1322
+ expect(
1323
+ await testUtils.getActualDeployFile('testTemplated_query', 'query', 'sql')
1324
+ ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'build', 'sql'));
1325
+
1326
+ // check if files were also created for other BU-market combos
1327
+ // testBU: testSourceMarket
1328
+ expect(await testUtils.getActualDeployFile('testExisting_query', 'query', 'json'))
1329
+ .to.exist;
1330
+ expect(await testUtils.getActualDeployFile('testExisting_query', 'query', 'sql')).to
1331
+ .exist;
1332
+ // _ParentBU_: testTargetMarket
1333
+ expect(
1334
+ await testUtils.getActualDeployFile(
1335
+ 'testTemplated_query',
1336
+ 'query',
1337
+ 'json',
1338
+ '_ParentBU_'
1339
+ )
1340
+ ).to.exist;
1341
+ expect(
1342
+ await testUtils.getActualDeployFile(
1343
+ 'testTemplated_query',
1344
+ 'query',
1345
+ 'sql',
1346
+ '_ParentBU_'
1347
+ )
1348
+ ).to.exist;
1349
+
1350
+ assert.equal(
1351
+ testUtils.getAPIHistoryLength() - expectedApiCallsRetrieve,
1352
+ 0,
1353
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1354
+ );
1355
+ });
1356
+
1357
+ it('build multiple type with keys', async () => {
1358
+ // download first before we test buildTemplate
1359
+ await handler.retrieve('testInstance/testBU', ['automation', 'query']);
1360
+
1361
+ const expectedApiCallsRetrieve = 24;
1362
+ assert.equal(
1363
+ testUtils.getAPIHistoryLength(),
1364
+ expectedApiCallsRetrieve,
1365
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1366
+ );
1367
+
1368
+ // preparation
1369
+ const argvMetadata = [
1370
+ 'automation:testExisting_automation',
1371
+ 'query:testExisting_query',
1372
+ 'query:bad',
1373
+ ];
1374
+ const typeKeyCombo = handler.metadataToTypeKey(argvMetadata);
1375
+ assert.notEqual(
1376
+ typeof typeKeyCombo,
1377
+ 'undefined',
1378
+ 'typeKeyCombo should not be undefined'
1379
+ );
1380
+ const buName = 'testInstance/testBU';
1381
+
1382
+ // *** build: buildTemplate and buildDefinition chained ***
1383
+ const definitionResult = await handler.build(
1384
+ buName,
1385
+ buName,
1386
+ typeKeyCombo,
1387
+ 'testSourceMarket',
1388
+ 'testTargetMarket'
1389
+ );
1390
+ assert.equal(process.exitCode, 0, 'build should not have thrown an error');
1391
+
1392
+ // *** buildTemplate ***
1393
+
1394
+ // check automation
1395
+ assert.deepEqual(
1396
+ await testUtils.getActualTemplateJson('testExisting_automation', 'automation'),
1397
+ await testUtils.getExpectedJson('9999999', 'automation', 'template'),
1398
+ 'returned template was not equal expected'
1399
+ );
1400
+ // check query
1401
+ assert.deepEqual(
1402
+ await testUtils.getActualTemplateJson('testExisting_query', 'query'),
1403
+ await testUtils.getExpectedJson('9999999', 'query', 'template'),
1404
+ 'returned template JSON of retrieveAsTemplate was not equal expected'
1405
+ );
1406
+ expect(
1407
+ await testUtils.getActualTemplateFile('testExisting_query', 'query', 'sql')
1408
+ ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'template', 'sql'));
1409
+
1410
+ // *** buildDefinition ***
1411
+
1412
+ // check automation
1413
+ assert.equal(
1414
+ definitionResult.automation
1415
+ ? Object.keys(definitionResult.automation).length
1416
+ : 0,
1417
+ 1,
1418
+ 'only one automation expected'
1419
+ );
1420
+ assert.deepEqual(
1421
+ await testUtils.getActualDeployJson('testTemplated_automation', 'automation'),
1422
+ await testUtils.getExpectedJson('9999999', 'automation', 'build'),
1423
+ 'returned deployment file was not equal expected'
1424
+ );
1425
+
1426
+ // check query
1427
+ assert.equal(
1428
+ definitionResult.query ? Object.keys(definitionResult.query).length : 0,
1429
+ 1,
1430
+ 'only one query expected'
1431
+ );
1432
+ assert.deepEqual(
1433
+ await testUtils.getActualDeployJson('testTemplated_query', 'query'),
1434
+ await testUtils.getExpectedJson('9999999', 'query', 'build'),
1435
+ 'returned deployment JSON was not equal expected'
1436
+ );
1437
+ expect(
1438
+ await testUtils.getActualDeployFile('testTemplated_query', 'query', 'sql')
1439
+ ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'build', 'sql'));
1440
+
1441
+ assert.equal(
1442
+ testUtils.getAPIHistoryLength() - expectedApiCallsRetrieve,
1443
+ 0,
1444
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1445
+ );
1446
+ });
1447
+
1448
+ it('build multiple type with keys and --dependencies', async () => {
1449
+ // download everything before we test buildTemplate
1450
+ await handler.retrieve('testInstance/testBU');
1451
+
1452
+ const expectedApiCallsRetrieve = 74;
1453
+ assert.equal(
1454
+ testUtils.getAPIHistoryLength(),
1455
+ expectedApiCallsRetrieve,
1456
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1457
+ );
1458
+
1459
+ // preparation
1460
+ const argvMetadata = [
1461
+ 'automation:testExisting_automation',
1462
+ 'query:testExisting_query',
1463
+ 'query:bad',
1464
+ ];
1465
+ const typeKeyCombo = handler.metadataToTypeKey(argvMetadata);
1466
+ assert.notEqual(
1467
+ typeof typeKeyCombo,
1468
+ 'undefined',
1469
+ 'typeKeyCombo should not be undefined'
1470
+ );
1471
+ const buName = 'testInstance/testBU';
1472
+
1473
+ // set skipInteraction to true to skip re-retrieving question
1474
+ handler.setOptions({ dependencies: true, skipInteraction: true });
1475
+
1476
+ // *** build: buildTemplate and buildDefinition chained ***
1477
+ const definitionResult = await handler.build(
1478
+ buName,
1479
+ buName,
1480
+ typeKeyCombo,
1481
+ 'testSourceMarket',
1482
+ 'testTargetMarket'
1483
+ );
1484
+ assert.equal(process.exitCode, 0, 'build should not have thrown an error');
1485
+
1486
+ // *** buildTemplate ***
1487
+
1488
+ // check automation
1489
+ assert.deepEqual(
1490
+ await testUtils.getActualTemplateJson('testExisting_automation', 'automation'),
1491
+ await testUtils.getExpectedJson('9999999', 'automation', 'template'),
1492
+ 'returned template was not equal expected'
1493
+ );
1494
+ // check query
1495
+ assert.deepEqual(
1496
+ await testUtils.getActualTemplateJson('testExisting_query', 'query'),
1497
+ await testUtils.getExpectedJson('9999999', 'query', 'template'),
1498
+ 'returned template JSON of retrieveAsTemplate was not equal expected'
1499
+ );
1500
+ expect(
1501
+ await testUtils.getActualTemplateFile('testExisting_query', 'query', 'sql')
1502
+ ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'template', 'sql'));
1503
+
1504
+ // *** buildDefinition ***
1505
+
1506
+ // check type list
1507
+ assert.deepEqual(
1508
+ Object.keys(definitionResult),
1509
+ [
1510
+ 'automation',
1511
+ 'query',
1512
+ 'dataExtract',
1513
+ 'emailSend',
1514
+ 'dataExtension',
1515
+ 'sendClassification',
1516
+ 'senderProfile',
1517
+ 'fileTransfer',
1518
+ 'importFile',
1519
+ 'script',
1520
+ 'verification',
1521
+ ],
1522
+ 'did not create deployment packages for all relevant types'
1523
+ );
1524
+
1525
+ // check automation
1526
+ assert.equal(
1527
+ definitionResult.automation
1528
+ ? Object.keys(definitionResult.automation).length
1529
+ : 0,
1530
+ 1,
1531
+ 'only one automation expected'
1532
+ );
1533
+ assert.deepEqual(
1534
+ await testUtils.getActualDeployJson('testTemplated_automation', 'automation'),
1535
+ await testUtils.getExpectedJson('9999999', 'automation', 'build'),
1536
+ 'returned deployment file was not equal expected'
1537
+ );
1538
+
1539
+ // check query
1540
+ assert.equal(
1541
+ definitionResult.query ? Object.keys(definitionResult.query).length : 0,
1542
+ 1,
1543
+ 'only one query expected'
1544
+ );
1545
+ assert.deepEqual(
1546
+ await testUtils.getActualDeployJson('testTemplated_query', 'query'),
1547
+ await testUtils.getExpectedJson('9999999', 'query', 'build'),
1548
+ 'returned deployment JSON was not equal expected'
1549
+ );
1550
+ expect(
1551
+ await testUtils.getActualDeployFile('testTemplated_query', 'query', 'sql')
1552
+ ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'build', 'sql'));
1553
+
1554
+ assert.equal(
1555
+ testUtils.getAPIHistoryLength() - expectedApiCallsRetrieve,
1556
+ 4,
1557
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1558
+ );
1559
+ });
1560
+
1561
+ it('build multiple type with keys and --dependencies and --retrieve', async () => {
1562
+ const expectedApiCallsRetrieve = 78;
1563
+
1564
+ // preparation
1565
+ const argvMetadata = [
1566
+ 'automation:testExisting_automation',
1567
+ 'query:testExisting_query',
1568
+ 'query:bad',
1569
+ ];
1570
+ const typeKeyCombo = handler.metadataToTypeKey(argvMetadata);
1571
+ assert.notEqual(
1572
+ typeof typeKeyCombo,
1573
+ 'undefined',
1574
+ 'typeKeyCombo should not be undefined'
1575
+ );
1576
+ const buName = 'testInstance/testBU';
1577
+
1578
+ handler.setOptions({ dependencies: true, retrieve: true });
1579
+
1580
+ // *** build: buildTemplate and buildDefinition chained ***
1581
+ const definitionResult = await handler.build(
1582
+ buName,
1583
+ buName,
1584
+ typeKeyCombo,
1585
+ 'testSourceMarket',
1586
+ 'testTargetMarket'
1587
+ );
1588
+ assert.equal(process.exitCode, 0, 'build should not have thrown an error');
1589
+
1590
+ // *** buildTemplate ***
1591
+
1592
+ // check automation
1593
+ assert.deepEqual(
1594
+ await testUtils.getActualTemplateJson('testExisting_automation', 'automation'),
1595
+ await testUtils.getExpectedJson('9999999', 'automation', 'template'),
1596
+ 'returned template was not equal expected'
1597
+ );
1598
+ // check query
1599
+ assert.deepEqual(
1600
+ await testUtils.getActualTemplateJson('testExisting_query', 'query'),
1601
+ await testUtils.getExpectedJson('9999999', 'query', 'template'),
1602
+ 'returned template JSON of retrieveAsTemplate was not equal expected'
1603
+ );
1604
+ expect(
1605
+ await testUtils.getActualTemplateFile('testExisting_query', 'query', 'sql')
1606
+ ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'template', 'sql'));
1607
+
1608
+ // *** buildDefinition ***
1609
+
1610
+ // check type list
1611
+ assert.deepEqual(
1612
+ Object.keys(definitionResult),
1613
+ [
1614
+ 'automation',
1615
+ 'query',
1616
+ 'dataExtract',
1617
+ 'emailSend',
1618
+ 'dataExtension',
1619
+ 'sendClassification',
1620
+ 'senderProfile',
1621
+ 'fileTransfer',
1622
+ 'importFile',
1623
+ 'script',
1624
+ 'verification',
1625
+ ],
1626
+ 'did not create deployment packages for all relevant types'
1627
+ );
1628
+
1629
+ // check automation
1630
+ assert.equal(
1631
+ definitionResult.automation
1632
+ ? Object.keys(definitionResult.automation).length
1633
+ : 0,
1634
+ 1,
1635
+ 'only one automation expected'
1636
+ );
1637
+ assert.deepEqual(
1638
+ await testUtils.getActualDeployJson('testTemplated_automation', 'automation'),
1639
+ await testUtils.getExpectedJson('9999999', 'automation', 'build'),
1640
+ 'returned deployment file was not equal expected'
1641
+ );
1642
+
1643
+ // check query
1644
+ assert.equal(
1645
+ definitionResult.query ? Object.keys(definitionResult.query).length : 0,
1646
+ 1,
1647
+ 'only one query expected'
1648
+ );
1649
+ assert.deepEqual(
1650
+ await testUtils.getActualDeployJson('testTemplated_query', 'query'),
1651
+ await testUtils.getExpectedJson('9999999', 'query', 'build'),
1652
+ 'returned deployment JSON was not equal expected'
1653
+ );
1654
+ expect(
1655
+ await testUtils.getActualDeployFile('testTemplated_query', 'query', 'sql')
1656
+ ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'build', 'sql'));
1657
+
1658
+ assert.equal(
1659
+ testUtils.getAPIHistoryLength(),
1660
+ expectedApiCallsRetrieve,
1661
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1662
+ );
1663
+ });
1664
+
1665
+ it('build multiple type with keys and --bulk', async () => {
1666
+ // download first before we test buildTemplate
1667
+ await handler.retrieve('testInstance/testBU', ['automation', 'query']);
1668
+
1669
+ const expectedApiCallsRetrieve = 24;
1670
+ assert.equal(
1671
+ testUtils.getAPIHistoryLength(),
1672
+ expectedApiCallsRetrieve,
1673
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1674
+ );
1675
+
1676
+ // preparation
1677
+ const argvMetadata = [
1678
+ 'automation:testExisting_automation',
1679
+ 'query:testExisting_query',
1680
+ 'query:bad',
1681
+ ];
1682
+ const typeKeyCombo = handler.metadataToTypeKey(argvMetadata);
1683
+ assert.notEqual(
1684
+ typeof typeKeyCombo,
1685
+ 'undefined',
1686
+ 'typeKeyCombo should not be undefined'
1687
+ );
1688
+ const buName = 'testInstance/testBU';
1689
+
1690
+ // *** build: buildTemplate and buildDefinition chained ***
1691
+ const definitionResult = await handler.build(
1692
+ buName,
1693
+ 'ignored',
1694
+ typeKeyCombo,
1695
+ 'testSourceMarket',
1696
+ 'deployment-target',
1697
+ true
1698
+ );
1699
+ assert.equal(process.exitCode, 0, 'build should not have thrown an error');
1700
+
1701
+ // *** buildTemplate ***
1702
+
1703
+ // check automation
1704
+ assert.deepEqual(
1705
+ await testUtils.getActualTemplateJson('testExisting_automation', 'automation'),
1706
+ await testUtils.getExpectedJson('9999999', 'automation', 'template'),
1707
+ 'returned template was not equal expected'
1708
+ );
1709
+ // check query
1710
+ assert.deepEqual(
1711
+ await testUtils.getActualTemplateJson('testExisting_query', 'query'),
1712
+ await testUtils.getExpectedJson('9999999', 'query', 'template'),
1713
+ 'returned template JSON of retrieveAsTemplate was not equal expected'
1714
+ );
1715
+ expect(
1716
+ await testUtils.getActualTemplateFile('testExisting_query', 'query', 'sql')
1717
+ ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'template', 'sql'));
1718
+
1719
+ // *** buildDefinitionBulk ***
1720
+
1721
+ // check automation
1722
+ assert.equal(
1723
+ definitionResult.automation?.['testInstance/testBU']?.testSourceMarket
1724
+ ? Object.keys(
1725
+ definitionResult.automation?.['testInstance/testBU']?.testSourceMarket
1726
+ ).length
1727
+ : 0,
1728
+ 1,
1729
+ 'only one automation expected'
1730
+ );
1731
+ assert.equal(
1732
+ definitionResult.automation?.['testInstance/testBU']?.testTargetMarket
1733
+ ? Object.keys(
1734
+ definitionResult.automation?.['testInstance/testBU']?.testTargetMarket
1735
+ ).length
1736
+ : 0,
1737
+ 1,
1738
+ 'only one automation expected'
1739
+ );
1740
+ assert.equal(
1741
+ definitionResult.automation?.['testInstance/_ParentBU_']?.testTargetMarket
1742
+ ? Object.keys(
1743
+ definitionResult.automation?.['testInstance/_ParentBU_']
1744
+ ?.testTargetMarket
1745
+ ).length
1746
+ : 0,
1747
+ 1,
1748
+ 'only one automation expected'
1749
+ );
1750
+ assert.deepEqual(
1751
+ await testUtils.getActualDeployJson('testTemplated_automation', 'automation'),
1752
+ await testUtils.getExpectedJson('9999999', 'automation', 'build'),
1753
+ 'returned deployment file was not equal expected'
1754
+ );
1755
+
1756
+ // check if files were also created for other BU-market combos
1757
+ // testBU: testSourceMarket
1758
+ expect(
1759
+ await testUtils.getActualDeployFile(
1760
+ 'testExisting_automation',
1761
+ 'automation',
1762
+ 'json'
1763
+ )
1764
+ ).to.exist;
1765
+ // _ParentBU_: testTargetMarket
1766
+ expect(
1767
+ await testUtils.getActualDeployFile(
1768
+ 'testTemplated_automation',
1769
+ 'automation',
1770
+ 'json',
1771
+ '_ParentBU_'
1772
+ )
1773
+ ).to.exist;
1774
+
1775
+ // check query
1776
+ assert.equal(
1777
+ definitionResult.query?.['testInstance/testBU']?.testSourceMarket
1778
+ ? Object.keys(
1779
+ definitionResult.query?.['testInstance/testBU']?.testSourceMarket
1780
+ ).length
1781
+ : 0,
1782
+ 1,
1783
+ 'only one query expected'
1784
+ );
1785
+ assert.equal(
1786
+ definitionResult.query?.['testInstance/testBU']?.testTargetMarket
1787
+ ? Object.keys(
1788
+ definitionResult.query?.['testInstance/testBU']?.testTargetMarket
1789
+ ).length
1790
+ : 0,
1791
+ 1,
1792
+ 'only one query expected'
1793
+ );
1794
+ assert.equal(
1795
+ definitionResult.query?.['testInstance/_ParentBU_']?.testTargetMarket
1796
+ ? Object.keys(
1797
+ definitionResult.query?.['testInstance/_ParentBU_']?.testTargetMarket
1798
+ ).length
1799
+ : 0,
1800
+ 1,
1801
+ 'only one query expected'
1802
+ );
1803
+ assert.deepEqual(
1804
+ await testUtils.getActualDeployJson('testTemplated_query', 'query'),
1805
+ await testUtils.getExpectedJson('9999999', 'query', 'build'),
1806
+ 'returned deployment JSON was not equal expected'
1807
+ );
1808
+ expect(
1809
+ await testUtils.getActualDeployFile('testTemplated_query', 'query', 'sql')
1810
+ ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'build', 'sql'));
1811
+
1812
+ // check if files were also created for other BU-market combos
1813
+ // testBU: testSourceMarket
1814
+ expect(await testUtils.getActualDeployFile('testExisting_query', 'query', 'json'))
1815
+ .to.exist;
1816
+ expect(await testUtils.getActualDeployFile('testExisting_query', 'query', 'sql')).to
1817
+ .exist;
1818
+ // _ParentBU_: testTargetMarket
1819
+ expect(
1820
+ await testUtils.getActualDeployFile(
1821
+ 'testTemplated_query',
1822
+ 'query',
1823
+ 'json',
1824
+ '_ParentBU_'
1825
+ )
1826
+ ).to.exist;
1827
+ expect(
1828
+ await testUtils.getActualDeployFile(
1829
+ 'testTemplated_query',
1830
+ 'query',
1831
+ 'sql',
1832
+ '_ParentBU_'
1833
+ )
1834
+ ).to.exist;
1835
+
1836
+ assert.equal(
1837
+ testUtils.getAPIHistoryLength() - expectedApiCallsRetrieve,
1838
+ 0,
1839
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1840
+ );
1841
+ });
1842
+
1843
+ it('build multiple type with keys and --bulk and --dependencies', async () => {
1844
+ // download first before we test buildTemplate
1845
+ await handler.retrieve('testInstance/testBU');
1846
+
1847
+ const expectedApiCallsRetrieve = 74;
1848
+ assert.equal(
1849
+ testUtils.getAPIHistoryLength(),
1850
+ expectedApiCallsRetrieve,
1851
+ 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1011
1852
  );
1012
1853
 
1013
1854
  // preparation
@@ -1024,31 +1865,29 @@ describe('GENERAL', () => {
1024
1865
  );
1025
1866
  const buName = 'testInstance/testBU';
1026
1867
 
1027
- // *** buildTemplate ***
1028
- const templateResult = await handler.buildTemplate(
1868
+ // set skipInteraction to true to skip re-retrieving question
1869
+ handler.setOptions({ dependencies: true, skipInteraction: true });
1870
+
1871
+ // *** build: buildTemplate and buildDefinition chained ***
1872
+ const definitionResult = await handler.build(
1029
1873
  buName,
1874
+ 'ignored',
1030
1875
  typeKeyCombo,
1031
- undefined,
1032
- 'testSourceMarket'
1876
+ 'testSourceMarket',
1877
+ 'deployment-target',
1878
+ true
1033
1879
  );
1034
- assert.equal(process.exitCode, 0, 'buildTemplate should not have thrown an error');
1880
+ assert.equal(process.exitCode, 0, 'build should not have thrown an error');
1881
+
1882
+ // *** buildTemplate ***
1883
+
1035
1884
  // check automation
1036
- assert.equal(
1037
- templateResult.automation ? Object.keys(templateResult.automation).length : 0,
1038
- 1,
1039
- 'only one automation expected'
1040
- );
1041
1885
  assert.deepEqual(
1042
1886
  await testUtils.getActualTemplateJson('testExisting_automation', 'automation'),
1043
1887
  await testUtils.getExpectedJson('9999999', 'automation', 'template'),
1044
1888
  'returned template was not equal expected'
1045
1889
  );
1046
1890
  // check query
1047
- assert.equal(
1048
- templateResult.query ? Object.keys(templateResult.query).length : 0,
1049
- 1,
1050
- 'only one query expected'
1051
- );
1052
1891
  assert.deepEqual(
1053
1892
  await testUtils.getActualTemplateJson('testExisting_query', 'query'),
1054
1893
  await testUtils.getExpectedJson('9999999', 'query', 'template'),
@@ -1058,15 +1897,25 @@ describe('GENERAL', () => {
1058
1897
  await testUtils.getActualTemplateFile('testExisting_query', 'query', 'sql')
1059
1898
  ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'template', 'sql'));
1060
1899
 
1061
- // *** buildDefinitionBulk chained ***
1062
- const definitionResult = await handler.buildDefinitionBulk(
1063
- 'deployment-target',
1064
- typeKeyCombo
1065
- );
1066
- assert.equal(
1067
- process.exitCode,
1068
- 0,
1069
- 'buildDefinitionBulk should not have thrown an error'
1900
+ // *** buildDefinitionBulk ***
1901
+
1902
+ // check type list
1903
+ assert.deepEqual(
1904
+ Object.keys(definitionResult),
1905
+ [
1906
+ 'automation',
1907
+ 'query',
1908
+ 'dataExtract',
1909
+ 'emailSend',
1910
+ 'dataExtension',
1911
+ 'sendClassification',
1912
+ 'senderProfile',
1913
+ 'fileTransfer',
1914
+ 'importFile',
1915
+ 'script',
1916
+ 'verification',
1917
+ ],
1918
+ 'did not create deployment packages for all relevant types'
1070
1919
  );
1071
1920
 
1072
1921
  // check automation
@@ -1186,11 +2035,134 @@ describe('GENERAL', () => {
1186
2035
 
1187
2036
  assert.equal(
1188
2037
  testUtils.getAPIHistoryLength() - expectedApiCallsRetrieve,
1189
- 0,
2038
+ 4,
1190
2039
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1191
2040
  );
1192
2041
  });
1193
2042
  });
2043
+
2044
+ describe('Delete --metadata ~~~', () => {
2045
+ it('Should delete the item', async () => {
2046
+ const argvMetadata = [
2047
+ 'asset:testExisting_asset',
2048
+ 'automation:testExisting_automation',
2049
+ 'journey:testExisting_journey_Quicksend/1',
2050
+ 'journey:testExisting_journey_Multistep/1',
2051
+ ];
2052
+ const typeKeyCombo = handler.metadataToTypeKey(argvMetadata);
2053
+ // WHEN
2054
+ const isDeleted = await handler.deleteByKey('testInstance/testBU', typeKeyCombo);
2055
+ // THEN
2056
+ assert.equal(process.exitCode, 0, 'deleteByKey should not have thrown an error');
2057
+ assert.equal(isDeleted, true, 'deleteByKey should have returned true');
2058
+ return;
2059
+ });
2060
+ });
2061
+
2062
+ describe('Publish --metadata ~~~', () => {
2063
+ it('Should publish the journey', async () => {
2064
+ handler.setOptions({ skipStatusCheck: true });
2065
+ const argvMetadata = ['journey:id:3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/1'];
2066
+ const typeKeyCombo = handler.metadataToTypeKey(argvMetadata);
2067
+ // WHEN
2068
+ const publish = await handler.publish('testInstance/testBU', typeKeyCombo);
2069
+ // THEN
2070
+ assert.equal(process.exitCode, 0, 'publish should not have thrown an error');
2071
+ assert.deepEqual(
2072
+ publish['testInstance/testBU']?.journey,
2073
+ ['id:3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/1'],
2074
+ 'should have published the right journey'
2075
+ );
2076
+ return;
2077
+ });
2078
+ });
2079
+
2080
+ describe('Execute/Start --metadata ~~~', () => {
2081
+ it('Should execute the item', async () => {
2082
+ const argvMetadata = [
2083
+ 'query:testExisting_query',
2084
+ 'automation:testExisting_automation',
2085
+ ];
2086
+ const typeKeyCombo = handler.metadataToTypeKey(argvMetadata);
2087
+ // WHEN
2088
+ const executedKeys = await handler.execute('testInstance/testBU', typeKeyCombo);
2089
+ assert.equal(process.exitCode, 0, 'execute should not have thrown an error');
2090
+
2091
+ // query
2092
+ assert.equal(
2093
+ executedKeys['testInstance/testBU']?.query?.length,
2094
+ 1,
2095
+ 'returned number of keys does not correspond to number of expected fixed keys'
2096
+ );
2097
+ assert.equal(
2098
+ executedKeys['testInstance/testBU']?.query[0],
2099
+ 'testExisting_query',
2100
+ 'returned keys do not correspond to expected fixed keys'
2101
+ );
2102
+
2103
+ // automation
2104
+ assert.equal(
2105
+ executedKeys['testInstance/testBU']?.automation?.length,
2106
+ 1,
2107
+ 'automation was supposed to be executed'
2108
+ );
2109
+ assert.equal(
2110
+ executedKeys['testInstance/testBU']?.automation[0],
2111
+ 'testExisting_automation',
2112
+ 'returned keys do not correspond to expected fixed keys'
2113
+ );
2114
+
2115
+ return;
2116
+ });
2117
+ });
2118
+
2119
+ describe('Pause --metadata ~~~', () => {
2120
+ it('Should pause the item', async () => {
2121
+ const argvMetadata = ['automation:testExisting_automation_pause'];
2122
+ const typeKeyCombo = handler.metadataToTypeKey(argvMetadata);
2123
+ // WHEN
2124
+ const pausedKeys = await handler.pause('testInstance/testBU', typeKeyCombo);
2125
+ assert.equal(process.exitCode, 0, 'pause should not have thrown an error');
2126
+
2127
+ // automation
2128
+ assert.equal(
2129
+ pausedKeys['testInstance/testBU']?.automation?.length,
2130
+ 1,
2131
+ 'returned number of keys does not correspond to number of expected fixed keys'
2132
+ );
2133
+ assert.equal(
2134
+ pausedKeys['testInstance/testBU']?.automation[0],
2135
+ 'testExisting_automation_pause',
2136
+ 'returned keys do not correspond to expected fixed keys'
2137
+ );
2138
+
2139
+ return;
2140
+ });
2141
+ });
2142
+
2143
+ describe('Schedule --metadata ~~~', () => {
2144
+ it('Should schedule the item', async () => {
2145
+ const argvMetadata = ['automation:testExisting_automation'];
2146
+ const typeKeyCombo = handler.metadataToTypeKey(argvMetadata);
2147
+ // WHEN
2148
+ const scheduled = await handler.schedule('testInstance/testBU', typeKeyCombo);
2149
+ assert.equal(process.exitCode, 0, 'execute should not have thrown an error');
2150
+
2151
+ // automation
2152
+ assert.equal(
2153
+ scheduled['testInstance/testBU']?.automation?.length,
2154
+ 1,
2155
+ 'returned number of keys does not correspond to number of expected fixed keys'
2156
+ );
2157
+ assert.equal(
2158
+ scheduled['testInstance/testBU']?.automation[0],
2159
+ 'testExisting_automation',
2160
+ 'returned keys do not correspond to expected fixed keys'
2161
+ );
2162
+
2163
+ return;
2164
+ });
2165
+ });
1194
2166
  });
1195
2167
 
1196
2168
  describe('without --metadata ================', () => {
@@ -1229,7 +2201,7 @@ describe('GENERAL', () => {
1229
2201
  );
1230
2202
  assert.equal(
1231
2203
  testUtils.getAPIHistoryLength(),
1232
- 8,
2204
+ 5,
1233
2205
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1234
2206
  );
1235
2207
  });
@@ -1320,7 +2292,7 @@ describe('GENERAL', () => {
1320
2292
  );
1321
2293
  assert.equal(
1322
2294
  testUtils.getAPIHistoryLength(),
1323
- 9,
2295
+ 8,
1324
2296
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
1325
2297
  );
1326
2298
  });