diff --git a/packages/twenty-cli/.env.e2e b/packages/twenty-cli/.env.e2e deleted file mode 100644 index 0f92e2be146..00000000000 --- a/packages/twenty-cli/.env.e2e +++ /dev/null @@ -1,4 +0,0 @@ -TWENTY_API_URL=http://localhost:3000 -# APPLE_JANE_ADMIN_ACCESS_TOKEN -TWENTY_API_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ1c2VySWQiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ3b3Jrc3BhY2VJZCI6IjIwMjAyMDIwLTFjMjUtNGQwMi1iZjI1LTZhZWNjZjdlYTQxOSIsIndvcmtzcGFjZU1lbWJlcklkIjoiMjAyMDIwMjAtNDYzZi00MzViLTgyOGMtMTA3ZTAwN2EyNzExIiwidXNlcldvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWU3Yy00M2Q5LWE1ZGItNjg1YjUwNjlkODE2IiwidHlwZSI6IkFDQ0VTUyIsImF1dGhQcm92aWRlciI6InBhc3N3b3JkIiwiaWF0IjoxNzUxMjgxNzA0LCJleHAiOjIwNjY4NTc3MDR9.HMGqCsVlOAPVUBhKSGlD1X86VoHKt4LIUtET3CGIdik -TWENTY_DEFAULT_APP=e2e-default-app diff --git a/packages/twenty-cli/jest.e2e.config.ts b/packages/twenty-cli/jest.e2e.config.ts index a5c8c433964..8f117ea31bc 100644 --- a/packages/twenty-cli/jest.e2e.config.ts +++ b/packages/twenty-cli/jest.e2e.config.ts @@ -14,6 +14,7 @@ const jestConfig: JestConfigWithTsJest = { testRegex: '\\.e2e-spec\\.ts$', modulePathIgnorePatterns: ['/dist'], globalTeardown: '/src/__tests__/e2e/teardown.ts', + setupFilesAfterEnv: ['/src/__tests__/e2e/setupTest.ts'], testTimeout: 30000, // 30 seconds timeout for e2e tests maxWorkers: 1, transform: { diff --git a/packages/twenty-cli/package.json b/packages/twenty-cli/package.json index 7c4011a2e56..f8b0f848734 100644 --- a/packages/twenty-cli/package.json +++ b/packages/twenty-cli/package.json @@ -1,6 +1,6 @@ { "name": "twenty-cli", - "version": "0.1.3", + "version": "0.2.0", "description": "Command-line interface for Twenty application development", "main": "dist/cli.js", "bin": { diff --git a/packages/twenty-cli/src/__tests__/e2e/constants/testConfig.ts b/packages/twenty-cli/src/__tests__/e2e/constants/testConfig.ts new file mode 100644 index 00000000000..9335c60f9ea --- /dev/null +++ b/packages/twenty-cli/src/__tests__/e2e/constants/testConfig.ts @@ -0,0 +1,8 @@ +import { TwentyConfig } from '../../../types/config.types'; + +export const testConfig: TwentyConfig = { + apiUrl: 'http://localhost:3000', + apiKey: + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ1c2VySWQiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ3b3Jrc3BhY2VJZCI6IjIwMjAyMDIwLTFjMjUtNGQwMi1iZjI1LTZhZWNjZjdlYTQxOSIsIndvcmtzcGFjZU1lbWJlcklkIjoiMjAyMDIwMjAtNDYzZi00MzViLTgyOGMtMTA3ZTAwN2EyNzExIiwidXNlcldvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWU3Yy00M2Q5LWE1ZGItNjg1YjUwNjlkODE2IiwidHlwZSI6IkFDQ0VTUyIsImF1dGhQcm92aWRlciI6InBhc3N3b3JkIiwiaWF0IjoxNzUxMjgxNzA0LCJleHAiOjIwNjY4NTc3MDR9.HMGqCsVlOAPVUBhKSGlD1X86VoHKt4LIUtET3CGIdik', + defaultApp: 'e2e-default-app', +}; diff --git a/packages/twenty-cli/src/__tests__/e2e/setupTest.ts b/packages/twenty-cli/src/__tests__/e2e/setupTest.ts new file mode 100644 index 00000000000..54ec3ecb72a --- /dev/null +++ b/packages/twenty-cli/src/__tests__/e2e/setupTest.ts @@ -0,0 +1,12 @@ +import { ConfigService } from '../../services/config.service'; +import { testConfig } from './constants/testConfig'; + +beforeAll(() => { + jest + .spyOn(ConfigService.prototype, 'getConfig') + .mockResolvedValue(testConfig); +}); + +afterAll(() => { + jest.restoreAllMocks(); +}); diff --git a/packages/twenty-cli/src/services/config.service.ts b/packages/twenty-cli/src/services/config.service.ts index 8707efcd18a..2643faca843 100644 --- a/packages/twenty-cli/src/services/config.service.ts +++ b/packages/twenty-cli/src/services/config.service.ts @@ -1,40 +1,19 @@ -import { config as loadDotenv } from 'dotenv'; import * as fs from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; import { TwentyConfig } from '../types/config.types'; export class ConfigService { - private configPath: string; + private readonly configPath: string; constructor() { this.configPath = path.join(os.homedir(), '.twenty', 'config.json'); - this.loadEnvironmentVariables(); - } - - private loadEnvironmentVariables(): void { - // Load local .env file if it exists in current working directory - const localEnvPath = path.join( - process.cwd(), - process.env.NODE_ENV === 'test' ? '.env.e2e' : '.env', - ); - if (fs.existsSync(localEnvPath)) { - loadDotenv({ path: localEnvPath }); - } - - // Also try to load from user's home .twenty directory - const userEnvPath = path.join(os.homedir(), '.twenty', '.env'); - if (fs.existsSync(userEnvPath)) { - loadDotenv({ path: userEnvPath }); - } } async getConfig(): Promise { try { - // Start with default config const defaultConfig = this.getDefaultConfig(); - // Load config file if it exists let fileConfig = {}; await fs.ensureFile(this.configPath); const configExists = await fs.pathExists(this.configPath); @@ -45,14 +24,9 @@ export class ConfigService { fileConfig = JSON.parse(configContent || '{}'); } - // Environment variables override everything - const envConfig = this.getEnvironmentConfig(); - - // Merge configs with proper precedence: defaults < file < environment return { ...defaultConfig, ...fileConfig, - ...envConfig, }; } catch { return this.getDefaultConfig(); @@ -79,22 +53,4 @@ export class ConfigService { apiUrl: 'http://localhost:3000', }; } - - private getEnvironmentConfig(): Partial { - const envConfig: Partial = {}; - - if (process.env.TWENTY_API_URL) { - envConfig.apiUrl = process.env.TWENTY_API_URL; - } - - if (process.env.TWENTY_API_KEY) { - envConfig.apiKey = process.env.TWENTY_API_KEY; - } - - if (process.env.TWENTY_DEFAULT_APP) { - envConfig.defaultApp = process.env.TWENTY_DEFAULT_APP; - } - - return envConfig; - } }