apply-ddl.test.mjs 2.61 KB
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/)
})