@datadog/datadog-ci 2.40.1 → 2.40.3

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 (255) hide show
  1. package/dist/__tests__/cli.test.d.ts +1 -0
  2. package/dist/__tests__/cli.test.js +41 -0
  3. package/dist/__tests__/cli.test.js.map +1 -0
  4. package/dist/commands/cloud-run/__tests__/fixtures.d.ts +2 -0
  5. package/dist/commands/cloud-run/__tests__/fixtures.js +12 -0
  6. package/dist/commands/cloud-run/__tests__/fixtures.js.map +1 -0
  7. package/dist/commands/cloud-run/__tests__/flare.test.d.ts +1 -0
  8. package/dist/commands/cloud-run/__tests__/flare.test.js +557 -0
  9. package/dist/commands/cloud-run/__tests__/flare.test.js.map +1 -0
  10. package/dist/commands/deployment/__tests__/mark.test.d.ts +1 -0
  11. package/dist/commands/deployment/__tests__/mark.test.js +47 -0
  12. package/dist/commands/deployment/__tests__/mark.test.js.map +1 -0
  13. package/dist/commands/dora/__tests__/deployment.test.d.ts +1 -0
  14. package/dist/commands/dora/__tests__/deployment.test.js +201 -0
  15. package/dist/commands/dora/__tests__/deployment.test.js.map +1 -0
  16. package/dist/commands/dsyms/__tests__/upload.test.d.ts +1 -0
  17. package/dist/commands/dsyms/__tests__/upload.test.js +346 -0
  18. package/dist/commands/dsyms/__tests__/upload.test.js.map +1 -0
  19. package/dist/commands/dsyms/__tests__/utils.test.d.ts +1 -0
  20. package/dist/commands/dsyms/__tests__/utils.test.js +103 -0
  21. package/dist/commands/dsyms/__tests__/utils.test.js.map +1 -0
  22. package/dist/commands/dsyms/utils.js +4 -2
  23. package/dist/commands/dsyms/utils.js.map +1 -1
  24. package/dist/commands/elf-symbols/__tests__/elf.test.d.ts +1 -0
  25. package/dist/commands/elf-symbols/__tests__/elf.test.js +813 -0
  26. package/dist/commands/elf-symbols/__tests__/elf.test.js.map +1 -0
  27. package/dist/commands/elf-symbols/__tests__/upload.test.d.ts +1 -0
  28. package/dist/commands/elf-symbols/__tests__/upload.test.js +249 -0
  29. package/dist/commands/elf-symbols/__tests__/upload.test.js.map +1 -0
  30. package/dist/commands/flutter-symbols/__tests__/upload.test.d.ts +1 -0
  31. package/dist/commands/flutter-symbols/__tests__/upload.test.js +617 -0
  32. package/dist/commands/flutter-symbols/__tests__/upload.test.js.map +1 -0
  33. package/dist/commands/gate/__tests__/evaluate.test.d.ts +1 -0
  34. package/dist/commands/gate/__tests__/evaluate.test.js +398 -0
  35. package/dist/commands/gate/__tests__/evaluate.test.js.map +1 -0
  36. package/dist/commands/gate/__tests__/scope.test.d.ts +1 -0
  37. package/dist/commands/gate/__tests__/scope.test.js +29 -0
  38. package/dist/commands/gate/__tests__/scope.test.js.map +1 -0
  39. package/dist/commands/git-metadata/__tests__/git.test.d.ts +1 -0
  40. package/dist/commands/git-metadata/__tests__/git.test.js +132 -0
  41. package/dist/commands/git-metadata/__tests__/git.test.js.map +1 -0
  42. package/dist/commands/git-metadata/__tests__/gitdb.test.d.ts +1 -0
  43. package/dist/commands/git-metadata/__tests__/gitdb.test.js +1386 -0
  44. package/dist/commands/git-metadata/__tests__/gitdb.test.js.map +1 -0
  45. package/dist/commands/git-metadata/__tests__/library.test.d.ts +1 -0
  46. package/dist/commands/git-metadata/__tests__/library.test.js +118 -0
  47. package/dist/commands/git-metadata/__tests__/library.test.js.map +1 -0
  48. package/dist/commands/git-metadata/__tests__/upload.test.d.ts +1 -0
  49. package/dist/commands/git-metadata/__tests__/upload.test.js +52 -0
  50. package/dist/commands/git-metadata/__tests__/upload.test.js.map +1 -0
  51. package/dist/commands/junit/__tests__/id.test.d.ts +1 -0
  52. package/dist/commands/junit/__tests__/id.test.js +24 -0
  53. package/dist/commands/junit/__tests__/id.test.js.map +1 -0
  54. package/dist/commands/junit/__tests__/upload.test.d.ts +1 -0
  55. package/dist/commands/junit/__tests__/upload.test.js +495 -0
  56. package/dist/commands/junit/__tests__/upload.test.js.map +1 -0
  57. package/dist/commands/lambda/__tests__/fixtures.d.ts +51 -0
  58. package/dist/commands/lambda/__tests__/fixtures.js +146 -0
  59. package/dist/commands/lambda/__tests__/fixtures.js.map +1 -0
  60. package/dist/commands/lambda/__tests__/flare.test.d.ts +1 -0
  61. package/dist/commands/lambda/__tests__/flare.test.js +730 -0
  62. package/dist/commands/lambda/__tests__/flare.test.js.map +1 -0
  63. package/dist/commands/lambda/__tests__/functions/commons.test.d.ts +1 -0
  64. package/dist/commands/lambda/__tests__/functions/commons.test.js +791 -0
  65. package/dist/commands/lambda/__tests__/functions/commons.test.js.map +1 -0
  66. package/dist/commands/lambda/__tests__/functions/instrument.part1.test.d.ts +1 -0
  67. package/dist/commands/lambda/__tests__/functions/instrument.part1.test.js +386 -0
  68. package/dist/commands/lambda/__tests__/functions/instrument.part1.test.js.map +1 -0
  69. package/dist/commands/lambda/__tests__/functions/instrument.part2.test.d.ts +1 -0
  70. package/dist/commands/lambda/__tests__/functions/instrument.part2.test.js +721 -0
  71. package/dist/commands/lambda/__tests__/functions/instrument.part2.test.js.map +1 -0
  72. package/dist/commands/lambda/__tests__/functions/uninstrument.test.d.ts +1 -0
  73. package/dist/commands/lambda/__tests__/functions/uninstrument.test.js +513 -0
  74. package/dist/commands/lambda/__tests__/functions/uninstrument.test.js.map +1 -0
  75. package/dist/commands/lambda/__tests__/functions/versionChecker.test.d.ts +1 -0
  76. package/dist/commands/lambda/__tests__/functions/versionChecker.test.js +33 -0
  77. package/dist/commands/lambda/__tests__/functions/versionChecker.test.js.map +1 -0
  78. package/dist/commands/lambda/__tests__/instrument.test.d.ts +1 -0
  79. package/dist/commands/lambda/__tests__/instrument.test.js +1511 -0
  80. package/dist/commands/lambda/__tests__/instrument.test.js.map +1 -0
  81. package/dist/commands/lambda/__tests__/loggroup.test.d.ts +1 -0
  82. package/dist/commands/lambda/__tests__/loggroup.test.js +340 -0
  83. package/dist/commands/lambda/__tests__/loggroup.test.js.map +1 -0
  84. package/dist/commands/lambda/__tests__/prompt.test.d.ts +1 -0
  85. package/dist/commands/lambda/__tests__/prompt.test.js +206 -0
  86. package/dist/commands/lambda/__tests__/prompt.test.js.map +1 -0
  87. package/dist/commands/lambda/__tests__/tags.test.d.ts +1 -0
  88. package/dist/commands/lambda/__tests__/tags.test.js +305 -0
  89. package/dist/commands/lambda/__tests__/tags.test.js.map +1 -0
  90. package/dist/commands/lambda/__tests__/uninstrument.test.d.ts +1 -0
  91. package/dist/commands/lambda/__tests__/uninstrument.test.js +722 -0
  92. package/dist/commands/lambda/__tests__/uninstrument.test.js.map +1 -0
  93. package/dist/commands/measure/__tests__/measure.test.d.ts +1 -0
  94. package/dist/commands/measure/__tests__/measure.test.js +110 -0
  95. package/dist/commands/measure/__tests__/measure.test.js.map +1 -0
  96. package/dist/commands/react-native/__tests__/codepush.test.d.ts +1 -0
  97. package/dist/commands/react-native/__tests__/codepush.test.js +161 -0
  98. package/dist/commands/react-native/__tests__/codepush.test.js.map +1 -0
  99. package/dist/commands/react-native/__tests__/interfaces.test.d.ts +1 -0
  100. package/dist/commands/react-native/__tests__/interfaces.test.js +33 -0
  101. package/dist/commands/react-native/__tests__/interfaces.test.js.map +1 -0
  102. package/dist/commands/react-native/__tests__/upload.test.d.ts +1 -0
  103. package/dist/commands/react-native/__tests__/upload.test.js +238 -0
  104. package/dist/commands/react-native/__tests__/upload.test.js.map +1 -0
  105. package/dist/commands/react-native/__tests__/utils.test.d.ts +1 -0
  106. package/dist/commands/react-native/__tests__/utils.test.js +27 -0
  107. package/dist/commands/react-native/__tests__/utils.test.js.map +1 -0
  108. package/dist/commands/react-native/__tests__/xcode.test.d.ts +1 -0
  109. package/dist/commands/react-native/__tests__/xcode.test.js +465 -0
  110. package/dist/commands/react-native/__tests__/xcode.test.js.map +1 -0
  111. package/dist/commands/sarif/__tests__/upload.test.d.ts +1 -0
  112. package/dist/commands/sarif/__tests__/upload.test.js +228 -0
  113. package/dist/commands/sarif/__tests__/upload.test.js.map +1 -0
  114. package/dist/commands/sbom/__tests__/payload.test.d.ts +1 -0
  115. package/dist/commands/sbom/__tests__/payload.test.js +262 -0
  116. package/dist/commands/sbom/__tests__/payload.test.js.map +1 -0
  117. package/dist/commands/sbom/__tests__/validation.test.d.ts +1 -0
  118. package/dist/commands/sbom/__tests__/validation.test.js +41 -0
  119. package/dist/commands/sbom/__tests__/validation.test.js.map +1 -0
  120. package/dist/commands/sourcemaps/__tests__/upload.test.d.ts +1 -0
  121. package/dist/commands/sourcemaps/__tests__/upload.test.js +270 -0
  122. package/dist/commands/sourcemaps/__tests__/upload.test.js.map +1 -0
  123. package/dist/commands/sourcemaps/__tests__/utils.test.d.ts +1 -0
  124. package/dist/commands/sourcemaps/__tests__/utils.test.js +31 -0
  125. package/dist/commands/sourcemaps/__tests__/utils.test.js.map +1 -0
  126. package/dist/commands/stepfunctions/__tests__/awsCommands.test.d.ts +1 -0
  127. package/dist/commands/stepfunctions/__tests__/awsCommands.test.js +192 -0
  128. package/dist/commands/stepfunctions/__tests__/awsCommands.test.js.map +1 -0
  129. package/dist/commands/stepfunctions/__tests__/fixtures/aws-resources.d.ts +6 -0
  130. package/dist/commands/stepfunctions/__tests__/fixtures/aws-resources.js +45 -0
  131. package/dist/commands/stepfunctions/__tests__/fixtures/aws-resources.js.map +1 -0
  132. package/dist/commands/stepfunctions/__tests__/fixtures/cli.d.ts +5 -0
  133. package/dist/commands/stepfunctions/__tests__/fixtures/cli.js +19 -0
  134. package/dist/commands/stepfunctions/__tests__/fixtures/cli.js.map +1 -0
  135. package/dist/commands/stepfunctions/__tests__/helpers.test.d.ts +1 -0
  136. package/dist/commands/stepfunctions/__tests__/helpers.test.js +205 -0
  137. package/dist/commands/stepfunctions/__tests__/helpers.test.js.map +1 -0
  138. package/dist/commands/stepfunctions/__tests__/instrument.test.d.ts +1 -0
  139. package/dist/commands/stepfunctions/__tests__/instrument.test.js +431 -0
  140. package/dist/commands/stepfunctions/__tests__/instrument.test.js.map +1 -0
  141. package/dist/commands/stepfunctions/__tests__/uninstrument.test.d.ts +1 -0
  142. package/dist/commands/stepfunctions/__tests__/uninstrument.test.js +166 -0
  143. package/dist/commands/stepfunctions/__tests__/uninstrument.test.js.map +1 -0
  144. package/dist/commands/synthetics/__tests__/api.test.d.ts +1 -0
  145. package/dist/commands/synthetics/__tests__/api.test.js +422 -0
  146. package/dist/commands/synthetics/__tests__/api.test.js.map +1 -0
  147. package/dist/commands/synthetics/__tests__/cli.test.d.ts +1 -0
  148. package/dist/commands/synthetics/__tests__/cli.test.js +1325 -0
  149. package/dist/commands/synthetics/__tests__/cli.test.js.map +1 -0
  150. package/dist/commands/synthetics/__tests__/fixtures.d.ts +149 -0
  151. package/dist/commands/synthetics/__tests__/fixtures.js +507 -0
  152. package/dist/commands/synthetics/__tests__/fixtures.js.map +1 -0
  153. package/dist/commands/synthetics/__tests__/mobile.test.d.ts +1 -0
  154. package/dist/commands/synthetics/__tests__/mobile.test.js +376 -0
  155. package/dist/commands/synthetics/__tests__/mobile.test.js.map +1 -0
  156. package/dist/commands/synthetics/__tests__/reporters/default.test.d.ts +1 -0
  157. package/dist/commands/synthetics/__tests__/reporters/default.test.js +354 -0
  158. package/dist/commands/synthetics/__tests__/reporters/default.test.js.map +1 -0
  159. package/dist/commands/synthetics/__tests__/reporters/junit.test.d.ts +1 -0
  160. package/dist/commands/synthetics/__tests__/reporters/junit.test.js +353 -0
  161. package/dist/commands/synthetics/__tests__/reporters/junit.test.js.map +1 -0
  162. package/dist/commands/synthetics/__tests__/reporters/mobile/app-upload.test.d.ts +1 -0
  163. package/dist/commands/synthetics/__tests__/reporters/mobile/app-upload.test.js +232 -0
  164. package/dist/commands/synthetics/__tests__/reporters/mobile/app-upload.test.js.map +1 -0
  165. package/dist/commands/synthetics/__tests__/run-tests-lib.test.d.ts +1 -0
  166. package/dist/commands/synthetics/__tests__/run-tests-lib.test.js +735 -0
  167. package/dist/commands/synthetics/__tests__/run-tests-lib.test.js.map +1 -0
  168. package/dist/commands/synthetics/__tests__/test.test.d.ts +1 -0
  169. package/dist/commands/synthetics/__tests__/test.test.js +33 -0
  170. package/dist/commands/synthetics/__tests__/test.test.js.map +1 -0
  171. package/dist/commands/synthetics/__tests__/tunnel/crypto.test.d.ts +1 -0
  172. package/dist/commands/synthetics/__tests__/tunnel/crypto.test.js +21 -0
  173. package/dist/commands/synthetics/__tests__/tunnel/crypto.test.js.map +1 -0
  174. package/dist/commands/synthetics/__tests__/tunnel/tunnel.test.d.ts +1 -0
  175. package/dist/commands/synthetics/__tests__/tunnel/tunnel.test.js +80 -0
  176. package/dist/commands/synthetics/__tests__/tunnel/tunnel.test.js.map +1 -0
  177. package/dist/commands/synthetics/__tests__/tunnel/websocket.test.d.ts +1 -0
  178. package/dist/commands/synthetics/__tests__/tunnel/websocket.test.js +109 -0
  179. package/dist/commands/synthetics/__tests__/tunnel/websocket.test.js.map +1 -0
  180. package/dist/commands/synthetics/__tests__/utils/internal.test.d.ts +1 -0
  181. package/dist/commands/synthetics/__tests__/utils/internal.test.js +186 -0
  182. package/dist/commands/synthetics/__tests__/utils/internal.test.js.map +1 -0
  183. package/dist/commands/synthetics/__tests__/utils/public.test.d.ts +1 -0
  184. package/dist/commands/synthetics/__tests__/utils/public.test.js +1526 -0
  185. package/dist/commands/synthetics/__tests__/utils/public.test.js.map +1 -0
  186. package/dist/commands/synthetics/api.d.ts +1 -1
  187. package/dist/commands/synthetics/api.js +10 -5
  188. package/dist/commands/synthetics/api.js.map +1 -1
  189. package/dist/commands/synthetics/run-tests-command.d.ts +1 -0
  190. package/dist/commands/synthetics/run-tests-command.js +3 -2
  191. package/dist/commands/synthetics/run-tests-command.js.map +1 -1
  192. package/dist/commands/synthetics/run-tests-lib.js +0 -4
  193. package/dist/commands/synthetics/run-tests-lib.js.map +1 -1
  194. package/dist/commands/synthetics/test.js +9 -1
  195. package/dist/commands/synthetics/test.js.map +1 -1
  196. package/dist/commands/synthetics/utils/public.js +1 -1
  197. package/dist/commands/synthetics/utils/public.js.map +1 -1
  198. package/dist/commands/tag/__tests__/tag.test.d.ts +1 -0
  199. package/dist/commands/tag/__tests__/tag.test.js +75 -0
  200. package/dist/commands/tag/__tests__/tag.test.js.map +1 -0
  201. package/dist/commands/trace/__tests__/trace.test.d.ts +1 -0
  202. package/dist/commands/trace/__tests__/trace.test.js +145 -0
  203. package/dist/commands/trace/__tests__/trace.test.js.map +1 -0
  204. package/dist/commands/unity-symbols/__tests__/upload.test.d.ts +1 -0
  205. package/dist/commands/unity-symbols/__tests__/upload.test.js +369 -0
  206. package/dist/commands/unity-symbols/__tests__/upload.test.js.map +1 -0
  207. package/dist/helpers/__tests__/app.test.d.ts +1 -0
  208. package/dist/helpers/__tests__/app.test.js +31 -0
  209. package/dist/helpers/__tests__/app.test.js.map +1 -0
  210. package/dist/helpers/__tests__/ci.test.d.ts +1 -0
  211. package/dist/helpers/__tests__/ci.test.js +252 -0
  212. package/dist/helpers/__tests__/ci.test.js.map +1 -0
  213. package/dist/helpers/__tests__/fixtures.d.ts +33 -0
  214. package/dist/helpers/__tests__/fixtures.js +71 -0
  215. package/dist/helpers/__tests__/fixtures.js.map +1 -0
  216. package/dist/helpers/__tests__/flare.test.d.ts +1 -0
  217. package/dist/helpers/__tests__/flare.test.js +226 -0
  218. package/dist/helpers/__tests__/flare.test.js.map +1 -0
  219. package/dist/helpers/__tests__/fs.test.d.ts +1 -0
  220. package/dist/helpers/__tests__/fs.test.js +189 -0
  221. package/dist/helpers/__tests__/fs.test.js.map +1 -0
  222. package/dist/helpers/__tests__/plist.test.d.ts +1 -0
  223. package/dist/helpers/__tests__/plist.test.js +43 -0
  224. package/dist/helpers/__tests__/plist.test.js.map +1 -0
  225. package/dist/helpers/__tests__/prompt.test.d.ts +1 -0
  226. package/dist/helpers/__tests__/prompt.test.js +71 -0
  227. package/dist/helpers/__tests__/prompt.test.js.map +1 -0
  228. package/dist/helpers/__tests__/retry.test.d.ts +1 -0
  229. package/dist/helpers/__tests__/retry.test.js +99 -0
  230. package/dist/helpers/__tests__/retry.test.js.map +1 -0
  231. package/dist/helpers/__tests__/tags.test.d.ts +1 -0
  232. package/dist/helpers/__tests__/tags.test.js +71 -0
  233. package/dist/helpers/__tests__/tags.test.js.map +1 -0
  234. package/dist/helpers/__tests__/upload.test.d.ts +1 -0
  235. package/dist/helpers/__tests__/upload.test.js +231 -0
  236. package/dist/helpers/__tests__/upload.test.js.map +1 -0
  237. package/dist/helpers/__tests__/user-provided-git.test.d.ts +1 -0
  238. package/dist/helpers/__tests__/user-provided-git.test.js +119 -0
  239. package/dist/helpers/__tests__/user-provided-git.test.js.map +1 -0
  240. package/dist/helpers/__tests__/utils.test.d.ts +1 -0
  241. package/dist/helpers/__tests__/utils.test.js +429 -0
  242. package/dist/helpers/__tests__/utils.test.js.map +1 -0
  243. package/dist/helpers/__tests__/validation.test.d.ts +1 -0
  244. package/dist/helpers/__tests__/validation.test.js +25 -0
  245. package/dist/helpers/__tests__/validation.test.js.map +1 -0
  246. package/dist/helpers/git/__tests__/format-git-sourcemaps-data.test.d.ts +1 -0
  247. package/dist/helpers/git/__tests__/format-git-sourcemaps-data.test.js +103 -0
  248. package/dist/helpers/git/__tests__/format-git-sourcemaps-data.test.js.map +1 -0
  249. package/dist/helpers/git/__tests__/format-git-span-data.test.d.ts +1 -0
  250. package/dist/helpers/git/__tests__/format-git-span-data.test.js +121 -0
  251. package/dist/helpers/git/__tests__/format-git-span-data.test.js.map +1 -0
  252. package/dist/helpers/git/__tests__/get-git-data.test.d.ts +1 -0
  253. package/dist/helpers/git/__tests__/get-git-data.test.js +72 -0
  254. package/dist/helpers/git/__tests__/get-git-data.test.js.map +1 -0
  255. package/package.json +5 -7
