import test from 'node:test'; import assert from 'node:assert/strict'; import vm from 'node:vm'; import { appendDiscoveryPropagationParams, buildInlineDiscoveryResolverScript, classifyDiscoveryTrafficSource, DISCOVERY_QUERY_PARAM, DISCOVERY_SOURCE_QUERY_PARAM, } from './mindspace-analytics-discovery.mjs'; test('classifies common SEO referrers', () => { assert.deepEqual( classifyDiscoveryTrafficSource({ referrer: 'https://www.google.com/search?q=demo', }), { discovery_channel: 'seo', discovery_source: 'google', referrer_host: 'google.com', }, ); assert.deepEqual( classifyDiscoveryTrafficSource({ referrer: 'https://www.baidu.com/s?wd=demo', }), { discovery_channel: 'seo', discovery_source: 'baidu', referrer_host: 'baidu.com', }, ); }); test('classifies common GEO referrers', () => { assert.deepEqual( classifyDiscoveryTrafficSource({ referrer: 'https://chatgpt.com/c/abc', }), { discovery_channel: 'geo', discovery_source: 'chatgpt', referrer_host: 'chatgpt.com', }, ); assert.deepEqual( classifyDiscoveryTrafficSource({ referrer: 'https://www.perplexity.ai/search/demo', }), { discovery_channel: 'geo', discovery_source: 'perplexity', referrer_host: 'perplexity.ai', }, ); }); test('prefers explicit discovery query params for iframe propagation', () => { assert.deepEqual( classifyDiscoveryTrafficSource({ discoveryChannel: 'seo', discoverySource: 'google', referrer: 'https://m.tkmind.cn/u/alice/pages/demo', pageHost: 'm.tkmind.cn', }), { discovery_channel: 'seo', discovery_source: 'google', referrer_host: 'm.tkmind.cn', }, ); }); test('falls back to server referrer hint when browser referrer is same-origin', () => { assert.deepEqual( classifyDiscoveryTrafficSource({ referrer: 'https://m.tkmind.cn/u/alice/pages/demo', pageHost: 'm.tkmind.cn', }), { discovery_channel: 'direct', discovery_source: 'direct', referrer_host: '', }, ); }); test('appendDiscoveryPropagationParams only propagates seo or geo channels', () => { const seoUrl = appendDiscoveryPropagationParams('/u/alice/pages/demo?view=raw', { discovery_channel: 'seo', discovery_source: 'google', }); assert.match(seoUrl, new RegExp(`${DISCOVERY_QUERY_PARAM}=seo`)); assert.match(seoUrl, new RegExp(`${DISCOVERY_SOURCE_QUERY_PARAM}=google`)); const directUrl = appendDiscoveryPropagationParams('/u/alice/pages/demo?view=raw', { discovery_channel: 'direct', discovery_source: 'direct', }); assert.equal(directUrl, '/u/alice/pages/demo?view=raw'); }); test('inline discovery resolver matches server-side classification from referrer hint', () => { const result = vm.runInNewContext( `(${buildInlineDiscoveryResolverScript('https://www.google.com/search?q=demo')})()`, { URL, URLSearchParams, location: { hostname: 'm.tkmind.cn', search: '', }, document: { referrer: '' }, }, ); assert.deepEqual(JSON.parse(JSON.stringify(result)), { discovery_channel: 'seo', discovery_source: 'google', referrer_host: 'google.com', }); }); test('inline discovery resolver reads propagated query params inside iframe', () => { const result = vm.runInNewContext( `(${buildInlineDiscoveryResolverScript('')})()`, { URL, URLSearchParams, location: { hostname: 'm.tkmind.cn', search: '?view=raw&memind_discovery=geo&memind_discovery_source=chatgpt', }, document: { referrer: 'https://m.tkmind.cn/u/alice/pages/demo' }, }, ); assert.deepEqual(JSON.parse(JSON.stringify(result)), { discovery_channel: 'geo', discovery_source: 'chatgpt', referrer_host: '', }); });