testit-adapter-cucumber 1.1.0 → 1.1.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.
- package/.vs/VSWorkspaceState.json +8 -0
- package/.vs/slnx.sqlite +0 -0
- package/.vs/testit-adapter-cucumber/v16/.suo +0 -0
- package/.vs/testit-adapter-cucumber/v16/TestStore/0/000.testlog +0 -0
- package/.vs/testit-adapter-cucumber/v16/TestStore/0/testlog.manifest +0 -0
- package/README.md +0 -1
- package/dist/formatter.d.ts +10 -21
- package/dist/formatter.js +62 -136
- package/dist/formatter.js.map +1 -1
- package/dist/scenario-parser.d.ts +4 -0
- package/dist/scenario-parser.js +28 -0
- package/dist/scenario-parser.js.map +1 -0
- package/dist/{storage.d.ts → scenario-storage.d.ts} +7 -9
- package/dist/scenario-storage.js +182 -0
- package/dist/scenario-storage.js.map +1 -0
- package/dist/{utils.d.ts → tags-parser.d.ts} +8 -6
- package/dist/tags-parser.js +175 -0
- package/dist/tags-parser.js.map +1 -0
- package/dist/types/formatter.d.ts +2 -16
- package/dist/types/storage.d.ts +3 -5
- package/dist/types/tags.d.ts +44 -9
- package/dist/types/tags.js +32 -9
- package/dist/types/tags.js.map +1 -1
- package/dist/types/world.d.ts +2 -2
- package/package.json +2 -2
- package/src/formatter.ts +1 -0
- package/dist/mappers.d.ts +0 -14
- package/dist/mappers.js +0 -145
- package/dist/mappers.js.map +0 -1
- package/dist/storage.js +0 -175
- package/dist/storage.js.map +0 -1
- package/dist/utils.js +0 -138
- package/dist/utils.js.map +0 -1
package/.vs/slnx.sqlite
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/README.md
CHANGED
package/dist/formatter.d.ts
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
import { Formatter, IFormatterOptions } from '@cucumber/cucumber';
|
|
2
|
-
import { GherkinDocument, Pickle, TestCase, TestStepFinished,
|
|
3
|
-
import {
|
|
4
|
-
import { IStorage } from './types/storage';
|
|
2
|
+
import { Meta, GherkinDocument, Pickle, TestCase, TestStepFinished, TestCaseStarted, TestCaseFinished, TestStepStarted } from '@cucumber/messages';
|
|
3
|
+
import { AdapterProperties, Link } from 'testit-js-commons';
|
|
5
4
|
import { IFormatter } from './types/formatter';
|
|
6
|
-
import { AutotestPostWithWorkItemId } from './mappers';
|
|
7
5
|
export declare class TestItFormatter extends Formatter implements IFormatter {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
resolvedAutotests: Array<string | undefined> | undefined;
|
|
12
|
-
constructor(options: IFormatterOptions, config: Partial<ClientConfigWithFile>);
|
|
13
|
-
private testRunId;
|
|
6
|
+
private storage;
|
|
7
|
+
private adapterManager;
|
|
8
|
+
private resolvedAutotests;
|
|
14
9
|
private testRunStarted;
|
|
15
|
-
|
|
10
|
+
currentTestCaseId: string | undefined;
|
|
11
|
+
constructor(options: IFormatterOptions, properties: Partial<AdapterProperties>);
|
|
16
12
|
onMeta(_meta: Meta): void;
|
|
17
13
|
onGherkinDocument(document: GherkinDocument): void;
|
|
18
14
|
onPickle(pickle: Pickle): void;
|
|
@@ -21,15 +17,8 @@ export declare class TestItFormatter extends Formatter implements IFormatter {
|
|
|
21
17
|
testStepStarted(testStepStarted: TestStepStarted): void;
|
|
22
18
|
onTestStepFinished(testStepFinished: TestStepFinished): void;
|
|
23
19
|
testCaseFinished(testCaseFinished: TestCaseFinished): void;
|
|
24
|
-
onTestRunFinished(_testRunFinished: TestRunFinished): void;
|
|
25
|
-
loadAutotest(autotestPost: AutotestPostWithWorkItemId): Promise<void>;
|
|
26
|
-
loadPassedAutotest(autotestPost: AutotestPostWithWorkItemId): Promise<void>;
|
|
27
|
-
createTestRun(): void;
|
|
28
|
-
createNewAutotest(autotestPost: AutotestPostWithWorkItemId): Promise<void>;
|
|
29
|
-
updateAutotest(autotestPost: AutotestPostWithWorkItemId): Promise<void>;
|
|
30
|
-
linkWorkItem(externalId: string, workItemId: string): Promise<void>;
|
|
31
20
|
addMessage(message: string): void;
|
|
32
|
-
addLinks(links:
|
|
33
|
-
addAttachments(
|
|
34
|
-
|
|
21
|
+
addLinks(links: Link[]): void;
|
|
22
|
+
addAttachments(data: string[] | string, isText?: boolean, name?: string): Promise<void>;
|
|
23
|
+
loadAttachment(attachmentPath: string): Promise<void>;
|
|
35
24
|
}
|
package/dist/formatter.js
CHANGED
|
@@ -2,15 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TestItFormatter = void 0;
|
|
4
4
|
const cucumber_1 = require("@cucumber/cucumber");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const uuid_1 = require("uuid");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const testit_js_commons_1 = require("testit-js-commons");
|
|
9
|
+
const tags_parser_1 = require("./tags-parser");
|
|
10
|
+
const scenario_storage_1 = require("./scenario-storage");
|
|
8
11
|
class TestItFormatter extends cucumber_1.Formatter {
|
|
9
|
-
constructor(options,
|
|
12
|
+
constructor(options, properties) {
|
|
10
13
|
super(options);
|
|
11
|
-
this.storage = new
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
14
|
+
this.storage = new scenario_storage_1.Storage();
|
|
15
|
+
this.adapterManager = testit_js_commons_1.Adapter.getAdapterManager(properties);
|
|
16
|
+
this.resolvedAutotests = this.adapterManager.getAutotestsForLaunch();
|
|
14
17
|
options.eventBroadcaster.on('envelope', (envelope) => {
|
|
15
18
|
if (envelope.meta) {
|
|
16
19
|
return this.onMeta(envelope.meta);
|
|
@@ -19,25 +22,24 @@ class TestItFormatter extends cucumber_1.Formatter {
|
|
|
19
22
|
return this.onGherkinDocument(envelope.gherkinDocument);
|
|
20
23
|
}
|
|
21
24
|
if (envelope.pickle) {
|
|
22
|
-
|
|
23
|
-
if (
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
this.resolvedAutotests.then(resolvedAutotests => {
|
|
26
|
+
if (resolvedAutotests !== undefined) {
|
|
27
|
+
if (resolvedAutotests.length > 0) {
|
|
28
|
+
const tags = (0, tags_parser_1.parseTags)(envelope.pickle.tags);
|
|
29
|
+
for (const externalId of resolvedAutotests) {
|
|
30
|
+
if (externalId === tags.externalId) {
|
|
31
|
+
return this.onPickle(envelope.pickle);
|
|
32
|
+
}
|
|
28
33
|
}
|
|
29
34
|
}
|
|
35
|
+
envelope.pickle = undefined;
|
|
30
36
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
37
|
+
else {
|
|
38
|
+
return this.onPickle(envelope.pickle);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
36
41
|
}
|
|
37
42
|
if (envelope.testCase) {
|
|
38
|
-
if (this.testRunId === undefined && this.storage.isResolvedTestCase(envelope.testCase)) {
|
|
39
|
-
this.createTestRun();
|
|
40
|
-
}
|
|
41
43
|
return this.onTestCase(envelope.testCase);
|
|
42
44
|
}
|
|
43
45
|
if (envelope.testCaseStarted) {
|
|
@@ -52,9 +54,6 @@ class TestItFormatter extends cucumber_1.Formatter {
|
|
|
52
54
|
if (envelope.testCaseFinished) {
|
|
53
55
|
return this.testCaseFinished(envelope.testCaseFinished);
|
|
54
56
|
}
|
|
55
|
-
if (envelope.testRunFinished) {
|
|
56
|
-
return this.onTestRunFinished(envelope.testRunFinished);
|
|
57
|
-
}
|
|
58
57
|
});
|
|
59
58
|
options.supportCodeLibrary.World.prototype.addMessage =
|
|
60
59
|
this.addMessage.bind(this);
|
|
@@ -64,12 +63,7 @@ class TestItFormatter extends cucumber_1.Formatter {
|
|
|
64
63
|
this.addAttachments.bind(this);
|
|
65
64
|
}
|
|
66
65
|
onMeta(_meta) {
|
|
67
|
-
|
|
68
|
-
if (testRunId !== undefined) {
|
|
69
|
-
this.testRunId = Promise.resolve(testRunId);
|
|
70
|
-
const responce = this.client.getTestRun(testRunId);
|
|
71
|
-
this.resolvedAutotests = (0, utils_1.parsedAutotests)(responce.testResults, configurationId);
|
|
72
|
-
}
|
|
66
|
+
this.testRunStarted = this.adapterManager.startLaunch();
|
|
73
67
|
}
|
|
74
68
|
onGherkinDocument(document) {
|
|
75
69
|
this.storage.saveGherkinDocument(document);
|
|
@@ -91,102 +85,18 @@ class TestItFormatter extends cucumber_1.Formatter {
|
|
|
91
85
|
this.storage.saveTestStepFinished(testStepFinished);
|
|
92
86
|
}
|
|
93
87
|
testCaseFinished(testCaseFinished) {
|
|
94
|
-
this.currentTestCaseId = undefined;
|
|
95
88
|
this.storage.saveTestCaseFinished(testCaseFinished);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const { configurationId } = this.client.getConfig();
|
|
99
|
-
const results = this.storage.getTestRunResults(configurationId);
|
|
100
|
-
if (this.testRunId !== undefined && results.length > 0) {
|
|
101
|
-
Promise.all([
|
|
102
|
-
this.testRunId,
|
|
103
|
-
Promise.all(this.attachmentsQueue),
|
|
104
|
-
])
|
|
105
|
-
.then(async ([id]) => {
|
|
106
|
-
const autotests = this.storage.getAutotests(this.client.getConfig().projectId);
|
|
107
|
-
await Promise.all(autotests.map((autotestPost) => {
|
|
108
|
-
const result = results.find((result) => result.autotestExternalId === autotestPost.externalId);
|
|
109
|
-
if (result !== undefined) {
|
|
110
|
-
if (result.outcome !== 'Passed') {
|
|
111
|
-
return this.loadAutotest(autotestPost);
|
|
112
|
-
}
|
|
113
|
-
return this.loadPassedAutotest(autotestPost);
|
|
114
|
-
}
|
|
115
|
-
}));
|
|
116
|
-
await Promise.all(results.map((result) => {
|
|
117
|
-
return this.client.loadTestRunResults(id, [result]);
|
|
118
|
-
}));
|
|
119
|
-
})
|
|
120
|
-
.catch((err) => {
|
|
121
|
-
var _a;
|
|
122
|
-
console.error(err);
|
|
123
|
-
(_a = this.testRunId) === null || _a === void 0 ? void 0 : _a.then((id) => this.client.completeTestRun(id));
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
async loadAutotest(autotestPost) {
|
|
128
|
-
var _a;
|
|
129
|
-
try {
|
|
130
|
-
await this.createNewAutotest(autotestPost);
|
|
131
|
-
}
|
|
132
|
-
catch (err) {
|
|
133
|
-
const axiosError = err;
|
|
134
|
-
if (((_a = axiosError.response) === null || _a === void 0 ? void 0 : _a.status) === 409) {
|
|
135
|
-
const [autotest] = await this.client.getAutotest({
|
|
136
|
-
projectId: this.client.getConfig().projectId,
|
|
137
|
-
externalId: autotestPost.externalId,
|
|
138
|
-
});
|
|
139
|
-
await this.updateAutotest(Object.assign(Object.assign({}, autotest), { links: autotestPost.links }));
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
this.logError(axiosError);
|
|
143
|
-
}
|
|
89
|
+
if (this.testRunStarted === undefined) {
|
|
90
|
+
throw new Error('Test run is not started');
|
|
144
91
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
catch (err) {
|
|
152
|
-
const axiosError = err;
|
|
153
|
-
if (((_a = axiosError.response) === null || _a === void 0 ? void 0 : _a.status) === 409) {
|
|
154
|
-
await this.updateAutotest(autotestPost);
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
this.logError(axiosError);
|
|
92
|
+
const testCaseId = this.currentTestCaseId;
|
|
93
|
+
this.testRunStarted
|
|
94
|
+
.then(() => {
|
|
95
|
+
if (testCaseId !== undefined) {
|
|
96
|
+
this.adapterManager.writeTest(this.storage.getTestResult(testCaseId));
|
|
158
97
|
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
this.linkWorkItem(autotestPost.externalId, autotestPost.workItemId);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
createTestRun() {
|
|
165
|
-
const { projectId } = this.client.getConfig();
|
|
166
|
-
this.testRunId = this.client
|
|
167
|
-
.createTestRun({
|
|
168
|
-
projectId,
|
|
169
|
-
})
|
|
170
|
-
.then((testRun) => testRun.id);
|
|
171
|
-
}
|
|
172
|
-
async createNewAutotest(autotestPost) {
|
|
173
|
-
await this.client.createAutotest(autotestPost);
|
|
174
|
-
}
|
|
175
|
-
async updateAutotest(autotestPost) {
|
|
176
|
-
await this.client.updateAutotest(autotestPost).catch(this.logError);
|
|
177
|
-
}
|
|
178
|
-
async linkWorkItem(externalId, workItemId) {
|
|
179
|
-
const [autotest] = await this.client
|
|
180
|
-
.getAutotest({
|
|
181
|
-
projectId: this.client.getConfig().projectId,
|
|
182
|
-
externalId: externalId,
|
|
183
|
-
})
|
|
184
|
-
.catch(() => []);
|
|
185
|
-
if ((autotest === null || autotest === void 0 ? void 0 : autotest.id) !== undefined) {
|
|
186
|
-
await this.client.linkToWorkItem(autotest.id, {
|
|
187
|
-
id: workItemId,
|
|
188
|
-
});
|
|
189
|
-
}
|
|
98
|
+
});
|
|
99
|
+
this.currentTestCaseId = undefined;
|
|
190
100
|
}
|
|
191
101
|
addMessage(message) {
|
|
192
102
|
if (this.currentTestCaseId === undefined) {
|
|
@@ -200,24 +110,40 @@ class TestItFormatter extends cucumber_1.Formatter {
|
|
|
200
110
|
}
|
|
201
111
|
this.storage.addLinks(this.currentTestCaseId, links);
|
|
202
112
|
}
|
|
203
|
-
addAttachments(
|
|
113
|
+
async addAttachments(data, isText = false, name) {
|
|
114
|
+
if (isText) {
|
|
115
|
+
if (name == undefined) {
|
|
116
|
+
name = (0, uuid_1.v4)() + '-attachment.txt';
|
|
117
|
+
}
|
|
118
|
+
const attachmentPath = (0, path_1.join)(__dirname, name);
|
|
119
|
+
(0, fs_1.writeFileSync)(attachmentPath, data.toString(), {
|
|
120
|
+
flag: 'w',
|
|
121
|
+
});
|
|
122
|
+
this.loadAttachment(attachmentPath);
|
|
123
|
+
(0, fs_1.unlinkSync)(attachmentPath);
|
|
124
|
+
}
|
|
125
|
+
else if (typeof data == 'string') {
|
|
126
|
+
this.loadAttachment(data);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
for (const attachmentPath of data) {
|
|
130
|
+
this.loadAttachment(attachmentPath);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async loadAttachment(attachmentPath) {
|
|
204
135
|
if (this.currentTestCaseId === undefined) {
|
|
205
136
|
throw new Error('CurrentTestCaseId is not set');
|
|
206
137
|
}
|
|
207
138
|
const currentTestCaseId = this.currentTestCaseId;
|
|
208
|
-
this.
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
139
|
+
const id = await this.adapterManager.loadAttachment(attachmentPath);
|
|
140
|
+
if (id === undefined) {
|
|
141
|
+
// NOTE: Why?
|
|
142
|
+
console.warn('Attachment id is not returned');
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
215
145
|
this.storage.addAttachment(currentTestCaseId, id);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
logError(err) {
|
|
219
|
-
var _a, _b;
|
|
220
|
-
console.error((_a = err.response) === null || _a === void 0 ? void 0 : _a.status, err.config.method, err.config.url, (_b = err.response) === null || _b === void 0 ? void 0 : _b.data);
|
|
146
|
+
}
|
|
221
147
|
}
|
|
222
148
|
}
|
|
223
149
|
exports.TestItFormatter = TestItFormatter;
|
package/dist/formatter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":";;;AAAA,iDAAkE;
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mapDate = exports.mapStatus = void 0;
|
|
4
|
+
const messages_1 = require("@cucumber/messages");
|
|
5
|
+
function mapStatus(status) {
|
|
6
|
+
switch (status) {
|
|
7
|
+
case messages_1.TestStepResultStatus.PASSED:
|
|
8
|
+
return 'Passed';
|
|
9
|
+
case messages_1.TestStepResultStatus.FAILED:
|
|
10
|
+
return 'Failed';
|
|
11
|
+
case messages_1.TestStepResultStatus.PENDING:
|
|
12
|
+
return 'Pending';
|
|
13
|
+
case messages_1.TestStepResultStatus.SKIPPED:
|
|
14
|
+
return 'Skipped';
|
|
15
|
+
case messages_1.TestStepResultStatus.UNKNOWN:
|
|
16
|
+
case messages_1.TestStepResultStatus.UNDEFINED:
|
|
17
|
+
case messages_1.TestStepResultStatus.AMBIGUOUS:
|
|
18
|
+
return 'Blocked';
|
|
19
|
+
default:
|
|
20
|
+
throw new Error('Unknown status');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.mapStatus = mapStatus;
|
|
24
|
+
function mapDate(date) {
|
|
25
|
+
return new Date(date * 1000).toISOString();
|
|
26
|
+
}
|
|
27
|
+
exports.mapDate = mapDate;
|
|
28
|
+
//# sourceMappingURL=scenario-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenario-parser.js","sourceRoot":"","sources":["../src/scenario-parser.ts"],"names":[],"mappings":";;;AAAA,iDAE4B;AAG5B,SAAgB,SAAS,CAAC,MAA4B;IAClD,QAAQ,MAAM,EAAE;QACZ,KAAK,+BAAoB,CAAC,MAAM;YAC5B,OAAO,QAAQ,CAAC;QACpB,KAAK,+BAAoB,CAAC,MAAM;YAC5B,OAAO,QAAQ,CAAC;QACpB,KAAK,+BAAoB,CAAC,OAAO;YAC7B,OAAO,SAAS,CAAC;QACrB,KAAK,+BAAoB,CAAC,OAAO;YAC7B,OAAO,SAAS,CAAC;QACrB,KAAK,+BAAoB,CAAC,OAAO,CAAC;QAClC,KAAK,+BAAoB,CAAC,SAAS,CAAC;QACpC,KAAK,+BAAoB,CAAC,SAAS;YAC/B,OAAO,SAAS,CAAC;QACrB;YACI,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;KACzC;AACL,CAAC;AAjBD,8BAiBC;AAED,SAAgB,OAAO,CAAC,IAAY;IAChC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/C,CAAC;AAFD,0BAEC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { AttachmentPut, AttachmentPutModelAutotestStepResults, AutotestResultsForTestRun, LinkPost } from 'testit-api-client';
|
|
2
1
|
import { GherkinDocument, Pickle, PickleStep, TestCase, TestCaseFinished, TestCaseStarted, TestStepFinished, TestStepStarted } from '@cucumber/messages';
|
|
2
|
+
import { TestResult, Attachment, TestResultStep, Link } from 'testit-js-commons';
|
|
3
3
|
import { IStorage } from './types/storage';
|
|
4
|
-
import { AutotestPostWithWorkItemId } from './mappers';
|
|
5
4
|
export declare class Storage implements IStorage {
|
|
6
5
|
private gherkinDocuments;
|
|
7
6
|
private pickles;
|
|
@@ -11,22 +10,21 @@ export declare class Storage implements IStorage {
|
|
|
11
10
|
private testStepsStarted;
|
|
12
11
|
private testStepsFinished;
|
|
13
12
|
private messages;
|
|
14
|
-
private
|
|
13
|
+
private resultLinks;
|
|
15
14
|
private attachments;
|
|
15
|
+
isResolvedTestCase(testCase: TestCase): boolean;
|
|
16
16
|
saveGherkinDocument(document: GherkinDocument): void;
|
|
17
|
-
getAutotests(projectId: string): AutotestPostWithWorkItemId[];
|
|
18
17
|
savePickle(pickle: Pickle): void;
|
|
19
|
-
isResolvedTestCase(testCase: TestCase): boolean;
|
|
20
18
|
saveTestCase(testCase: TestCase): void;
|
|
21
19
|
saveTestCaseStarted(testCaseStarted: TestCaseStarted): void;
|
|
22
20
|
saveTestCaseFinished(testCaseFinished: TestCaseFinished): void;
|
|
23
21
|
saveTestStepStarted(testStepStarted: TestStepStarted): void;
|
|
24
22
|
saveTestStepFinished(testStepFinished: TestStepFinished): void;
|
|
25
|
-
|
|
26
|
-
getStepResult(pickleStep: PickleStep, testCase: TestCase):
|
|
23
|
+
getTestResult(testId: string): TestResult;
|
|
24
|
+
getStepResult(pickleStep: PickleStep, testCase: TestCase): TestResultStep;
|
|
27
25
|
getStepMessage(pickleStep: PickleStep, testCase: TestCase): string | undefined;
|
|
28
|
-
getAttachments(testCaseId: string):
|
|
26
|
+
getAttachments(testCaseId: string): Attachment[] | undefined;
|
|
29
27
|
addMessage(testCaseId: string, message: string): void;
|
|
30
|
-
addLinks(testCaseId: string, links:
|
|
28
|
+
addLinks(testCaseId: string, links: Link[]): void;
|
|
31
29
|
addAttachment(testCaseId: string, attachmentId: string): void;
|
|
32
30
|
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Storage = void 0;
|
|
4
|
+
const testit_js_commons_1 = require("testit-js-commons");
|
|
5
|
+
const scenario_parser_1 = require("./scenario-parser");
|
|
6
|
+
const tags_parser_1 = require("./tags-parser");
|
|
7
|
+
class Storage {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.gherkinDocuments = [];
|
|
10
|
+
this.pickles = [];
|
|
11
|
+
this.testCases = [];
|
|
12
|
+
this.testCasesStarted = [];
|
|
13
|
+
this.testCasesFinished = [];
|
|
14
|
+
this.testStepsStarted = [];
|
|
15
|
+
this.testStepsFinished = [];
|
|
16
|
+
this.messages = {};
|
|
17
|
+
this.resultLinks = {};
|
|
18
|
+
this.attachments = {};
|
|
19
|
+
}
|
|
20
|
+
isResolvedTestCase(testCase) {
|
|
21
|
+
for (const pickle of this.pickles) {
|
|
22
|
+
const tags = (0, tags_parser_1.parseTags)(pickle.tags);
|
|
23
|
+
if (tags.externalId !== undefined && testCase.pickleId === pickle.id) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
saveGherkinDocument(document) {
|
|
30
|
+
this.gherkinDocuments.push(document);
|
|
31
|
+
}
|
|
32
|
+
savePickle(pickle) {
|
|
33
|
+
this.pickles.push(pickle);
|
|
34
|
+
}
|
|
35
|
+
saveTestCase(testCase) {
|
|
36
|
+
this.testCases.push(testCase);
|
|
37
|
+
}
|
|
38
|
+
saveTestCaseStarted(testCaseStarted) {
|
|
39
|
+
this.testCasesStarted.push(testCaseStarted);
|
|
40
|
+
}
|
|
41
|
+
saveTestCaseFinished(testCaseFinished) {
|
|
42
|
+
this.testCasesFinished.push(testCaseFinished);
|
|
43
|
+
}
|
|
44
|
+
saveTestStepStarted(testStepStarted) {
|
|
45
|
+
this.testStepsStarted.push(testStepStarted);
|
|
46
|
+
}
|
|
47
|
+
saveTestStepFinished(testStepFinished) {
|
|
48
|
+
this.testStepsFinished.push(testStepFinished);
|
|
49
|
+
}
|
|
50
|
+
getTestResult(testId) {
|
|
51
|
+
var _a, _b, _c, _d;
|
|
52
|
+
const testCase = this.testCases.find((testCase) => testCase.id === testId);
|
|
53
|
+
if (testCase === undefined) {
|
|
54
|
+
throw new Error('TestCase not found');
|
|
55
|
+
}
|
|
56
|
+
;
|
|
57
|
+
const pickle = this.pickles.find((pickle) => pickle.id === testCase.pickleId);
|
|
58
|
+
if (pickle === undefined) {
|
|
59
|
+
throw new Error('Pickle not found');
|
|
60
|
+
}
|
|
61
|
+
const tags = (0, tags_parser_1.parseTags)(pickle.tags);
|
|
62
|
+
if (tags.externalId === undefined) {
|
|
63
|
+
throw new Error('External ID is not provided');
|
|
64
|
+
}
|
|
65
|
+
const testCaseStarted = this.testCasesStarted.find((testCase) => testCase.id === testCase.id);
|
|
66
|
+
if (testCaseStarted === undefined) {
|
|
67
|
+
throw new Error('TestCaseStarted not found');
|
|
68
|
+
}
|
|
69
|
+
;
|
|
70
|
+
const testCaseFinished = this.testCasesFinished.find((testCase) => testCase.testCaseStartedId === testCaseStarted.id);
|
|
71
|
+
if (testCaseFinished === undefined) {
|
|
72
|
+
throw new Error('TestCaseFinished not found');
|
|
73
|
+
}
|
|
74
|
+
;
|
|
75
|
+
const steps = pickle.steps
|
|
76
|
+
.map((step) => this.getStepResult(step, testCase))
|
|
77
|
+
.filter((item, i, arr) => {
|
|
78
|
+
var _a;
|
|
79
|
+
const prevOutcome = (_a = arr[i - 1]) === null || _a === void 0 ? void 0 : _a.outcome;
|
|
80
|
+
if (item.outcome === 'Skipped' &&
|
|
81
|
+
prevOutcome !== undefined &&
|
|
82
|
+
['Failed', 'Skipped'].includes(prevOutcome)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
});
|
|
87
|
+
const messages = [];
|
|
88
|
+
for (const step of pickle.steps) {
|
|
89
|
+
const message = this.getStepMessage(step, testCase);
|
|
90
|
+
if (message !== undefined) {
|
|
91
|
+
messages.push(message);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const resultLinks = (_a = this.resultLinks[testCase.id]) !== null && _a !== void 0 ? _a : [];
|
|
95
|
+
return {
|
|
96
|
+
externalId: tags.externalId,
|
|
97
|
+
displayName: (_b = tags.name) !== null && _b !== void 0 ? _b : pickle.name,
|
|
98
|
+
links: tags.links,
|
|
99
|
+
resultLinks: resultLinks,
|
|
100
|
+
stepResults: steps,
|
|
101
|
+
outcome: (0, testit_js_commons_1.calculateResultOutcome)(steps.map((step) => step.outcome)),
|
|
102
|
+
startedOn: (0, scenario_parser_1.mapDate)(testCaseStarted.timestamp.seconds),
|
|
103
|
+
completedOn: (0, scenario_parser_1.mapDate)(testCaseFinished.timestamp.seconds),
|
|
104
|
+
duration: testCaseFinished.timestamp.seconds -
|
|
105
|
+
testCaseStarted.timestamp.seconds,
|
|
106
|
+
message: (_d = (_c = this.messages[testCase.id]) === null || _c === void 0 ? void 0 : _c.join('\n\n')) !== null && _d !== void 0 ? _d : undefined,
|
|
107
|
+
traces: messages.join('\n\n'),
|
|
108
|
+
attachments: this.getAttachments(testCase.id),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
getStepResult(pickleStep, testCase) {
|
|
112
|
+
const testStep = testCase.testSteps.find((step) => step.pickleStepId === pickleStep.id);
|
|
113
|
+
if (testStep === undefined) {
|
|
114
|
+
throw new Error('TestCase step not found');
|
|
115
|
+
}
|
|
116
|
+
const testStepStarted = this.testStepsStarted.find((step) => step.testStepId === testStep.id);
|
|
117
|
+
if (testStepStarted === undefined) {
|
|
118
|
+
throw new Error('TestStepStarted not found');
|
|
119
|
+
}
|
|
120
|
+
const testStepFinished = this.testStepsFinished.find((step) => step.testStepId === testStepStarted.testStepId);
|
|
121
|
+
if (testStepFinished === undefined) {
|
|
122
|
+
throw new Error('TestStepFinished not found');
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
title: pickleStep.text,
|
|
126
|
+
startedOn: (0, scenario_parser_1.mapDate)(testStepStarted.timestamp.seconds),
|
|
127
|
+
duration: testStepFinished.testStepResult.duration.seconds,
|
|
128
|
+
completedOn: (0, scenario_parser_1.mapDate)(testStepFinished.timestamp.seconds),
|
|
129
|
+
outcome: (0, scenario_parser_1.mapStatus)(testStepFinished.testStepResult.status),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
getStepMessage(pickleStep, testCase) {
|
|
133
|
+
const testStep = testCase.testSteps.find((step) => step.pickleStepId === pickleStep.id);
|
|
134
|
+
if (testStep === undefined) {
|
|
135
|
+
throw new Error('TestCase step not found');
|
|
136
|
+
}
|
|
137
|
+
const testStepStarted = this.testStepsStarted.find((step) => step.testStepId === testStep.id);
|
|
138
|
+
if (testStepStarted === undefined) {
|
|
139
|
+
throw new Error('TestStepStarted not found');
|
|
140
|
+
}
|
|
141
|
+
const testStepFinished = this.testStepsFinished.find((step) => step.testStepId === testStepStarted.testStepId);
|
|
142
|
+
if (testStepFinished === undefined) {
|
|
143
|
+
throw new Error('TestStepFinished not found');
|
|
144
|
+
}
|
|
145
|
+
return testStepFinished.testStepResult.message;
|
|
146
|
+
}
|
|
147
|
+
getAttachments(testCaseId) {
|
|
148
|
+
if (this.attachments[testCaseId] === undefined) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
return this.attachments[testCaseId];
|
|
152
|
+
}
|
|
153
|
+
addMessage(testCaseId, message) {
|
|
154
|
+
if (this.messages[testCaseId] === undefined) {
|
|
155
|
+
this.messages[testCaseId] = [message];
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
this.messages[testCaseId].push(message);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
addLinks(testCaseId, links) {
|
|
162
|
+
if (this.resultLinks[testCaseId] === undefined) {
|
|
163
|
+
this.resultLinks[testCaseId] = links;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
this.resultLinks[testCaseId].push(...links);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
addAttachment(testCaseId, attachmentId) {
|
|
170
|
+
const attachment = {
|
|
171
|
+
'id': attachmentId
|
|
172
|
+
};
|
|
173
|
+
if (this.attachments[testCaseId] === undefined) {
|
|
174
|
+
this.attachments[testCaseId] = [attachment];
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
this.attachments[testCaseId].concat(attachment);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.Storage = Storage;
|
|
182
|
+
//# sourceMappingURL=scenario-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenario-storage.js","sourceRoot":"","sources":["../src/scenario-storage.ts"],"names":[],"mappings":"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"}
|