traxxx/tests/profiles.js

48 lines
1.3 KiB
JavaScript

'use strict';
const test = require('node:test');
const assert = require('node:assert/strict');
const argv = require('../src/argv');
const scrapers = require('../src/scrapers/scrapers');
const { fetchEntitiesBySlug } = require('../src/entities');
const actorScrapers = scrapers.actors;
// profiler in this context is shorthand for profile scraper
async function init() {
const entitiesBySlug = await fetchEntitiesBySlug(Object.keys(actorScrapers), { types: ['channel', 'network', 'info'], prefer: argv.prefer });
Object.entries(actorScrapers).reduce(async (chain, [entitySlug, scraper]) => {
await chain;
const entity = entitiesBySlug[entitySlug] || null;
const profilers = Array.from(new Set(Object.entries(scraper) // some layouts will use the same profiler
.flatMap(([fnKey, fnOrLayout]) => {
if (fnOrLayout.fetchProfile) {
// layout
return fnOrLayout.fetchProfile;
}
if (fnKey === 'fetchProfile') {
// primary
return fnOrLayout;
}
return null;
}).filter(Boolean)));
await test(`${entitySlug} (${entity?.name})`, async () => {
await test('has entity', () => assert.notEqual(entity, null));
await test('has profilers', () => assert.ok(profilers.length > 0));
await test('foo', () => {
assert.strictEqual(5, 5);
});
});
}, Promise.resolve());
}
init();