apify-test-tools 0.5.7-beta.2 → 0.5.7-beta.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/bin/diff-changes.ts +127 -0
- package/bin/diff-json-schema.ts +43 -0
- package/bin/git.ts +13 -4
- package/bin/main.ts +9 -5
- package/bin/utils.ts +2 -119
- package/dist/bin/diff-changes.d.ts +16 -0
- package/dist/bin/diff-changes.d.ts.map +1 -0
- package/dist/bin/diff-changes.js +91 -0
- package/dist/bin/diff-changes.js.map +1 -0
- package/dist/bin/diff-json-schema.d.ts +7 -0
- package/dist/bin/diff-json-schema.d.ts.map +1 -0
- package/dist/bin/diff-json-schema.js +40 -0
- package/dist/bin/diff-json-schema.js.map +1 -0
- package/dist/bin/git.d.ts +1 -1
- package/dist/bin/git.d.ts.map +1 -1
- package/dist/bin/git.js +12 -4
- package/dist/bin/git.js.map +1 -1
- package/dist/bin/main.js +8 -5
- package/dist/bin/main.js.map +1 -1
- package/dist/bin/utils.d.ts +0 -14
- package/dist/bin/utils.d.ts.map +1 -1
- package/dist/bin/utils.js +1 -88
- package/dist/bin/utils.js.map +1 -1
- package/dist/test/unit/bin/diff-changes.test.d.ts +2 -0
- package/dist/test/unit/bin/diff-changes.test.d.ts.map +1 -0
- package/dist/test/unit/bin/diff-changes.test.js +152 -0
- package/dist/test/unit/bin/diff-changes.test.js.map +1 -0
- package/dist/test/unit/bin/diff.test.d.ts +2 -0
- package/dist/test/unit/bin/diff.test.d.ts.map +1 -0
- package/dist/test/unit/bin/diff.test.js +133 -0
- package/dist/test/unit/bin/diff.test.js.map +1 -0
- package/dist/test/unit/parse-commit.test.js +1 -1
- package/dist/test/unit/parse-commit.test.js.map +1 -1
- package/dist/test/unit/should-built-and-test.test.js +93 -30
- package/dist/test/unit/should-built-and-test.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/test/unit/bin/diff-changes.test.ts +175 -0
- package/test/unit/bin/diff.test.ts +214 -0
- package/test/unit/parse-commit.test.ts +2 -1
- package/test/unit/should-built-and-test.test.ts +115 -31
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { describe, expect, test } from 'vitest';
|
|
2
|
-
import { getChangedActors } from '../../bin/
|
|
1
|
+
import { beforeEach, describe, expect, test, vi } from 'vitest';
|
|
2
|
+
import { getChangedActors } from '../../bin/diff-changes.js';
|
|
3
|
+
import * as DiffJsonSchema from '../../bin/diff-json-schema.js';
|
|
3
4
|
describe('Should build and test parser', () => {
|
|
4
5
|
// From https://github.com/apify-store/testing-repo-for-github-actions
|
|
5
6
|
const ACTOR_CONFIGS = [
|
|
@@ -19,61 +20,124 @@ describe('Should build and test parser', () => {
|
|
|
19
20
|
isStandalone: true,
|
|
20
21
|
},
|
|
21
22
|
];
|
|
22
|
-
|
|
23
|
+
const commits = [
|
|
24
|
+
{ sha: 'Commit1', author: '', date: '', message: '' },
|
|
25
|
+
{ sha: 'Commit3', author: '', date: '', message: '' },
|
|
26
|
+
];
|
|
27
|
+
let isCosmeticOnlyJsonSchemaSpy;
|
|
28
|
+
beforeEach(() => {
|
|
29
|
+
// Default: JSON changes are functional (triggers build/test)
|
|
30
|
+
isCosmeticOnlyJsonSchemaSpy = vi.spyOn(DiffJsonSchema, 'isCosmeticOnlyJsonSchemaChange').mockReturnValue(false);
|
|
31
|
+
});
|
|
32
|
+
test('Ignores dev-only readme', () => {
|
|
23
33
|
const FILES = ['README.md', 'code/README.md', 'shared/README.md'];
|
|
24
|
-
const
|
|
34
|
+
const actorsChanged = getChangedActors({ actorConfigs: ACTOR_CONFIGS, isLatest: false, filepathsChanged: FILES, commits });
|
|
25
35
|
expect(actorsChanged).toEqual([]);
|
|
26
|
-
expect(codeChanged).toBe(false);
|
|
27
36
|
});
|
|
28
|
-
test('Ignores other ignored files and folders',
|
|
37
|
+
test('Ignores other ignored files and folders', () => {
|
|
29
38
|
const FILES = ['.vscode/', '.gitignore', '.husky/', '.eslintrc', '.editorconfig', '.actor/'];
|
|
30
|
-
const
|
|
39
|
+
const actorsChanged = getChangedActors({ actorConfigs: ACTOR_CONFIGS, isLatest: false, filepathsChanged: FILES, commits });
|
|
31
40
|
expect(actorsChanged).toEqual([]);
|
|
32
|
-
expect(codeChanged).toBe(false);
|
|
33
41
|
});
|
|
34
|
-
test('Only builds latest for all Actors',
|
|
42
|
+
test('Only builds latest for all Actors', () => {
|
|
35
43
|
const FILES = ['shared/CHANGELOG.md', 'CHANGELOG.md'];
|
|
36
|
-
const
|
|
44
|
+
const actorsChanged = getChangedActors({ actorConfigs: ACTOR_CONFIGS, isLatest: true, filepathsChanged: FILES, commits });
|
|
37
45
|
expect(actorsChanged).toEqual(ACTOR_CONFIGS.filter(({ isStandalone }) => !isStandalone));
|
|
38
|
-
expect(codeChanged).toBe(false);
|
|
39
46
|
});
|
|
40
|
-
test('Code updated, tests miniactors',
|
|
47
|
+
test('Code updated, tests miniactors', () => {
|
|
41
48
|
const FILES = ['code/src/main.ts', 'package.json'];
|
|
42
|
-
const
|
|
49
|
+
const actorsChanged = getChangedActors({ actorConfigs: ACTOR_CONFIGS, isLatest: false, filepathsChanged: FILES, commits });
|
|
43
50
|
expect(actorsChanged).toEqual(ACTOR_CONFIGS.filter(({ isStandalone }) => !isStandalone));
|
|
44
|
-
expect(codeChanged).toBe(true);
|
|
45
51
|
});
|
|
46
|
-
test('Specific Actor functionality configs updated',
|
|
52
|
+
test('Specific Actor functionality configs updated', () => {
|
|
47
53
|
const FILES = ['actors/lukaskrivka_testing-github-integration-1/.actor/actor.json', 'standalone-actors/lukaskrivka_test-standalone/Dockerfile'];
|
|
48
|
-
|
|
54
|
+
// Default mock returns false = functional change
|
|
55
|
+
const actorsChanged = getChangedActors({ actorConfigs: ACTOR_CONFIGS, isLatest: false, filepathsChanged: FILES, commits });
|
|
49
56
|
expect(actorsChanged).toEqual([ACTOR_CONFIGS[0], ACTOR_CONFIGS[2]]);
|
|
50
|
-
expect(codeChanged).toBe(false);
|
|
51
57
|
});
|
|
52
|
-
test('src/main.ts updated',
|
|
58
|
+
test('src/main.ts updated', () => {
|
|
53
59
|
const FILES = [
|
|
54
60
|
'src/main.ts',
|
|
55
61
|
];
|
|
56
|
-
const
|
|
62
|
+
const actorsChanged = getChangedActors({ actorConfigs: ACTOR_CONFIGS, isLatest: true, filepathsChanged: FILES, commits });
|
|
57
63
|
expect(actorsChanged).toEqual(ACTOR_CONFIGS.slice(0, 2));
|
|
58
|
-
expect(codeChanged).toBe(false);
|
|
59
64
|
});
|
|
60
|
-
test('Miniactor, Code and standalone actor updated,',
|
|
65
|
+
test('Miniactor, Code and standalone actor updated,', () => {
|
|
61
66
|
const FILES = [
|
|
62
67
|
'actors/lukaskrivka_testing-github-integration-1/.actor/actor.json',
|
|
63
68
|
'code/src/main.ts',
|
|
64
69
|
'standalone-actors/lukaskrivka_test-standalone/Dockerfile',
|
|
65
70
|
];
|
|
66
|
-
|
|
71
|
+
// Default mock returns false = functional change for the JSON file
|
|
72
|
+
const actorsChanged = getChangedActors({ actorConfigs: ACTOR_CONFIGS, isLatest: false, filepathsChanged: FILES, commits });
|
|
67
73
|
expect(actorsChanged).toEqual(ACTOR_CONFIGS);
|
|
68
|
-
expect(codeChanged).toBe(true);
|
|
69
74
|
});
|
|
70
|
-
test('Specific Actor non-functional configs updated',
|
|
75
|
+
test('Specific Actor non-functional configs updated', () => {
|
|
71
76
|
const FILES = ['actors/lukaskrivka_testing-github-integration-2/.actor/README.md', 'standalone-actors/lukaskrivka_test-standalone/CHANGELOG.md'];
|
|
72
|
-
const
|
|
77
|
+
const actorsChanged = getChangedActors({ actorConfigs: ACTOR_CONFIGS, isLatest: false, filepathsChanged: FILES, commits });
|
|
78
|
+
expect(actorsChanged).toEqual([]);
|
|
79
|
+
});
|
|
80
|
+
test('JSON file with cosmetic-only changes in PR context (isLatest=false) skips tests', () => {
|
|
81
|
+
const FILES = ['actors/lukaskrivka_testing-github-integration-1/.actor/actor.json'];
|
|
82
|
+
isCosmeticOnlyJsonSchemaSpy.mockReturnValue(true);
|
|
83
|
+
const actorsChanged = getChangedActors({
|
|
84
|
+
actorConfigs: ACTOR_CONFIGS,
|
|
85
|
+
isLatest: false,
|
|
86
|
+
filepathsChanged: FILES,
|
|
87
|
+
commits,
|
|
88
|
+
});
|
|
89
|
+
expect(actorsChanged).toEqual([]);
|
|
90
|
+
});
|
|
91
|
+
test('JSON file with cosmetic-only changes in latest context still triggers build', () => {
|
|
92
|
+
const FILES = ['actors/lukaskrivka_testing-github-integration-1/.actor/actor.json'];
|
|
93
|
+
isCosmeticOnlyJsonSchemaSpy.mockReturnValue(true);
|
|
94
|
+
const actorsChanged = getChangedActors({
|
|
95
|
+
actorConfigs: ACTOR_CONFIGS,
|
|
96
|
+
isLatest: true,
|
|
97
|
+
filepathsChanged: FILES,
|
|
98
|
+
commits,
|
|
99
|
+
});
|
|
100
|
+
expect(actorsChanged).toEqual([ACTOR_CONFIGS[0]]);
|
|
101
|
+
});
|
|
102
|
+
test('JSON file with functional changes triggers tests', () => {
|
|
103
|
+
const FILES = ['actors/lukaskrivka_testing-github-integration-1/.actor/actor.json'];
|
|
104
|
+
// Default mock returns false = functional change
|
|
105
|
+
const actorsChanged = getChangedActors({
|
|
106
|
+
actorConfigs: ACTOR_CONFIGS,
|
|
107
|
+
isLatest: false,
|
|
108
|
+
filepathsChanged: FILES,
|
|
109
|
+
commits,
|
|
110
|
+
});
|
|
111
|
+
expect(actorsChanged).toEqual([ACTOR_CONFIGS[0]]);
|
|
112
|
+
});
|
|
113
|
+
test('Mix: one actor has cosmetic-only JSON change, another has functional JSON change', () => {
|
|
114
|
+
const FILES = [
|
|
115
|
+
'actors/lukaskrivka_testing-github-integration-1/.actor/actor.json',
|
|
116
|
+
'actors/lukaskrivka_testing-github-integration-2/.actor/input_schema.json',
|
|
117
|
+
];
|
|
118
|
+
// Actor 1 JSON is cosmetic-only, actor 2 JSON is functional
|
|
119
|
+
isCosmeticOnlyJsonSchemaSpy.mockImplementation((_commits, filepath) => !filepath.includes('input_schema.json'));
|
|
120
|
+
const actorsChanged = getChangedActors({
|
|
121
|
+
actorConfigs: ACTOR_CONFIGS,
|
|
122
|
+
isLatest: false,
|
|
123
|
+
filepathsChanged: FILES,
|
|
124
|
+
commits,
|
|
125
|
+
});
|
|
126
|
+
// Only the second actor (functional change) should be built and tested
|
|
127
|
+
expect(actorsChanged).toEqual([ACTOR_CONFIGS[1]]);
|
|
128
|
+
});
|
|
129
|
+
test('Standalone actor with cosmetic-only JSON change in PR context skips tests', () => {
|
|
130
|
+
const FILES = ['standalone-actors/lukaskrivka_test-standalone/.actor/actor.json'];
|
|
131
|
+
isCosmeticOnlyJsonSchemaSpy.mockReturnValue(true);
|
|
132
|
+
const actorsChanged = getChangedActors({
|
|
133
|
+
actorConfigs: ACTOR_CONFIGS,
|
|
134
|
+
isLatest: false,
|
|
135
|
+
filepathsChanged: FILES,
|
|
136
|
+
commits,
|
|
137
|
+
});
|
|
73
138
|
expect(actorsChanged).toEqual([]);
|
|
74
|
-
expect(codeChanged).toBe(false);
|
|
75
139
|
});
|
|
76
|
-
test('Google Maps real user-case that had undefined',
|
|
140
|
+
test('Google Maps real user-case that had undefined', () => {
|
|
77
141
|
const FILES = ['actors/compass_Google-Maps-Reviews-Scraper/.actor/INPUT_SCHEMA.json', 'actors/compass_crawler-google-places/.actor/INPUT_SCHEMA.json',
|
|
78
142
|
'code/src/consts.ts', 'code/src/crawlers/cheerio/routes.ts', 'code/src/detail_page_handle.ts', 'code/src/enqueue_places.ts',
|
|
79
143
|
'code/src/helper-classes/initialize-all.ts', 'code/src/helper-classes/stats.ts', 'code/src/helper-classes/unmatched-categories.ts',
|
|
@@ -126,11 +190,10 @@ describe('Should build and test parser', () => {
|
|
|
126
190
|
isStandalone: true,
|
|
127
191
|
},
|
|
128
192
|
];
|
|
129
|
-
const
|
|
130
|
-
actorConfigs: ACTOR_CONFIGS_GOOGLE_MAPS, isLatest: false, filepathsChanged: FILES,
|
|
193
|
+
const actorsChanged = getChangedActors({
|
|
194
|
+
actorConfigs: ACTOR_CONFIGS_GOOGLE_MAPS, isLatest: false, filepathsChanged: FILES, commits,
|
|
131
195
|
});
|
|
132
196
|
expect(actorsChanged).toEqual(ACTOR_CONFIGS_GOOGLE_MAPS.filter(({ isStandalone }) => !isStandalone));
|
|
133
|
-
expect(codeChanged).toBe(true);
|
|
134
197
|
});
|
|
135
198
|
});
|
|
136
199
|
//# sourceMappingURL=should-built-and-test.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"should-built-and-test.test.js","sourceRoot":"","sources":["../../../test/unit/should-built-and-test.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"should-built-and-test.test.js","sourceRoot":"","sources":["../../../test/unit/should-built-and-test.test.ts"],"names":[],"mappings":"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"}
|