testit-adapter-codecept 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +198 -0
  2. package/build/bootstrap.d.ts +1 -0
  3. package/build/bootstrap.js +34 -0
  4. package/build/common/__tests/box.class.spec.d.ts +1 -0
  5. package/build/common/__tests/box.class.spec.js +15 -0
  6. package/build/common/__tests/test.utils.d.ts +4 -0
  7. package/build/common/__tests/test.utils.js +71 -0
  8. package/build/common/classes/box.class.d.ts +5 -0
  9. package/build/common/classes/box.class.js +18 -0
  10. package/build/common/classes/config.class.d.ts +6 -0
  11. package/build/common/classes/config.class.js +66 -0
  12. package/build/common/classes/logger.class.d.ts +9 -0
  13. package/build/common/classes/logger.class.js +28 -0
  14. package/build/common/classes/outcome.factory.d.ts +7 -0
  15. package/build/common/classes/outcome.factory.js +19 -0
  16. package/build/common/functions/compose.function.d.ts +1 -0
  17. package/build/common/functions/compose.function.js +5 -0
  18. package/build/common/functions/hash.function.d.ts +1 -0
  19. package/build/common/functions/hash.function.js +15 -0
  20. package/build/common/functions/humanize.function.d.ts +1 -0
  21. package/build/common/functions/humanize.function.js +7 -0
  22. package/build/common/functions/is-passed.function.d.ts +2 -0
  23. package/build/common/functions/is-passed.function.js +7 -0
  24. package/build/common/functions/to-iso-string.function.d.ts +1 -0
  25. package/build/common/functions/to-iso-string.function.js +10 -0
  26. package/build/common/functions/use-hash.function.d.ts +9 -0
  27. package/build/common/functions/use-hash.function.js +13 -0
  28. package/build/common/types/nullable.type.d.ts +1 -0
  29. package/build/common/types/nullable.type.js +2 -0
  30. package/build/helper.d.ts +9 -0
  31. package/build/helper.js +37 -0
  32. package/build/http/default-http-client.class.d.ts +22 -0
  33. package/build/http/default-http-client.class.js +123 -0
  34. package/build/http/http-client.errors.d.ts +7 -0
  35. package/build/http/http-client.errors.js +18 -0
  36. package/build/index.d.ts +2 -0
  37. package/build/index.js +18 -0
  38. package/build/jest.config.d.ts +7 -0
  39. package/build/jest.config.js +12 -0
  40. package/build/services/__tests/attachments.class.spec.d.ts +1 -0
  41. package/build/services/__tests/attachments.class.spec.js +23 -0
  42. package/build/services/__tests/runs.builder.spec.d.ts +1 -0
  43. package/build/services/__tests/runs.builder.spec.js +79 -0
  44. package/build/services/__tests/tests.builder.spec.d.ts +1 -0
  45. package/build/services/__tests/tests.builder.spec.js +32 -0
  46. package/build/services/attachments.service.d.ts +11 -0
  47. package/build/services/attachments.service.js +28 -0
  48. package/build/services/runs.builder.d.ts +10 -0
  49. package/build/services/runs.builder.js +65 -0
  50. package/build/services/tests.builder.d.ts +10 -0
  51. package/build/services/tests.builder.js +55 -0
  52. package/build/strategies/base-strategy.class.d.ts +24 -0
  53. package/build/strategies/base-strategy.class.js +65 -0
  54. package/build/strategies/default-strategy.class.d.ts +16 -0
  55. package/build/strategies/default-strategy.class.js +44 -0
  56. package/build/strategies/partial-startegy.class.d.ts +20 -0
  57. package/build/strategies/partial-startegy.class.js +72 -0
  58. package/build/strategies/scratch-strategy.class.d.ts +18 -0
  59. package/build/strategies/scratch-strategy.class.js +49 -0
  60. package/build/strategies/strategy.factory.d.ts +8 -0
  61. package/build/strategies/strategy.factory.js +21 -0
  62. package/build/types/codecept.type.d.ts +27 -0
  63. package/build/types/codecept.type.js +2 -0
  64. package/build/types/origin.type.d.ts +44 -0
  65. package/build/types/origin.type.js +2 -0
  66. package/build/types/strategy.type.d.ts +10 -0
  67. package/build/types/strategy.type.js +2 -0
  68. package/package.json +46 -0
