#!/usr/bin/env node 'use strict'; const assert = require('assert'); const { cookieOpts } = require('../services/authService'); function withEnv(values, fn) { const saved = {}; for (const key of Object.keys(values)) { saved[key] = process.env[key]; if (values[key] === undefined) delete process.env[key]; else process.env[key] = values[key]; } try { fn(); } finally { for (const [key, value] of Object.entries(saved)) { if (value === undefined) delete process.env[key]; else process.env[key] = value; } } } function req(headers = {}, secure = false) { return { secure, headers, get(name) { return headers[String(name).toLowerCase()]; }, }; } withEnv({ NODE_ENV: 'production', HTTPS: undefined, COOKIE_SECURE: undefined }, () => { assert.strictEqual(cookieOpts(req()).secure, false, 'production over plain HTTP should not force Secure cookies'); }); withEnv({ HTTPS: 'true', COOKIE_SECURE: undefined }, () => { assert.strictEqual(cookieOpts(req()).secure, true, 'HTTPS=true should force Secure cookies'); }); withEnv({ HTTPS: 'true', COOKIE_SECURE: 'false' }, () => { assert.strictEqual(cookieOpts(req()).secure, false, 'COOKIE_SECURE=false should override HTTPS=true'); }); withEnv({ HTTPS: undefined, COOKIE_SECURE: undefined }, () => { assert.strictEqual(cookieOpts(req({ 'x-forwarded-proto': 'https' })).secure, true, 'HTTPS proxy requests should use Secure cookies'); }); console.log('Cookie option tests passed.');