@@ -0,0 +1,353 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const fs_1 = __importDefault(require("fs"));
16
+ const promises_1 = __importDefault(require("fs/promises"));
17
+ const interfaces_1 = require("../../interfaces");
18
+ const junit_1 = require("../../reporters/junit");
19
+ const fixtures_1 = require("../fixtures");
20
+ const globalTestMock = (0, fixtures_1.getApiTest)('123-456-789');
21
+ const globalStepMock = (0, fixtures_1.getStep)();
22
+ const globalResultMock = (0, fixtures_1.getBrowserResult)('1', globalTestMock);
23
+ const globalSummaryMock = (0, fixtures_1.getSummary)();
24
+ describe('Junit reporter', () => {
25
+ const writeMock = jest.fn();
26
+ const commandMock = {
27
+ context: { stdout: { write: writeMock } },
28
+ jUnitReport: 'junit',
29
+ runName: 'Test Suite name',
30
+ };
31
+ let reporter;
32
+ describe('constructor', () => {
33
+ beforeEach(() => {
34
+ reporter = new junit_1.JUnitReporter(commandMock);
35
+ });
36
+ it("should append '.xml' to destination if isn't there", () => {
37
+ expect(reporter['destination']).toBe('junit.xml');
38
+ });
39
+ it('should give a default run name', () => {
40
+ expect(new junit_1.JUnitReporter(Object.assign(Object.assign({}, commandMock), { runName: undefined }))['json'].testsuites.$.name).toBe('Undefined run');
41
+ });
42
+ });
43
+ describe('runEnd', () => {
44
+ beforeEach(() => {
45
+ reporter = new junit_1.JUnitReporter(commandMock);
46
+ jest.spyOn(fs_1.default, 'writeFileSync');
47
+ jest.spyOn(reporter['builder'], 'buildObject');
48
+ });
49
+ it('should build the xml', () => __awaiter(void 0, void 0, void 0, function* () {
50
+ reporter.runEnd(globalSummaryMock, '');
51
+ expect(reporter['builder'].buildObject).toHaveBeenCalledWith(reporter['json']);
52
+ expect(fs_1.default.writeFileSync).toHaveBeenCalledWith('junit.xml', expect.any(String), 'utf8');
53
+ expect(writeMock).toHaveBeenCalledTimes(1);
54
+ // Cleaning
55
+ yield promises_1.default.unlink(reporter['destination']);
56
+ }));
57
+ it('should gracefully fail', () => __awaiter(void 0, void 0, void 0, function* () {
58
+ jest.spyOn(reporter['builder'], 'buildObject').mockImplementation(() => {
59
+ throw new Error('Fail');
60
+ });
61
+ reporter.runEnd(globalSummaryMock, '');
62
+ expect(fs_1.default.writeFileSync).not.toHaveBeenCalled();
63
+ expect(writeMock).toHaveBeenCalledTimes(1);
64
+ }));
65
+ it('should create the file', () => __awaiter(void 0, void 0, void 0, function* () {
66
+ reporter['destination'] = 'junit/report.xml';
67
+ reporter.runEnd(globalSummaryMock, '');
68
+ const stat = yield promises_1.default.stat(reporter['destination']);
69
+ expect(stat).toBeDefined();
70
+ // Cleaning
71
+ yield promises_1.default.unlink(reporter['destination']);
72
+ yield promises_1.default.rmdir('junit');
73
+ }));
74
+ it('should not throw on existing directory', () => __awaiter(void 0, void 0, void 0, function* () {
75
+ yield promises_1.default.mkdir('junit');
76
+ reporter['destination'] = 'junit/report.xml';
77
+ reporter.runEnd(globalSummaryMock, '');
78
+ // Cleaning
79
+ yield promises_1.default.unlink(reporter['destination']);
80
+ yield promises_1.default.rmdir('junit');
81
+ }));
82
+ it('testsuites contains summary properties', () => __awaiter(void 0, void 0, void 0, function* () {
83
+ jest.spyOn(fs_1.default, 'writeFileSync').mockImplementation(() => { });
84
+ reporter.runEnd(Object.assign(Object.assign({}, globalSummaryMock), { criticalErrors: 1, failed: 2, failedNonBlocking: 3, passed: 4, skipped: 5, testsNotFound: new Set(['a', 'b', 'c']), timedOut: 6 }), fixtures_1.MOCK_BASE_URL);
85
+ expect(reporter['json'].testsuites.$).toStrictEqual({
86
+ batch_id: fixtures_1.BATCH_ID,
87
+ batch_url: `${fixtures_1.MOCK_BASE_URL}synthetics/explorer/ci?batchResultId=${fixtures_1.BATCH_ID}`,
88
+ name: 'Test Suite name',
89
+ tests_critical_error: 1,
90
+ tests_failed: 2,
91
+ tests_failed_non_blocking: 3,
92
+ tests_not_found: 3,
93
+ tests_passed: 4,
94
+ tests_skipped: 5,
95
+ tests_timed_out: 6,
96
+ });
97
+ }));
98
+ });
99
+ describe('resultEnd', () => {
100
+ beforeEach(() => {
101
+ reporter = new junit_1.JUnitReporter(commandMock);
102
+ });
103
+ it('should give a default suite name', () => {
104
+ reporter.resultEnd(globalResultMock, '', '');
105
+ const testsuite = reporter['json'].testsuites.testsuite[0];
106
+ expect(testsuite.$.name).toBe('Undefined suite');
107
+ });
108
+ it('should use the same report for tests from same suite', () => {
109
+ const results = [
110
+ Object.assign(Object.assign({}, globalResultMock), { test: Object.assign(Object.assign({}, globalTestMock), { suite: 'same suite' }) }),
111
+ Object.assign(Object.assign({}, globalResultMock), { test: Object.assign(Object.assign({}, globalTestMock), { suite: 'same suite' }) }),
112
+ ];
113
+ results.forEach((result) => reporter.resultEnd(result, '', ''));
114
+ // We should have 1 unique report. Not 2 different ones.
115
+ expect(reporter['json'].testsuites.testsuite.length).toBe(1);
116
+ // And this unique report should include the 2 tests.
117
+ expect(reporter['json'].testsuites.testsuite[0].$).toMatchObject(Object.assign(Object.assign({}, (0, junit_1.getDefaultSuiteStats)()), { tests: 2 }));
118
+ });
119
+ it('should add stats to the run', () => {
120
+ reporter.resultEnd(Object.assign(Object.assign({}, globalResultMock), { test: Object.assign(Object.assign({}, globalTestMock), { suite: 'suite 1' }) }), '', '');
121
+ reporter.testTrigger(Object.assign(Object.assign({}, globalTestMock), { suite: 'suite 2' }), '', interfaces_1.ExecutionRule.SKIPPED, {});
122
+ reporter.resultEnd(Object.assign(Object.assign({}, globalResultMock), { passed: false, result: (0, fixtures_1.getFailedMultiStepsServerResult)(), test: Object.assign(Object.assign({}, globalTestMock), { suite: 'suite 2' }) }), '', '');
123
+ reporter.resultEnd({
124
+ executionRule: interfaces_1.ExecutionRule.SKIPPED,
125
+ passed: true,
126
+ resultId: '123',
127
+ selectiveRerun: { decision: 'skip', reason: 'passed', linked_result_id: '123' },
128
+ test: Object.assign(Object.assign({}, globalTestMock), { suite: 'suite 2' }),
129
+ timedOut: false,
130
+ }, '', '');
131
+ const [suitePassed, suiteFailed] = reporter['json'].testsuites.testsuite;
132
+ expect(suitePassed.$).toMatchObject(Object.assign(Object.assign({}, (0, junit_1.getDefaultSuiteStats)()), { tests: 1 }));
133
+ expect(suiteFailed.$).toMatchObject(Object.assign(Object.assign({}, (0, junit_1.getDefaultSuiteStats)()), { errors: 0, failures: 1, skipped: 1, tests: 3 }));
134
+ });
135
+ it('should fall back to a test level failure', () => {
136
+ reporter.resultEnd(Object.assign(Object.assign({}, globalResultMock), { passed: false, result: (0, fixtures_1.getFailedMultiStepsTestLevelServerResult)(), test: Object.assign(Object.assign({}, globalTestMock), { suite: 'suite 1' }) }), '', '');
137
+ const [suiteFailed] = reporter['json'].testsuites.testsuite;
138
+ expect(suiteFailed.$).toMatchObject(Object.assign(Object.assign({}, (0, junit_1.getDefaultSuiteStats)()), { errors: 0, failures: 1, tests: 1 }));
139
+ });
140
+ it('should report errors', () => {
141
+ const browserResult1 = Object.assign(Object.assign({}, globalResultMock), { result: Object.assign(Object.assign({}, (0, fixtures_1.getBrowserServerResult)()), { stepDetails: [
142
+ Object.assign(Object.assign({}, (0, fixtures_1.getStep)()), { allowFailure: true, browserErrors: [
143
+ {
144
+ description: 'error description',
145
+ name: 'error name',
146
+ type: 'error type',
147
+ },
148
+ {
149
+ description: 'error description',
150
+ name: 'error name',
151
+ type: 'error type',
152
+ },
153
+ ], error: 'error', warnings: [
154
+ {
155
+ message: 'warning message',
156
+ type: 'warning type',
157
+ },
158
+ ] }),
159
+ (0, fixtures_1.getStep)(),
160
+ ] }) });
161
+ const browserResult2 = Object.assign(Object.assign({}, globalResultMock), { result: (0, fixtures_1.getBrowserServerResult)() });
162
+ const browserResult3 = Object.assign(Object.assign({}, globalResultMock), { result: Object.assign(Object.assign({}, (0, fixtures_1.getBrowserServerResult)()), { failure: { code: 'TIMEOUT', message: 'The batch timed out before receiving the result.' } }), timedOut: true });
163
+ const apiResult = Object.assign(Object.assign({}, globalResultMock), { result: Object.assign(Object.assign({}, (0, fixtures_1.getMultiStepsServerResult)()), { steps: [
164
+ Object.assign(Object.assign({}, (0, fixtures_1.getMultiStep)()), { failure: {
165
+ code: '1',
166
+ message: 'message',
167
+ } }),
168
+ ] }) });
169
+ reporter.resultEnd(browserResult1, '', '');
170
+ reporter.resultEnd(browserResult2, '', '');
171
+ reporter.resultEnd(browserResult3, '', '');
172
+ reporter.resultEnd(apiResult, '', '');
173
+ const testsuite = reporter['json'].testsuites.testsuite[0];
174
+ const results = [
175
+ [1, 2, 0, 1],
176
+ [0, 0, 0, 0],
177
+ [0, 0, 1, 0],
178
+ [0, 0, 1, 0],
179
+ ];
180
+ const entries = Object.entries(testsuite.testcase);
181
+ for (const [i, testcase] of entries) {
182
+ const result = results[i];
183
+ expect(testcase.allowed_error.length).toBe(result[0]);
184
+ expect(testcase.browser_error.length).toBe(result[1]);
185
+ expect(testcase.failure.length).toBe(result[2]);
186
+ expect(testcase.warning.length).toBe(result[3]);
187
+ }
188
+ });
189
+ });
190
+ describe('getTestCase', () => {
191
+ beforeEach(() => {
192
+ reporter = new junit_1.JUnitReporter(commandMock);
193
+ });
194
+ it('should add stats to the test case - api test', () => {
195
+ const resultMock = Object.assign(Object.assign({}, globalResultMock), { result: (0, fixtures_1.getApiServerResult)({ passed: false }) });
196
+ const testCase = reporter['getTestCase'](resultMock, '', '');
197
+ expect(testCase.$).toMatchObject(Object.assign(Object.assign({}, (0, junit_1.getDefaultTestCaseStats)()), { steps_count: 1, steps_errors: 1, steps_failures: 1 }));
198
+ });
199
+ it('should add stats to the test case - multistep test', () => {
200
+ const resultMock = Object.assign(Object.assign({}, globalResultMock), { result: (0, fixtures_1.getFailedMultiStepsServerResult)() });
201
+ const testCase = reporter['getTestCase'](resultMock, '', '');
202
+ expect(testCase.$).toMatchObject(Object.assign(Object.assign({}, (0, junit_1.getDefaultTestCaseStats)()), { steps_allowfailures: 1, steps_count: 4, steps_errors: 2, steps_failures: 2, steps_skipped: 1 }));
203
+ });
204
+ it('should add stats to the test case - browser test', () => {
205
+ const resultMock = Object.assign(Object.assign({}, globalResultMock), {
206
+ result: Object.assign(Object.assign({}, globalResultMock.result), { stepDetails: [
207
+ globalStepMock,
208
+ Object.assign(Object.assign({}, globalStepMock), {
209
+ browserErrors: [{ type: 'error', name: 'Error', description: 'Description' }],
210
+ error: 'Error',
211
+ subTestStepDetails: [globalStepMock],
212
+ warnings: [{ type: 'warning', message: 'Warning' }],
213
+ }),
214
+ ] }),
215
+ });
216
+ const testCase = reporter['getTestCase'](resultMock, '', '');
217
+ expect(testCase.$).toMatchObject(Object.assign(Object.assign({}, (0, junit_1.getDefaultTestCaseStats)()), { steps_count: 3, steps_errors: 2, steps_failures: 1, steps_warnings: 1 }));
218
+ });
219
+ });
220
+ });
221
+ describe('GitLab test report compatibility', () => {
222
+ const writeMock = jest.fn();
223
+ const commandMock = {
224
+ context: { stdout: { write: writeMock } },
225
+ jUnitReport: 'junit',
226
+ runName: 'Test Suite name',
227
+ };
228
+ let reporter;
229
+ beforeEach(() => {
230
+ reporter = new junit_1.JUnitReporter(commandMock);
231
+ });
232
+ test('all test case names are unique', () => {
233
+ const locations = ['aws:eu-central-1', 'aws:eu-central-2'];
234
+ const devices = {
235
+ chrome: { height: 1100, id: 'chrome.laptop_large', width: 1440 },
236
+ firefox: { height: 1100, id: 'firefox.laptop_large', width: 1440 },
237
+ };
238
+ const apiTest = (0, fixtures_1.getApiTest)('aaa-aaa-aaa', { locations });
239
+ const browserTest = (0, fixtures_1.getBrowserTest)('bbb-bbb-bbb', [devices.chrome.id, devices.firefox.id], { locations });
240
+ const getTestCase = (test, resultId, { location, device, timedOut, }) => reporter['getTestCase'](Object.assign(Object.assign(Object.assign({}, (test.type === 'browser' ? (0, fixtures_1.getBrowserResult)(resultId, test, { device }) : (0, fixtures_1.getApiResult)(resultId, test))), (location && { location })), (timedOut && { timedOut })), '', '');
241
+ const testCases = [
242
+ // API test, location 1
243
+ getTestCase(apiTest, '1', { location: locations[0] }),
244
+ // API test, location 2
245
+ getTestCase(apiTest, '2', { location: locations[1] }),
246
+ // API test, location 1 (timed out)
247
+ getTestCase(apiTest, '3', { location: locations[0], timedOut: true }),
248
+ // API test, location 2 (timed out)
249
+ getTestCase(apiTest, '4', { location: locations[1], timedOut: true }),
250
+ // Browser test, location 1, device 1
251
+ getTestCase(browserTest, '5', { location: locations[0], device: devices.chrome }),
252
+ // Browser test, location 1, device 2
253
+ getTestCase(browserTest, '6', { location: locations[0], device: devices.firefox }),
254
+ // Browser test, location 2, device 1
255
+ getTestCase(browserTest, '7', { location: locations[1], device: devices.chrome }),
256
+ // Browser test, location 2, device 2
257
+ getTestCase(browserTest, '8', { location: locations[1], device: devices.firefox }),
258
+ // Browser test, location 1, (timed out)
259
+ getTestCase(browserTest, '9', { location: locations[0], timedOut: true }),
260
+ // Browser test, location 1, (timed out)
261
+ getTestCase(browserTest, '10', { location: locations[0], timedOut: true }),
262
+ // Browser test, location 2, (timed out)
263
+ getTestCase(browserTest, '11', { location: locations[1], timedOut: true }),
264
+ // Browser test, location 2, (timed out)
265
+ getTestCase(browserTest, '12', { location: locations[1], timedOut: true }),
266
+ ];
267
+ const caseNames = testCases.map((testCase) => testCase.$.name);
268
+ const uniqueCaseNames = [...new Set(caseNames)];
269
+ expect(uniqueCaseNames.length).toEqual(caseNames.length);
270
+ expect(caseNames).toStrictEqual([
271
+ // API tests.
272
+ 'Test name - id: aaa-aaa-aaa - location: aws:eu-central-1',
273
+ 'Test name - id: aaa-aaa-aaa - location: aws:eu-central-2',
274
+ 'Test name - id: aaa-aaa-aaa - location: aws:eu-central-1 - result id: 3 (not yet received)',
275
+ 'Test name - id: aaa-aaa-aaa - location: aws:eu-central-2 - result id: 4 (not yet received)',
276
+ // Browser tests.
277
+ 'Test name - id: bbb-bbb-bbb - location: aws:eu-central-1 - device: chrome.laptop_large',
278
+ 'Test name - id: bbb-bbb-bbb - location: aws:eu-central-1 - device: firefox.laptop_large',
279
+ 'Test name - id: bbb-bbb-bbb - location: aws:eu-central-2 - device: chrome.laptop_large',
280
+ 'Test name - id: bbb-bbb-bbb - location: aws:eu-central-2 - device: firefox.laptop_large',
281
+ 'Test name - id: bbb-bbb-bbb - location: aws:eu-central-1 - result id: 9 (not yet received)',
282
+ 'Test name - id: bbb-bbb-bbb - location: aws:eu-central-1 - result id: 10 (not yet received)',
283
+ 'Test name - id: bbb-bbb-bbb - location: aws:eu-central-2 - result id: 11 (not yet received)',
284
+ 'Test name - id: bbb-bbb-bbb - location: aws:eu-central-2 - result id: 12 (not yet received)',
285
+ ]);
286
+ });
287
+ test('all columns are filled in the test report table', () => {
288
+ const baseResult = (0, fixtures_1.getFailedBrowserResult)();
289
+ const result = Object.assign(Object.assign({}, baseResult), { test: Object.assign(Object.assign({}, baseResult.test), { suite: 'tests.json' }) });
290
+ reporter['resultEnd'](result, '', '');
291
+ const testCase = reporter['json'].testsuites.testsuite[0].testcase[0];
292
+ const name = 'Test name - id: abc-def-ghi - location: Location name - device: chrome.laptop_large';
293
+ const failure = {
294
+ $: {
295
+ allowFailure: 'false',
296
+ step: 'Assert',
297
+ type: 'assertion',
298
+ },
299
+ _: 'Step failure',
300
+ };
301
+ expect(testCase.$).toHaveProperty('classname', 'tests.json'); // Suite
302
+ expect(testCase.$).toHaveProperty('name', name); // Name
303
+ expect(testCase.$).toHaveProperty('file', 'tests.json'); // Filename
304
+ expect(testCase.failure).toStrictEqual([failure]); // Status
305
+ expect(testCase.$).toHaveProperty('time', 20); // Duration
306
+ });
307
+ test('the icon in the Status column is correct (blocking vs. non-blocking)', () => {
308
+ // Mimics how GitLab chooses the Status icon.
309
+ const getStatusIcon = (testCase) => {
310
+ if (testCase.failure.length > 0) {
311
+ return '❌';
312
+ }
313
+ if (testCase.error.length > 0) {
314
+ return '❗️';
315
+ }
316
+ if (testCase.skipped.length > 0) {
317
+ return '⏩';
318
+ }
319
+ return '✅';
320
+ };
321
+ reporter['testTrigger'](globalTestMock, '', interfaces_1.ExecutionRule.SKIPPED, {});
322
+ reporter['resultEnd'](Object.assign(Object.assign({}, (0, fixtures_1.getFailedBrowserResult)()), { executionRule: interfaces_1.ExecutionRule.BLOCKING }), '', '');
323
+ reporter['resultEnd'](Object.assign(Object.assign({}, (0, fixtures_1.getFailedBrowserResult)()), { executionRule: interfaces_1.ExecutionRule.NON_BLOCKING }), '', '');
324
+ reporter['resultEnd'](Object.assign(Object.assign({}, (0, fixtures_1.getBrowserResult)('', globalTestMock)), { executionRule: interfaces_1.ExecutionRule.BLOCKING }), '', '');
325
+ const [testCaseSkipped, testCaseBlocking, testCaseNonBlocking, testCasePassed] = reporter['json'].testsuites.testsuite[0].testcase;
326
+ expect(getStatusIcon(testCaseSkipped)).toBe('⏩');
327
+ expect(getStatusIcon(testCaseBlocking)).toBe('❌');
328
+ expect(getStatusIcon(testCaseNonBlocking)).toBe('❗️');
329
+ expect(getStatusIcon(testCasePassed)).toBe('✅');
330
+ });
331
+ test('api errors are nicely rendered', () => {
332
+ const errorMessage = JSON.stringify([
333
+ {
334
+ actual: 1234,
335
+ operator: 'lessThan',
336
+ target: 1000,
337
+ type: 'responseTime',
338
+ },
339
+ ]);
340
+ const failure = { code: 'INCORRECT_ASSERTION', message: errorMessage };
341
+ const baseResult = (0, fixtures_1.getApiResult)('1', globalTestMock);
342
+ const result = Object.assign(Object.assign({}, baseResult), { passed: false, result: Object.assign(Object.assign({}, baseResult.result), { failure }) });
343
+ reporter['resultEnd'](result, '', '');
344
+ const testCase = reporter['json'].testsuites.testsuite[0].testcase[0];
345
+ expect(testCase.failure).toStrictEqual([
346
+ {
347
+ $: { step: 'Test name', type: 'INCORRECT_ASSERTION' },
348
+ _: '- Assertion failed:\n ▶ responseTime should be less than 1000. Actual: 1234',
349
+ },
350
+ ]);
351
+ });
352
+ });
353
+ //# sourceMappingURL=junit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"junit.test.js","sourceRoot":"","sources":["../../../../../src/commands/synthetics/__tests__/reporters/junit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ jest.unmock('chalk');
13
+ const app_upload_1 = require("../../../reporters/mobile/app-upload");
14
+ /* eslint-disable jest/no-conditional-expect */
15
+ describe('AppUploadReporter', () => {
16
+ let initialCiEnv;
17
+ let simulatedTerminalOutput;
18
+ let writeMock;
19
+ let clearLine;
20
+ let ttyReporter;
21
+ beforeEach(() => {
22
+ jest.useFakeTimers();
23
+ initialCiEnv = process.env.CI;
24
+ simulatedTerminalOutput = '';
25
+ writeMock = jest.fn().mockImplementation((text) => {
26
+ // Ignore show/hide cursor ANSI codes.
27
+ if (text.match(/\u001b\[\?25(l|h)/)) {
28
+ return;
29
+ }
30
+ simulatedTerminalOutput += text;
31
+ });
32
+ clearLine = jest.fn().mockImplementation(() => {
33
+ const allLinesMinusLast = simulatedTerminalOutput.split('\n').slice(0, -1);
34
+ allLinesMinusLast.push('');
35
+ simulatedTerminalOutput = allLinesMinusLast.join('\n');
36
+ });
37
+ const ttyContext = {
38
+ stdout: {
39
+ isTTY: true,
40
+ write: writeMock,
41
+ clearLine,
42
+ cursorTo: jest.fn(),
43
+ moveCursor: jest.fn(),
44
+ },
45
+ stderr: {
46
+ write: writeMock,
47
+ },
48
+ };
49
+ ttyReporter = new app_upload_1.AppUploadReporter(ttyContext);
50
+ });
51
+ afterEach(() => {
52
+ jest.useRealTimers();
53
+ if (initialCiEnv !== undefined) {
54
+ process.env.CI = initialCiEnv;
55
+ }
56
+ else {
57
+ delete process.env.CI;
58
+ }
59
+ });
60
+ describe('start', () => {
61
+ test('outputs apps to upload', () => __awaiter(void 0, void 0, void 0, function* () {
62
+ const appsToUpload = [
63
+ {
64
+ versionName: '1.0.0',
65
+ appId: '123',
66
+ appPath: '/path/to/app',
67
+ },
68
+ {
69
+ versionName: '2.0.0',
70
+ appId: '456',
71
+ appPath: '/path/to/another/app',
72
+ },
73
+ ];
74
+ ttyReporter.start(appsToUpload);
75
+ const output = writeMock.mock.calls.map((c) => c[0]).join('\n');
76
+ expect(output).toMatchSnapshot();
77
+ writeMock.mockClear();
78
+ ttyReporter.start(appsToUpload, true);
79
+ const output2 = writeMock.mock.calls.map((c) => c[0]).join('\n');
80
+ expect(output2).toMatchSnapshot();
81
+ }));
82
+ });
83
+ describe('renderProgress', () => {
84
+ test.each([false, true])('Outputs progress (in CI: %s)', (inCI) => __awaiter(void 0, void 0, void 0, function* () {
85
+ if (inCI) {
86
+ process.env.CI = 'true';
87
+ }
88
+ else {
89
+ delete process.env.CI;
90
+ }
91
+ ttyReporter.renderProgress(2);
92
+ expect(clearLine).not.toHaveBeenCalled();
93
+ expect(simulatedTerminalOutput).toMatchSnapshot();
94
+ ttyReporter.renderProgress(1);
95
+ if (inCI) {
96
+ // In CI, there in no spinning, so `stopping` the spinner (which happens when rendering a 2nd time) does not clear a line.
97
+ expect(clearLine).not.toHaveBeenCalled();
98
+ }
99
+ else {
100
+ expect(clearLine).toHaveBeenCalled();
101
+ }
102
+ expect(simulatedTerminalOutput).toMatchSnapshot();
103
+ }));
104
+ });
105
+ describe('reportSuccess', () => {
106
+ test.each([false, true])('Outputs success message (in CI: %s)', (inCI) => __awaiter(void 0, void 0, void 0, function* () {
107
+ if (inCI) {
108
+ process.env.CI = 'true';
109
+ }
110
+ else {
111
+ delete process.env.CI;
112
+ }
113
+ ttyReporter.renderProgress(1);
114
+ ttyReporter.reportSuccess();
115
+ expect(simulatedTerminalOutput).toMatchSnapshot();
116
+ if (inCI) {
117
+ // In CI, there in no spinning, so `stopping` the spinner (which happens when rendering a 2nd time) does not clear a line.
118
+ expect(clearLine).not.toHaveBeenCalled();
119
+ }
120
+ else {
121
+ expect(clearLine).toHaveBeenCalled();
122
+ }
123
+ }));
124
+ });
125
+ describe('reportFailure', () => {
126
+ test.each([false, true])('Outputs failure message (in CI: %s)', (inCI) => __awaiter(void 0, void 0, void 0, function* () {
127
+ if (inCI) {
128
+ process.env.CI = 'true';
129
+ }
130
+ else {
131
+ delete process.env.CI;
132
+ }
133
+ ttyReporter.renderProgress(1);
134
+ ttyReporter.reportFailure({
135
+ versionName: '1.0.0',
136
+ appId: '123',
137
+ appPath: '/path/to/app',
138
+ });
139
+ expect(simulatedTerminalOutput).toMatchSnapshot();
140
+ if (inCI) {
141
+ // In CI, there in no spinning, so `stopping` the spinner (which happens when rendering a 2nd time) does not clear a line.
142
+ expect(clearLine).not.toHaveBeenCalled();
143
+ }
144
+ else {
145
+ expect(clearLine).toHaveBeenCalled();
146
+ }
147
+ }));
148
+ });
149
+ describe('endRendering', () => {
150
+ test.each([false, true])('Ends rendering (in CI: %s)', (inCI) => __awaiter(void 0, void 0, void 0, function* () {
151
+ if (inCI) {
152
+ process.env.CI = 'true';
153
+ }
154
+ else {
155
+ delete process.env.CI;
156
+ }
157
+ ttyReporter.renderProgress(1);
158
+ expect(ttyReporter['spinner']).toBeDefined();
159
+ ttyReporter.endRendering();
160
+ expect(ttyReporter['spinner']).toBeUndefined();
161
+ expect(simulatedTerminalOutput).toMatchSnapshot();
162
+ if (inCI) {
163
+ // In CI, there in no spinning, so `stopping` the spinner (which happens when rendering a 2nd time) does not clear a line.
164
+ expect(clearLine).not.toHaveBeenCalled();
165
+ }
166
+ else {
167
+ expect(clearLine).toHaveBeenCalled();
168
+ }
169
+ }));
170
+ });
171
+ describe('integrationTests', () => {
172
+ test.each([false, true])('Outputs a series of successful uploads correctly (in CI: %s)', (inCI) => __awaiter(void 0, void 0, void 0, function* () {
173
+ if (inCI) {
174
+ process.env.CI = 'true';
175
+ }
176
+ else {
177
+ delete process.env.CI;
178
+ }
179
+ ttyReporter.start([
180
+ {
181
+ versionName: '1.0.0',
182
+ appId: '123',
183
+ appPath: '/path/to/app',
184
+ },
185
+ {
186
+ versionName: '2.0.0',
187
+ appId: '456',
188
+ appPath: '/path/to/another/app',
189
+ },
190
+ ]);
191
+ expect(simulatedTerminalOutput).toMatchSnapshot();
192
+ ttyReporter.renderProgress(2);
193
+ expect(simulatedTerminalOutput).toMatchSnapshot();
194
+ ttyReporter.renderProgress(1);
195
+ expect(simulatedTerminalOutput).toMatchSnapshot();
196
+ ttyReporter.reportSuccess();
197
+ expect(simulatedTerminalOutput).toMatchSnapshot();
198
+ }));
199
+ });
200
+ test.each([false, true])('Outputs a failure durings uploads correctly (in CI: %s)', (inCI) => __awaiter(void 0, void 0, void 0, function* () {
201
+ if (inCI) {
202
+ process.env.CI = 'true';
203
+ }
204
+ else {
205
+ delete process.env.CI;
206
+ }
207
+ ttyReporter.start([
208
+ {
209
+ versionName: '1.0.0',
210
+ appId: '123',
211
+ appPath: '/path/to/app',
212
+ },
213
+ {
214
+ versionName: '2.0.0',
215
+ appId: '456',
216
+ appPath: '/path/to/another/app',
217
+ },
218
+ ]);
219
+ expect(simulatedTerminalOutput).toMatchSnapshot();
220
+ ttyReporter.renderProgress(2);
221
+ expect(simulatedTerminalOutput).toMatchSnapshot();
222
+ ttyReporter.renderProgress(1);
223
+ expect(simulatedTerminalOutput).toMatchSnapshot();
224
+ ttyReporter.reportFailure({
225
+ versionName: '2.0.0',
226
+ appId: '456',
227
+ appPath: '/path/to/another/app',
228
+ });
229
+ expect(simulatedTerminalOutput).toMatchSnapshot();
230
+ }));
231
+ });
232
+ //# sourceMappingURL=app-upload.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-upload.test.js","sourceRoot":"","sources":["../../../../../../src/commands/synthetics/__tests__/reporters/mobile/app-upload.test.ts"],"names":[],"mappings":"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"}