@applitools/core 2.4.4 → 2.4.5
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/CHANGELOG.md +6 -0
- package/dist/get-manager-results.js +31 -7
- package/dist/utils/separate-duplicate-results.js +36 -0
- package/package.json +11 -11
- package/types/get-eyes-results.d.ts +2 -2
- package/types/get-manager-results.d.ts +2 -2
- package/types/make-manager.d.ts +2 -2
- package/types/types.d.ts +8 -4
- package/types/utils/separate-duplicate-results.d.ts +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,25 +3,49 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.makeGetManagerResults = void 0;
|
|
4
4
|
const test_error_1 = require("./errors/test-error");
|
|
5
5
|
const internal_error_1 = require("./errors/internal-error");
|
|
6
|
+
const separate_duplicate_results_1 = require("./utils/separate-duplicate-results");
|
|
6
7
|
function makeGetManagerResults({ core, storage, logger: defaultLogger, }) {
|
|
7
8
|
return async function getManagerResults({ settings, logger = defaultLogger, } = {}) {
|
|
8
9
|
var _a, _b, _c;
|
|
9
|
-
|
|
10
|
+
let containers = await storage.reduce(async (promise, eyes) => {
|
|
10
11
|
try {
|
|
11
12
|
const results = await eyes.getResults({ settings: { ...settings, throwErr: false }, logger });
|
|
12
|
-
return
|
|
13
|
-
return {
|
|
13
|
+
return promise.then(containers => {
|
|
14
|
+
return containers.concat(results.map(result => ({
|
|
14
15
|
result,
|
|
15
16
|
error: result.status !== 'Passed' ? new test_error_1.TestError(result) : undefined,
|
|
16
17
|
userTestId: result.userTestId,
|
|
17
18
|
renderer: result.renderer,
|
|
18
|
-
};
|
|
19
|
+
})));
|
|
19
20
|
});
|
|
20
21
|
}
|
|
21
22
|
catch (error) {
|
|
22
|
-
return
|
|
23
|
+
return promise.then(containers => containers.concat({ error: new internal_error_1.InternalError(error), ...error.info }));
|
|
23
24
|
}
|
|
24
|
-
}));
|
|
25
|
+
}, Promise.resolve([]));
|
|
26
|
+
if (settings === null || settings === void 0 ? void 0 : settings.removeDuplicateTests) {
|
|
27
|
+
logger.log('User opted into removing duplicate tests, checking for duplicates...');
|
|
28
|
+
const [dedupedContainers, duplicateContainers] = (0, separate_duplicate_results_1.separateDuplicateResults)(containers);
|
|
29
|
+
containers = dedupedContainers;
|
|
30
|
+
if (!duplicateContainers.length)
|
|
31
|
+
logger.log('No duplicate tests found.');
|
|
32
|
+
else {
|
|
33
|
+
logger.log(`Duplicates found (${duplicateContainers.length} in total), cleaning them up...`);
|
|
34
|
+
await Promise.all(duplicateContainers.map(async (container) => {
|
|
35
|
+
if (container.result) {
|
|
36
|
+
await core.deleteTest({
|
|
37
|
+
settings: {
|
|
38
|
+
...container.result.server,
|
|
39
|
+
testId: container.result.id,
|
|
40
|
+
batchId: container.result.batchId,
|
|
41
|
+
secretToken: container.result.secretToken,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}));
|
|
46
|
+
logger.log('Done cleaning up duplicate tests!');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
25
49
|
const batches = storage.reduce((batches, eyes) => {
|
|
26
50
|
if (!eyes.test.keepBatchOpen) {
|
|
27
51
|
const settings = { ...eyes.test.server, batchId: eyes.test.batchId };
|
|
@@ -31,7 +55,7 @@ function makeGetManagerResults({ core, storage, logger: defaultLogger, }) {
|
|
|
31
55
|
}, {});
|
|
32
56
|
await core.closeBatch({ settings: Object.values(batches), logger }).catch(() => null);
|
|
33
57
|
const summary = {
|
|
34
|
-
results: containers
|
|
58
|
+
results: containers,
|
|
35
59
|
passed: 0,
|
|
36
60
|
unresolved: 0,
|
|
37
61
|
failed: 0,
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.separateDuplicateResults = void 0;
|
|
4
|
+
function separateDuplicateResults(containers) {
|
|
5
|
+
var _a;
|
|
6
|
+
const containerByBaselineId = new Map();
|
|
7
|
+
const duplicates = [];
|
|
8
|
+
const possibleDuplicateContainers = containers.filter(container => { var _a; return !((_a = container.result) === null || _a === void 0 ? void 0 : _a.keepIfDuplicate); });
|
|
9
|
+
for (const container of possibleDuplicateContainers) {
|
|
10
|
+
const baselineId = (_a = container.result) === null || _a === void 0 ? void 0 : _a.baselineId;
|
|
11
|
+
if (baselineId) {
|
|
12
|
+
const containerForThisBaseline = containerByBaselineId.get(baselineId);
|
|
13
|
+
if (containerForThisBaseline) {
|
|
14
|
+
const startedAt1 = Date.parse(containerForThisBaseline.result.startedAt);
|
|
15
|
+
const startedAt2 = Date.parse(container.result.startedAt);
|
|
16
|
+
if (startedAt2 > startedAt1) {
|
|
17
|
+
duplicates.push(containerForThisBaseline);
|
|
18
|
+
containerByBaselineId.set(baselineId, container);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
duplicates.push(container);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
containerByBaselineId.set(baselineId, container);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return [
|
|
30
|
+
// tests to keep
|
|
31
|
+
!duplicates.length ? containers : containers.filter(container => !duplicates.includes(container)),
|
|
32
|
+
// tests to delete
|
|
33
|
+
duplicates,
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
exports.separateDuplicateResults = separateDuplicateResults;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applitools/core",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.5",
|
|
4
4
|
"homepage": "https://applitools.com",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
|
|
@@ -75,19 +75,19 @@
|
|
|
75
75
|
]
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@applitools/core-base": "1.1.
|
|
78
|
+
"@applitools/core-base": "1.1.44",
|
|
79
79
|
"@applitools/dom-capture": "11.2.1",
|
|
80
80
|
"@applitools/dom-snapshot": "4.7.7",
|
|
81
81
|
"@applitools/driver": "1.11.37",
|
|
82
|
-
"@applitools/ec-client": "1.2.
|
|
82
|
+
"@applitools/ec-client": "1.2.18",
|
|
83
83
|
"@applitools/logger": "1.1.48",
|
|
84
|
-
"@applitools/nml-client": "1.3.
|
|
84
|
+
"@applitools/nml-client": "1.3.42",
|
|
85
85
|
"@applitools/req": "1.1.33",
|
|
86
|
-
"@applitools/screenshoter": "3.7.
|
|
86
|
+
"@applitools/screenshoter": "3.7.32",
|
|
87
87
|
"@applitools/snippets": "2.4.17",
|
|
88
88
|
"@applitools/socket": "1.0.10",
|
|
89
|
-
"@applitools/spec-driver-webdriver": "1.0.
|
|
90
|
-
"@applitools/ufg-client": "1.2.
|
|
89
|
+
"@applitools/spec-driver-webdriver": "1.0.18",
|
|
90
|
+
"@applitools/ufg-client": "1.2.5",
|
|
91
91
|
"@applitools/utils": "1.3.32",
|
|
92
92
|
"@types/ws": "8.5.4",
|
|
93
93
|
"abort-controller": "3.0.0",
|
|
@@ -100,11 +100,11 @@
|
|
|
100
100
|
"devDependencies": {
|
|
101
101
|
"@applitools/bongo": "^3.0.3",
|
|
102
102
|
"@applitools/sdk-coverage-tests": "^3.0.0",
|
|
103
|
-
"@applitools/spec-driver-puppeteer": "^1.1.
|
|
104
|
-
"@applitools/spec-driver-selenium": "^1.5.
|
|
105
|
-
"@applitools/spec-driver-webdriverio": "^1.4.
|
|
103
|
+
"@applitools/spec-driver-puppeteer": "^1.1.50",
|
|
104
|
+
"@applitools/spec-driver-selenium": "^1.5.35",
|
|
105
|
+
"@applitools/spec-driver-webdriverio": "^1.4.33",
|
|
106
106
|
"@applitools/test-server": "^1.1.28",
|
|
107
|
-
"@applitools/test-utils": "^1.5.
|
|
107
|
+
"@applitools/test-utils": "^1.5.15",
|
|
108
108
|
"@types/node": "^12.20.55",
|
|
109
109
|
"@types/selenium-webdriver": "^4.1.2",
|
|
110
110
|
"@types/yargs": "^17.0.22",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Eyes,
|
|
1
|
+
import type { Eyes, GetEyesResultsSettings, TestResult } from './types';
|
|
2
2
|
import { type SpecType } from '@applitools/driver';
|
|
3
3
|
import { type Logger } from '@applitools/logger';
|
|
4
4
|
type Options<TSpec extends SpecType, TType extends 'classic' | 'ufg'> = {
|
|
@@ -6,7 +6,7 @@ type Options<TSpec extends SpecType, TType extends 'classic' | 'ufg'> = {
|
|
|
6
6
|
logger: Logger;
|
|
7
7
|
};
|
|
8
8
|
export declare function makeGetEyesResults<TSpec extends SpecType, TType extends 'classic' | 'ufg'>({ eyes, logger: defaultLogger, }: Options<TSpec, TType>): ({ settings, logger, }?: {
|
|
9
|
-
settings?:
|
|
9
|
+
settings?: GetEyesResultsSettings<TType> | undefined;
|
|
10
10
|
logger?: Logger | undefined;
|
|
11
11
|
}) => Promise<TestResult<TType>[]>;
|
|
12
12
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Core, Eyes,
|
|
1
|
+
import type { Core, Eyes, GetManagerResultsSettings, TestResultSummary } from './types';
|
|
2
2
|
import { type SpecType } from '@applitools/driver';
|
|
3
3
|
import { type Logger } from '@applitools/logger';
|
|
4
4
|
type Options<TSpec extends SpecType, TType extends 'classic' | 'ufg'> = {
|
|
@@ -7,7 +7,7 @@ type Options<TSpec extends SpecType, TType extends 'classic' | 'ufg'> = {
|
|
|
7
7
|
logger: Logger;
|
|
8
8
|
};
|
|
9
9
|
export declare function makeGetManagerResults<TSpec extends SpecType, TType extends 'classic' | 'ufg'>({ core, storage, logger: defaultLogger, }: Options<TSpec, TType>): ({ settings, logger, }?: {
|
|
10
|
-
settings?:
|
|
10
|
+
settings?: GetManagerResultsSettings<TType> | undefined;
|
|
11
11
|
logger?: Logger | undefined;
|
|
12
12
|
}) => Promise<TestResultSummary<TType>>;
|
|
13
13
|
export {};
|
package/types/make-manager.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Core, EyesManager,
|
|
1
|
+
import type { Core, EyesManager, ManagerSettings } from './types';
|
|
2
2
|
import type { Core as BaseCore } from '@applitools/core-base';
|
|
3
3
|
import { type Logger } from '@applitools/logger';
|
|
4
4
|
import { type SpecType, type SpecDriver } from '@applitools/driver';
|
|
@@ -13,7 +13,7 @@ type Options<TSpec extends SpecType> = {
|
|
|
13
13
|
};
|
|
14
14
|
export declare function makeMakeManager<TSpec extends SpecType>({ spec, concurrency: defaultConcurrency, core, base, agentId: defaultAgentId, cwd, logger: defaultLogger, }: Options<TSpec>): <TType extends "classic" | "ufg" = "classic">({ type, settings, logger, }?: {
|
|
15
15
|
type?: TType | undefined;
|
|
16
|
-
settings?:
|
|
16
|
+
settings?: ManagerSettings | undefined;
|
|
17
17
|
logger?: Logger | undefined;
|
|
18
18
|
}) => Promise<EyesManager<TSpec, TType>>;
|
|
19
19
|
export {};
|
package/types/types.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export interface Core<TSpec extends SpecType, TDefaultType extends 'classic' | '
|
|
|
18
18
|
}): Promise<ECClient>;
|
|
19
19
|
makeManager<TType extends 'classic' | 'ufg' = TDefaultType>(options?: {
|
|
20
20
|
type: TType;
|
|
21
|
-
settings?:
|
|
21
|
+
settings?: ManagerSettings;
|
|
22
22
|
logger?: Logger;
|
|
23
23
|
}): Promise<EyesManager<TSpec, TType>>;
|
|
24
24
|
openEyes<TType extends 'classic' | 'ufg' = TDefaultType>(options: {
|
|
@@ -56,7 +56,7 @@ export interface EyesManager<TSpec extends SpecType, TDefaultType extends 'class
|
|
|
56
56
|
logger?: Logger;
|
|
57
57
|
}): Promise<Eyes<TSpec, TType>>;
|
|
58
58
|
getResults: (options?: {
|
|
59
|
-
settings?:
|
|
59
|
+
settings?: GetManagerResultsSettings<TDefaultType>;
|
|
60
60
|
logger?: Logger;
|
|
61
61
|
}) => Promise<TestResultSummary<'classic' | 'ufg'>>;
|
|
62
62
|
}
|
|
@@ -92,12 +92,12 @@ export interface Eyes<TSpec extends SpecType, TDefaultType extends 'classic' | '
|
|
|
92
92
|
logger?: Logger;
|
|
93
93
|
}): Promise<void>;
|
|
94
94
|
getResults(options?: {
|
|
95
|
-
settings?: Partial<
|
|
95
|
+
settings?: Partial<GetEyesResultsSettings<TDefaultType>>;
|
|
96
96
|
config?: Config<TSpec, TDefaultType>;
|
|
97
97
|
logger?: Logger;
|
|
98
98
|
}): Promise<TestResult<TDefaultType>[]>;
|
|
99
99
|
}
|
|
100
|
-
export interface
|
|
100
|
+
export interface ManagerSettings {
|
|
101
101
|
concurrency?: number;
|
|
102
102
|
/** @deprecated */
|
|
103
103
|
legacyConcurrency?: number;
|
|
@@ -117,6 +117,10 @@ export type AbortSettings<TType extends 'classic' | 'ufg'> = TType extends 'ufg'
|
|
|
117
117
|
export type GetResultsSettings<TType extends 'classic' | 'ufg'> = (TType extends 'ufg' ? UFGCore.GetResultsSettings : ClassicCore.GetResultsSettings) & {
|
|
118
118
|
throwErr?: boolean;
|
|
119
119
|
};
|
|
120
|
+
export type GetEyesResultsSettings<TType extends 'classic' | 'ufg'> = GetResultsSettings<TType>;
|
|
121
|
+
export type GetManagerResultsSettings<TType extends 'classic' | 'ufg'> = GetEyesResultsSettings<TType> & {
|
|
122
|
+
removeDuplicateTests?: boolean;
|
|
123
|
+
};
|
|
120
124
|
export type CheckResult<TType extends 'classic' | 'ufg'> = TType extends 'ufg' ? UFGCore.CheckResult : ClassicCore.CheckResult;
|
|
121
125
|
export type TestResult<TType extends 'classic' | 'ufg'> = TType extends 'ufg' ? UFGCore.TestResult : ClassicCore.TestResult;
|
|
122
126
|
export interface TestResultContainer<TType extends 'classic' | 'ufg'> {
|