Skip to content

Commit e29dff7

Browse files
committed
test: fix remaining environment handling and error message assertions
Process.env preservation fixes: - Fix destructive process.env = {} in parameter-passthrough.spec.ts - Fix destructive process.env = {} in edge-cases.spec.ts - Apply same safe originalEnv pattern used in engine tests - Preserves PATH, HOME, and system vars; restores in afterAll - Eliminates environment pollution between test files Error message assertion fixes: - Update getRemoteUrl tests to assert against gh-pages v3.2.3 exact errors - Non-existent remote: "Failed to get remote.{remote}.url (task must...)" - Not-in-git-repo: Same error format (gh-pages doesn't distinguish) - Tests now pin actual upstream error contract for upgrade safety Documentation updates: - Update TEST_COVERAGE_PLAN.md test safety claim to be accurate - Changed "process.env properly preserved" to "using originalEnv pattern" All 351 tests passing. Test suite now honestly ready for gh-pages v6 upgrade.
1 parent 1e6bf0c commit e29dff7

File tree

4 files changed

+57
-6
lines changed

4 files changed

+57
-6
lines changed

TEST_COVERAGE_PLAN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ All behavioral tests for gh-pages v3.2.3 are now complete and provide comprehens
223223
- **gh-pages/lib/git:**Internal API dependency intensively tested (3 focused tests verifying correctness)
224224
- **Dotfiles:**Tests verify actual file list differences (4 files with dotfiles, 3 without)
225225
- **Quality:**Zero regressions, all tests passing, zero 'any' types (HARD RULE compliant)
226-
- **Test Safety:**process.env properly preserved (PATH, HOME, etc.) across all test files
226+
- **Test Safety:**process.env properly preserved using originalEnv pattern in all test files
227227

228228
---
229229

src/engine/engine.prepare-options-helpers.spec.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -613,10 +613,10 @@ describe('prepareOptions helpers - intensive tests', () => {
613613
remote: 'nonexistent-remote-12345' // Remote that definitely doesn't exist
614614
};
615615

616-
// Should throw with specific error message about the remote
616+
// gh-pages v3.2.3 throws this exact error message for non-existent remotes
617617
await expect(helpers.getRemoteUrl(options))
618618
.rejects
619-
.toThrow('Failed to get remote.');
619+
.toThrow('Failed to get remote.nonexistent-remote-12345.url (task must either be run in a git repository with a configured nonexistent-remote-12345 remote or must be configured with the "repo" option).');
620620
});
621621

622622
it('should throw helpful error when not in a git repository', async () => {
@@ -629,9 +629,10 @@ describe('prepareOptions helpers - intensive tests', () => {
629629
process.chdir(tempDir);
630630
const options = { remote: 'origin' };
631631

632+
// gh-pages v3.2.3 throws this exact error message when not in a git repo
632633
await expect(helpers.getRemoteUrl(options))
633634
.rejects
634-
.toThrow('run in a git repository');
635+
.toThrow('Failed to get remote.origin.url (task must either be run in a git repository with a configured origin remote or must be configured with the "repo" option).');
635636
} finally {
636637
process.chdir(originalCwd);
637638
await require('fs-extra').remove(tempDir);

src/parameter-tests/edge-cases.spec.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,35 @@ import { DeployUser } from '../interfaces';
1818

1919
describe('Edge Case Tests', () => {
2020
let logger: logging.LoggerApi;
21+
const originalEnv = process.env;
2122

2223
beforeEach(() => {
2324
logger = new logging.NullLogger();
24-
process.env = {};
25+
// Create fresh copy of environment for each test
26+
// This preserves PATH, HOME, etc. needed by git
27+
process.env = { ...originalEnv };
28+
// Clear only CI-specific vars we're testing
29+
delete process.env.TRAVIS;
30+
delete process.env.TRAVIS_COMMIT_MESSAGE;
31+
delete process.env.TRAVIS_REPO_SLUG;
32+
delete process.env.TRAVIS_COMMIT;
33+
delete process.env.TRAVIS_BUILD_ID;
34+
delete process.env.CIRCLECI;
35+
delete process.env.CIRCLE_PROJECT_USERNAME;
36+
delete process.env.CIRCLE_PROJECT_REPONAME;
37+
delete process.env.CIRCLE_SHA1;
38+
delete process.env.CIRCLE_BUILD_URL;
39+
delete process.env.GITHUB_ACTIONS;
40+
delete process.env.GITHUB_REPOSITORY;
41+
delete process.env.GITHUB_SHA;
42+
delete process.env.GH_TOKEN;
43+
delete process.env.PERSONAL_TOKEN;
44+
delete process.env.GITHUB_TOKEN;
45+
});
46+
47+
afterAll(() => {
48+
// Restore original environment for other test files
49+
process.env = originalEnv;
2550
});
2651

2752
describe('Empty/null/undefined handling', () => {

src/parameter-tests/parameter-passthrough.spec.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,35 @@ import * as engine from '../engine/engine';
1717

1818
describe('Parameter Passthrough Tests', () => {
1919
let logger: logging.LoggerApi;
20+
const originalEnv = process.env;
2021

2122
beforeEach(() => {
2223
logger = new logging.NullLogger();
23-
process.env = {};
24+
// Create fresh copy of environment for each test
25+
// This preserves PATH, HOME, etc. needed by git
26+
process.env = { ...originalEnv };
27+
// Clear only CI-specific vars we're testing
28+
delete process.env.TRAVIS;
29+
delete process.env.TRAVIS_COMMIT_MESSAGE;
30+
delete process.env.TRAVIS_REPO_SLUG;
31+
delete process.env.TRAVIS_COMMIT;
32+
delete process.env.TRAVIS_BUILD_ID;
33+
delete process.env.CIRCLECI;
34+
delete process.env.CIRCLE_PROJECT_USERNAME;
35+
delete process.env.CIRCLE_PROJECT_REPONAME;
36+
delete process.env.CIRCLE_SHA1;
37+
delete process.env.CIRCLE_BUILD_URL;
38+
delete process.env.GITHUB_ACTIONS;
39+
delete process.env.GITHUB_REPOSITORY;
40+
delete process.env.GITHUB_SHA;
41+
delete process.env.GH_TOKEN;
42+
delete process.env.PERSONAL_TOKEN;
43+
delete process.env.GITHUB_TOKEN;
44+
});
45+
46+
afterAll(() => {
47+
// Restore original environment for other test files
48+
process.env = originalEnv;
2449
});
2550

2651
describe('Parameter: repo', () => {

0 commit comments

Comments
 (0)