From f8698de9c11707381bb8168af95b95e6ffcc7e28 Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Mon, 25 May 2026 14:41:49 +0200 Subject: [PATCH 1/7] chore(refactor): moved filterIgnoredKeys test file --- .../cli/test/unit/core/{ => helpers}/filterIgnoredKeys.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename packages/cli/test/unit/core/{ => helpers}/filterIgnoredKeys.test.ts (95%) diff --git a/packages/cli/test/unit/core/filterIgnoredKeys.test.ts b/packages/cli/test/unit/core/helpers/filterIgnoredKeys.test.ts similarity index 95% rename from packages/cli/test/unit/core/filterIgnoredKeys.test.ts rename to packages/cli/test/unit/core/helpers/filterIgnoredKeys.test.ts index 70ad1dc..b7fbe1a 100644 --- a/packages/cli/test/unit/core/filterIgnoredKeys.test.ts +++ b/packages/cli/test/unit/core/helpers/filterIgnoredKeys.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import { filterIgnoredKeys } from '../../../src/core/helpers/filterIgnoredKeys.js'; +import { filterIgnoredKeys } from '../../../../src/core/helpers/filterIgnoredKeys.js'; describe('filterIgnoredKeys', () => { it('filters exact and regex matches', () => { From 46ba7588447d40575eedf687c953f7247b819f03 Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Mon, 25 May 2026 14:46:24 +0200 Subject: [PATCH 2/7] chore(refactor): added unit test file for skipCommentedUsages --- .../core/scan/skipCommentedUsages.test.ts | 180 ++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 packages/cli/test/unit/core/scan/skipCommentedUsages.test.ts diff --git a/packages/cli/test/unit/core/scan/skipCommentedUsages.test.ts b/packages/cli/test/unit/core/scan/skipCommentedUsages.test.ts new file mode 100644 index 0000000..8348ff3 --- /dev/null +++ b/packages/cli/test/unit/core/scan/skipCommentedUsages.test.ts @@ -0,0 +1,180 @@ +import { describe, it, expect } from 'vitest'; +import { skipCommentedUsages } from '../../../../src/core/scan/skipCommentedUsages.js'; +import type { EnvUsage } from '../../../../src/config/types.js'; + +const usage = (variable: string, context?: string): EnvUsage => ({ + variable, + context, +}); + +describe('skipCommentedUsages', () => { + it('keeps usages without context', () => { + const usages = [usage('API_URL'), usage('DB_HOST')]; + expect(skipCommentedUsages(usages)).toEqual(usages); + }); + + it('keeps normal (non-commented) usages', () => { + const usages = [usage('API_URL', 'const url = process.env.API_URL')]; + expect(skipCommentedUsages(usages)).toEqual(usages); + }); + + // ---- single-line comment prefixes ---- + + it('filters // commented lines', () => { + expect( + skipCommentedUsages([usage('API_URL', '// process.env.API_URL')]), + ).toEqual([]); + }); + + it('filters # commented lines', () => { + expect( + skipCommentedUsages([usage('API_URL', '# process.env.API_URL')]), + ).toEqual([]); + }); + + it('filters /* commented lines', () => { + expect( + skipCommentedUsages([usage('API_URL', '/* process.env.API_URL')]), + ).toEqual([]); + }); + + it('filters * commented lines (inside block comment)', () => { + expect( + skipCommentedUsages([usage('API_URL', ' * process.env.API_URL')]), + ).toEqual([]); + }); + + it('filters ')]), + ).toEqual([]); + }); + + it('filters leading whitespace before comment prefix', () => { + expect( + skipCommentedUsages([usage('API_URL', ' // process.env.API_URL')]), + ).toEqual([]); + expect( + skipCommentedUsages([usage('API_URL', ' # process.env.API_URL')]), + ).toEqual([]); + expect( + skipCommentedUsages([usage('API_URL', ' /* process.env.API_URL')]), + ).toEqual([]); + }); + + // ---- dotenv-diff-ignore inline comment ---- + + it('filters lines with // dotenv-diff-ignore', () => { + expect( + skipCommentedUsages([ + usage('API_URL', 'process.env.API_URL // dotenv-diff-ignore'), + ]), + ).toEqual([]); + }); + + it('filters lines with inline', () => { + expect( + skipCommentedUsages([ + usage('API_URL', 'process.env.API_URL '), + ]), + ).toEqual([]); + }); + + // ---- HTML comment blocks ---- + + it('filters lines inside an open HTML comment', () => { + const usages = [ + usage('BEFORE', 'const a = process.env.BEFORE'), + usage('START', ''), + usage('AFTER', 'const b = process.env.AFTER'), + ]; + const result = skipCommentedUsages(usages); + expect(result.map((u) => u.variable)).toEqual(['BEFORE', 'AFTER']); + }); + + it('filters the --> closing line itself', () => { + const usages = [ + usage('A', ''), + ]; + const result = skipCommentedUsages(usages); + expect(result).toEqual([]); + }); + + // ---- dotenv-diff-ignore-start / end blocks ---- + + it('filters usages inside ignore-start/end block', () => { + const usages = [ + usage('BEFORE', 'process.env.BEFORE'), + usage('START', ''), + usage('INSIDE', 'process.env.INSIDE'), + usage('END', ''), + usage('AFTER', 'process.env.AFTER'), + ]; + const result = skipCommentedUsages(usages); + expect(result.map((u) => u.variable)).toEqual(['BEFORE', 'AFTER']); + }); + + it('also removes the start and end marker lines themselves', () => { + const usages = [ + usage('START', ''), + usage('END', ''), + ]; + expect(skipCommentedUsages(usages)).toEqual([]); + }); + + it('is case-insensitive for ignore block markers', () => { + const usages = [ + usage('START', ''), + usage('INSIDE', 'process.env.INSIDE'), + usage('END', ''), + ]; + expect(skipCommentedUsages(usages)).toEqual([]); + }); + + it('accepts dashes and spaces in ignore block markers', () => { + const usages = [ + usage('START', ''), + usage('INSIDE', 'process.env.INSIDE'), + usage('END', ''), + ]; + expect(skipCommentedUsages(usages)).toEqual([]); + }); + + // ---- mixed scenarios ---- + + it('keeps usages that come after the ignore block ends', () => { + const usages = [ + usage('IN', ''), + usage('IGNORED', 'process.env.IGNORED'), + usage('OUT', ''), + usage('KEPT', 'process.env.KEPT'), + ]; + const result = skipCommentedUsages(usages); + expect(result.map((u) => u.variable)).toEqual(['KEPT']); + }); + + it('returns empty array when all usages are commented', () => { + const usages = [ + usage('A', '// process.env.A'), + usage('B', '# process.env.B'), + usage('C', '/* process.env.C'), + ]; + expect(skipCommentedUsages(usages)).toEqual([]); + }); + + it('returns all usages when none are commented', () => { + const usages = [ + usage('A', 'doSomething(process.env.A)'), + usage('B', 'const x = process.env.B'), + ]; + expect(skipCommentedUsages(usages)).toEqual(usages); + }); + + it('handles empty array', () => { + expect(skipCommentedUsages([])).toEqual([]); + }); +}); From 89482c8f9771b1c67d5b4ca3ed190ff63606747a Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Mon, 25 May 2026 15:04:00 +0200 Subject: [PATCH 3/7] chore(refactor): added unit test file for findConfigFile --- .../unit/core/helpers/findConfigFile.test.ts | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 packages/cli/test/unit/core/helpers/findConfigFile.test.ts diff --git a/packages/cli/test/unit/core/helpers/findConfigFile.test.ts b/packages/cli/test/unit/core/helpers/findConfigFile.test.ts new file mode 100644 index 0000000..53e31b7 --- /dev/null +++ b/packages/cli/test/unit/core/helpers/findConfigFile.test.ts @@ -0,0 +1,90 @@ +import { describe, it, expect, beforeEach, afterEach } from 'vitest'; +import fs from 'fs'; +import path from 'path'; +import os from 'os'; +import { findConfigFile } from '../../../../src/core/helpers/findConfigFile.js'; + +describe('findConfigFile', () => { + let tmpDir: string; + + beforeEach(() => { + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'find-config-test-')); + }); + + afterEach(() => { + fs.rmSync(tmpDir, { recursive: true, force: true }); + }); + + it('returns the path when the config file exists in the given directory', () => { + const file = 'dotenv-diff.config.json'; + fs.writeFileSync(path.join(tmpDir, file), '{}'); + + const result = findConfigFile(tmpDir, file); + + expect(result).toBe(path.resolve(tmpDir, file)); + }); + + it('finds the config file in a parent directory', () => { + const file = 'dotenv-diff.config.json'; + fs.writeFileSync(path.join(tmpDir, file), '{}'); + + const child = path.join(tmpDir, 'subdir'); + fs.mkdirSync(child); + + const result = findConfigFile(child, file); + + expect(result).toBe(path.resolve(tmpDir, file)); + }); + + it('finds the config file multiple levels up', () => { + const file = 'dotenv-diff.config.json'; + fs.writeFileSync(path.join(tmpDir, file), '{}'); + + const deep = path.join(tmpDir, 'a', 'b', 'c'); + fs.mkdirSync(deep, { recursive: true }); + + const result = findConfigFile(deep, file); + + expect(result).toBe(path.resolve(tmpDir, file)); + }); + + it('returns null when the config file does not exist anywhere in the tree', () => { + const child = path.join(tmpDir, 'subdir'); + fs.mkdirSync(child); + + const result = findConfigFile(child, 'nonexistent.config.json'); + + expect(result).toBeNull(); + }); + + it('prefers the config file in the starting directory over a parent one', () => { + const file = 'dotenv-diff.config.json'; + fs.writeFileSync(path.join(tmpDir, file), '{"root":true}'); + + const child = path.join(tmpDir, 'subdir'); + fs.mkdirSync(child); + fs.writeFileSync(path.join(child, file), '{"child":true}'); + + const result = findConfigFile(child, file); + + expect(result).toBe(path.resolve(child, file)); + }); + + it('works with different file names', () => { + const file = 'dotenv-diff.baseline.json'; + fs.writeFileSync(path.join(tmpDir, file), '{}'); + + const result = findConfigFile(tmpDir, file); + + expect(result).toBe(path.resolve(tmpDir, file)); + }); + + it('returns null when starting from a directory with no ancestors containing the file', () => { + // Use a real path that definitely won't have the file + const result = findConfigFile( + os.tmpdir(), + '__nonexistent_config_xyz__.json', + ); + expect(result).toBeNull(); + }); +}); From 27a5949aecc52c05db1af321da2e11425cf00e8e Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Mon, 25 May 2026 16:51:04 +0200 Subject: [PATCH 4/7] chore: fix test --- .../cli/test/unit/core/scan/skipCommentedUsages.test.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/cli/test/unit/core/scan/skipCommentedUsages.test.ts b/packages/cli/test/unit/core/scan/skipCommentedUsages.test.ts index 8348ff3..f3fd4cf 100644 --- a/packages/cli/test/unit/core/scan/skipCommentedUsages.test.ts +++ b/packages/cli/test/unit/core/scan/skipCommentedUsages.test.ts @@ -2,10 +2,8 @@ import { describe, it, expect } from 'vitest'; import { skipCommentedUsages } from '../../../../src/core/scan/skipCommentedUsages.js'; import type { EnvUsage } from '../../../../src/config/types.js'; -const usage = (variable: string, context?: string): EnvUsage => ({ - variable, - context, -}); +const usage = (variable: string, context?: string): EnvUsage => + ({ variable, context }) as EnvUsage; describe('skipCommentedUsages', () => { it('keeps usages without context', () => { From 0d7d447e9604d2b23c960f38bdf69484a295e906 Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Mon, 25 May 2026 17:00:00 +0200 Subject: [PATCH 5/7] chore(refactor): added test for likelymini and normalize path --- .../core/helpers/isLikelyMinified.test.ts | 42 +++++++++++++++++++ .../unit/core/helpers/normalizePath.test.ts | 40 ++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 packages/cli/test/unit/core/helpers/isLikelyMinified.test.ts create mode 100644 packages/cli/test/unit/core/helpers/normalizePath.test.ts diff --git a/packages/cli/test/unit/core/helpers/isLikelyMinified.test.ts b/packages/cli/test/unit/core/helpers/isLikelyMinified.test.ts new file mode 100644 index 0000000..1378a74 --- /dev/null +++ b/packages/cli/test/unit/core/helpers/isLikelyMinified.test.ts @@ -0,0 +1,42 @@ +import { describe, it, expect } from 'vitest'; +import { isLikelyMinified } from '../../../../src/core/helpers/isLikelyMinified.js'; + +describe('isLikelyMinified', () => { + it('returns false for empty string', () => { + expect(isLikelyMinified('')).toBe(false); + }); + + it('returns false for short single-line content', () => { + expect(isLikelyMinified('const x = 1;')).toBe(false); + }); + + it('returns false for multi-line content where all lines are short', () => { + const content = 'const x = 1;\nconst y = 2;\nconst z = 3;'; + expect(isLikelyMinified(content)).toBe(false); + }); + + it('returns true when a line exceeds 500 characters', () => { + const longLine = 'a'.repeat(501); + expect(isLikelyMinified(longLine)).toBe(true); + }); + + it('returns false when a line is exactly 500 characters', () => { + const line = 'a'.repeat(500); + expect(isLikelyMinified(line)).toBe(false); + }); + + it('returns true when only one line in a multi-line string exceeds 500 characters', () => { + const content = 'short line\n' + 'a'.repeat(501) + '\nanother short line'; + expect(isLikelyMinified(content)).toBe(true); + }); + + it('handles Windows-style line endings (CRLF)', () => { + const content = 'short\r\n' + 'a'.repeat(501) + '\r\nshort'; + expect(isLikelyMinified(content)).toBe(true); + }); + + it('returns false for Windows-style line endings where all lines are short', () => { + const content = 'const x = 1;\r\nconst y = 2;\r\n'; + expect(isLikelyMinified(content)).toBe(false); + }); +}); diff --git a/packages/cli/test/unit/core/helpers/normalizePath.test.ts b/packages/cli/test/unit/core/helpers/normalizePath.test.ts new file mode 100644 index 0000000..c627b74 --- /dev/null +++ b/packages/cli/test/unit/core/helpers/normalizePath.test.ts @@ -0,0 +1,40 @@ +import { describe, it, expect } from 'vitest'; +import { normalizePath } from '../../../../src/core/helpers/normalizePath.js'; + +describe('normalizePath', () => { + it('returns forward-slash paths unchanged', () => { + expect(normalizePath('src/core/helpers/normalizePath.ts')).toBe( + 'src/core/helpers/normalizePath.ts', + ); + }); + + it('converts backslashes to forward slashes', () => { + expect(normalizePath('src\\core\\helpers\\normalizePath.ts')).toBe( + 'src/core/helpers/normalizePath.ts', + ); + }); + + it('converts mixed slashes to forward slashes', () => { + expect(normalizePath('src/core\\helpers/file.ts')).toBe( + 'src/core/helpers/file.ts', + ); + }); + + it('handles Windows absolute paths', () => { + expect(normalizePath('C:\\Users\\user\\project\\file.ts')).toBe( + 'C:/Users/user/project/file.ts', + ); + }); + + it('returns empty string unchanged', () => { + expect(normalizePath('')).toBe(''); + }); + + it('handles a single backslash', () => { + expect(normalizePath('\\')).toBe('/'); + }); + + it('handles paths with no slashes', () => { + expect(normalizePath('file.ts')).toBe('file.ts'); + }); +}); From ab062a9459f4d30c857f04a82d1196886b0877bd Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Mon, 25 May 2026 17:08:53 +0200 Subject: [PATCH 6/7] chore: add parseEnvFile test --- .../test/unit/services/parseEnvFile.test.ts | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 packages/cli/test/unit/services/parseEnvFile.test.ts diff --git a/packages/cli/test/unit/services/parseEnvFile.test.ts b/packages/cli/test/unit/services/parseEnvFile.test.ts new file mode 100644 index 0000000..2e997aa --- /dev/null +++ b/packages/cli/test/unit/services/parseEnvFile.test.ts @@ -0,0 +1,61 @@ +import { describe, it, expect, beforeEach, afterEach } from 'vitest'; +import fs from 'fs'; +import path from 'path'; +import os from 'os'; +import { parseEnvFile } from '../../../src/services/parseEnvFile.js'; + +describe('parseEnvFile', () => { + let tmpDir: string; + + beforeEach(() => { + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'parse-env-file-test-')); + }); + + afterEach(() => { + fs.rmSync(tmpDir, { recursive: true, force: true }); + }); + + it('parses a valid .env file into key-value pairs', () => { + const file = path.join(tmpDir, '.env'); + fs.writeFileSync(file, 'API_KEY=abc123\nDB_HOST=localhost\n'); + + expect(parseEnvFile(file)).toEqual({ + API_KEY: 'abc123', + DB_HOST: 'localhost', + }); + }); + + it('returns an empty object for an empty file', () => { + const file = path.join(tmpDir, '.env'); + fs.writeFileSync(file, ''); + + expect(parseEnvFile(file)).toEqual({}); + }); + + it('returns an empty object when the file does not exist', () => { + const file = path.join(tmpDir, 'nonexistent.env'); + + expect(parseEnvFile(file)).toEqual({}); + }); + + it('preserves quoted values as-is (quotes are not stripped)', () => { + const file = path.join(tmpDir, '.env'); + fs.writeFileSync(file, 'SECRET="my secret value"\n'); + + expect(parseEnvFile(file)).toEqual({ SECRET: '"my secret value"' }); + }); + + it('ignores comment lines', () => { + const file = path.join(tmpDir, '.env'); + fs.writeFileSync(file, '# This is a comment\nKEY=value\n'); + + expect(parseEnvFile(file)).toEqual({ KEY: 'value' }); + }); + + it('handles keys with empty values', () => { + const file = path.join(tmpDir, '.env'); + fs.writeFileSync(file, 'EMPTY=\n'); + + expect(parseEnvFile(file)).toEqual({ EMPTY: '' }); + }); +}); From 79e879e298b45a7b880b7d8862c7dcbf47a0367c Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Mon, 25 May 2026 17:39:59 +0200 Subject: [PATCH 7/7] chore(refactor): moved fixEnv til servires from core --- packages/cli/src/cli/run.ts | 1 + packages/cli/src/commands/compare.ts | 2 +- packages/cli/src/{core => services}/fixEnv.ts | 2 +- packages/cli/src/services/processComparisonFile.ts | 2 +- packages/cli/test/unit/commands/compare.test.ts | 4 ++-- packages/cli/test/unit/{core => services}/fixEnv.test.ts | 2 +- packages/cli/test/unit/services/processComparisonFile.test.ts | 4 ++-- 7 files changed, 9 insertions(+), 8 deletions(-) rename packages/cli/src/{core => services}/fixEnv.ts (98%) rename packages/cli/test/unit/{core => services}/fixEnv.test.ts (99%) diff --git a/packages/cli/src/cli/run.ts b/packages/cli/src/cli/run.ts index 1146098..1d4ad69 100644 --- a/packages/cli/src/cli/run.ts +++ b/packages/cli/src/cli/run.ts @@ -48,6 +48,7 @@ export async function run(program: Command): Promise { // Normalize merged options const opts = normalizeOptions(mergedRawOptions); + // set up global config (e.g. chalk for noColor) setupGlobalConfig(opts); // Handle --explain flag diff --git a/packages/cli/src/commands/compare.ts b/packages/cli/src/commands/compare.ts index c3c93a0..0220430 100644 --- a/packages/cli/src/commands/compare.ts +++ b/packages/cli/src/commands/compare.ts @@ -13,7 +13,7 @@ import type { } from '../config/types.js'; import { parseAndFilterEnv } from '../core/compare/parseAndFilterEnv.js'; import { updateTotals } from '../core/compare/updateTotals.js'; -import { applyFixes } from '../core/fixEnv.js'; +import { applyFixes } from '../services/fixEnv.js'; import { printFixTips } from '../ui/shared/printFixTips.js'; import { printStats } from '../ui/compare/printStats.js'; import { printDuplicates } from '../ui/shared/printDuplicates.js'; diff --git a/packages/cli/src/core/fixEnv.ts b/packages/cli/src/services/fixEnv.ts similarity index 98% rename from packages/cli/src/core/fixEnv.ts rename to packages/cli/src/services/fixEnv.ts index c972786..5c92b75 100644 --- a/packages/cli/src/core/fixEnv.ts +++ b/packages/cli/src/services/fixEnv.ts @@ -1,6 +1,6 @@ import fs from 'fs'; import path from 'path'; -import { isEnvIgnoredByGit, isGitRepo, findGitRoot } from '../services/git.js'; +import { isEnvIgnoredByGit, isGitRepo, findGitRoot } from './git.js'; import { DEFAULT_GITIGNORE_ENV_PATTERNS } from '../config/constants.js'; import type { FixResult } from '../config/types.js'; diff --git a/packages/cli/src/services/processComparisonFile.ts b/packages/cli/src/services/processComparisonFile.ts index c5b5dcd..ffa66ac 100644 --- a/packages/cli/src/services/processComparisonFile.ts +++ b/packages/cli/src/services/processComparisonFile.ts @@ -3,7 +3,7 @@ import { parseEnvFile } from './parseEnvFile.js'; import { filterIgnoredKeys } from '../core/helpers/filterIgnoredKeys.js'; import { compareWithEnvFiles } from '../core/scan/compareScan.js'; import { findDuplicateKeys } from '../core/duplicates.js'; -import { applyFixes } from '../core/fixEnv.js'; +import { applyFixes } from './fixEnv.js'; import { toUpperSnakeCase } from '../core/helpers/toUpperSnakeCase.js'; import { resolveFromCwd } from '../core/helpers/resolveFromCwd.js'; import { detectEnvExpirations } from './detectEnvExpirations.js'; diff --git a/packages/cli/test/unit/commands/compare.test.ts b/packages/cli/test/unit/commands/compare.test.ts index 92fbaec..6ad02be 100644 --- a/packages/cli/test/unit/commands/compare.test.ts +++ b/packages/cli/test/unit/commands/compare.test.ts @@ -34,7 +34,7 @@ vi.mock('../../../src/core/compare/updateTotals.js', () => ({ updateTotals: vi.fn(() => false), })); -vi.mock('../../../src/core/fixEnv.js', () => ({ +vi.mock('../../../src/services/fixEnv.js', () => ({ applyFixes: vi.fn(), })); @@ -84,7 +84,7 @@ import { checkGitignoreStatus } from '../../../src/services/git.js'; import { findDuplicateKeys } from '../../../src/core/duplicates.js'; import { filterIgnoredKeys } from '../../../src/core/helpers/filterIgnoredKeys.js'; import { updateTotals } from '../../../src/core/compare/updateTotals.js'; -import { applyFixes } from '../../../src/core/fixEnv.js'; +import { applyFixes } from '../../../src/services/fixEnv.js'; import { printFixTips } from '../../../src/ui/shared/printFixTips.js'; import { printStats } from '../../../src/ui/compare/printStats.js'; import { printDuplicates } from '../../../src/ui/shared/printDuplicates.js'; diff --git a/packages/cli/test/unit/core/fixEnv.test.ts b/packages/cli/test/unit/services/fixEnv.test.ts similarity index 99% rename from packages/cli/test/unit/core/fixEnv.test.ts rename to packages/cli/test/unit/services/fixEnv.test.ts index 8343d86..b5043a7 100644 --- a/packages/cli/test/unit/core/fixEnv.test.ts +++ b/packages/cli/test/unit/services/fixEnv.test.ts @@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach } from 'vitest'; import fs from 'fs'; import path from 'path'; import os from 'os'; -import { applyFixes } from '../../../src/core/fixEnv.js'; +import { applyFixes } from '../../../src/services/fixEnv.js'; // helper to create temp files function makeTempFile(name: string, content: string): string { diff --git a/packages/cli/test/unit/services/processComparisonFile.test.ts b/packages/cli/test/unit/services/processComparisonFile.test.ts index 00e7952..7b5b7a4 100644 --- a/packages/cli/test/unit/services/processComparisonFile.test.ts +++ b/packages/cli/test/unit/services/processComparisonFile.test.ts @@ -27,7 +27,7 @@ vi.mock('../../../src/core/duplicates.js', () => ({ findDuplicateKeys: vi.fn(() => [{ key: 'A', count: 2 }]), })); -vi.mock('../../../src/core/fixEnv.js', () => ({ +vi.mock('../../../src/services/fixEnv.js', () => ({ applyFixes: vi.fn(() => ({ changed: true, result: { @@ -58,7 +58,7 @@ vi.mock('../../../src/core/detectInconsistentNaming.js', () => ({ import fs from 'fs'; import { processComparisonFile } from '../../../src/services/processComparisonFile.js'; -import { applyFixes } from '../../../src/core/fixEnv.js'; +import { applyFixes } from '../../../src/services/fixEnv.js'; import { parseEnvFile } from '../../../src/services/parseEnvFile.js'; import { findDuplicateKeys } from '../../../src/core/duplicates.js'; import { resolveFromCwd } from '../../../src/core/helpers/resolveFromCwd.js';