diff --git a/src/lib/PostgresMetaRoles.ts b/src/lib/PostgresMetaRoles.ts index f25a851d..ecabea2a 100644 --- a/src/lib/PostgresMetaRoles.ts +++ b/src/lib/PostgresMetaRoles.ts @@ -24,8 +24,8 @@ export function changeRoleConfig2Object(config: string[]) { return null } return config.reduce((acc: any, cur) => { - const [key, value] = cur.split('=') - acc[key] = value + const [key, ...rest] = cur.split('=') + acc[key] = rest.length > 0 ? rest.join('=') : undefined return acc }, {}) } diff --git a/test/role-config.test.ts b/test/role-config.test.ts new file mode 100644 index 00000000..d2b2f071 --- /dev/null +++ b/test/role-config.test.ts @@ -0,0 +1,30 @@ +import { expect, test, describe } from 'vitest' +import { changeRoleConfig2Object } from '../src/lib/PostgresMetaRoles.js' + +describe('changeRoleConfig2Object', () => { + test('keeps everything after the first equals sign', () => { + expect(changeRoleConfig2Object(['application_name=api=worker'])).toStrictEqual({ + application_name: 'api=worker', + }) + }) + + test('parses ordinary values unchanged', () => { + expect(changeRoleConfig2Object(['search_path=public'])).toStrictEqual({ + search_path: 'public', + }) + }) + + test('handles both kinds of entry together', () => { + expect( + changeRoleConfig2Object(['application_name=api=worker', 'search_path=public']) + ).toStrictEqual({ application_name: 'api=worker', search_path: 'public' }) + }) + + test('an entry without an equals sign has no value', () => { + expect(changeRoleConfig2Object(['lone_key'])).toStrictEqual({ lone_key: undefined }) + }) + + test('returns null when there is no config', () => { + expect(changeRoleConfig2Object(null as unknown as string[])).toBeNull() + }) +})