import assert from 'node:assert/strict'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import test from 'node:test'; import { loadConfig } from './config.ts'; function createTempProjectRoot(prefix: string) { return fs.mkdtempSync(path.join(os.tmpdir(), prefix)); } test('development config auto-enables aliyun sms auth when local credentials are provided', () => { const projectRoot = createTempProjectRoot('genarrative-config-dev-'); fs.writeFileSync( path.join(projectRoot, '.env.example'), 'SMS_AUTH_ENABLED=\"false\"\nSMS_AUTH_PROVIDER=\"aliyun\"\n', 'utf8', ); fs.writeFileSync( path.join(projectRoot, '.env.local'), 'ALIYUN_SMS_ACCESS_KEY_ID=\"test-ak\"\nALIYUN_SMS_ACCESS_KEY_SECRET=\"test-sk\"\n', 'utf8', ); const config = loadConfig({ projectRoot, env: { NODE_ENV: 'development', }, }); assert.equal(config.smsAuth.enabled, true); assert.equal(config.smsAuth.provider, 'aliyun'); assert.equal(config.smsAuth.accessKeyId, 'test-ak'); assert.equal(config.smsAuth.accessKeySecret, 'test-sk'); }); test('development config respects explicit local sms auth overrides', () => { const projectRoot = createTempProjectRoot('genarrative-config-local-'); fs.writeFileSync( path.join(projectRoot, '.env.example'), 'SMS_AUTH_ENABLED=\"false\"\nSMS_AUTH_PROVIDER=\"aliyun\"\n', 'utf8', ); fs.writeFileSync( path.join(projectRoot, '.env.local'), 'SMS_AUTH_ENABLED=\"false\"\nSMS_AUTH_PROVIDER=\"aliyun\"\nALIYUN_SMS_ACCESS_KEY_ID=\"test-ak\"\nALIYUN_SMS_ACCESS_KEY_SECRET=\"test-sk\"\n', 'utf8', ); const config = loadConfig({ projectRoot, env: { NODE_ENV: 'development', }, }); assert.equal(config.smsAuth.enabled, false); assert.equal(config.smsAuth.provider, 'aliyun'); });