Files
2026-07-13 12:49:17 +08:00

72 lines
2.9 KiB
JavaScript

import { test } from 'node:test';
import assert from 'node:assert/strict';
import { normalizePypiRecent, buildStats, renderSummary } from './fetch-stats.mjs';
test('normalizePypiRecent extracts day/week/month', () => {
assert.deepEqual(
normalizePypiRecent({ data: { last_day: 100, last_week: 700, last_month: 3000 } }),
{ lastDay: 100, lastWeek: 700, lastMonth: 3000 },
);
});
test('normalizePypiRecent handles missing data', () => {
assert.deepEqual(normalizePypiRecent({}), { lastDay: 0, lastWeek: 0, lastMonth: 0 });
});
test('normalizePypiRecent marks failed requests as unavailable', () => {
assert.deepEqual(
normalizePypiRecent(null),
{ lastDay: null, lastWeek: null, lastMonth: null, unavailable: true },
);
});
test('buildStats maps github + pypi + web', () => {
const stats = buildStats({
recent: { data: { last_day: 1, last_week: 2, last_month: 3 } },
repo: { stargazers_count: 11102, forks_count: 1229 },
clones: { uniques: 84 },
views: { uniques: 530 },
webPageviews: { total: 42 },
generatedAt: 't',
});
assert.deepEqual(stats.github, { stars: 11102, forks: 1229, uniqueCloners14d: 84, uniqueViewers14d: 530 });
assert.deepEqual(stats.pypi, { lastDay: 1, lastWeek: 2, lastMonth: 3 });
assert.deepEqual(stats.web, { total: 42 });
});
test('buildStats nulls github fields when sources unavailable', () => {
const stats = buildStats({ recent: { data: {} }, generatedAt: 't' });
assert.deepEqual(stats.github, { stars: null, forks: null, uniqueCloners14d: null, uniqueViewers14d: null });
assert.equal(stats.web, null);
});
test('renderSummary leads with real-user signals and labels PyPI as inflated', () => {
const stats = buildStats({
recent: { data: { last_day: 4912, last_week: 38270, last_month: 192776 } },
repo: { stargazers_count: 11102, forks_count: 1229 },
clones: { uniques: 84 },
views: { uniques: 530 },
generatedAt: 't',
});
const md = renderSummary(stats);
assert.match(md, /Real-user signals/);
assert.match(md, /GitHub stars \| 11,102/);
assert.match(md, /Unique repo cloners \(14d\) \| 84/);
assert.match(md, /true active users/); // DAU/WAU flagged first
assert.match(md, /inflated — NOT a user count/);
assert.match(md, /Last month \| 192,776/);
});
test('renderSummary notes when the traffic token is missing', () => {
const stats = buildStats({ recent: { data: {} }, repo: { stargazers_count: 1, forks_count: 0 }, generatedAt: 't' });
assert.match(renderSummary(stats), /Administration: read/);
});
test('renderSummary distinguishes unavailable PyPI stats from zero downloads', () => {
const stats = buildStats({ recent: null, repo: { stargazers_count: 1, forks_count: 0 }, generatedAt: 't' });
const md = renderSummary(stats);
assert.match(md, /Last day \| —/);
assert.match(md, /PyPI stats are unavailable/);
assert.match(md, /Do not treat these dashes as zero downloads/);
});