apify-test-tools 0.10.1-beta.5 → 0.10.1-beta.6
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 +1 -0
- package/dist/test/unit/bin/build-from-local.test.js +6 -15
- package/dist/test/unit/bin/build-from-local.test.js.map +1 -1
- package/dist/test/unit/bin/git-command.test.js +12 -42
- package/dist/test/unit/bin/git-command.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/test/unit/bin/build-from-local.test.ts +9 -18
- package/test/unit/bin/git-command.test.ts +14 -55
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,7 @@ All notable changes to this project will be documented in this file.
|
|
|
16
16
|
- **internal-workflows:** Wait out npm's async publish before holding the major tag ([#160](https://github.com/apify/apify-test-tools/pull/160)) ([78434f0](https://github.com/apify/apify-test-tools/commit/78434f03d288ecbd383d55d56a1610f06ded298f)) by [@metalwarrior665](https://github.com/metalwarrior665)
|
|
17
17
|
- Skip builds and tests when the net diff is empty ([#171](https://github.com/apify/apify-test-tools/pull/171)) ([874d70c](https://github.com/apify/apify-test-tools/commit/874d70ca5506f7ec742a1808c9bf6c670f08552c)) by [@artogahr](https://github.com/artogahr)
|
|
18
18
|
- **workflows:** Add npm install step to Claude fix workflow ([#161](https://github.com/apify/apify-test-tools/pull/161)) ([d8884e0](https://github.com/apify/apify-test-tools/commit/d8884e07f778de14c8d9d7f0ec9e0a1672c224ad)) by [@foxt451](https://github.com/foxt451), closes [#39](https://github.com/apify/apify-test-tools/issues/39)
|
|
19
|
+
- **worktree:** Support worktree usage in tests ([#188](https://github.com/apify/apify-test-tools/pull/188)) ([ffc7e7b](https://github.com/apify/apify-test-tools/commit/ffc7e7bf1466af00eed671137feff0cbda712003)) by [@JuanGalilea](https://github.com/JuanGalilea)
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
<!-- git-cliff-unreleased-end -->
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { spawnSync } from 'node:child_process';
|
|
2
1
|
import fs from 'node:fs/promises';
|
|
3
2
|
import os from 'node:os';
|
|
4
3
|
import path from 'node:path';
|
|
@@ -9,17 +8,7 @@ import { collectNonIgnoredFiles, collectSourceFiles, flattenMonorepoContext, rew
|
|
|
9
8
|
// tsconfig (used for the real build and for eslint's type-aware linting) has no such restriction.
|
|
10
9
|
} from '../../../bin/build-from-local.js';
|
|
11
10
|
import * as Utils from '../../../bin/utils.js';
|
|
12
|
-
// Defaults to the real spawnSync so `git init`/`git ls-files` calls made by the code under test
|
|
13
|
-
// (and by test setup below) actually run — individual tests override this via mockReturnValue
|
|
14
|
-
// where they need to fake git's output, and vi.restoreAllMocks() reverts back to this passthrough.
|
|
15
|
-
vi.mock('node:child_process', async (importOriginal) => {
|
|
16
|
-
const actual = await importOriginal();
|
|
17
|
-
return { ...actual, spawnSync: vi.fn(actual.spawnSync) };
|
|
18
|
-
});
|
|
19
11
|
const mkTempDir = async (prefix) => fs.mkdtemp(path.join(os.tmpdir(), prefix));
|
|
20
|
-
const initGitRepo = (dir) => {
|
|
21
|
-
spawnSync('git', ['init', '-q'], { cwd: dir });
|
|
22
|
-
};
|
|
23
12
|
describe('build-from-local helpers', () => {
|
|
24
13
|
const tempDirs = [];
|
|
25
14
|
afterEach(async () => {
|
|
@@ -30,13 +19,11 @@ describe('build-from-local helpers', () => {
|
|
|
30
19
|
it('drops secret-pattern files and gitignored files, keeps everything else', async () => {
|
|
31
20
|
const rootDir = await mkTempDir('apify-test-tools-collect-');
|
|
32
21
|
tempDirs.push(rootDir);
|
|
33
|
-
initGitRepo(rootDir);
|
|
34
22
|
await fs.writeFile(path.join(rootDir, 'main.js'), 'console.log(1)');
|
|
35
23
|
await fs.writeFile(path.join(rootDir, '.env'), 'SECRET=1');
|
|
36
24
|
await fs.mkdir(path.join(rootDir, 'sub'));
|
|
37
25
|
await fs.writeFile(path.join(rootDir, 'sub', 'ignored.log'), 'log');
|
|
38
|
-
|
|
39
|
-
// proves the secret-pattern backstop applies independently of .gitignore.
|
|
26
|
+
vi.spyOn(Utils, 'listRepoFilePaths').mockResolvedValue(['main.js', '.env', 'sub/ignored.log']);
|
|
40
27
|
vi.spyOn(Utils, 'getGitignoredPaths').mockImplementation(async (relativePaths) => new Set(relativePaths.filter((p) => p.endsWith('.log'))));
|
|
41
28
|
const result = await collectNonIgnoredFiles(rootDir, rootDir);
|
|
42
29
|
expect(result).toStrictEqual([path.join(rootDir, 'main.js')]);
|
|
@@ -100,7 +87,6 @@ describe('build-from-local helpers', () => {
|
|
|
100
87
|
it("always collects the actor's own .actor/actor.json for a monorepo actor, since flattenMonorepoContext depends on it", async () => {
|
|
101
88
|
const repoRoot = await mkTempDir('apify-test-tools-collect-source-');
|
|
102
89
|
tempDirs.push(repoRoot);
|
|
103
|
-
initGitRepo(repoRoot);
|
|
104
90
|
const originalCwd = process.cwd();
|
|
105
91
|
// We simulate the working directory being the repo root, since collectSourceFiles uses relative paths to the repo root.
|
|
106
92
|
process.chdir(repoRoot);
|
|
@@ -110,6 +96,11 @@ describe('build-from-local helpers', () => {
|
|
|
110
96
|
await fs.mkdir(path.join(actorDir, '.actor'), { recursive: true });
|
|
111
97
|
await fs.writeFile(path.join(actorDir, '.actor', 'actor.json'), JSON.stringify({ actorSpecification: 1, name: 'actor', dockerContextDir: '../../..' }));
|
|
112
98
|
await fs.writeFile(path.join(cwd, 'package.json'), '{}');
|
|
99
|
+
vi.spyOn(Utils, 'listRepoFilePaths').mockResolvedValue([
|
|
100
|
+
'actors/owner_actor/.actor/actor.json',
|
|
101
|
+
'package.json',
|
|
102
|
+
]);
|
|
103
|
+
vi.spyOn(Utils, 'getGitignoredPaths').mockResolvedValue(new Set(['actors/owner_actor/.actor/actor.json']));
|
|
113
104
|
const sourceFiles = await collectSourceFiles('owner/actor', actorDir);
|
|
114
105
|
expect(sourceFiles.map((file) => file.name)).toContain('.actor/actor.json');
|
|
115
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-from-local.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/build-from-local.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build-from-local.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/build-from-local.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,54 +1,24 @@
|
|
|
1
|
-
import os from 'node:os';
|
|
2
|
-
import path from 'node:path';
|
|
3
1
|
import { describe, expect, it } from 'vitest';
|
|
4
|
-
import {
|
|
2
|
+
import { GitCommandError, runGitCommand } from '../../../bin/utils.js';
|
|
5
3
|
describe('runGitCommand', () => {
|
|
6
|
-
it('returns trimmed Git output', async () => {
|
|
7
|
-
await expect(runGitCommand(['
|
|
8
|
-
cwd: process.cwd(),
|
|
9
|
-
operation: 'check whether the current directory is in a Git repository',
|
|
10
|
-
})).resolves.toBe('true');
|
|
4
|
+
it('returns trimmed Git output without requiring a repository', async () => {
|
|
5
|
+
await expect(runGitCommand(['--version'])).resolves.toMatch(/^git version /);
|
|
11
6
|
});
|
|
12
|
-
it('
|
|
13
|
-
const error = await runGitCommand(['
|
|
14
|
-
|
|
15
|
-
operation: 'verify a commit',
|
|
7
|
+
it('wraps a Git failure with the command and operation', async () => {
|
|
8
|
+
const error = await runGitCommand(['--definitely-invalid-option'], {
|
|
9
|
+
operation: 'check error handling',
|
|
16
10
|
}).catch((failure) => failure);
|
|
17
11
|
expect(error).toBeInstanceOf(GitCommandError);
|
|
18
12
|
if (error instanceof GitCommandError) {
|
|
19
|
-
expect(error.exitCode).toBe(
|
|
20
|
-
expect(error.
|
|
21
|
-
expect(error.message).toContain('
|
|
22
|
-
expect(error.
|
|
13
|
+
expect(error.exitCode).not.toBe(0);
|
|
14
|
+
expect(error.message).toContain('Failed to check error handling.\n');
|
|
15
|
+
expect(error.message).toContain('Command: git "--definitely-invalid-option"\n');
|
|
16
|
+
expect(error.gitError).toContain('--definitely-invalid-option');
|
|
23
17
|
expect(error.cause).toBeInstanceOf(Error);
|
|
24
18
|
}
|
|
25
19
|
});
|
|
26
|
-
it('passes arguments literally
|
|
27
|
-
await expect(runGitCommand(['
|
|
28
|
-
operation: 'verify a commit reference',
|
|
29
|
-
})).rejects.toThrow('Command: git "rev-parse" "--verify" "HEAD; echo injected"\nGit error:');
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
describe('listRepoFilePaths', () => {
|
|
33
|
-
it('lists files under a subdirectory relative to the repository root', async () => {
|
|
34
|
-
const repoRoot = process.cwd();
|
|
35
|
-
await expect(listRepoFilePaths(repoRoot, path.join(repoRoot, 'bin'))).resolves.toContain('bin/utils.ts');
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
describe('getGitignoredPaths', () => {
|
|
39
|
-
it('returns an empty set for no paths', async () => {
|
|
40
|
-
await expect(getGitignoredPaths([])).resolves.toStrictEqual(new Set());
|
|
41
|
-
});
|
|
42
|
-
it('returns only paths ignored by the repository rules', async () => {
|
|
43
|
-
await expect(getGitignoredPaths(['node_modules/example.js', 'bin/utils.ts', '.DS_Store'], process.cwd())).resolves.toStrictEqual(new Set(['node_modules/example.js', '.DS_Store']));
|
|
44
|
-
});
|
|
45
|
-
it('returns an empty set when Git exits with code 1', async () => {
|
|
46
|
-
await expect(getGitignoredPaths(['bin/utils.ts'], process.cwd())).resolves.toStrictEqual(new Set());
|
|
47
|
-
});
|
|
48
|
-
it('rejects unexpected Git errors', async () => {
|
|
49
|
-
await expect(getGitignoredPaths(['bin/utils.ts'], os.tmpdir())).rejects.toThrow('Failed to check which repository paths are ignored.\n' +
|
|
50
|
-
'Command: git "check-ignore" "--" "bin/utils.ts"\n' +
|
|
51
|
-
'Git error: fatal: not a git repository');
|
|
20
|
+
it('passes arguments literally instead of running them through a shell', async () => {
|
|
21
|
+
await expect(runGitCommand(['--version; echo injected'])).rejects.toThrow('Command: git "--version; echo injected"\nGit error:');
|
|
52
22
|
});
|
|
53
23
|
});
|
|
54
24
|
//# sourceMappingURL=git-command.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-command.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/git-command.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"git-command.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/git-command.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEvE,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,KAAK,GAAY,MAAM,aAAa,CAAC,CAAC,6BAA6B,CAAC,EAAE;YACxE,SAAS,EAAE,sBAAsB;SACpC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QAExC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QAC9C,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;YACrE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;YAChF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACrE,qDAAqD,CACxD,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|