Files
2026-04-12 01:06:31 +07:00

85 lines
2.2 KiB
JavaScript
Executable File

#!/usr/bin/env node
/**
* Tests for fetch-docs.js
*/
const { buildContext7Url, getUrlVariations } = require('../fetch-docs');
// Test counter
let passed = 0;
let failed = 0;
function assert(condition, message) {
if (condition) {
console.log(`${message}`);
passed++;
} else {
console.error(`${message}`);
failed++;
}
}
function assertEqual(actual, expected, message) {
if (actual === expected) {
console.log(`${message}`);
passed++;
} else {
console.error(`${message}`);
console.error(` Expected: ${expected}`);
console.error(` Actual: ${actual}`);
failed++;
}
}
console.log('Running fetch-docs.js tests...\n');
// Test buildContext7Url
console.log('## Testing buildContext7Url()');
assertEqual(
buildContext7Url('vercel/next.js'),
'https://context7.com/vercel/next.js/llms.txt',
'Build URL for GitHub repo'
);
assertEqual(
buildContext7Url('vercel/next.js', 'cache'),
'https://context7.com/vercel/next.js/llms.txt?topic=cache',
'Build URL with topic parameter'
);
assertEqual(
buildContext7Url('shadcn-ui/ui', 'date'),
'https://context7.com/shadcn-ui/ui/llms.txt?topic=date',
'Build URL for shadcn with topic'
);
// Test getUrlVariations
console.log('\n## Testing getUrlVariations()');
async function testUrlVariations() {
const urls1 = await getUrlVariations('next.js', 'cache');
assert(urls1.length >= 2, 'Returns multiple URL variations with topic');
assert(urls1[0].includes('?topic=cache'), 'First URL has topic parameter');
assert(!urls1[1].includes('?topic='), 'Second URL has no topic parameter');
const urls2 = await getUrlVariations('shadcn/ui');
assert(urls2.length >= 1, 'Returns URL variations without topic');
assert(!urls2[0].includes('?topic='), 'URL has no topic parameter');
const urls3 = await getUrlVariations('astro', 'routing');
assert(urls3.length >= 2, 'Returns variations for known library');
assertEqual(urls3[0], 'https://context7.com/withastro/astro/llms.txt?topic=routing', 'Maps Astro correctly');
}
testUrlVariations().then(() => {
// Summary
console.log('\n## Test Summary');
console.log(`Passed: ${passed}`);
console.log(`Failed: ${failed}`);
console.log(`Total: ${passed + failed}`);
process.exit(failed > 0 ? 1 : 0);
});