package/README.md ADDED
@@ -0,0 +1,198 @@
1
+ # Test IT TMS adapters for Codecept
2
+ ![Test IT](https://raw.githubusercontent.com/testit-tms/adapters-js/master/images/banner.png)
3
+
4
+ ## Getting Started
5
+
6
+ ### Compatibility
7
+
8
+ | Test IT | Adapter |
9
+ |---------|---------|
10
+ | 3.5 | 1.0 |
11
+ |---------|---------|
12
+ | 4.0 | 1.1 |
13
+
14
+ ### Installation
15
+ ```
16
+ npm install testit-adapter-codecept
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ### API client
22
+
23
+ To use adapter you need to install `testit-api-client`:
24
+ ```
25
+ npm install testit-api-client
26
+ ```
27
+
28
+ ### Configuration
29
+
30
+ Add TestITHelper and TestITPlugin to Codecept file configuration
31
+
32
+ ```ts
33
+ export const config: CodeceptJS.MainConfig = {
34
+ tests: './**/*_test.ts',
35
+ output: './output',
36
+ helpers: {
37
+ Playwright: {
38
+ url: 'http://localhost',
39
+ show: false,
40
+ browser: 'chromium'
41
+ },
42
+ TestITHelper: {
43
+ require: 'testit-adapter-codecept/build/helper.js'
44
+ }
45
+ },
46
+ plugins: {
47
+ TestITPlugin: {
48
+ require: 'testit-adapter-codecept/build/bootstrap.js',
49
+ enabled: true
50
+ }
51
+ },
52
+ include: {},
53
+ name: 'codecept-test-it-testing'
54
+ }
55
+ ```
56
+
57
+ Create step.d.ts file and import TestMetadataHelper
58
+
59
+ ```ts
60
+ type TestITHelper = import('testit-adapter-codecept/build/helper').TestMetadataHelper;
61
+
62
+ declare namespace CodeceptJS {
63
+ interface SupportObject { I: I, current: any }
64
+ interface Methods extends Playwright, TestITHelper {}
65
+ interface I extends WithTranslation<Methods>{}
66
+ namespace Translation {
67
+ interface Actions {}
68
+ }
69
+ }
70
+ ```
71
+
72
+ #### File
73
+
74
+ 1. Create .env config or file config with default name testit-adapter.config.json in the root directory of the project
75
+
76
+ ```json
77
+ {
78
+ "url": "example-project-url",
79
+ "projectId": "example-project-id",
80
+ "testRunId": "example-project-run-id",
81
+ "configurationId": "example-project-configuration-id",
82
+ "adapterMode": "example-adapter-mode",
83
+ "testRunName": "example-test-run-name"
84
+ }
85
+ ```
86
+
87
+ 2. Fill parameters with your configuration, where:
88
+ * `url` - location of the TMS instance
89
+
90
+ * `privateToken` - API secret key
91
+ 1. go to the https://{DOMAIN}/user-profile profile
92
+ 2. copy the API secret key
93
+
94
+ * `projectId` - ID of project in TMS instance.
95
+
96
+ 1. create a project
97
+ 2. open DevTools -> network
98
+ 3. go to the project https://{DOMAIN}/projects/{PROJECT_ID}/tests
99
+ 4. GET-request project, Preview tab, copy id field
100
+
101
+ * `configurationId` - ID of configuration in TMS instance.
102
+
103
+ 1. create a project
104
+ 2. open DevTools -> network
105
+ 3. go to the project https://{DOMAIN}/projects/{PROJECT_ID}/tests
106
+ 4. GET-request configurations, Preview tab, copy id field
107
+
108
+ * `testRunId` - id of the created test run in TMS instance. `testRunId` is optional. If it is not provided, it is created automatically.
109
+
110
+ * `testRunName` - parameter for specifying the name of test run in TMS instance. `testRunName` is optional. If it is not provided, it is created automatically.
111
+
112
+
113
+ ### Methods
114
+
115
+ Methods can be used to specify information about autotest.
116
+
117
+ Description of metadata methods:
118
+ - `workItemIds` - linking an autotest to a test case
119
+ - `displayName` - name of the autotest in the Test IT system (can be replaced with documentation strings)
120
+ - `externalId` - ID of the autotest within the project in the Test IT System
121
+ - `title` - title in the autotest card
122
+ - `description` - description in the autotest card
123
+ - `labels` - tags in the work item
124
+ - `link` - links in the autotest card
125
+
126
+ Description of methods:
127
+ - `addLinks` - links in the autotest result
128
+ - `addAttachments` - uploading files in the autotest result
129
+ - `addMessage` - information about autotest in the autotest result
130
+
131
+ ### Examples
132
+
133
+ #### Simple test
134
+ ```ts
135
+ Scenario(
136
+ 'Scenario name',
137
+ {
138
+ externalId: '1',
139
+ displayName: 'Name',
140
+ title: 'Title',
141
+ description: 'Description',
142
+ labels: ['Custom label'],
143
+ links: [
144
+ {
145
+ title: 'Google about this error',
146
+ description: 'Google documents',
147
+ url: 'https://google.com',
148
+ type: 'Requirement',
149
+ hasInfo: true
150
+ }
151
+ ],
152
+ workitemIds: ['1140']
153
+ },
154
+ ({ I }) => {
155
+ I.amOnPage('https://github.com');
156
+ I.addLinks([
157
+ {
158
+ title: 'Github page',
159
+ description: 'Github SPA page',
160
+ url: 'https://github.com',
161
+ type: 'Repository',
162
+ hasInfo: true
163
+ }
164
+ ])
165
+ I.addMessage('Hello');
166
+ I.see('GitHub');
167
+ });
168
+
169
+ ```
170
+
171
+ #### Parameterized test
172
+ ```ts
173
+ const data = new DataTable(['target', 'element']);
174
+
175
+ data.add(['https://mail.google.com', '//a[contains(., "Почта")]']);
176
+ data.add(['https://www.wikipedia.org', '//input']);
177
+ data.add(['https://google.com', '//a[contains(., "Google")]']);
178
+
179
+ Data(data).Scenario('Should render main page for all users', ({ I, current }) => {
180
+ I.amOnPage(current.target);
181
+ I.seeElement(current.element);
182
+ })
183
+ ```
184
+
185
+
186
+ # Contributing
187
+
188
+ You can help to develop the project. Any contributions are **greatly appreciated**.
189
+
190
+ * If you have suggestions for adding or removing projects, feel free to [open an issue](https://github.com/testit-tms/adapters-js/issues/new) to discuss it, or directly create a pull request after you edit the *README.md* file with necessary changes.
191
+ * Please make sure you check your spelling and grammar.
192
+ * Create individual PR for each suggestion.
193
+ * Please also read through the [Code Of Conduct](https://github.com/testit-tms/adapters-js/blob/master/CODE_OF_CONDUCT.md) before posting your first idea as well.
194
+
195
+ # License
196
+
197
+ Distributed under the Apache-2.0 License. See [LICENSE](https://github.com/testit-tms/adapters-js/blob/master/LICENSE.md) for more information.
198
+
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const codeceptjs_1 = require("codeceptjs");
4
+ const config_class_1 = require("./common/classes/config.class");
5
+ const logger_class_1 = require("./common/classes/logger.class");
6
+ const default_http_client_class_1 = require("./http/default-http-client.class");
7
+ const strategy_factory_1 = require("./strategies/strategy.factory");
8
+ module.exports = async function () {
9
+ const config = new config_class_1.ConfigComposer().compose();
10
+ const logger = new logger_class_1.Logger(config.__DEV);
11
+ const http = new default_http_client_class_1.DefaultHttpClient(config, logger);
12
+ const strategy = strategy_factory_1.StrategyFactory.create(http, logger, config);
13
+ const helper = codeceptjs_1.container.helpers('TestITHelper');
14
+ await strategy.bootstrap();
15
+ codeceptjs_1.event.dispatcher.on(codeceptjs_1.event.test.after, (test) => {
16
+ strategy.collect(test.id, helper.metadata);
17
+ helper.metadata = {};
18
+ });
19
+ codeceptjs_1.event.dispatcher.on(codeceptjs_1.event.test.before, async (test) => {
20
+ await strategy.beforeTest(test);
21
+ });
22
+ codeceptjs_1.event.dispatcher.on(codeceptjs_1.event.suite.after, async (suite) => {
23
+ codeceptjs_1.recorder.add('transferTestAndRuns', async () => {
24
+ await strategy.transferTestsToSystem(suite);
25
+ await strategy.transferRunsToSystem(suite);
26
+ });
27
+ });
28
+ codeceptjs_1.event.dispatcher.on(codeceptjs_1.event.all.after, async () => {
29
+ await strategy.teardown();
30
+ });
31
+ codeceptjs_1.event.dispatcher.on(codeceptjs_1.event.all.after, async () => {
32
+ await strategy.teardown();
33
+ });
34
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const box_class_1 = require("../classes/box.class");
4
+ describe('Box', () => {
5
+ const box = new box_class_1.Box();
6
+ it('Should append values to box and merge them', () => {
7
+ box.collectWithMerge('1', { a: 1 });
8
+ box.collectWithMerge('1', { b: 2 });
9
+ expect(box.get('1'))
10
+ .toEqual({
11
+ a: 1,
12
+ b: 2
13
+ });
14
+ });
15
+ });
@@ -0,0 +1,4 @@
1
+ import { Codecept } from '../../types/codecept.type';
2
+ import { Origin } from '../../types/origin.type';
3
+ export declare function getDefaultTest(): Codecept.Test<Origin.TestConfig>;
4
+ export declare function getDefaultConfig(): Origin.Config;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDefaultConfig = exports.getDefaultTest = void 0;
4
+ function getDefaultTest() {
5
+ return {
6
+ title: 'Test',
7
+ startedAt: 5634234,
8
+ duration: 240,
9
+ state: 'passed',
10
+ steps: [
11
+ {
12
+ name: 'Step 1',
13
+ args: [],
14
+ status: 'passed',
15
+ startedAt: 5634234,
16
+ duration: 40
17
+ },
18
+ {
19
+ name: 'Step 2',
20
+ args: [],
21
+ status: 'passed',
22
+ startedAt: 5634234,
23
+ duration: 200
24
+ }
25
+ ],
26
+ parent: {
27
+ title: 'Suite',
28
+ _beforeEach: [
29
+ {
30
+ title: 'Before',
31
+ steps: [
32
+ {
33
+ name: 'Step Before',
34
+ args: [],
35
+ status: 'passed',
36
+ startedAt: 5634234,
37
+ duration: 40
38
+ }
39
+ ]
40
+ }
41
+ ],
42
+ _afterEach: [
43
+ {
44
+ title: 'Before',
45
+ steps: [
46
+ {
47
+ name: 'Step After',
48
+ args: [],
49
+ status: 'passed',
50
+ startedAt: 5634234,
51
+ duration: 40
52
+ }
53
+ ]
54
+ }
55
+ ]
56
+ }
57
+ };
58
+ }
59
+ exports.getDefaultTest = getDefaultTest;
60
+ function getDefaultConfig() {
61
+ return {
62
+ url: 'https://url.com//',
63
+ privateToken: 'TTBwakF34lpuQ0FyT6F21EFU',
64
+ projectId: '96g6d4bg-20g0-25e8-b17e-a1a34a7adf2f',
65
+ testRunId: '55238c45-e4cd-4328-b4d5-b0484544a640',
66
+ configurationId: '1c33c90c-f34c-427b-81f6-1458f5g9c072',
67
+ testRunName: 'Run',
68
+ adapterMode: 2
69
+ };
70
+ }
71
+ exports.getDefaultConfig = getDefaultConfig;
@@ -0,0 +1,5 @@
1
+ export declare class Box<T> {
2
+ private readonly box;
3
+ collectWithMerge(id: string, entity: T): void;
4
+ get(id: string): T;
5
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Box = void 0;
4
+ class Box {
5
+ constructor() {
6
+ this.box = new Map;
7
+ }
8
+ collectWithMerge(id, entity) {
9
+ const collected = this.box.get(id);
10
+ this.box.set(id, collected
11
+ ? { ...collected, ...entity }
12
+ : entity);
13
+ }
14
+ get(id) {
15
+ return this.box.get(id);
16
+ }
17
+ }
18
+ exports.Box = Box;
@@ -0,0 +1,6 @@
1
+ import { Origin } from '../../types/origin.type';
2
+ export declare class ConfigComposer {
3
+ private readonly logger;
4
+ compose(base?: Origin.Config): Origin.Config;
5
+ private merge;
6
+ }
@@ -0,0 +1,66 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ConfigComposer = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const dotenv = __importStar(require("dotenv"));
29
+ const logger_class_1 = require("./logger.class");
30
+ const DEFAULT_CONFIG_NAME = 'testit-adapter.config.json';
31
+ class ConfigComposer {
32
+ constructor() {
33
+ //TODO: Поставлять логгер через зависимости
34
+ this.logger = new logger_class_1.Logger();
35
+ }
36
+ compose(base) {
37
+ var _a;
38
+ const environment = dotenv.config().parsed;
39
+ const from = (_a = environment === null || environment === void 0 ? void 0 : environment.TMS_CONFIG_FILE) !== null && _a !== void 0 ? _a : DEFAULT_CONFIG_NAME;
40
+ const buffer = fs
41
+ .readFileSync(from)
42
+ .toString();
43
+ const file = JSON.parse(buffer);
44
+ if ((file === null || file === void 0 ? void 0 : file.privateToken) || (base === null || base === void 0 ? void 0 : base.privateToken)) {
45
+ console.warn(`
46
+ The configuration file specifies a private token. It is not safe.
47
+ Use TMS_PRIVATE_TOKEN environment variable
48
+ `);
49
+ }
50
+ return this.merge(base, file, environment);
51
+ }
52
+ merge(base, file, environment) {
53
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
54
+ return {
55
+ url: (_b = (_a = environment === null || environment === void 0 ? void 0 : environment.TMS_URL) !== null && _a !== void 0 ? _a : file.url) !== null && _b !== void 0 ? _b : base === null || base === void 0 ? void 0 : base.url,
56
+ privateToken: (_d = (_c = environment === null || environment === void 0 ? void 0 : environment.TMS_PRIVATE_TOKEN) !== null && _c !== void 0 ? _c : file === null || file === void 0 ? void 0 : file.privateToken) !== null && _d !== void 0 ? _d : base === null || base === void 0 ? void 0 : base.url,
57
+ projectId: (_f = (_e = environment === null || environment === void 0 ? void 0 : environment.TMS_PROJECT_ID) !== null && _e !== void 0 ? _e : file === null || file === void 0 ? void 0 : file.projectId) !== null && _f !== void 0 ? _f : base === null || base === void 0 ? void 0 : base.projectId,
58
+ configurationId: (_h = (_g = environment === null || environment === void 0 ? void 0 : environment.TMS_CONFIGURATION_ID) !== null && _g !== void 0 ? _g : file === null || file === void 0 ? void 0 : file.configurationId) !== null && _h !== void 0 ? _h : base === null || base === void 0 ? void 0 : base.configurationId,
59
+ testRunId: (_k = (_j = environment === null || environment === void 0 ? void 0 : environment.TMS_TEST_RUN_ID) !== null && _j !== void 0 ? _j : file === null || file === void 0 ? void 0 : file.testRunId) !== null && _k !== void 0 ? _k : base === null || base === void 0 ? void 0 : base.testRunId,
60
+ testRunName: (_m = (_l = environment === null || environment === void 0 ? void 0 : environment.TMS_TEST_RUN_NAME) !== null && _l !== void 0 ? _l : file === null || file === void 0 ? void 0 : file.testRunName) !== null && _m !== void 0 ? _m : base === null || base === void 0 ? void 0 : base.testRunName,
61
+ adapterMode: (_q = (_p = (_o = environment === null || environment === void 0 ? void 0 : environment.TMS_ADAPTER_MODE) !== null && _o !== void 0 ? _o : file === null || file === void 0 ? void 0 : file.adapterMode) !== null && _p !== void 0 ? _p : base === null || base === void 0 ? void 0 : base.adapterMode) !== null && _q !== void 0 ? _q : 0,
62
+ __DEV: (_r = file.__DEV) !== null && _r !== void 0 ? _r : false
63
+ };
64
+ }
65
+ }
66
+ exports.ConfigComposer = ConfigComposer;
@@ -0,0 +1,9 @@
1
+ import { AxiosError } from 'axios';
2
+ export declare class Logger {
3
+ private readonly __DEV;
4
+ private readonly logger;
5
+ constructor(__DEV?: boolean);
6
+ log(message: string): void;
7
+ warn(message: string): void;
8
+ error(error: AxiosError): void;
9
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Logger = void 0;
4
+ const codeceptjs_1 = require("codeceptjs");
5
+ class Logger {
6
+ constructor(__DEV = false) {
7
+ this.__DEV = __DEV;
8
+ this.logger = codeceptjs_1.output;
9
+ }
10
+ log(message) {
11
+ if (this.__DEV) {
12
+ this.logger.success(message);
13
+ }
14
+ }
15
+ warn(message) {
16
+ this.logger.error(message);
17
+ }
18
+ error(error) {
19
+ var _a, _b, _c, _d;
20
+ this.logger.error(`
21
+ ${(_a = error.response) === null || _a === void 0 ? void 0 : _a.status},
22
+ ${(_b = error.config) === null || _b === void 0 ? void 0 : _b.method},
23
+ ${(_c = error.config) === null || _c === void 0 ? void 0 : _c.url},
24
+ ${JSON.stringify((_d = error.response) === null || _d === void 0 ? void 0 : _d.data)}
25
+ `);
26
+ }
27
+ }
28
+ exports.Logger = Logger;
@@ -0,0 +1,7 @@
1
+ import { OutcomeType } from "testit-api-client/dist/types/outcome";
2
+ export type SomeOutcome = 'passed' | 'failed' | 'skipped' | 'success';
3
+ export type Outcome = OutcomeType;
4
+ export declare class OutcomeFactory {
5
+ static create(outcome: SomeOutcome): Outcome;
6
+ static isSkipped(outcome: SomeOutcome): boolean;
7
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OutcomeFactory = void 0;
4
+ class OutcomeFactory {
5
+ static create(outcome) {
6
+ var _a;
7
+ const outcomes = {
8
+ passed: 'Passed',
9
+ success: 'Passed',
10
+ failed: 'Failed',
11
+ skipped: 'Skipped'
12
+ };
13
+ return (_a = outcomes[outcome]) !== null && _a !== void 0 ? _a : 'Skipped';
14
+ }
15
+ static isSkipped(outcome) {
16
+ return outcome === 'skipped';
17
+ }
18
+ }
19
+ exports.OutcomeFactory = OutcomeFactory;
@@ -0,0 +1 @@
1
+ export declare const compose: (...fns: any[]) => (x: any) => any;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compose = void 0;
4
+ const compose = (...fns) => x => fns.reduceRight((y, f) => f(y), x);
5
+ exports.compose = compose;
@@ -0,0 +1 @@
1
+ export declare const hash: (str: any, seed?: number) => number;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hash = void 0;
4
+ const hash = (str, seed = 0) => {
5
+ let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
6
+ for (let i = 0, ch; i < str.length; i++) {
7
+ ch = str.charCodeAt(i);
8
+ h1 = Math.imul(h1 ^ ch, 2654435761);
9
+ h2 = Math.imul(h2 ^ ch, 1597334677);
10
+ }
11
+ h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
12
+ h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
13
+ return 4294967296 * (2097151 & h2) + (h1 >>> 0);
14
+ };
15
+ exports.hash = hash;
@@ -0,0 +1 @@
1
+ export declare function humanize(args: unknown[]): unknown[];
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.humanize = void 0;
4
+ function humanize(args) {
5
+ return args.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : arg);
6
+ }
7
+ exports.humanize = humanize;
@@ -0,0 +1,2 @@
1
+ import { Codecept } from '../../types/codecept.type';
2
+ export declare function isPassed(test: Codecept.Test): boolean;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isPassed = void 0;
4
+ function isPassed(test) {
5
+ return test.state === 'passed';
6
+ }
7
+ exports.isPassed = isPassed;
@@ -0,0 +1 @@
1
+ export declare function safetyUseISOString(date: number | null): string;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.safetyUseISOString = void 0;
4
+ function safetyUseISOString(date) {
5
+ if (!date) {
6
+ return;
7
+ }
8
+ return new Date(date).toISOString();
9
+ }
10
+ exports.safetyUseISOString = safetyUseISOString;
@@ -0,0 +1,9 @@
1
+ /// <reference types="codeceptjs" />
2
+ /// <reference types="codeceptjs" />
3
+ import { Codecept } from '../../types/codecept.type';
4
+ export declare const useCompositeKey: (test: Mocha.Test) => string;
5
+ export declare const useDefaultHash: (test: Codecept.Test) => any;
6
+ export declare const useCompositeHash: (test: Mocha.Test) => any;
7
+ export declare const useConfig: (test: Mocha.Test & {
8
+ opts: any;
9
+ }) => any;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useConfig = exports.useCompositeHash = exports.useDefaultHash = exports.useCompositeKey = void 0;
4
+ const compose_function_1 = require("./compose.function");
5
+ const hash_function_1 = require("./hash.function");
6
+ const useCompositeKey = (test) => { var _a; return `${test.title}:${(_a = test.parent) === null || _a === void 0 ? void 0 : _a.title}`; };
7
+ exports.useCompositeKey = useCompositeKey;
8
+ const useDefaultHash = (test) => { var _a; return (_a = test === null || test === void 0 ? void 0 : test.opts) === null || _a === void 0 ? void 0 : _a.externalId; };
9
+ exports.useDefaultHash = useDefaultHash;
10
+ const useCompositeHash = (test) => (0, compose_function_1.compose)(hash_function_1.hash, exports.useCompositeKey)(test);
11
+ exports.useCompositeHash = useCompositeHash;
12
+ const useConfig = (test) => test.opts;
13
+ exports.useConfig = useConfig;
@@ -0,0 +1 @@
1
+ export type Nullable<T> = null | undefined | T;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import { LinkPost, LinkType } from 'testit-api-client';
2
+ import { Nullable } from './common/types/nullable.type';
3
+ import { Origin } from './types/origin.type';
4
+ export declare class TestMetadataHelper extends Helper {
5
+ metadata: Nullable<Origin.TestMetadata>;
6
+ addMessage(message: string): void;
7
+ addAttachments(paths: string[] | string, name?: string): void;
8
+ addLinks(linksOrName: LinkPost[] | string, description?: string, type?: LinkType, url?: string): void;
9
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestMetadataHelper = void 0;
4
+ class TestMetadataHelper extends Helper {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.metadata = {};
8
+ }
9
+ addMessage(message) {
10
+ this.metadata.message = message;
11
+ }
12
+ addAttachments(paths, name) {
13
+ if (Array.isArray(paths)) {
14
+ this.metadata.attachments = paths;
15
+ return;
16
+ }
17
+ this.metadata.text = {
18
+ name,
19
+ content: paths
20
+ };
21
+ }
22
+ addLinks(linksOrName, description, type, url) {
23
+ if (typeof linksOrName !== 'string') {
24
+ this.metadata.links = linksOrName;
25
+ }
26
+ else {
27
+ this.metadata.links = [{
28
+ title: linksOrName,
29
+ url,
30
+ description,
31
+ type
32
+ }];
33
+ }
34
+ }
35
+ }
36
+ exports.TestMetadataHelper = TestMetadataHelper;
37
+ module.exports = TestMetadataHelper;