spec-box-tms-sync 0.3.0 → 0.3.1

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 (50) hide show
  1. package/README.md +11 -2
  2. package/dist/commands/sync.d.ts.map +1 -1
  3. package/dist/commands/sync.js +9 -3
  4. package/dist/commands/sync.js.map +1 -1
  5. package/dist/commands/upload-stat.d.ts +2 -2
  6. package/dist/commands/upload-stat.d.ts.map +1 -1
  7. package/dist/commands/upload-stat.js +15 -8
  8. package/dist/commands/upload-stat.js.map +1 -1
  9. package/dist/commands/validate-only.d.ts.map +1 -1
  10. package/dist/commands/validate-only.js +9 -3
  11. package/dist/commands/validate-only.js.map +1 -1
  12. package/dist/lib/config/models.d.ts +6 -2
  13. package/dist/lib/config/models.d.ts.map +1 -1
  14. package/dist/lib/config/models.js +4 -3
  15. package/dist/lib/config/models.js.map +1 -1
  16. package/dist/lib/test-matcher/index.d.ts +7 -0
  17. package/dist/lib/test-matcher/index.d.ts.map +1 -0
  18. package/dist/lib/test-matcher/index.js +47 -0
  19. package/dist/lib/test-matcher/index.js.map +1 -0
  20. package/dist/lib/test-matcher/jest/index.d.ts +3 -0
  21. package/dist/lib/test-matcher/jest/index.d.ts.map +1 -0
  22. package/dist/lib/test-matcher/jest/index.js +40 -0
  23. package/dist/lib/test-matcher/jest/index.js.map +1 -0
  24. package/dist/lib/{jest → test-matcher/jest}/models.d.ts +8 -7
  25. package/dist/lib/test-matcher/jest/models.d.ts.map +1 -0
  26. package/dist/lib/test-matcher/jest/models.js.map +1 -0
  27. package/dist/lib/test-matcher/junit/index.d.ts +3 -0
  28. package/dist/lib/test-matcher/junit/index.d.ts.map +1 -0
  29. package/dist/lib/test-matcher/junit/index.js +43 -0
  30. package/dist/lib/test-matcher/junit/index.js.map +1 -0
  31. package/dist/lib/test-matcher/junit/models.d.ts +40 -0
  32. package/dist/lib/test-matcher/junit/models.d.ts.map +1 -0
  33. package/dist/lib/test-matcher/junit/models.js +42 -0
  34. package/dist/lib/test-matcher/junit/models.js.map +1 -0
  35. package/dist/lib/test-matcher/models.d.ts +13 -0
  36. package/dist/lib/test-matcher/models.d.ts.map +1 -0
  37. package/dist/lib/test-matcher/models.js +3 -0
  38. package/dist/lib/test-matcher/models.js.map +1 -0
  39. package/dist/lib/upload/upload-jest-stat.d.ts +2 -2
  40. package/dist/lib/upload/upload-jest-stat.d.ts.map +1 -1
  41. package/dist/lib/upload/upload-jest-stat.js +6 -9
  42. package/dist/lib/upload/upload-jest-stat.js.map +1 -1
  43. package/package.json +3 -1
  44. package/dist/lib/jest/index.d.ts +0 -24
  45. package/dist/lib/jest/index.d.ts.map +0 -1
  46. package/dist/lib/jest/index.js +0 -57
  47. package/dist/lib/jest/index.js.map +0 -1
  48. package/dist/lib/jest/models.d.ts.map +0 -1
  49. package/dist/lib/jest/models.js.map +0 -1
  50. /package/dist/lib/{jest → test-matcher/jest}/models.js +0 -0
package/README.md CHANGED
@@ -209,10 +209,13 @@ trees:
209
209
  jest --json --outputFile=jest-report.json
210
210
  ```
211
211
 
212
- Чтобы добавить в выгрузку ФТ информацию из отчета jest, добавьте в корень [конфигурационного файла](#формат-конфига) секцию `"jest"`:
212
+ Чтобы добавить в выгрузку ФТ информацию из отчета jest или JUnit, добавьте в корень [конфигурационного файла](#формат-конфига) секцию `"jest"` или `"JUnit"`
213
+
214
+ Если в проекте один набор тестов, то указать следует только один отчет.
215
+
216
+ Если в проекте выполняется несколько наборов тестов с разными форматами отчетов, то можно указать обе секции
213
217
 
214
218
  ```js
