import { test } from 'node:test' import assert from 'node:assert/strict' import { dbEnvFromConfig, resolveDbConfig } from './apply-ddl.mjs' // ── dbEnvFromConfig(config-vars.yaml database: → DB_* env-shape adapter)── test('dbEnvFromConfig maps the database section to the DB_* shape', () => { const env = dbEnvFromConfig({ database: { host: 'db.local', port: 3307, user: 'u', password: 'p@ss', schema: 'erp_test' }, }) assert.equal(env.DB_HOST, 'db.local') assert.equal(env.DB_PORT, '3307') // coerced to string for resolveDbConfig assert.equal(env.DB_USER, 'u') assert.equal(env.DB_PASSWORD, 'p@ss') assert.equal(env.DB_SCHEMA, 'erp_test') }) test('dbEnvFromConfig tolerates a missing/empty config', () => { assert.equal(dbEnvFromConfig({}).DB_HOST, undefined) assert.equal(dbEnvFromConfig(null).DB_SCHEMA, undefined) }) test('dbEnvFromConfig → resolveDbConfig round-trips a filled database section', () => { const c = resolveDbConfig(dbEnvFromConfig({ database: { host: 'localhost', port: 3306, schema: 'erp_dev' } })) assert.equal(c.host, 'localhost') assert.equal(c.port, 3306) assert.equal(c.database, 'erp_dev') }) // ── resolveDbConfig(M1:DB_SCHEMA 是插件契约的 schema 键)───────── test('resolveDbConfig maps DB_SCHEMA to database (plugin canonical key)', () => { const c = resolveDbConfig({ DB_SCHEMA: 'erp_test', DB_USER: 'u', DB_PASS: 'p', DB_HOST: 'db.local', DB_PORT: '3307' }) assert.equal(c.database, 'erp_test') assert.equal(c.host, 'db.local') assert.equal(c.port, 3307) assert.equal(c.user, 'u') assert.equal(c.password, 'p') }) test('resolveDbConfig honors DB_NAME / MYSQL_DATABASE aliases', () => { assert.equal(resolveDbConfig({ DB_NAME: 'a' }).database, 'a') assert.equal(resolveDbConfig({ MYSQL_DATABASE: 'b' }).database, 'b') // DB_SCHEMA wins over aliases assert.equal(resolveDbConfig({ DB_SCHEMA: 's', DB_NAME: 'a' }).database, 's') }) test('resolveDbConfig fails closed when no schema key is present (M1)', () => { assert.throws(() => resolveDbConfig({ DB_USER: 'root' }, 'config-vars.yaml'), /database\.schema/) }) test('resolveDbConfig applies sane defaults for host/port/user/password', () => { const c = resolveDbConfig({ DB_SCHEMA: 's' }) assert.equal(c.host, '127.0.0.1') assert.equal(c.port, 3306) assert.equal(c.user, 'root') assert.equal(c.password, '') }) test('resolveDbConfig rejects invalid ports', () => { assert.throws(() => resolveDbConfig({ DB_SCHEMA: 'erp_test', DB_PORT: 'abc' }), /database\.port/) assert.throws(() => resolveDbConfig({ DB_SCHEMA: 'erp_test', DB_PORT: '70000' }), /database\.port/) })