import assert from 'node:assert/strict'; import test from 'node:test'; import { buildPublicationAbsoluteUrl, createMindspaceSeoNotifyService, resolveMindspaceBaiduSite, } from './mindspace-seo-notify.mjs'; const indexablePublication = { status: 'online', accessMode: 'public', userConfirmedAt: Date.now(), publicUrl: '/u/john/pages/demo', }; test('buildPublicationAbsoluteUrl resolves relative publication urls', () => { assert.equal( buildPublicationAbsoluteUrl('/u/john/pages/demo', { H5_PUBLIC_BASE_URL: 'https://m.tkmind.cn', }), 'https://m.tkmind.cn/u/john/pages/demo', ); }); test('resolveMindspaceBaiduSite prefers explicit env', () => { assert.equal( resolveMindspaceBaiduSite({ MINDSPACE_BAIDU_SITE: 'm.tkmind.cn' }), 'm.tkmind.cn', ); }); test('notifyPublicationSearchEngines skips when baidu push disabled', async () => { const service = createMindspaceSeoNotifyService( {}, { env: { H5_PUBLIC_BASE_URL: 'https://m.tkmind.cn' }, loadMindSpaceConfigFn: async () => ({ seoGeo: { enabled: true, seo: { baiduPush: false } }, }), }, ); const result = await service.notifyPublicationSearchEngines(indexablePublication); assert.equal(result.reason, 'disabled'); }); test('notifyPublicationSearchEngines skips non-indexable publications', async () => { const service = createMindspaceSeoNotifyService( {}, { loadMindSpaceConfigFn: async () => ({ seoGeo: { enabled: true, seo: { baiduPush: true } }, }), }, ); const result = await service.notifyPublicationSearchEngines({ ...indexablePublication, accessMode: 'password', }); assert.equal(result.reason, 'not_indexable'); }); test('notifyPublicationSearchEngines pings baidu for indexable publications', async () => { const calls = []; const service = createMindspaceSeoNotifyService( {}, { env: { H5_PUBLIC_BASE_URL: 'https://m.tkmind.cn', MINDSPACE_BAIDU_PUSH_TOKEN: 'token', MINDSPACE_BAIDU_SITE: 'm.tkmind.cn', }, loadMindSpaceConfigFn: async () => ({ seoGeo: { enabled: true, seo: { baiduPush: true } }, }), plazaSeoFactory: () => ({ pingBaidu: async (urls) => { calls.push(urls); return { pushed: true, result: { success: 1 } }; }, }), }, ); const result = await service.notifyPublicationSearchEngines(indexablePublication); assert.equal(result.pushed, true); assert.deepEqual(calls[0], ['https://m.tkmind.cn/u/john/pages/demo']); });