48 lines
1.3 KiB
JavaScript
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();
|