215
- {
216
219
  // ...
217
220
  "jest": {
218
221
  // путь к файлу с отчетом о выполнении тестов
@@ -221,6 +224,12 @@ jest --json --outputFile=jest-report.json
221
224
  // сегменты идентификатора для сопоставления автотестов с ФТ
222
225
  "keys": ["featureTitle", "groupTitle", "assertionTitle"]
223
226
  }
227
+
228
+ "JUnit": {
229
+ "reportPath": "test-results/junit.xml",
230
+
231
+ "keys": ["featureCode", "featureTitle", "groupTitle", "assertionTitle"]
232
+ }
224
233
  ```
225
234
 
226
235
  Для каждого ФТ, описанного в yml файлах проекта, будет сформирован уникальный идентификатор на основе поля `"keys"`. Если в отчете jest есть тест, полное имя которого совпадает с идентификатором ФТ, то считается, что проверка этого ФТ — автоматизирована.
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQ7C,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CAmCpD,CAAC"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAU7C,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CAyCpD,CAAC"}
@@ -6,16 +6,18 @@ const fast_glob_1 = tslib_1.__importDefault(require("fast-glob"));
6
6
  const config_1 = require("../lib/config");
7
7
  const yaml_1 = require("../lib/yaml");
8
8
  const upload_entities_1 = require("../lib/upload/upload-entities");
9
- const jest_1 = require("../lib/jest");
9
+ const jest_1 = require("../lib/test-matcher/jest");
10
10
  const domain_1 = require("../lib/domain");
11
11
  const validators_1 = require("../lib/validators");
12
+ const test_matcher_1 = require("../lib/test-matcher");
13
+ const junit_1 = require("../lib/test-matcher/junit");
12
14
  exports.cmdSync = {
13
15
  command: 'sync',
14
16
  handler: async (args) => {
15
17
  console.log('SYNC');
16
18
  const { config, prjversion: version } = args;
17
19
  const validationContext = new validators_1.Validator();
18
- const { yml, api, jest, projectPath } = await (0, config_1.loadConfig)(config);
20
+ const { yml, api, jest, JUnit, projectPath } = await (0, config_1.loadConfig)(config);
19
21
  const meta = await (0, config_1.loadMeta)(validationContext, yml.metaPath, projectPath);
20
22
  const files = await (0, fast_glob_1.default)(yml.files, { cwd: projectPath });
21
23
  const yamls = await Promise.all(files.map((path) => (0, yaml_1.loadYaml)(validationContext, path, projectPath)));
@@ -25,7 +27,11 @@ exports.cmdSync = {
25
27
  validationContext.validate(projectData);
26
28
  if (jest) {
27
29
  const jestReport = await (0, jest_1.loadJestReport)(jest.reportPath, projectPath);
28
- (0, jest_1.applyJestReport)(validationContext, projectData, jestReport, jest.keys);
30
+ (0, test_matcher_1.applyTestReport)(validationContext, projectData, jestReport, jest.keys);
31
+ }
32
+ if (JUnit) {
33
+ const junitReport = await (0, junit_1.loadJUnitReport)(JUnit.reportPath, projectPath);
34
+ (0, test_matcher_1.applyTestReport)(validationContext, projectData, junitReport, JUnit.keys);
29
35
  }
30
36
  validationContext.printReport();
31
37
  if (validationContext.hasCriticalErrors) {
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":";;;;AACA,kEAA6B;AAG7B,0CAAqD;AACrD,sCAAiD;AACjD,mEAA+D;AAC/D,sCAA8D;AAC9D,0CAAiD;AACjD,kDAA8C;AAEjC,QAAA,OAAO,GAAqC;IACvD,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAC7C,MAAM,iBAAiB,GAAG,IAAI,sBAAS,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;QAEjE,MAAM,IAAI,GAAG,MAAM,IAAA,iBAAQ,EAAC,iBAAiB,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAI,EAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;QAE1D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,eAAQ,EAAC,iBAAiB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CACpE,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,KAAK,EAAY,CAAC;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzD,MAAM,WAAW,GAAG,IAAA,yBAAgB,EAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACzD,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAExC,IAAI,IAAI,EAAE;YACR,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAc,EAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEtE,IAAA,sBAAe,EAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SACxE;QAED,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,iBAAiB,CAAC,iBAAiB,EAAE;YACvC,MAAM,KAAK,CAAC,sDAAsD,CAAC,CAAC;SACrE;QAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,CAAC,OAAO,WAAW,OAAO,EAAE,CAAC,CAAC;QACjE,MAAM,IAAA,gCAAc,EAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":";;;;AACA,kEAA6B;AAG7B,0CAAqD;AACrD,sCAAiD;AACjD,mEAA+D;AAC/D,mDAA0D;AAC1D,0CAAiD;AACjD,kDAA8C;AAC9C,sDAAsD;AACtD,qDAA4D;AAE/C,QAAA,OAAO,GAAqC;IACvD,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAC7C,MAAM,iBAAiB,GAAG,IAAI,sBAAS,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;QAExE,MAAM,IAAI,GAAG,MAAM,IAAA,iBAAQ,EAAC,iBAAiB,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAI,EAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;QAE1D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,eAAQ,EAAC,iBAAiB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CACpE,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,KAAK,EAAY,CAAC;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzD,MAAM,WAAW,GAAG,IAAA,yBAAgB,EAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACzD,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAExC,IAAI,IAAI,EAAE;YACR,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAc,EAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEtE,IAAA,8BAAe,EAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SACxE;QAED,IAAI,KAAK,EAAE;YACT,MAAM,WAAW,GAAG,MAAM,IAAA,uBAAe,EAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEzE,IAAA,8BAAe,EAAC,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SAC1E;QAED,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,iBAAiB,CAAC,iBAAiB,EAAE;YACvC,MAAM,KAAK,CAAC,sDAAsD,CAAC,CAAC;SACrE;QAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,CAAC,OAAO,WAAW,OAAO,EAAE,CAAC,CAAC;QACjE,MAAM,IAAA,gCAAc,EAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;CACF,CAAC"}
@@ -1,4 +1,4 @@
1
- import { CommandModule } from "yargs";
2
- import { CommonOptions } from "../lib/utils";
1
+ import { CommandModule } from 'yargs';
2
+ import { CommonOptions } from '../lib/utils';
3
3
  export declare const cmdUploadStat: CommandModule<{}, CommonOptions>;
4
4
  //# sourceMappingURL=upload-stat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload-stat.d.ts","sourceRoot":"","sources":["../../src/commands/upload-stat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAK7C,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CAiB1D,CAAC"}
1
+ {"version":3,"file":"upload-stat.d.ts","sourceRoot":"","sources":["../../src/commands/upload-stat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAM7C,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CAyB1D,CAAC"}
@@ -3,19 +3,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.cmdUploadStat = void 0;
4
4
  const config_1 = require("../lib/config");
5
5
  const upload_jest_stat_1 = require("../lib/upload/upload-jest-stat");
6
- const jest_1 = require("../lib/jest");
6
+ const jest_1 = require("../lib/test-matcher/jest");
7
+ const junit_1 = require("../lib/test-matcher/junit");
7
8
  exports.cmdUploadStat = {
8
- command: "upload-stat",
9
+ command: 'upload-stat',
9
10
  handler: async (args) => {
10
- console.log("Upload Jest stat");
11
+ console.log('Upload Jest stat');
11
12
  const { config, prjversion: version } = args;
12
- const { api, jest, projectPath } = await (0, config_1.loadConfig)(config);
13
- if (!jest) {
14
- console.log("Jest settings are not specified");
13
+ const { api, jest, JUnit, projectPath } = await (0, config_1.loadConfig)(config);
14
+ if (!jest && !JUnit) {
15
+ console.log('Jest settings are not specified');
15
16
  process.exit(1);
16
17
  }
17
- const jestReport = await (0, jest_1.loadJestReport)(jest.reportPath, projectPath);
18
- await (0, upload_jest_stat_1.uploadJestStat)(jestReport, api, version);
18
+ if (jest) {
19
+ const jestReport = await (0, jest_1.loadJestReport)(jest.reportPath, projectPath);
20
+ await (0, upload_jest_stat_1.uploadTestStat)(jestReport, api, version);
21
+ }
22
+ if (JUnit) {
23
+ const junitReport = await (0, junit_1.loadJUnitReport)(JUnit.reportPath, projectPath);
24
+ await (0, upload_jest_stat_1.uploadTestStat)(junitReport, api, version);
25
+ }
19
26
  },
20
27
  };
21
28
  //# sourceMappingURL=upload-stat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload-stat.js","sourceRoot":"","sources":["../../src/commands/upload-stat.ts"],"names":[],"mappings":";;;AAGA,0CAA2C;AAC3C,qEAAgE;AAChE,sCAA6C;AAEhC,QAAA,aAAa,GAAqC;IAC7D,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAE7C,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;QAE5D,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;QAED,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAc,EAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAEtE,MAAM,IAAA,iCAAc,EAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"upload-stat.js","sourceRoot":"","sources":["../../src/commands/upload-stat.ts"],"names":[],"mappings":";;;AAGA,0CAA2C;AAC3C,qEAAgE;AAChE,mDAA0D;AAC1D,qDAA4D;AAE/C,QAAA,aAAa,GAAqC;IAC7D,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAE7C,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;QAEnE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;YACnB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;QAED,IAAI,IAAI,EAAE;YACR,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAc,EAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEtE,MAAM,IAAA,iCAAc,EAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;SAChD;QAED,IAAI,KAAK,EAAE;YACT,MAAM,WAAW,GAAG,MAAM,IAAA,uBAAe,EAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEzE,MAAM,IAAA,iCAAc,EAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;SACjD;IACH,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-only.d.ts","sourceRoot":"","sources":["../../src/commands/validate-only.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAO7C,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CA4B5D,CAAC"}
1
+ {"version":3,"file":"validate-only.d.ts","sourceRoot":"","sources":["../../src/commands/validate-only.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAS7C,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CAmC5D,CAAC"}
@@ -6,12 +6,14 @@ const validators_1 = require("../lib/validators");
6
6
  const fast_glob_1 = require("fast-glob");
7
7
  const yaml_1 = require("../lib/yaml");
8
8
  const domain_1 = require("../lib/domain");
9
- const jest_1 = require("../lib/jest");
9
+ const jest_1 = require("../lib/test-matcher/jest");
10
+ const test_matcher_1 = require("../lib/test-matcher");
11
+ const junit_1 = require("../lib/test-matcher/junit");
10
12
  exports.cmdValidateOnly = {
11
13
  command: 'validate',
12
14
  handler: async (args) => {
13
15
  console.log('VALIDATION');
14
- const { yml, jest, projectPath } = await (0, config_1.loadConfig)(args.config);
16
+ const { yml, jest, JUnit, projectPath } = await (0, config_1.loadConfig)(args.config);
15
17
  const validationContext = new validators_1.Validator();
16
18
  const meta = await (0, config_1.loadMeta)(validationContext, yml.metaPath, projectPath);
17
19
  const files = await (0, fast_glob_1.glob)(yml.files, { cwd: projectPath });
@@ -22,7 +24,11 @@ exports.cmdValidateOnly = {
22
24
  validationContext.validate(projectData);
23
25
  if (jest) {
24
26
  const jestReport = await (0, jest_1.loadJestReport)(jest.reportPath, projectPath);
25
- (0, jest_1.applyJestReport)(validationContext, projectData, jestReport, jest.keys);
27
+ (0, test_matcher_1.applyTestReport)(validationContext, projectData, jestReport, jest.keys);
28
+ }
29
+ if (JUnit) {
30
+ const junitReport = await (0, junit_1.loadJUnitReport)(JUnit.reportPath, projectPath);
31
+ (0, test_matcher_1.applyTestReport)(validationContext, projectData, junitReport, JUnit.keys);
26
32
  }
27
33
  validationContext.printReport();
28
34
  },
@@ -1 +1 @@
1
- {"version":3,"file":"validate-only.js","sourceRoot":"","sources":["../../src/commands/validate-only.ts"],"names":[],"mappings":";;;AAEA,0CAAqD;AAErD,kDAA8C;AAC9C,yCAAiC;AACjC,sCAAiD;AACjD,0CAAiD;AACjD,sCAA8D;AAEjD,QAAA,eAAe,GAAqC;IAC/D,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE1B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,mBAAU,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjE,MAAM,iBAAiB,GAAG,IAAI,sBAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,IAAA,iBAAQ,EAAC,iBAAiB,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE1E,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAI,EAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;QAE1D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,eAAQ,EAAC,iBAAiB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CACpE,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,KAAK,EAAY,CAAC;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzD,MAAM,WAAW,GAAG,IAAA,yBAAgB,EAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAEzD,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAExC,IAAI,IAAI,EAAE;YACR,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAc,EAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEtE,IAAA,sBAAe,EAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SACxE;QACD,iBAAiB,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"validate-only.js","sourceRoot":"","sources":["../../src/commands/validate-only.ts"],"names":[],"mappings":";;;AAEA,0CAAqD;AAErD,kDAA8C;AAC9C,yCAAiC;AACjC,sCAAiD;AACjD,0CAAiD;AACjD,mDAA0D;AAC1D,sDAAsD;AACtD,qDAA4D;AAE/C,QAAA,eAAe,GAAqC;IAC/D,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE1B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,mBAAU,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxE,MAAM,iBAAiB,GAAG,IAAI,sBAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,IAAA,iBAAQ,EAAC,iBAAiB,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE1E,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAI,EAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;QAE1D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,eAAQ,EAAC,iBAAiB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CACpE,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,KAAK,EAAY,CAAC;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzD,MAAM,WAAW,GAAG,IAAA,yBAAgB,EAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAEzD,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAExC,IAAI,IAAI,EAAE;YACR,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAc,EAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEtE,IAAA,8BAAe,EAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SACxE;QAED,IAAI,KAAK,EAAE;YACT,MAAM,WAAW,GAAG,MAAM,IAAA,uBAAe,EAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEzE,IAAA,8BAAe,EAAC,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SAC1E;QAED,iBAAiB,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;CACF,CAAC"}
@@ -45,7 +45,7 @@ export declare const ymlConfigDecoder: d.Decoder<unknown, Partial<{
45
45
  }>;
46
46
  export declare const literalKeyPartDecoder: d.Decoder<unknown, "filePath" | "featureCode" | "featureTitle" | "groupTitle" | "assertionTitle" | "fileName">;
47
47
  export declare const attributeKeyPartDecoder: d.Decoder<unknown, string>;
48
- export declare const jestConfigDecoder: d.Decoder<unknown, {
48
+ export declare const testReportConfigDecoder: d.Decoder<unknown, {
49
49
  reportPath: string;
50
50
  keys: string[];
51
51
  }>;
@@ -55,6 +55,10 @@ export declare const configDecoder: d.Decoder<unknown, Partial<{
55
55
  reportPath: string;
56
56
  keys: string[];
57
57
  };
58
+ JUnit: {
59
+ reportPath: string;
60
+ keys: string[];
61
+ };
58
62
  }> & {
59
63
  api: {
60
64
  host: string;
@@ -69,7 +73,7 @@ export declare const configDecoder: d.Decoder<unknown, Partial<{
69
73
  export type RootConfig = d.TypeOf<typeof configDecoder>;
70
74
  export type ApiConfig = d.TypeOf<typeof apiConfigDecoder>;
71
75
  export type YmlConfig = d.TypeOf<typeof ymlConfigDecoder>;
72
- export type JestConfig = d.TypeOf<typeof jestConfigDecoder>;
76
+ export type JestConfig = d.TypeOf<typeof testReportConfigDecoder>;
73
77
  export type Meta = d.TypeOf<typeof metaDecoder>;
74
78
  export type Tree = d.TypeOf<typeof treeDecoder>;
75
79
  export type Attribute = d.TypeOf<typeof attributeDecoder>;
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/lib/config/models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AAGnC,eAAO,MAAM,qBAAqB;;;EAGhC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;EAItB,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;GAMtB,CAAC;AAGH,eAAO,MAAM,gBAAgB;;;EAG3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;EAQ5B,CAAC;AAEF,eAAO,MAAM,qBAAqB,gHAOjC,CAAC;AAEF,eAAO,MAAM,uBAAuB,4BASnC,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;EAG5B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;EAUzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AACxD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/lib/config/models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AAGnC,eAAO,MAAM,qBAAqB;;;EAGhC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;EAItB,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;GAMtB,CAAC;AAGH,eAAO,MAAM,gBAAgB;;;EAG3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;EAQ5B,CAAC;AAEF,eAAO,MAAM,qBAAqB,gHAOjC,CAAC;AAEF,eAAO,MAAM,uBAAuB,4BASnC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;EAGlC,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;EAWzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AACxD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAElE,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.configDecoder = exports.jestConfigDecoder = exports.attributeKeyPartDecoder = exports.literalKeyPartDecoder = exports.ymlConfigDecoder = exports.apiConfigDecoder = exports.metaDecoder = exports.treeDecoder = exports.attributeDecoder = exports.attributeValueDecoder = void 0;
3
+ exports.configDecoder = exports.testReportConfigDecoder = exports.attributeKeyPartDecoder = exports.literalKeyPartDecoder = exports.ymlConfigDecoder = exports.apiConfigDecoder = exports.metaDecoder = exports.treeDecoder = exports.attributeDecoder = exports.attributeValueDecoder = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const function_1 = require("fp-ts/lib/function");
6
6
  const d = tslib_1.__importStar(require("io-ts/Decoder"));
@@ -43,7 +43,7 @@ exports.attributeKeyPartDecoder = (0, function_1.pipe)(d.string, d.parse((str) =
43
43
  }
44
44
  return d.failure(str, "starts with @ or $ symbol");
45
45
  }));
46
- exports.jestConfigDecoder = d.struct({
46
+ exports.testReportConfigDecoder = d.struct({
47
47
  reportPath: d.string,
48
48
  keys: d.array(d.union(exports.literalKeyPartDecoder, exports.attributeKeyPartDecoder)),
49
49
  });
@@ -52,6 +52,7 @@ exports.configDecoder = d.intersect(d.struct({
52
52
  yml: exports.ymlConfigDecoder,
53
53
  }))(d.partial({
54
54
  projectPath: d.string,
55
- jest: exports.jestConfigDecoder,
55
+ jest: exports.testReportConfigDecoder,
56
+ JUnit: exports.testReportConfigDecoder,
56
57
  }));
57
58
  //# sourceMappingURL=models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/lib/config/models.ts"],"names":[],"mappings":";;;;AAAA,iDAA0C;AAC1C,yDAAmC;AAEnC,OAAO;AACM,QAAA,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,KAAK,EAAE,CAAC,CAAC,MAAM;CAChB,CAAC,CAAC;AAEU,QAAA,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,KAAK,EAAE,CAAC,CAAC,MAAM;IACf,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,6BAAqB,CAAC;CACvC,CAAC,CAAC;AAEU,QAAA,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,KAAK,EAAE,CAAC,CAAC,MAAM;IACf,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;CAC9B,CAAC,CAAC;AAEU,QAAA,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM;IACf,WAAW,EAAE,CAAC,CAAC,MAAM;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM;IACpB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAgB,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAW,CAAC;CAC5B,CAAC,CAAC;AAEH,SAAS;AACI,QAAA,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,OAAO,EAAE,CAAC,CAAC,MAAM;CAClB,CAAC,CAAC;AAEU,QAAA,gBAAgB,GAAG,CAAC,CAAC,SAAS,CACzC,CAAC,CAAC,MAAM,CAAC;IACP,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;CACzB,CAAC,CACH,CACC,CAAC,CAAC,OAAO,CAAC;IACR,QAAQ,EAAE,CAAC,CAAC,MAAM;CACnB,CAAC,CACH,CAAC;AAEW,QAAA,qBAAqB,GAAG,CAAC,CAAC,OAAO,CAC5C,cAAc,EACd,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,UAAU,CACX,CAAC;AAEW,QAAA,uBAAuB,GAAG,IAAA,eAAI,EACzC,CAAC,CAAC,MAAM,EACR,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACd,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACrB,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;KAC9B;IAED,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;AACrD,CAAC,CAAC,CACH,CAAC;AAEW,QAAA,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,UAAU,EAAE,CAAC,CAAC,MAAM;IACpB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,6BAAqB,EAAE,+BAAuB,CAAC,CAAC;CACvE,CAAC,CAAC;AAEU,QAAA,aAAa,GAAG,CAAC,CAAC,SAAS,CACtC,CAAC,CAAC,MAAM,CAAC;IACP,GAAG,EAAE,wBAAgB;IACrB,GAAG,EAAE,wBAAgB;CACtB,CAAC,CACH,CACC,CAAC,CAAC,OAAO,CAAC;IACR,WAAW,EAAE,CAAC,CAAC,MAAM;IACrB,IAAI,EAAE,yBAAiB;CACxB,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/lib/config/models.ts"],"names":[],"mappings":";;;;AAAA,iDAA0C;AAC1C,yDAAmC;AAEnC,OAAO;AACM,QAAA,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,KAAK,EAAE,CAAC,CAAC,MAAM;CAChB,CAAC,CAAC;AAEU,QAAA,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,KAAK,EAAE,CAAC,CAAC,MAAM;IACf,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,6BAAqB,CAAC;CACvC,CAAC,CAAC;AAEU,QAAA,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,KAAK,EAAE,CAAC,CAAC,MAAM;IACf,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;CAC9B,CAAC,CAAC;AAEU,QAAA,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM;IACf,WAAW,EAAE,CAAC,CAAC,MAAM;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM;IACpB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAgB,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAW,CAAC;CAC5B,CAAC,CAAC;AAEH,SAAS;AACI,QAAA,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,OAAO,EAAE,CAAC,CAAC,MAAM;CAClB,CAAC,CAAC;AAEU,QAAA,gBAAgB,GAAG,CAAC,CAAC,SAAS,CACzC,CAAC,CAAC,MAAM,CAAC;IACP,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;CACzB,CAAC,CACH,CACC,CAAC,CAAC,OAAO,CAAC;IACR,QAAQ,EAAE,CAAC,CAAC,MAAM;CACnB,CAAC,CACH,CAAC;AAEW,QAAA,qBAAqB,GAAG,CAAC,CAAC,OAAO,CAC5C,cAAc,EACd,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,UAAU,CACX,CAAC;AAEW,QAAA,uBAAuB,GAAG,IAAA,eAAI,EACzC,CAAC,CAAC,MAAM,EACR,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACd,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACrB,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;KAC9B;IAED,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;AACrD,CAAC,CAAC,CACH,CAAC;AAEW,QAAA,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,UAAU,EAAE,CAAC,CAAC,MAAM;IACpB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,6BAAqB,EAAE,+BAAuB,CAAC,CAAC;CACvE,CAAC,CAAC;AAEU,QAAA,aAAa,GAAG,CAAC,CAAC,SAAS,CACtC,CAAC,CAAC,MAAM,CAAC;IACP,GAAG,EAAE,wBAAgB;IACrB,GAAG,EAAE,wBAAgB;CACtB,CAAC,CACH,CACC,CAAC,CAAC,OAAO,CAAC;IACR,WAAW,EAAE,CAAC,CAAC,MAAM;IACrB,IAAI,EAAE,+BAAuB;IAC7B,KAAK,EAAE,+BAAuB;CAC/B,CAAC,CACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { ProjectData } from '../domain';
2
+ import { Validator } from '../validators';
3
+ import { AssertionStatus, TestReport } from './models';
4
+ export declare const getFullName: (...parts: string[]) => string;
5
+ export declare const ignoredStatuses: Set<AssertionStatus>;
6
+ export declare const applyTestReport: (validationContext: Validator, { features, attributes }: ProjectData, report: TestReport, keyParts: string[]) => void;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/test-matcher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,WAAW,EACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEvD,eAAO,MAAM,WAAW,aAAc,MAAM,EAAE,WAAoB,CAAC;AAEnE,eAAO,MAAM,eAAe,sBAI1B,CAAC;AAEH,eAAO,MAAM,eAAe,sBACP,SAAS,4BACF,WAAW,UAC7B,UAAU,YACR,MAAM,EAAE,SAgDnB,CAAC"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyTestReport = exports.ignoredStatuses = exports.getFullName = void 0;
4
+ const domain_1 = require("../domain");
5
+ const getFullName = (...parts) => parts.join(' ');
6
+ exports.getFullName = getFullName;
7
+ exports.ignoredStatuses = new Set([
8
+ 'pending',
9
+ 'todo',
10
+ 'skipped',
11
+ ]);
12
+ const applyTestReport = (validationContext, { features, attributes }, report, keyParts) => {
13
+ const names = new Map();
14
+ for (let { name, filePath } of report.testResults) {
15
+ const paths = names.get(name) || [];
16
+ paths.push(filePath || '');
17
+ names.set(name, paths);
18
+ }
19
+ const attributesCtx = (0, domain_1.getAttributesContext)(attributes);
20
+ // заполняем поле isAutomated
21
+ for (let { title: featureTitle, code: featureCode, groups, fileName, filePath, attributes = {}, } of features) {
22
+ for (let { title: groupTitle, assertions } of groups || []) {
23
+ for (let assertion of assertions || []) {
24
+ // TODO: перенести в domain?
25
+ const assertionCtx = {
26
+ featureTitle,
27
+ featureCode,
28
+ groupTitle,
29
+ assertionTitle: assertion.title,
30
+ attributes,
31
+ fileName,
32
+ filePath,
33
+ };
34
+ const parts = (0, domain_1.getKey)(keyParts, assertionCtx, attributesCtx);
35
+ const fullName = (0, exports.getFullName)(...parts);
36
+ assertion.isAutomated = names.has(fullName);
37
+ names.delete(fullName);
38
+ }
39
+ }
40
+ }
41
+ Array.from(names.keys()).forEach((name) => {
42
+ const paths = names.get(name);
43
+ paths === null || paths === void 0 ? void 0 : paths.forEach((path) => validationContext.registerJestUnusedTests(name, path));
44
+ });
45
+ };
46
+ exports.applyTestReport = applyTestReport;
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/test-matcher/index.ts"],"names":[],"mappings":";;;AAAA,sCAKmB;AAIZ,MAAM,WAAW,GAAG,CAAC,GAAG,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAAtD,QAAA,WAAW,eAA2C;AAEtD,QAAA,eAAe,GAAG,IAAI,GAAG,CAAkB;IACtD,SAAS;IACT,MAAM;IACN,SAAS;CACV,CAAC,CAAC;AAEI,MAAM,eAAe,GAAG,CAC7B,iBAA4B,EAC5B,EAAE,QAAQ,EAAE,UAAU,EAAe,EACrC,MAAkB,EAClB,QAAkB,EAClB,EAAE;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE1C,KAAK,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACxB;IAED,MAAM,aAAa,GAAG,IAAA,6BAAoB,EAAC,UAAU,CAAC,CAAC;IAEvD,6BAA6B;IAC7B,KAAK,IAAI,EACP,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,WAAW,EACjB,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,GAAG,EAAE,GAChB,IAAI,QAAQ,EAAE;QACb,KAAK,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,MAAM,IAAI,EAAE,EAAE;YAC1D,KAAK,IAAI,SAAS,IAAI,UAAU,IAAI,EAAE,EAAE;gBACtC,4BAA4B;gBAC5B,MAAM,YAAY,GAAqB;oBACrC,YAAY;oBACZ,WAAW;oBACX,UAAU;oBACV,cAAc,EAAE,SAAS,CAAC,KAAK;oBAC/B,UAAU;oBACV,QAAQ;oBACR,QAAQ;iBACT,CAAC;gBAEF,MAAM,KAAK,GAAG,IAAA,eAAM,EAAC,QAAQ,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;gBAC5D,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,GAAG,KAAK,CAAC,CAAC;gBAEvC,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC5C,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;aACxB;SACF;KACF;IACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,iBAAiB,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CACtD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AApDW,QAAA,eAAe,mBAoD1B"}
@@ -0,0 +1,3 @@
1
+ import { TestReport } from '../models';
2
+ export declare const loadJestReport: (path: string, basePath?: string) => Promise<TestReport>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/test-matcher/jest/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,UAAU,EAAE,MAAM,WAAW,CAAC;AAuCxD,eAAO,MAAM,cAAc,SACnB,MAAM,aACD,MAAM,KAChB,QAAQ,UAAU,CAOpB,CAAC"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadJestReport = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const models_1 = require("./models");
6
+ const getFullName = (...parts) => parts.join(' ');
7
+ const mapTestResults = (testResult) => {
8
+ const results = new Array();
9
+ // формируем список ключей тест-кейсов из отчета jest
10
+ for (let { assertionResults, name: filePath } of testResult) {
11
+ for (let { title, ancestorTitles, status } of assertionResults) {
12
+ const name = getFullName(...ancestorTitles, title);
13
+ results.push({
14
+ name,
15
+ filePath,
16
+ status,
17
+ });
18
+ }
19
+ }
20
+ return results;
21
+ };
22
+ const mapTestReport = (jestReport) => {
23
+ const { startTime, numTotalTests: total } = jestReport;
24
+ // Сумма затраченного времени на все тест сьюты
25
+ const duration = jestReport.testResults.reduce((sum, item) => sum + item.endTime - item.startTime, 0);
26
+ return {
27
+ startTime,
28
+ total,
29
+ duration,
30
+ testResults: mapTestResults(jestReport.testResults),
31
+ };
32
+ };
33
+ const loadJestReport = async (path, basePath) => {
34
+ const json = await (0, utils_1.readTextFile)(path, basePath);
35
+ const data = JSON.parse(json);
36
+ const entity = (0, utils_1.parseObject)(data, models_1.jestReportDecoder);
37
+ return mapTestReport(entity);
38
+ };
39
+ exports.loadJestReport = loadJestReport;
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/test-matcher/jest/index.ts"],"names":[],"mappings":";;;AACA,uCAAwD;AACxD,qCAAyE;AAEzE,MAAM,WAAW,GAAG,CAAC,GAAG,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE5D,MAAM,cAAc,GAAG,CAAC,UAA4B,EAAqB,EAAE;IACzE,MAAM,OAAO,GAAG,IAAI,KAAK,EAAmB,CAAC;IAC7C,qDAAqD;IACrD,KAAK,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,UAAU,EAAE;QAC3D,KAAK,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,gBAAgB,EAAE;YAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,cAAc,EAAE,KAAK,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,QAAQ;gBACR,MAAM;aACP,CAAC,CAAC;SACJ;KACF;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,UAAsB,EAAc,EAAE;IAC3D,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;IAEvD,+CAA+C;IAC/C,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAC5C,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,EAClD,CAAC,CACF,CAAC;IAEF,OAAO;QACL,SAAS;QACT,KAAK;QACL,QAAQ;QACR,WAAW,EAAE,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC;KACpD,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,cAAc,GAAG,KAAK,EACjC,IAAY,EACZ,QAAiB,EACI,EAAE;IACvB,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAY,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,IAAI,EAAE,0BAAiB,CAAC,CAAC;IAEpD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC,CAAC;AAVW,QAAA,cAAc,kBAUzB"}
@@ -1,15 +1,15 @@
1
1
  import * as d from "io-ts/Decoder";
2
- export declare const jestSuiteStatusDecoder: d.Decoder<unknown, "passed" | "failed" | "pending" | "focused" | "skipped">;
3
- export declare const jestAssertionStatusDecoder: d.Decoder<unknown, "todo" | "passed" | "failed" | "pending" | "skipped">;
2
+ export declare const jestSuiteStatusDecoder: d.Decoder<unknown, "passed" | "failed" | "skipped" | "pending" | "focused">;
3
+ export declare const jestAssertionStatusDecoder: d.Decoder<unknown, "todo" | "passed" | "failed" | "skipped" | "pending">;
4
4
  export declare const jestAssertionResultDecoder: d.Decoder<unknown, {
5
5
  title: string;
6
6
  fullName: string;
7
7
  ancestorTitles: string[];
8
- status: "todo" | "passed" | "failed" | "pending" | "skipped";
8
+ status: "todo" | "passed" | "failed" | "skipped" | "pending";
9
9
  }>;
10
10
  export declare const jestTestResultDecoder: d.Decoder<unknown, {
11
11
  name: string;
12
- status: "passed" | "failed" | "pending" | "focused" | "skipped";
12
+ status: "passed" | "failed" | "skipped" | "pending" | "focused";
13
13
  message: string;
14
14
  startTime: number;
15
15
  endTime: number;
@@ -17,7 +17,7 @@ export declare const jestTestResultDecoder: d.Decoder<unknown, {
17
17
  title: string;
18
18
  fullName: string;
19
19
  ancestorTitles: string[];
20
- status: "todo" | "passed" | "failed" | "pending" | "skipped";
20
+ status: "todo" | "passed" | "failed" | "skipped" | "pending";
21
21
  }[];
22
22
  }>;
23
23
  export declare const jestReportDecoder: d.Decoder<unknown, {
@@ -25,7 +25,7 @@ export declare const jestReportDecoder: d.Decoder<unknown, {
25
25
  numTotalTests: number;
26
26
  testResults: {
27
27
  name: string;
28
- status: "passed" | "failed" | "pending" | "focused" | "skipped";
28
+ status: "passed" | "failed" | "skipped" | "pending" | "focused";
29
29
  message: string;
30
30
  startTime: number;
31
31
  endTime: number;
@@ -33,10 +33,11 @@ export declare const jestReportDecoder: d.Decoder<unknown, {
33
33
  title: string;
34
34
  fullName: string;
35
35
  ancestorTitles: string[];
36
- status: "todo" | "passed" | "failed" | "pending" | "skipped";
36
+ status: "todo" | "passed" | "failed" | "skipped" | "pending";
37
37
  }[];
38
38
  }[];
39
39
  }>;
40
40
  export type JestReport = d.TypeOf<typeof jestReportDecoder>;
41
+ export type JestTestResult = d.TypeOf<typeof jestTestResultDecoder>;
41
42
  export type JestAssertionStatus = d.TypeOf<typeof jestAssertionStatusDecoder>;
42
43
  //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../src/lib/test-matcher/jest/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AAEnC,eAAO,MAAM,sBAAsB,6EAMlC,CAAC;AAEF,eAAO,MAAM,0BAA0B,0EAMtC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;EAKrC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAOhC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;EAI5B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/lib/test-matcher/jest/models.ts"],"names":[],"mappings":";;;;AAAA,yDAAmC;AAEtB,QAAA,sBAAsB,GAAG,CAAC,CAAC,OAAO,CAC7C,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,CACV,CAAC;AAEW,QAAA,0BAA0B,GAAG,CAAC,CAAC,OAAO,CACjD,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,SAAS,CACV,CAAC;AAEW,QAAA,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,MAAM;IACf,QAAQ,EAAE,CAAC,CAAC,MAAM;IAClB,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACjC,MAAM,EAAE,kCAA0B;CACnC,CAAC,CAAC;AAEU,QAAA,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,MAAM,EAAE,8BAAsB;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM;IACjB,SAAS,EAAE,CAAC,CAAC,MAAM;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM;IACjB,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,kCAA0B,CAAC;CACtD,CAAC,CAAC;AAEU,QAAA,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM;IACnB,aAAa,EAAE,CAAC,CAAC,MAAM;IACvB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,6BAAqB,CAAC;CAC5C,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { TestReport } from '../models';
2
+ export declare const loadJUnitReport: (path: string, basePath?: string) => Promise<TestReport>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/test-matcher/junit/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,UAAU,EAAE,MAAM,WAAW,CAAC;AAwCxD,eAAO,MAAM,eAAe,SACpB,MAAM,aACD,MAAM,KAChB,QAAQ,UAAU,CASpB,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadJUnitReport = void 0;
4
+ const xml2js_1 = require("xml2js");
5
+ const utils_1 = require("../../utils");
6
+ const models_1 = require("./models");
7
+ const mapTestResults = (testResult) => {
8
+ const results = new Array();
9
+ for (let { testcase: testCases } of testResult) {
10
+ for (let { name, status } of testCases) {
11
+ results.push({
12
+ name,
13
+ filePath: 'unknown',
14
+ status,
15
+ });
16
+ }
17
+ }
18
+ return results;
19
+ };
20
+ const mapTestReport = (junitReport) => {
21
+ const { testsuites } = junitReport;
22
+ const total = testsuites.tests;
23
+ const startTime = testsuites.testsuite.reduce((acc, item) => Math.min(acc, item.timestamp.getTime()), Number.MAX_VALUE);
24
+ // Сумма затраченного времени на все тест сьюты
25
+ const duration = testsuites.testsuite.reduce((sum, item) => sum + item.time, 0) * 1000;
26
+ return {
27
+ startTime,
28
+ total,
29
+ duration,
30
+ testResults: mapTestResults(testsuites.testsuite),
31
+ };
32
+ };
33
+ const loadJUnitReport = async (path, basePath) => {
34
+ const xml = await (0, utils_1.readTextFile)(path, basePath);
35
+ const data = await (0, xml2js_1.parseStringPromise)(xml, {
36
+ explicitArray: false,
37
+ mergeAttrs: true,
38
+ });
39
+ const entity = (0, utils_1.parseObject)(data, models_1.junitReportDecoder);
40
+ return mapTestReport(entity);
41
+ };
42
+ exports.loadJUnitReport = loadJUnitReport;
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/test-matcher/junit/index.ts"],"names":[],"mappings":";;;AAAA,mCAA4C;AAC5C,uCAAwD;AAExD,qCAA2E;AAE3E,MAAM,cAAc,GAAG,CAAC,UAA4B,EAAqB,EAAE;IACzE,MAAM,OAAO,GAAG,IAAI,KAAK,EAAmB,CAAC;IAE7C,KAAK,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,UAAU,EAAE;QAC9C,KAAK,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,SAAS,EAAE;YACtC,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,QAAQ,EAAE,SAAS;gBACnB,MAAM;aACP,CAAC,CAAC;SACJ;KACF;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,WAAwB,EAAc,EAAE;IAC7D,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC;IACnC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;IAE/B,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAC3C,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EACtD,MAAM,CAAC,SAAS,CACjB,CAAC;IAEF,+CAA+C;IAC/C,MAAM,QAAQ,GACZ,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAExE,OAAO;QACL,SAAS;QACT,KAAK;QACL,QAAQ;QACR,WAAW,EAAE,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC;KAClD,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,eAAe,GAAG,KAAK,EAClC,IAAY,EACZ,QAAiB,EACI,EAAE;IACvB,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAY,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAY,MAAM,IAAA,2BAAkB,EAAC,GAAG,EAAE;QAClD,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,IAAI,EAAE,2BAAkB,CAAC,CAAC;IAErD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC,CAAC;AAZW,QAAA,eAAe,mBAY1B"}
@@ -0,0 +1,40 @@
1
+ import * as d from 'io-ts/Decoder';
2
+ export type JUnitStatuses = 'skipped' | 'failed' | 'passed';
3
+ declare const junitTestCaseStatusDecoder: d.Decoder<unknown, Partial<{
4
+ skipped: string;
5
+ failed: string;
6
+ }>>;
7
+ export type JUnitTestCaseStatus = d.TypeOf<typeof junitTestCaseStatusDecoder>;
8
+ declare const junitTestCaseDecoder: d.Decoder<unknown, {
9
+ status: JUnitStatuses;
10
+ } & {
11
+ name: string;
12
+ }>;
13
+ declare const junitTestSuiteDecoder: d.Decoder<unknown, {
14
+ timestamp: Date;
15
+ time: number;
16
+ testcase: ({
17
+ status: JUnitStatuses;
18
+ } & {
19
+ name: string;
20
+ })[];
21
+ }>;
22
+ export declare const junitReportDecoder: d.Decoder<unknown, {
23
+ testsuites: {
24
+ tests: number;
25
+ testsuite: {
26
+ timestamp: Date;
27
+ time: number;
28
+ testcase: ({
29
+ status: JUnitStatuses;
30
+ } & {
31
+ name: string;
32
+ })[];
33
+ }[];
34
+ };
35
+ }>;
36
+ export type JUnitReport = d.TypeOf<typeof junitReportDecoder>;
37
+ export type JUnitTestSuite = d.TypeOf<typeof junitTestSuiteDecoder>;
38
+ export type JUnitTestCase = d.TypeOf<typeof junitTestCaseDecoder>;
39
+ export {};
40
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../src/lib/test-matcher/junit/models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AAanC,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5D,QAAA,MAAM,0BAA0B;;;GAG9B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAa9E,QAAA,MAAM,oBAAoB;;;;EASzB,CAAC;AAEF,QAAA,MAAM,qBAAqB;;;;;;;;EAUzB,CAAC;AAUH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;EAE7B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.junitReportDecoder = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const function_1 = require("fp-ts/lib/function");
6
+ const d = tslib_1.__importStar(require("io-ts/Decoder"));
7
+ const singleItemOrArray = (decoder) => (0, function_1.pipe)(d.union(decoder, d.array(decoder)), d.parse((value) => {
8
+ if (Array.isArray(value)) {
9
+ return d.success(value);
10
+ }
11
+ return d.success([value]);
12
+ }));
13
+ const junitTestCaseStatusDecoder = d.partial({
14
+ skipped: d.string,
15
+ failed: d.string,
16
+ });
17
+ const mapStatus = (testCase) => {
18
+ const { skipped, failed } = testCase;
19
+ if (skipped !== undefined) {
20
+ return 'skipped';
21
+ }
22
+ if (failed !== undefined) {
23
+ return 'failed';
24
+ }
25
+ return 'passed';
26
+ };
27
+ const junitTestCaseDecoder = d.intersect(d.struct({
28
+ name: d.string,
29
+ }))((0, function_1.pipe)(junitTestCaseStatusDecoder, d.parse((s) => d.success({ status: mapStatus(s) }))));
30
+ const junitTestSuiteDecoder = d.struct({
31
+ timestamp: (0, function_1.pipe)(d.string, d.parse((s) => d.success(new Date(s)))),
32
+ time: (0, function_1.pipe)(d.string, d.parse((v) => d.success(Number(v)))),
33
+ testcase: singleItemOrArray(junitTestCaseDecoder),
34
+ });
35
+ const junitTestSuitesDecoder = d.struct({
36
+ tests: (0, function_1.pipe)(d.string, d.parse((v) => d.success(Number(v)))),
37
+ testsuite: singleItemOrArray(junitTestSuiteDecoder),
38
+ });
39
+ exports.junitReportDecoder = d.struct({
40
+ testsuites: junitTestSuitesDecoder,
41
+ });
42
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/lib/test-matcher/junit/models.ts"],"names":[],"mappings":";;;;AAAA,iDAA0C;AAC1C,yDAAmC;AAEnC,MAAM,iBAAiB,GAAG,CAAI,OAA8B,EAAE,EAAE,CAC9D,IAAA,eAAI,EACF,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAClC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAChB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KACzB;IACD,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,CAAC,CAAC,CACH,CAAC;AAIJ,MAAM,0BAA0B,GAAG,CAAC,CAAC,OAAO,CAAC;IAC3C,OAAO,EAAE,CAAC,CAAC,MAAM;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM;CACjB,CAAC,CAAC;AAIH,MAAM,SAAS,GAAG,CAAC,QAA6B,EAAiB,EAAE;IACjE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IACrC,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,SAAS,CAAC;KAClB;IACD,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO,QAAQ,CAAC;KACjB;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,CAAC,SAAS,CACtC,CAAC,CAAC,MAAM,CAAC;IACP,IAAI,EAAE,CAAC,CAAC,MAAM;CACf,CAAC,CACH,CACC,IAAA,eAAI,EACF,0BAA0B,EAC1B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CACpD,CACF,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,IAAA,eAAI,EACb,CAAC,CAAC,MAAM,EACR,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACvC;IACD,IAAI,EAAE,IAAA,eAAI,EACR,CAAC,CAAC,MAAM,EACR,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACrC;IACD,QAAQ,EAAE,iBAAiB,CAAC,oBAAoB,CAAC;CAClD,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,IAAA,eAAI,EACT,CAAC,CAAC,MAAM,EACR,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACrC;IACD,SAAS,EAAE,iBAAiB,CAAC,qBAAqB,CAAC;CACpD,CAAC,CAAC;AAEU,QAAA,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,UAAU,EAAE,sBAAsB;CACnC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type AssertionStatus = 'passed' | 'failed' | 'skipped' | 'pending' | 'todo';
2
+ export interface AssertionResult {
3
+ name: string;
4
+ filePath?: string;
5
+ status: AssertionStatus;
6
+ }
7
+ export interface TestReport {
8
+ total: number;
9
+ startTime: number;
10
+ duration: number;
11
+ testResults: AssertionResult[];
12
+ }
13
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/lib/test-matcher/models.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/lib/test-matcher/models.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
1
  import { ApiConfig } from '../config/models';
2
- import { JestReport } from '../jest/models';
3
- export declare const uploadJestStat: (jestReport: JestReport, config: ApiConfig, version?: string) => Promise<void>;
2
+ import { TestReport } from '../test-matcher/models';
3
+ export declare const uploadTestStat: (testReport: TestReport, config: ApiConfig, version?: string) => Promise<void>;
4
4
  //# sourceMappingURL=upload-jest-stat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload-jest-stat.d.ts","sourceRoot":"","sources":["../../../src/lib/upload/upload-jest-stat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,eAAO,MAAM,cAAc,eACb,UAAU,UACd,SAAS,YACP,MAAM,kBAqBjB,CAAC"}
1
+ {"version":3,"file":"upload-jest-stat.d.ts","sourceRoot":"","sources":["../../../src/lib/upload/upload-jest-stat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,eAAO,MAAM,cAAc,eACb,UAAU,UACd,SAAS,YACP,MAAM,kBAcjB,CAAC"}
@@ -1,21 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.uploadJestStat = void 0;
3
+ exports.uploadTestStat = void 0;
4
4
  const api_1 = require("../../api");
5
5
  const utils_1 = require("../utils");
6
- const uploadJestStat = async (jestReport, config, version) => {
6
+ const uploadTestStat = async (testReport, config, version) => {
7
7
  const { host, project } = config;
8
- const { startTime, numTotalTests, testResults } = jestReport;
9
- // считаем суммарную длительность всех тестов
10
- // (как при выполнении в одном потоке)
11
- const totalDuration = testResults.reduce((sum, { startTime, endTime }) => sum + (endTime - startTime), 0);
8
+ const { startTime, total, duration } = testReport;
12
9
  const client = new api_1.SpecBoxWebApi(host, utils_1.DEFAULT_API_OPTIONS);
13
10
  const body = {
14
11
  timestamp: new Date(startTime),
15
- assertionsCount: numTotalTests,
16
- duration: totalDuration,
12
+ assertionsCount: total,
13
+ duration,
17
14
  };
18
15
  await client.statUploadAutotests({ project, version, body });
19
16
  };
20
- exports.uploadJestStat = uploadJestStat;
17
+ exports.uploadTestStat = uploadTestStat;
21
18
  //# sourceMappingURL=upload-jest-stat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload-jest-stat.js","sourceRoot":"","sources":["../../../src/lib/upload/upload-jest-stat.ts"],"names":[],"mappings":";;;AAAA,mCAGmB;AAGnB,oCAA+C;AAExC,MAAM,cAAc,GAAG,KAAK,EACjC,UAAsB,EACtB,MAAiB,EACjB,OAAgB,EAChB,EAAE;IACF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACjC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;IAE7D,6CAA6C;IAC7C,sCAAsC;IACtC,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,EAC5D,CAAC,CACF,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,mBAAa,CAAC,IAAI,EAAE,2BAAmB,CAAC,CAAC;IAE5D,MAAM,IAAI,GAAkD;QAC1D,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC;QAC9B,eAAe,EAAE,aAAa;QAC9B,QAAQ,EAAE,aAAa;KACxB,CAAC;IAEF,MAAM,MAAM,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC;AAxBW,QAAA,cAAc,kBAwBzB"}
1
+ {"version":3,"file":"upload-jest-stat.js","sourceRoot":"","sources":["../../../src/lib/upload/upload-jest-stat.ts"],"names":[],"mappings":";;;AAAA,mCAGmB;AAGnB,oCAA+C;AAExC,MAAM,cAAc,GAAG,KAAK,EACjC,UAAsB,EACtB,MAAiB,EACjB,OAAgB,EAChB,EAAE;IACF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACjC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;IAElD,MAAM,MAAM,GAAG,IAAI,mBAAa,CAAC,IAAI,EAAE,2BAAmB,CAAC,CAAC;IAE5D,MAAM,IAAI,GAAkD;QAC1D,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC;QAC9B,eAAe,EAAE,KAAK;QACtB,QAAQ;KACT,CAAC;IAEF,MAAM,MAAM,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC;AAjBW,QAAA,cAAc,kBAiBzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spec-box-tms-sync",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "private": false,
5
5
  "bin": {
6
6
  "spec-box": "./bin/spec-box"
@@ -22,12 +22,14 @@
22
22
  "dependencies": {
23
23
  "@azure/core-client": "^1.7.3",
24
24
  "@azure/core-rest-pipeline": "^1.11.0",
25
+ "@types/xml2js": "0.4.14",
25
26
  "chalk": "^4.1.0",
26
27
  "fast-glob": "^3.3.0",
27
28
  "fp-ts": "^2.16.0",
28
29
  "fs-extra": "^11.1.1",
29
30
  "io-ts": "^2.2.20",
30
31
  "tslib": "^2.6.0",
32
+ "xml2js": "0.6.2",
31
33
  "yaml": "^2.3.1",
32
34
  "yargs": "^17.7.2"
33
35
  },
@@ -1,24 +0,0 @@
1
- import { ProjectData } from '../domain';
2
- import { Validator } from '../validators';
3
- import { JestReport } from './models';
4
- export declare const getFullName: (...parts: string[]) => string;
5
- export declare const ignoredStatuses: Set<"todo" | "passed" | "failed" | "pending" | "skipped">;
6
- export declare const applyJestReport: (validationContext: Validator, { features, attributes }: ProjectData, report: JestReport, keyParts: string[]) => void;
7
- export declare const loadJestReport: (path: string, basePath?: string) => Promise<{
8
- startTime: number;
9
- numTotalTests: number;
10
- testResults: {
11
- name: string;
12
- status: "passed" | "failed" | "pending" | "focused" | "skipped";
13
- message: string;
14
- startTime: number;
15
- endTime: number;
16
- assertionResults: {
17
- title: string;
18
- fullName: string;
19
- ancestorTitles: string[];
20
- status: "todo" | "passed" | "failed" | "pending" | "skipped";
21
- }[];
22
- }[];
23
- }>;
24
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/jest/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAGZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAuB,UAAU,EAAqB,MAAM,UAAU,CAAC;AAE9E,eAAO,MAAM,WAAW,aAAc,MAAM,EAAE,WAAsB,CAAC;AAErE,eAAO,MAAM,eAAe,2DAA+D,CAAC;AAE5F,eAAO,MAAM,eAAe,sBACP,SAAS,4BACF,WAAW,UAC7B,UAAU,YACR,MAAM,EAAE,SAuDnB,CAAC;AAEF,eAAO,MAAM,cAAc,SAAgB,MAAM,aAAa,MAAM;;;;;;;;;;;;;;;;EAOnE,CAAC"}
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadJestReport = exports.applyJestReport = exports.ignoredStatuses = exports.getFullName = void 0;
4
- const domain_1 = require("../domain");
5
- const utils_1 = require("../utils");
6
- const models_1 = require("./models");
7
- const getFullName = (...parts) => parts.join(' / ');
8
- exports.getFullName = getFullName;
9
- exports.ignoredStatuses = new Set(['pending', 'todo', 'skipped']);
10
- const applyJestReport = (validationContext, { features, attributes }, report, keyParts) => {
11
- const names = new Map();
12
- // формируем список ключей тест-кейсов из отчета jest
13
- for (let { assertionResults, name: path } of report.testResults) {
14
- const assertions = assertionResults.filter(a => !exports.ignoredStatuses.has(a.status));
15
- for (let { title, ancestorTitles } of assertions) {
16
- const name = (0, exports.getFullName)(...ancestorTitles, title);
17
- const pathes = names.get(name) || [];
18
- pathes.push(path);
19
- names.set(name, pathes);
20
- }
21
- }
22
- const attributesCtx = (0, domain_1.getAttributesContext)(attributes);
23
- // заполняем поле isAutomated
24
- for (let { title: featureTitle, code: featureCode, groups, fileName, filePath, attributes = {}, } of features) {
25
- for (let { title: groupTitle, assertions } of groups || []) {
26
- for (let assertion of assertions || []) {
27
- // TODO: перенести в domain?
28
- const assertionCtx = {
29
- featureTitle,
30
- featureCode,
31
- groupTitle,
32
- assertionTitle: assertion.title,
33
- attributes,
34
- fileName,
35
- filePath,
36
- };
37
- const parts = (0, domain_1.getKey)(keyParts, assertionCtx, attributesCtx);
38
- const fullName = (0, exports.getFullName)(...parts);
39
- assertion.isAutomated = names.has(fullName);
40
- names.delete(fullName);
41
- }
42
- }
43
- }
44
- Array.from(names.keys()).forEach((name) => {
45
- const pathes = names.get(name);
46
- pathes === null || pathes === void 0 ? void 0 : pathes.forEach((path) => validationContext.registerJestUnusedTests(name, path));
47
- });
48
- };
49
- exports.applyJestReport = applyJestReport;
50
- const loadJestReport = async (path, basePath) => {
51
- const json = await (0, utils_1.readTextFile)(path, basePath);
52
- const data = JSON.parse(json);
53
- const entity = (0, utils_1.parseObject)(data, models_1.jestReportDecoder);
54
- return entity;
55
- };
56
- exports.loadJestReport = loadJestReport;
57
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/jest/index.ts"],"names":[],"mappings":";;;AAAA,sCAKmB;AACnB,oCAAqD;AAErD,qCAA8E;AAEvE,MAAM,WAAW,GAAG,CAAC,GAAG,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAAxD,QAAA,WAAW,eAA6C;AAExD,QAAA,eAAe,GAAG,IAAI,GAAG,CAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAErF,MAAM,eAAe,GAAG,CAC7B,iBAA4B,EAC5B,EAAE,QAAQ,EAAE,UAAU,EAAe,EACrC,MAAkB,EAClB,QAAkB,EAClB,EAAE;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE1C,qDAAqD;IACrD,KAAK,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE;QAC/D,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,uBAAe,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAEhF,KAAK,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,UAAU,EAAE;YAChD,MAAM,IAAI,GAAG,IAAA,mBAAW,EAAC,GAAG,cAAc,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACzB;KACF;IAED,MAAM,aAAa,GAAG,IAAA,6BAAoB,EAAC,UAAU,CAAC,CAAC;IAEvD,6BAA6B;IAC7B,KAAK,IAAI,EACP,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,WAAW,EACjB,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,GAAG,EAAE,GAChB,IAAI,QAAQ,EAAE;QACb,KAAK,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,MAAM,IAAI,EAAE,EAAE;YAC1D,KAAK,IAAI,SAAS,IAAI,UAAU,IAAI,EAAE,EAAE;gBACtC,4BAA4B;gBAC5B,MAAM,YAAY,GAAqB;oBACrC,YAAY;oBACZ,WAAW;oBACX,UAAU;oBACV,cAAc,EAAE,SAAS,CAAC,KAAK;oBAC/B,UAAU;oBACV,QAAQ;oBACR,QAAQ;iBACT,CAAC;gBAEF,MAAM,KAAK,GAAG,IAAA,eAAM,EAAC,QAAQ,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;gBAC5D,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,GAAG,KAAK,CAAC,CAAC;gBAEvC,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAE5C,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;aACxB;SACF;KACF;IACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACvB,iBAAiB,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CACtD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AA3DW,QAAA,eAAe,mBA2D1B;AAEK,MAAM,cAAc,GAAG,KAAK,EAAE,IAAY,EAAE,QAAiB,EAAE,EAAE;IACtE,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAY,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,IAAI,EAAE,0BAAiB,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAPW,QAAA,cAAc,kBAOzB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/lib/jest/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AAEnC,eAAO,MAAM,sBAAsB,6EAMlC,CAAC;AAEF,eAAO,MAAM,0BAA0B,0EAMtC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;EAKrC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAOhC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;EAI5B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/lib/jest/models.ts"],"names":[],"mappings":";;;;AAAA,yDAAmC;AAEtB,QAAA,sBAAsB,GAAG,CAAC,CAAC,OAAO,CAC7C,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,CACV,CAAC;AAEW,QAAA,0BAA0B,GAAG,CAAC,CAAC,OAAO,CACjD,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,SAAS,CACV,CAAC;AAEW,QAAA,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,MAAM;IACf,QAAQ,EAAE,CAAC,CAAC,MAAM;IAClB,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACjC,MAAM,EAAE,kCAA0B;CACnC,CAAC,CAAC;AAEU,QAAA,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,MAAM,EAAE,8BAAsB;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM;IACjB,SAAS,EAAE,CAAC,CAAC,MAAM;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM;IACjB,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,kCAA0B,CAAC;CACtD,CAAC,CAAC;AAEU,QAAA,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM;IACnB,aAAa,EAAE,CAAC,CAAC,MAAM;IACvB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,6BAAqB,CAAC;CAC5C,CAAC,CAAC"}
File without changes