mirror of
https://github.com/di-sukharev/opencommit.git
synced 2026-04-20 03:02:51 -04:00
* test: ✅ add the first E2E test and configuration to CI (#316) * add tests * Add push config (#220) * feat: add instructions and support for configuring gpt-4-turbo (#320) * 3.0.12 * build * feat: add 'gpt-4-turbo' to supported models in README and config validation --------- Co-authored-by: di-sukharev <dim.sukharev@gmail.com> * ✅ fix the broken E2E tests due to the addition of OCO_GITPUSH (#321) * test(oneFile.test.ts): update test expectations to match new push prompt text * build * Feat: Add Claude 3 support (#318) * 3.0.12 * build * feat: anthropic claude 3 support * fix: add system prompt * fix: type check * fix: package version * fix: update anthropic for dependency bug fix * feat: update build files * feat: update version number --------- Co-authored-by: di-sukharev <dim.sukharev@gmail.com> * 🐛bug fix: enable to use the new format of OpenAI's project API Key (#328) * fix(config.ts): remove validation for OCO_OPENAI_API_KEY length to accommodate variable key lengths * build * ♻️ refactor(config.ts): Addition of UnitTest environment and unittest for commands/config.ts#getConfig (#330) * feat(jest.config.ts): update jest preset for TS ESM support and ignore patterns feat(package.json): add test:unit script with NODE_OPTIONS for ESM refactor(src/commands/config.ts): improve dotenv usage with dynamic paths feat(src/commands/config.ts): allow custom config and env paths in getConfig refactor(src/commands/config.ts): streamline environment variable access feat(test/unit): add unit tests for config handling and utility functions - Implement unit tests for `getConfig` function to ensure correct behavior in various scenarios including default values, global config, and local env file precedence. - Add utility function `prepareFile` for creating temporary files during tests, facilitating testing of file-based configurations. * feat(e2e.yml): add unit-test job to GitHub Actions for running unit tests on pull requests * ci(test.yml): add GitHub Actions workflow for unit and e2e tests on pull requests * refactor(config.ts): streamline environment variable access using process.env directly test(config.test.ts): add setup and teardown for environment variables in tests to ensure test isolation * feat(package.json): add `test:all` script to run all tests in Docker refactor(package.json): consolidate Docker build steps into `test:docker-build` script for DRY principle fix(package.json): ensure `test:unit:docker` and `test:e2e:docker` scripts use the same Docker image and remove container after run chore(test/Dockerfile): remove default CMD to allow dynamic test script execution in Docker * refactor(config.test.ts): anonymize API keys in tests for better security practices * feat(config.test.ts): add tests for OCO_ANTHROPIC_API_KEY configuration * refactor(config.ts): streamline path imports and remove unused DotenvParseOutput - Simplify path module imports by removing default import and using named imports for `pathJoin` and `pathResolve`. - Remove unused `DotenvParseOutput` import to clean up the code. * refactor(config.test.ts): simplify API key mock values for clarity in tests * test(config.test.ts): remove tests for default config values and redundant cases - Removed tests that checked for default config values when no config or env files are present, as these scenarios are now handled differently. - Eliminated tests for empty global config and local env files to streamline testing focus on actual config loading logic. - Removed test for prioritizing local env over global config due to changes in config loading strategy, simplifying the configuration management. * new version --------- Co-authored-by: Takanori Matsumoto <matscube@gmail.com> Co-authored-by: Moret84 <aurelienrivet@hotmail.fr> Co-authored-by: yowatari <4982161+YOwatari@users.noreply.github.com> Co-authored-by: metavind <94786679+metavind@users.noreply.github.com>
106 lines
3.4 KiB
TypeScript
106 lines
3.4 KiB
TypeScript
import { getConfig } from '../../src/commands/config';
|
|
import { prepareFile } from './utils';
|
|
|
|
describe('getConfig', () => {
|
|
const originalEnv = { ...process.env };
|
|
function resetEnv(env: NodeJS.ProcessEnv) {
|
|
Object.keys(process.env).forEach((key) => {
|
|
if (!(key in env)) {
|
|
delete process.env[key];
|
|
} else {
|
|
process.env[key] = env[key];
|
|
}
|
|
});
|
|
}
|
|
|
|
beforeEach(() => {
|
|
resetEnv(originalEnv);
|
|
});
|
|
|
|
afterAll(() => {
|
|
resetEnv(originalEnv);
|
|
});
|
|
|
|
it('return config values from the global config file', async () => {
|
|
const configFile = await prepareFile(
|
|
'.opencommit',
|
|
`
|
|
OCO_OPENAI_API_KEY="sk-key"
|
|
OCO_ANTHROPIC_API_KEY="secret-key"
|
|
OCO_TOKENS_MAX_INPUT="8192"
|
|
OCO_TOKENS_MAX_OUTPUT="1000"
|
|
OCO_OPENAI_BASE_PATH="/openai/api"
|
|
OCO_DESCRIPTION="true"
|
|
OCO_EMOJI="true"
|
|
OCO_MODEL="gpt-4"
|
|
OCO_LANGUAGE="de"
|
|
OCO_MESSAGE_TEMPLATE_PLACEHOLDER="$m"
|
|
OCO_PROMPT_MODULE="@commitlint"
|
|
OCO_AI_PROVIDER="ollama"
|
|
OCO_GITPUSH="false"
|
|
OCO_ONE_LINE_COMMIT="true"
|
|
`
|
|
);
|
|
const config = getConfig({ configPath: configFile.filePath, envPath: '' });
|
|
|
|
expect(config).not.toEqual(null);
|
|
expect(config!['OCO_OPENAI_API_KEY']).toEqual('sk-key');
|
|
expect(config!['OCO_ANTHROPIC_API_KEY']).toEqual('secret-key');
|
|
expect(config!['OCO_TOKENS_MAX_INPUT']).toEqual(8192);
|
|
expect(config!['OCO_TOKENS_MAX_OUTPUT']).toEqual(1000);
|
|
expect(config!['OCO_OPENAI_BASE_PATH']).toEqual('/openai/api');
|
|
expect(config!['OCO_DESCRIPTION']).toEqual(true);
|
|
expect(config!['OCO_EMOJI']).toEqual(true);
|
|
expect(config!['OCO_MODEL']).toEqual('gpt-4');
|
|
expect(config!['OCO_LANGUAGE']).toEqual('de');
|
|
expect(config!['OCO_MESSAGE_TEMPLATE_PLACEHOLDER']).toEqual('$m');
|
|
expect(config!['OCO_PROMPT_MODULE']).toEqual('@commitlint');
|
|
expect(config!['OCO_AI_PROVIDER']).toEqual('ollama');
|
|
expect(config!['OCO_GITPUSH']).toEqual(false);
|
|
expect(config!['OCO_ONE_LINE_COMMIT']).toEqual(true);
|
|
|
|
await configFile.cleanup();
|
|
});
|
|
|
|
it('return config values from the local env file', async () => {
|
|
const envFile = await prepareFile(
|
|
'.env',
|
|
`
|
|
OCO_OPENAI_API_KEY="sk-key"
|
|
OCO_ANTHROPIC_API_KEY="secret-key"
|
|
OCO_TOKENS_MAX_INPUT="8192"
|
|
OCO_TOKENS_MAX_OUTPUT="1000"
|
|
OCO_OPENAI_BASE_PATH="/openai/api"
|
|
OCO_DESCRIPTION="true"
|
|
OCO_EMOJI="true"
|
|
OCO_MODEL="gpt-4"
|
|
OCO_LANGUAGE="de"
|
|
OCO_MESSAGE_TEMPLATE_PLACEHOLDER="$m"
|
|
OCO_PROMPT_MODULE="@commitlint"
|
|
OCO_AI_PROVIDER="ollama"
|
|
OCO_GITPUSH="false"
|
|
OCO_ONE_LINE_COMMIT="true"
|
|
`
|
|
);
|
|
const config = getConfig({ configPath: '', envPath: envFile.filePath });
|
|
|
|
expect(config).not.toEqual(null);
|
|
expect(config!['OCO_OPENAI_API_KEY']).toEqual('sk-key');
|
|
expect(config!['OCO_ANTHROPIC_API_KEY']).toEqual('secret-key');
|
|
expect(config!['OCO_TOKENS_MAX_INPUT']).toEqual(8192);
|
|
expect(config!['OCO_TOKENS_MAX_OUTPUT']).toEqual(1000);
|
|
expect(config!['OCO_OPENAI_BASE_PATH']).toEqual('/openai/api');
|
|
expect(config!['OCO_DESCRIPTION']).toEqual(true);
|
|
expect(config!['OCO_EMOJI']).toEqual(true);
|
|
expect(config!['OCO_MODEL']).toEqual('gpt-4');
|
|
expect(config!['OCO_LANGUAGE']).toEqual('de');
|
|
expect(config!['OCO_MESSAGE_TEMPLATE_PLACEHOLDER']).toEqual('$m');
|
|
expect(config!['OCO_PROMPT_MODULE']).toEqual('@commitlint');
|
|
expect(config!['OCO_AI_PROVIDER']).toEqual('ollama');
|
|
expect(config!['OCO_GITPUSH']).toEqual(false);
|
|
expect(config!['OCO_ONE_LINE_COMMIT']).toEqual(true);
|
|
|
|
await envFile.cleanup();
|
|
});
|
|
});
|