testit-adapter-codecept 1.1.1 → 1.1.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.
- package/README.md +2 -7
- package/build/bootstrap.d.ts +1 -0
- package/build/bootstrap.js +34 -0
- package/build/common/__tests/box.class.spec.d.ts +1 -0
- package/build/common/__tests/box.class.spec.js +15 -0
- package/build/common/__tests/test.utils.d.ts +4 -0
- package/build/common/__tests/test.utils.js +71 -0
- package/build/common/classes/box.class.d.ts +5 -0
- package/build/common/classes/box.class.js +18 -0
- package/build/common/classes/config.class.d.ts +6 -0
- package/build/common/classes/config.class.js +67 -0
- package/build/common/classes/logger.class.d.ts +9 -0
- package/build/common/classes/logger.class.js +28 -0
- package/build/common/classes/outcome.factory.d.ts +7 -0
- package/build/common/classes/outcome.factory.js +19 -0
- package/build/common/functions/compose.function.d.ts +1 -0
- package/build/common/functions/compose.function.js +5 -0
- package/build/common/functions/hash.function.d.ts +1 -0
- package/build/common/functions/hash.function.js +15 -0
- package/build/common/functions/humanize.function.d.ts +1 -0
- package/build/common/functions/humanize.function.js +7 -0
- package/build/common/functions/is-passed.function.d.ts +2 -0
- package/build/common/functions/is-passed.function.js +7 -0
- package/build/common/functions/to-iso-string.function.d.ts +1 -0
- package/build/common/functions/to-iso-string.function.js +10 -0
- package/build/common/functions/use-hash.function.d.ts +9 -0
- package/build/common/functions/use-hash.function.js +13 -0
- package/build/common/types/nullable.type.d.ts +1 -0
- package/build/common/types/nullable.type.js +2 -0
- package/build/helper.d.ts +9 -0
- package/build/helper.js +37 -0
- package/build/http/default-http-client.class.d.ts +22 -0
- package/build/http/default-http-client.class.js +123 -0
- package/build/http/http-client.errors.d.ts +7 -0
- package/build/http/http-client.errors.js +18 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +18 -0
- package/build/jest.config.d.ts +7 -0
- package/build/jest.config.js +12 -0
- package/build/services/__tests/attachments.class.spec.d.ts +1 -0
- package/build/services/__tests/attachments.class.spec.js +23 -0
- package/build/services/__tests/runs.builder.spec.d.ts +1 -0
- package/build/services/__tests/runs.builder.spec.js +79 -0
- package/build/services/__tests/tests.builder.spec.d.ts +1 -0
- package/build/services/__tests/tests.builder.spec.js +32 -0
- package/build/services/attachments.service.d.ts +11 -0
- package/build/services/attachments.service.js +28 -0
- package/build/services/runs.builder.d.ts +10 -0
- package/build/services/runs.builder.js +65 -0
- package/build/services/tests.builder.d.ts +10 -0
- package/build/services/tests.builder.js +57 -0
- package/build/strategies/base-strategy.class.d.ts +24 -0
- package/build/strategies/base-strategy.class.js +66 -0
- package/build/strategies/default-strategy.class.d.ts +16 -0
- package/build/strategies/default-strategy.class.js +44 -0
- package/build/strategies/partial-startegy.class.d.ts +20 -0
- package/build/strategies/partial-startegy.class.js +72 -0
- package/build/strategies/scratch-strategy.class.d.ts +18 -0
- package/build/strategies/scratch-strategy.class.js +49 -0
- package/build/strategies/strategy.factory.d.ts +8 -0
- package/build/strategies/strategy.factory.js +21 -0
- package/build/types/codecept.type.d.ts +27 -0
- package/build/types/codecept.type.js +2 -0
- package/build/types/origin.type.d.ts +46 -0
- package/build/types/origin.type.js +2 -0
- package/build/types/strategy.type.d.ts +10 -0
- package/build/types/strategy.type.js +2 -0
- package/package.json +2 -2
package/build/index.d.ts
ADDED
package/build/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./helper"), exports);
|
|
18
|
+
__exportStar(require("./bootstrap"), exports);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* For a detailed explanation regarding each configuration property and type check, visit:
|
|
4
|
+
* https://jestjs.io/docs/configuration
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.default = {
|
|
8
|
+
clearMocks: true,
|
|
9
|
+
preset: 'ts-jest',
|
|
10
|
+
coverageProvider: "v8",
|
|
11
|
+
testPathIgnorePatterns: ["/node_modules/", "/build/"]
|
|
12
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const attachments_service_1 = require("../attachments.service");
|
|
4
|
+
describe('AttachmentsService service', () => {
|
|
5
|
+
const notCorrectDataToAttachments = ['4', '5'];
|
|
6
|
+
const http = {
|
|
7
|
+
loadAttachment(path) {
|
|
8
|
+
return !notCorrectDataToAttachments.includes(path)
|
|
9
|
+
? Promise.resolve({ id: path })
|
|
10
|
+
: Promise.reject();
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const service = new attachments_service_1.AttachmentsService(http);
|
|
14
|
+
it('Should return array with ids loaded attachments', async () => {
|
|
15
|
+
const response = await service.attach(['1', '2', '3']);
|
|
16
|
+
expect(response)
|
|
17
|
+
.toEqual([
|
|
18
|
+
{ id: '1' },
|
|
19
|
+
{ id: '2' },
|
|
20
|
+
{ id: '3' }
|
|
21
|
+
]);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const runs_builder_1 = require("../runs.builder");
|
|
4
|
+
const test_utils_1 = require("../../common/__tests/test.utils");
|
|
5
|
+
describe('Runs builder', () => {
|
|
6
|
+
const test = (0, test_utils_1.getDefaultTest)();
|
|
7
|
+
const config = (0, test_utils_1.getDefaultConfig)();
|
|
8
|
+
const attachments = [{ id: '96g6d4bg-20g0-25e8-b17e-a1a34a7adf2f' }];
|
|
9
|
+
const metadata = {
|
|
10
|
+
links: [{ title: 'Google', url: 'https://google.com', type: 'Related' }],
|
|
11
|
+
message: 'Error'
|
|
12
|
+
};
|
|
13
|
+
const builder = new runs_builder_1.RunsBuilder(config);
|
|
14
|
+
it('Should build test run', () => {
|
|
15
|
+
const run = builder.build(test, metadata, attachments);
|
|
16
|
+
expect(run)
|
|
17
|
+
.toEqual({
|
|
18
|
+
autotestExternalId: 5730363800838031,
|
|
19
|
+
completeOn: '1970-01-01T01:33:54.474Z',
|
|
20
|
+
configurationId: '1c33c90c-f34c-427b-81f6-1458f5g9c072',
|
|
21
|
+
duration: 240,
|
|
22
|
+
attachments: [
|
|
23
|
+
{
|
|
24
|
+
id: '96g6d4bg-20g0-25e8-b17e-a1a34a7adf2f'
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
links: [
|
|
28
|
+
{
|
|
29
|
+
title: 'Google',
|
|
30
|
+
url: 'https://google.com',
|
|
31
|
+
type: 'Related'
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
message: 'Error',
|
|
35
|
+
parameters: {},
|
|
36
|
+
outcome: 'Passed',
|
|
37
|
+
startedOn: '1970-01-01T01:33:54.234Z',
|
|
38
|
+
setupResults: [
|
|
39
|
+
{
|
|
40
|
+
completedOn: '1970-01-01T01:33:54.274Z',
|
|
41
|
+
description: '',
|
|
42
|
+
duration: 40,
|
|
43
|
+
outcome: 'Passed',
|
|
44
|
+
startedOn: '1970-01-01T01:33:54.234Z',
|
|
45
|
+
title: 'Step Before'
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
stepResults: [
|
|
49
|
+
{
|
|
50
|
+
completedOn: '1970-01-01T01:33:54.274Z',
|
|
51
|
+
description: '',
|
|
52
|
+
duration: 40,
|
|
53
|
+
outcome: 'Passed',
|
|
54
|
+
startedOn: '1970-01-01T01:33:54.234Z',
|
|
55
|
+
title: 'Step 1'
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
completedOn: '1970-01-01T01:33:54.434Z',
|
|
59
|
+
description: '',
|
|
60
|
+
duration: 200,
|
|
61
|
+
outcome: 'Passed',
|
|
62
|
+
startedOn: '1970-01-01T01:33:54.234Z',
|
|
63
|
+
title: 'Step 2'
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
teardownResults: [
|
|
67
|
+
{
|
|
68
|
+
completedOn: '1970-01-01T01:33:54.274Z',
|
|
69
|
+
description: '',
|
|
70
|
+
duration: 40,
|
|
71
|
+
outcome: 'Passed',
|
|
72
|
+
startedOn: '1970-01-01T01:33:54.234Z',
|
|
73
|
+
title: 'Step After'
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
traces: ''
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tests_builder_1 = require("../tests.builder");
|
|
4
|
+
const test_utils_1 = require("../../common/__tests/test.utils");
|
|
5
|
+
describe('Tests builder', () => {
|
|
6
|
+
const test = (0, test_utils_1.getDefaultTest)();
|
|
7
|
+
const config = (0, test_utils_1.getDefaultConfig)();
|
|
8
|
+
const builder = new tests_builder_1.TestsBuilder(config);
|
|
9
|
+
it('Should build test', () => {
|
|
10
|
+
const data = builder.build(test);
|
|
11
|
+
expect(data)
|
|
12
|
+
.toEqual({
|
|
13
|
+
title: 'Test',
|
|
14
|
+
description: '',
|
|
15
|
+
externalId: 5730363800838031,
|
|
16
|
+
labels: [],
|
|
17
|
+
links: [],
|
|
18
|
+
name: 'Test',
|
|
19
|
+
projectId: '96g6d4bg-20g0-25e8-b17e-a1a34a7adf2f',
|
|
20
|
+
setup: [
|
|
21
|
+
{ description: '', title: 'Step Before' }
|
|
22
|
+
],
|
|
23
|
+
steps: [
|
|
24
|
+
{ title: 'Step 1', description: "" },
|
|
25
|
+
{ title: 'Step 2', description: "" }
|
|
26
|
+
],
|
|
27
|
+
teardown: [
|
|
28
|
+
{ description: '', title: 'Step After' }
|
|
29
|
+
],
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DefaultHttpClient } from '../http/default-http-client.class';
|
|
2
|
+
export declare class AttachmentsService {
|
|
3
|
+
private readonly http;
|
|
4
|
+
constructor(http: DefaultHttpClient);
|
|
5
|
+
attach(paths: string[]): Promise<{
|
|
6
|
+
id: string;
|
|
7
|
+
}[]>;
|
|
8
|
+
attachTextLikeFile(text: string, name?: string): Promise<{
|
|
9
|
+
id: string;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AttachmentsService = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const hash_function_1 = require("../common/functions/hash.function");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
class AttachmentsService {
|
|
8
|
+
constructor(http) {
|
|
9
|
+
this.http = http;
|
|
10
|
+
}
|
|
11
|
+
async attach(paths) {
|
|
12
|
+
return Promise.all(paths
|
|
13
|
+
.map(path => this.http.loadAttachment(path)
|
|
14
|
+
.then(attachment => attachment && { id: attachment.id })));
|
|
15
|
+
}
|
|
16
|
+
async attachTextLikeFile(text, name) {
|
|
17
|
+
if (!name) {
|
|
18
|
+
name = (0, hash_function_1.hash)(text) + '-attachment.txt';
|
|
19
|
+
}
|
|
20
|
+
const attachmentPath = (0, path_1.join)(__dirname, name);
|
|
21
|
+
(0, fs_1.writeFileSync)(attachmentPath, text.toString(), {
|
|
22
|
+
flag: 'w',
|
|
23
|
+
});
|
|
24
|
+
return await this.http.loadAttachment(attachmentPath)
|
|
25
|
+
.then(attachment => attachment && { id: attachment.id });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.AttachmentsService = AttachmentsService;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AttachmentPut, AutotestResultsForTestRun } from 'testit-api-client';
|
|
2
|
+
import { Codecept } from '../types/codecept.type';
|
|
3
|
+
import { Origin } from '../types/origin.type';
|
|
4
|
+
export declare class RunsBuilder {
|
|
5
|
+
private readonly config;
|
|
6
|
+
constructor(config: Origin.Config);
|
|
7
|
+
build(test: Codecept.Test<Origin.TestConfig>, metadata: Origin.TestMetadata, attachments: AttachmentPut[]): AutotestResultsForTestRun;
|
|
8
|
+
private buildManySteps;
|
|
9
|
+
private reduceAfterOrBeforeSuites;
|
|
10
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RunsBuilder = void 0;
|
|
4
|
+
const outcome_factory_1 = require("../common/classes/outcome.factory");
|
|
5
|
+
const humanize_function_1 = require("../common/functions/humanize.function");
|
|
6
|
+
const to_iso_string_function_1 = require("../common/functions/to-iso-string.function");
|
|
7
|
+
const use_hash_function_1 = require("../common/functions/use-hash.function");
|
|
8
|
+
class RunsBuilder {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
}
|
|
12
|
+
build(test, metadata, attachments) {
|
|
13
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
const { _beforeEach, _afterEach, _afterAll, _beforeAll } = test.parent;
|
|
16
|
+
const parameters = ((_b = (_a = test === null || test === void 0 ? void 0 : test.inject) === null || _a === void 0 ? void 0 : _a.current) === null || _b === void 0 ? void 0 : _b.toString)
|
|
17
|
+
? JSON.parse((_d = (_c = test === null || test === void 0 ? void 0 : test.inject) === null || _c === void 0 ? void 0 : _c.current) === null || _d === void 0 ? void 0 : _d.toString())
|
|
18
|
+
: {};
|
|
19
|
+
const teardownResults = [
|
|
20
|
+
...this.reduceAfterOrBeforeSuites(_afterEach),
|
|
21
|
+
...this.reduceAfterOrBeforeSuites(_afterAll)
|
|
22
|
+
];
|
|
23
|
+
const setupResults = [
|
|
24
|
+
...this.reduceAfterOrBeforeSuites(_beforeEach),
|
|
25
|
+
...this.reduceAfterOrBeforeSuites(_beforeAll)
|
|
26
|
+
];
|
|
27
|
+
return {
|
|
28
|
+
configurationId: this.config.configurationId,
|
|
29
|
+
autotestExternalId: (_e = (0, use_hash_function_1.useDefaultHash)(test)) !== null && _e !== void 0 ? _e : (0, use_hash_function_1.useCompositeHash)(test),
|
|
30
|
+
links: (_f = metadata === null || metadata === void 0 ? void 0 : metadata.links) !== null && _f !== void 0 ? _f : [],
|
|
31
|
+
startedOn: (0, to_iso_string_function_1.safetyUseISOString)(test.startedAt),
|
|
32
|
+
duration: test.duration,
|
|
33
|
+
attachments,
|
|
34
|
+
parameters,
|
|
35
|
+
traces: (_h = (_g = test === null || test === void 0 ? void 0 : test.err) === null || _g === void 0 ? void 0 : _g.cliMessage()) !== null && _h !== void 0 ? _h : '',
|
|
36
|
+
teardownResults,
|
|
37
|
+
setupResults,
|
|
38
|
+
completedOn: (0, to_iso_string_function_1.safetyUseISOString)((test === null || test === void 0 ? void 0 : test.startedAt) + (test === null || test === void 0 ? void 0 : test.duration)),
|
|
39
|
+
message: (_j = metadata === null || metadata === void 0 ? void 0 : metadata.message) !== null && _j !== void 0 ? _j : null,
|
|
40
|
+
outcome: outcome_factory_1.OutcomeFactory.create(test.state),
|
|
41
|
+
stepResults: !outcome_factory_1.OutcomeFactory.isSkipped(test.state) ? this.buildManySteps(test.steps) : null
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
buildManySteps(steps) {
|
|
45
|
+
return steps === null || steps === void 0 ? void 0 : steps.map(step => ({
|
|
46
|
+
title: `${step.name} ${(0, humanize_function_1.humanize)(step.args).join(',')}`.trim(),
|
|
47
|
+
outcome: outcome_factory_1.OutcomeFactory.create(step.status),
|
|
48
|
+
description: '',
|
|
49
|
+
startedOn: (0, to_iso_string_function_1.safetyUseISOString)(step.startedAt),
|
|
50
|
+
duration: step.duration,
|
|
51
|
+
completedOn: (0, to_iso_string_function_1.safetyUseISOString)((step === null || step === void 0 ? void 0 : step.startedAt) + (step === null || step === void 0 ? void 0 : step.duration))
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
reduceAfterOrBeforeSuites(suite) {
|
|
55
|
+
return suite
|
|
56
|
+
.reduce((array, suite) => {
|
|
57
|
+
var _a;
|
|
58
|
+
return [
|
|
59
|
+
...array,
|
|
60
|
+
...this.buildManySteps((_a = suite === null || suite === void 0 ? void 0 : suite.steps) !== null && _a !== void 0 ? _a : [])
|
|
61
|
+
];
|
|
62
|
+
}, []);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.RunsBuilder = RunsBuilder;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AutotestPost } from 'testit-api-client';
|
|
2
|
+
import { Codecept } from '../types/codecept.type';
|
|
3
|
+
import { Origin } from '../types/origin.type';
|
|
4
|
+
export declare class TestsBuilder {
|
|
5
|
+
private readonly config;
|
|
6
|
+
constructor(config: Origin.Config);
|
|
7
|
+
build(test: Codecept.Test<Origin.TestConfig>): AutotestPost;
|
|
8
|
+
private buildManySteps;
|
|
9
|
+
private reduceAfterOrBeforeSuites;
|
|
10
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TestsBuilder = void 0;
|
|
4
|
+
const humanize_function_1 = require("../common/functions/humanize.function");
|
|
5
|
+
const use_hash_function_1 = require("../common/functions/use-hash.function");
|
|
6
|
+
class TestsBuilder {
|
|
7
|
+
constructor(config) {
|
|
8
|
+
this.config = config;
|
|
9
|
+
}
|
|
10
|
+
build(test) {
|
|
11
|
+
var _a, _b, _c, _d, _e;
|
|
12
|
+
const config = (0, use_hash_function_1.useConfig)(test);
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
const { _beforeEach, _afterEach, _beforeAll, _afterAll } = test.parent;
|
|
16
|
+
const teardown = [
|
|
17
|
+
...this.reduceAfterOrBeforeSuites(_afterEach),
|
|
18
|
+
...this.reduceAfterOrBeforeSuites(_afterAll)
|
|
19
|
+
];
|
|
20
|
+
const setup = [
|
|
21
|
+
...this.reduceAfterOrBeforeSuites(_beforeEach),
|
|
22
|
+
...this.reduceAfterOrBeforeSuites(_beforeAll)
|
|
23
|
+
];
|
|
24
|
+
return {
|
|
25
|
+
title: config === null || config === void 0 ? void 0 : config.title,
|
|
26
|
+
name: (_a = config === null || config === void 0 ? void 0 : config.displayName) !== null && _a !== void 0 ? _a : test.title,
|
|
27
|
+
projectId: this.config.projectId,
|
|
28
|
+
labels: ((_b = config === null || config === void 0 ? void 0 : config.labels) !== null && _b !== void 0 ? _b : []).map(label => ({ name: label })),
|
|
29
|
+
description: (_c = config === null || config === void 0 ? void 0 : config.description) !== null && _c !== void 0 ? _c : '',
|
|
30
|
+
steps: this.buildManySteps(test.steps),
|
|
31
|
+
setup,
|
|
32
|
+
links: (_d = config === null || config === void 0 ? void 0 : config.links) !== null && _d !== void 0 ? _d : [],
|
|
33
|
+
teardown,
|
|
34
|
+
externalId: (_e = (0, use_hash_function_1.useDefaultHash)(test)) !== null && _e !== void 0 ? _e : (0, use_hash_function_1.useCompositeHash)(test),
|
|
35
|
+
namespace: config === null || config === void 0 ? void 0 : config.nameSpace,
|
|
36
|
+
classname: config === null || config === void 0 ? void 0 : config.className
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
buildManySteps(steps = []) {
|
|
40
|
+
return steps
|
|
41
|
+
.map(step => ({
|
|
42
|
+
title: `${step.name} ${(0, humanize_function_1.humanize)(step.args).join(',')}`.trim(),
|
|
43
|
+
description: ''
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
reduceAfterOrBeforeSuites(suite) {
|
|
47
|
+
return suite
|
|
48
|
+
.reduce((array, suite) => {
|
|
49
|
+
var _a;
|
|
50
|
+
return [
|
|
51
|
+
...array,
|
|
52
|
+
...this.buildManySteps((_a = suite === null || suite === void 0 ? void 0 : suite.steps) !== null && _a !== void 0 ? _a : [])
|
|
53
|
+
];
|
|
54
|
+
}, []);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.TestsBuilder = TestsBuilder;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference types="codeceptjs" />
|
|
2
|
+
import { AutotestPost } from 'testit-api-client';
|
|
3
|
+
import { Box } from '../common/classes/box.class';
|
|
4
|
+
import { Logger } from '../common/classes/logger.class';
|
|
5
|
+
import { DefaultHttpClient } from '../http/default-http-client.class';
|
|
6
|
+
import { RunsBuilder } from '../services/runs.builder';
|
|
7
|
+
import { TestsBuilder } from '../services/tests.builder';
|
|
8
|
+
import { Codecept } from '../types/codecept.type';
|
|
9
|
+
import { Origin } from '../types/origin.type';
|
|
10
|
+
export declare abstract class BaseStrategy {
|
|
11
|
+
protected readonly http: DefaultHttpClient;
|
|
12
|
+
protected readonly logger: Logger;
|
|
13
|
+
protected readonly config: Origin.Config;
|
|
14
|
+
protected readonly testsBuilder: TestsBuilder;
|
|
15
|
+
protected readonly runsBuilder: RunsBuilder;
|
|
16
|
+
protected readonly box: Box<Origin.TestMetadata>;
|
|
17
|
+
protected constructor(http: DefaultHttpClient, logger: Logger, config: Origin.Config);
|
|
18
|
+
collect(id: string, metadata: Origin.TestMetadata): void;
|
|
19
|
+
connectToTest(id: string, test: Codecept.Test): Promise<void>;
|
|
20
|
+
beforeTest(test: Mocha.Test): Promise<any>;
|
|
21
|
+
createOrUpdateTests(suite: any): Promise<void>;
|
|
22
|
+
protected createTestInOriginSystem(testToOriginSystem: AutotestPost, test: Codecept.Test): Promise<void>;
|
|
23
|
+
protected updateTestInOriginSystem(fromOriginSystem: AutotestPost, testToOriginSystem: AutotestPost, test: Codecept.Test): Promise<void>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseStrategy = void 0;
|
|
4
|
+
const box_class_1 = require("../common/classes/box.class");
|
|
5
|
+
const is_passed_function_1 = require("../common/functions/is-passed.function");
|
|
6
|
+
const use_hash_function_1 = require("../common/functions/use-hash.function");
|
|
7
|
+
const runs_builder_1 = require("../services/runs.builder");
|
|
8
|
+
const tests_builder_1 = require("../services/tests.builder");
|
|
9
|
+
class BaseStrategy {
|
|
10
|
+
constructor(http, logger, config) {
|
|
11
|
+
this.http = http;
|
|
12
|
+
this.logger = logger;
|
|
13
|
+
this.config = config;
|
|
14
|
+
this.testsBuilder = new tests_builder_1.TestsBuilder(this.config);
|
|
15
|
+
this.runsBuilder = new runs_builder_1.RunsBuilder(this.config);
|
|
16
|
+
this.box = new box_class_1.Box();
|
|
17
|
+
}
|
|
18
|
+
collect(id, metadata) {
|
|
19
|
+
this.box.collectWithMerge(id, metadata);
|
|
20
|
+
}
|
|
21
|
+
async connectToTest(id, test) {
|
|
22
|
+
var _a;
|
|
23
|
+
const config = (0, use_hash_function_1.useConfig)(test);
|
|
24
|
+
const ids = (_a = config === null || config === void 0 ? void 0 : config.workitemIds) !== null && _a !== void 0 ? _a : [];
|
|
25
|
+
await this.http.linkToWorkItem(id, ids);
|
|
26
|
+
}
|
|
27
|
+
beforeTest(test) {
|
|
28
|
+
return Promise.resolve();
|
|
29
|
+
}
|
|
30
|
+
async createOrUpdateTests(suite) {
|
|
31
|
+
var _a;
|
|
32
|
+
for (const test of suite.tests) {
|
|
33
|
+
const testToOriginSystem = this.testsBuilder.build(test);
|
|
34
|
+
const fromOriginSystem = await this.http.hasInSystem((_a = (0, use_hash_function_1.useDefaultHash)(test)) !== null && _a !== void 0 ? _a : (0, use_hash_function_1.useCompositeHash)(test));
|
|
35
|
+
!fromOriginSystem
|
|
36
|
+
? await this.createTestInOriginSystem(testToOriginSystem, test)
|
|
37
|
+
: await this.updateTestInOriginSystem(fromOriginSystem, testToOriginSystem, test);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async createTestInOriginSystem(testToOriginSystem, test) {
|
|
41
|
+
testToOriginSystem.shouldCreateWorkItem = this.config.automaticCreationTestCases;
|
|
42
|
+
const response = await this.http.create(testToOriginSystem);
|
|
43
|
+
if (!response) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.logger.log(`Test - ${response.name} created in remote system`);
|
|
47
|
+
await this.connectToTest(response.id, test);
|
|
48
|
+
}
|
|
49
|
+
async updateTestInOriginSystem(fromOriginSystem, testToOriginSystem, test) {
|
|
50
|
+
var _a;
|
|
51
|
+
const hasPassedState = (0, is_passed_function_1.isPassed)(test);
|
|
52
|
+
const config = (0, use_hash_function_1.useConfig)(test);
|
|
53
|
+
if (hasPassedState) {
|
|
54
|
+
await this.http.update(testToOriginSystem);
|
|
55
|
+
await this.connectToTest(fromOriginSystem.id, test);
|
|
56
|
+
}
|
|
57
|
+
if (!hasPassedState) {
|
|
58
|
+
await this.http.update({
|
|
59
|
+
...fromOriginSystem,
|
|
60
|
+
links: (_a = config === null || config === void 0 ? void 0 : config.links) !== null && _a !== void 0 ? _a : []
|
|
61
|
+
});
|
|
62
|
+
this.logger.log(`Test - ${fromOriginSystem.name} updated in remote system`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.BaseStrategy = BaseStrategy;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Logger } from '../common/classes/logger.class';
|
|
2
|
+
import { DefaultHttpClient } from '../http/default-http-client.class';
|
|
3
|
+
import { Strategy } from '../types/strategy.type';
|
|
4
|
+
import { Origin } from '../types/origin.type';
|
|
5
|
+
import { BaseStrategy } from './base-strategy.class';
|
|
6
|
+
export declare class DefaultStrategy extends BaseStrategy implements Strategy {
|
|
7
|
+
protected readonly http: DefaultHttpClient;
|
|
8
|
+
protected readonly logger: Logger;
|
|
9
|
+
protected readonly config: Origin.Config;
|
|
10
|
+
private readonly attachments;
|
|
11
|
+
constructor(http: DefaultHttpClient, logger: Logger, config: Origin.Config);
|
|
12
|
+
bootstrap(): Promise<void>;
|
|
13
|
+
teardown(): Promise<void>;
|
|
14
|
+
transferTestsToSystem(suite: any): Promise<void>;
|
|
15
|
+
transferRunsToSystem(suite: any): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultStrategy = void 0;
|
|
4
|
+
const attachments_service_1 = require("../services/attachments.service");
|
|
5
|
+
const base_strategy_class_1 = require("./base-strategy.class");
|
|
6
|
+
class DefaultStrategy extends base_strategy_class_1.BaseStrategy {
|
|
7
|
+
constructor(http, logger, config) {
|
|
8
|
+
super(http, logger, config);
|
|
9
|
+
this.http = http;
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.attachments = new attachments_service_1.AttachmentsService(this.http);
|
|
13
|
+
}
|
|
14
|
+
async bootstrap() {
|
|
15
|
+
await this.http.startRunIfNeeded(this.config.testRunId);
|
|
16
|
+
}
|
|
17
|
+
async teardown() {
|
|
18
|
+
await this.http.completeRunIfNeeded(this.config.testRunId);
|
|
19
|
+
}
|
|
20
|
+
async transferTestsToSystem(suite) {
|
|
21
|
+
await this.createOrUpdateTests(suite);
|
|
22
|
+
}
|
|
23
|
+
async transferRunsToSystem(suite) {
|
|
24
|
+
var _a, _b, _c;
|
|
25
|
+
for (const test of suite.tests) {
|
|
26
|
+
const config = this.box.get(test.id);
|
|
27
|
+
const screenshot = (_a = test.artifacts) === null || _a === void 0 ? void 0 : _a.screenshot;
|
|
28
|
+
const clientUrls = (_b = config === null || config === void 0 ? void 0 : config.attachments) !== null && _b !== void 0 ? _b : [];
|
|
29
|
+
if (screenshot) {
|
|
30
|
+
clientUrls.push(screenshot);
|
|
31
|
+
}
|
|
32
|
+
const attachments = await this.attachments.attach(clientUrls);
|
|
33
|
+
if (config === null || config === void 0 ? void 0 : config.text) {
|
|
34
|
+
const attach = await this.attachments
|
|
35
|
+
.attachTextLikeFile(config.text.content, (_c = config.text) === null || _c === void 0 ? void 0 : _c.name);
|
|
36
|
+
attachments.push(attach);
|
|
37
|
+
}
|
|
38
|
+
const run = this.runsBuilder.build(test, config, attachments);
|
|
39
|
+
await this.http.updateRuns(run);
|
|
40
|
+
}
|
|
41
|
+
this.logger.log(`Test run - ${this.config.testRunId} transferred to remote system`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.DefaultStrategy = DefaultStrategy;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/// <reference types="codeceptjs" />
|
|
2
|
+
import { Logger } from '../common/classes/logger.class';
|
|
3
|
+
import { DefaultHttpClient } from '../http/default-http-client.class';
|
|
4
|
+
import { Codecept } from '../types/codecept.type';
|
|
5
|
+
import { Strategy } from '../types/strategy.type';
|
|
6
|
+
import { Origin } from '../types/origin.type';
|
|
7
|
+
import { BaseStrategy } from './base-strategy.class';
|
|
8
|
+
export declare class PartialStrategy extends BaseStrategy implements Strategy {
|
|
9
|
+
protected readonly http: DefaultHttpClient;
|
|
10
|
+
protected readonly logger: Logger;
|
|
11
|
+
protected readonly config: Origin.Config;
|
|
12
|
+
private readonly attachments;
|
|
13
|
+
private readonly testsInRun;
|
|
14
|
+
constructor(http: DefaultHttpClient, logger: Logger, config: Origin.Config);
|
|
15
|
+
bootstrap(): Promise<void>;
|
|
16
|
+
teardown(): Promise<void>;
|
|
17
|
+
beforeTest(test: Codecept.Test): Promise<void>;
|
|
18
|
+
transferRunsToSystem(suite: any): Promise<void>;
|
|
19
|
+
transferTestsToSystem(suite: Mocha.Suite): Promise<void>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PartialStrategy = void 0;
|
|
4
|
+
const use_hash_function_1 = require("../common/functions/use-hash.function");
|
|
5
|
+
const attachments_service_1 = require("../services/attachments.service");
|
|
6
|
+
const base_strategy_class_1 = require("./base-strategy.class");
|
|
7
|
+
class PartialStrategy extends base_strategy_class_1.BaseStrategy {
|
|
8
|
+
constructor(http, logger, config) {
|
|
9
|
+
super(http, logger, config);
|
|
10
|
+
this.http = http;
|
|
11
|
+
this.logger = logger;
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.attachments = new attachments_service_1.AttachmentsService(this.http);
|
|
14
|
+
this.testsInRun = this.http.getTestsIdsByRunId(this.config.testRunId);
|
|
15
|
+
}
|
|
16
|
+
async bootstrap() {
|
|
17
|
+
await this.http.startRunIfNeeded(this.config.testRunId);
|
|
18
|
+
}
|
|
19
|
+
async teardown() {
|
|
20
|
+
await this.http.completeRunIfNeeded(this.config.testRunId);
|
|
21
|
+
}
|
|
22
|
+
async beforeTest(test) {
|
|
23
|
+
var _a;
|
|
24
|
+
const tests = await this.testsInRun;
|
|
25
|
+
const hash = (_a = (0, use_hash_function_1.useDefaultHash)(test)) !== null && _a !== void 0 ? _a : (0, use_hash_function_1.useCompositeHash)(test);
|
|
26
|
+
if (!tests.includes(hash.toString())) {
|
|
27
|
+
test.run = () => test.skip();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async transferRunsToSystem(suite) {
|
|
31
|
+
const tests = await this.testsInRun;
|
|
32
|
+
const data = await Promise.all(suite.tests
|
|
33
|
+
.filter(test => {
|
|
34
|
+
var _a;
|
|
35
|
+
const hash = (_a = (0, use_hash_function_1.useDefaultHash)(test)) !== null && _a !== void 0 ? _a : (0, use_hash_function_1.useCompositeHash)(test);
|
|
36
|
+
return tests.includes(hash.toString());
|
|
37
|
+
})
|
|
38
|
+
.map(async (test) => {
|
|
39
|
+
var _a, _b, _c;
|
|
40
|
+
const config = this.box.get(test.id);
|
|
41
|
+
const screenshot = (_a = test.artifacts) === null || _a === void 0 ? void 0 : _a.screenshot;
|
|
42
|
+
const clientUrls = (_b = config === null || config === void 0 ? void 0 : config.attachments) !== null && _b !== void 0 ? _b : [];
|
|
43
|
+
if (screenshot) {
|
|
44
|
+
clientUrls.push(screenshot);
|
|
45
|
+
}
|
|
46
|
+
const attachments = await this.attachments.attach(clientUrls);
|
|
47
|
+
if (config === null || config === void 0 ? void 0 : config.text) {
|
|
48
|
+
const attach = await this.attachments
|
|
49
|
+
.attachTextLikeFile(config.text.content, (_c = config.text) === null || _c === void 0 ? void 0 : _c.name);
|
|
50
|
+
attachments.push(attach);
|
|
51
|
+
}
|
|
52
|
+
return this.runsBuilder.build(test, config, attachments);
|
|
53
|
+
}));
|
|
54
|
+
if (data.length) {
|
|
55
|
+
await this.http.updateManyRuns(data);
|
|
56
|
+
this.logger.log(`Test run - ${this.config.testRunId} transferred to remote system`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async transferTestsToSystem(suite) {
|
|
60
|
+
const tests = await this.testsInRun;
|
|
61
|
+
const suiteWithNeededTests = {
|
|
62
|
+
...suite,
|
|
63
|
+
tests: suite.tests.filter((test) => {
|
|
64
|
+
var _a;
|
|
65
|
+
const hash = (_a = (0, use_hash_function_1.useDefaultHash)(test)) !== null && _a !== void 0 ? _a : (0, use_hash_function_1.useCompositeHash)(test);
|
|
66
|
+
return tests.includes(hash.toString());
|
|
67
|
+
})
|
|
68
|
+
};
|
|
69
|
+
await this.createOrUpdateTests(suiteWithNeededTests);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.PartialStrategy = PartialStrategy;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="codeceptjs" />
|
|
2
|
+
import { Logger } from '../common/classes/logger.class';
|
|
3
|
+
import { DefaultHttpClient } from '../http/default-http-client.class';
|
|
4
|
+
import { Strategy } from '../types/strategy.type';
|
|
5
|
+
import { Origin } from '../types/origin.type';
|
|
6
|
+
import { BaseStrategy } from './base-strategy.class';
|
|
7
|
+
export declare class ScratchStrategy extends BaseStrategy implements Strategy {
|
|
8
|
+
protected readonly http: DefaultHttpClient;
|
|
9
|
+
protected readonly logger: Logger;
|
|
10
|
+
protected readonly config: Origin.Config;
|
|
11
|
+
private readonly attachments;
|
|
12
|
+
private run;
|
|
13
|
+
constructor(http: DefaultHttpClient, logger: Logger, config: Origin.Config);
|
|
14
|
+
bootstrap(): Promise<void>;
|
|
15
|
+
teardown(): Promise<void>;
|
|
16
|
+
transferTestsToSystem(suite: Mocha.Suite): Promise<void>;
|
|
17
|
+
transferRunsToSystem(suite: any): Promise<void>;
|
|
18
|
+
}
|