import { test } from 'node:test' import assert from 'node:assert/strict' import { parseEnv } from './apply-ddl.mjs' test('parseEnv ignores comments, trims, keeps special chars literally', () => { const env = parseEnv('# c\nDB_PASS=p@ss$word!\nDB_NAME = erp \n') assert.equal(env.DB_PASS, 'p@ss$word!') assert.equal(env.DB_NAME, 'erp') }) test('parseEnv does NOT expand variables', () => { const env = parseEnv('A=1\nB=${A}\nC=$A\nD=$(whoami)\nE=`id`\n') assert.equal(env.B, '${A}') assert.equal(env.C, '$A') assert.equal(env.D, '$(whoami)') assert.equal(env.E, '`id`') }) test('parseEnv skips blank lines and comment lines', () => { const env = parseEnv('\n \n# comment\nK=v\n # indented comment\n') assert.deepEqual(Object.keys(env), ['K']) assert.equal(env.K, 'v') }) test('parseEnv strips one layer of matching quotes', () => { const env = parseEnv(`Q1="hello world"\nQ2='a=b=c'\nQ3="$keep"\n`) assert.equal(env.Q1, 'hello world') assert.equal(env.Q2, 'a=b=c') assert.equal(env.Q3, '$keep') }) test('parseEnv keeps = signs inside the value', () => { const env = parseEnv('URL=mysql://u:p@h:3306/db?x=1&y=2\n') assert.equal(env.URL, 'mysql://u:p@h:3306/db?x=1&y=2') }) test('parseEnv strips an optional leading export', () => { const env = parseEnv('export DB_USER=root\n') assert.equal(env.DB_USER, 'root') }) test('parseEnv tolerates CRLF line endings', () => { const env = parseEnv('A=1\r\nB=2\r\n') assert.equal(env.A, '1') assert.equal(env.B, '2') }) test('parseEnv ignores lines without an = sign', () => { const env = parseEnv('NOEQUALS\nK=v\n') assert.deepEqual(Object.keys(env), ['K']) }) test('parseEnv on empty / non-string input returns empty object', () => { assert.deepEqual(parseEnv(''), {}) assert.deepEqual(parseEnv(undefined), {}) assert.deepEqual(parseEnv(null), {}) })