import { describe, it, expect } from 'vitest'; import { resolveDeploymentServing, replaceAssetPathsWithDeploymentPrefix, } from '../deployment-paths'; const APP = 'https://inst-1.oswstudio.com'; const ID = 'abc123'; describe('resolveDeploymentServing (issue #14)', () => { it('serves at root for a custom domain regardless of proxy/slug', () => { const r = resolveDeploymentServing( { customDomain: 'sweets.com', slug: 'fine-bird-flame' }, ID, { staticProxyEnabled: false, appUrl: APP } ); expect(r.servedAtRoot).toBe(true); expect(r.baseUrl).toBe('https://sweets.com'); }); it('serves at the subdomain root when the static proxy is on and a slug exists', () => { const r = resolveDeploymentServing( { slug: 'fine-bird-flame' }, ID, { staticProxyEnabled: true, appUrl: APP } ); expect(r.servedAtRoot).toBe(true); expect(r.baseUrl).toBe('https://fine-bird-flame.inst-1.oswstudio.com'); }); it('serves under /deployments/{id}/ when a slug exists but the proxy is OFF (the #14 regression case)', () => { const r = resolveDeploymentServing( { slug: 'fine-bird-flame' }, ID, { staticProxyEnabled: false, appUrl: APP } ); expect(r.servedAtRoot).toBe(false); expect(r.baseUrl).toBe(`${APP}/deployments/${ID}`); }); it('serves under /deployments/{id}/ when the proxy is on but there is no slug', () => { const r = resolveDeploymentServing( {}, ID, { staticProxyEnabled: true, appUrl: APP } ); expect(r.servedAtRoot).toBe(false); expect(r.baseUrl).toBe(`${APP}/deployments/${ID}`); }); it('serves under /deployments/{id}/ with neither proxy nor slug', () => { const r = resolveDeploymentServing({}, ID, { staticProxyEnabled: false, appUrl: APP }); expect(r.servedAtRoot).toBe(false); expect(r.baseUrl).toBe(`${APP}/deployments/${ID}`); }); }); describe('servedAtRoot flips asset path style (issue #14)', () => { const html = ''; it('prefixes asset paths with /deployments/{id} when NOT served at root', () => { const out = replaceAssetPathsWithDeploymentPrefix(html, new Map(), [], ID, false); expect(out).toContain(`href="/deployments/${ID}/styles/style.css"`); expect(out).toContain(`src="/deployments/${ID}/scripts/main.js"`); }); it('keeps asset paths root-relative when served at root', () => { const out = replaceAssetPathsWithDeploymentPrefix(html, new Map(), [], ID, true); expect(out).toContain('href="/styles/style.css"'); expect(out).toContain('src="/scripts/main.js"'); expect(out).not.toContain('/deployments/'); }); });