ditto/src/trends.test.ts

105 lines
3.4 KiB
TypeScript

import { assertEquals } from '@std/assert';
import { generateSecretKey, NostrEvent } from 'nostr-tools';
import { getTrendingTagValues } from '@/trends.ts';
import { createTestDB, genEvent } from '@/test.ts';
Deno.test("getTrendingTagValues(): 'e' tag and WITHOUT language parameter", async () => {
await using db = await createTestDB();
const events: NostrEvent[] = [];
let sk = generateSecretKey();
const post1 = genEvent({ kind: 1, content: 'SHOW ME THE MONEY' }, sk);
const numberOfAuthorsWhoLikedPost1 = 100;
const post1multiplier = 2;
const post1uses = numberOfAuthorsWhoLikedPost1 * post1multiplier;
for (let i = 0; i < numberOfAuthorsWhoLikedPost1; i++) {
const sk = generateSecretKey();
events.push(
genEvent({ kind: 7, content: '+', tags: Array(post1multiplier).fill([...['e', post1.id]]) }, sk),
);
}
events.push(post1);
sk = generateSecretKey();
const post2 = genEvent({ kind: 1, content: 'Ithaca' }, sk);
const numberOfAuthorsWhoLikedPost2 = 100;
const post2multiplier = 1;
const post2uses = numberOfAuthorsWhoLikedPost2 * post2multiplier;
for (let i = 0; i < numberOfAuthorsWhoLikedPost2; i++) {
const sk = generateSecretKey();
events.push(
genEvent({ kind: 7, content: '+', tags: Array(post2multiplier).fill([...['e', post2.id]]) }, sk),
);
}
events.push(post2);
for (const event of events) {
await db.store.event(event);
}
const trends = await getTrendingTagValues(db.kysely, ['e'], { kinds: [1, 7] });
const expected = [{ value: post1.id, authors: numberOfAuthorsWhoLikedPost1, uses: post1uses }, {
value: post2.id,
authors: numberOfAuthorsWhoLikedPost2,
uses: post2uses,
}];
assertEquals(trends, expected);
});
Deno.test("getTrendingTagValues(): 'e' tag and WITH language parameter", async () => {
await using db = await createTestDB();
const events: NostrEvent[] = [];
let sk = generateSecretKey();
const post1 = genEvent({ kind: 1, content: 'Irei cortar o cabelo.' }, sk);
const numberOfAuthorsWhoLikedPost1 = 100;
const post1multiplier = 2;
const post1uses = numberOfAuthorsWhoLikedPost1 * post1multiplier;
for (let i = 0; i < numberOfAuthorsWhoLikedPost1; i++) {
const sk = generateSecretKey();
events.push(
genEvent({ kind: 7, content: '+', tags: Array(post1multiplier).fill([...['e', post1.id]]) }, sk),
);
}
events.push(post1);
sk = generateSecretKey();
const post2 = genEvent({ kind: 1, content: 'Ithaca' }, sk);
const numberOfAuthorsWhoLikedPost2 = 100;
const post2multiplier = 1;
for (let i = 0; i < numberOfAuthorsWhoLikedPost2; i++) {
const sk = generateSecretKey();
events.push(
genEvent({ kind: 7, content: '+', tags: Array(post2multiplier).fill([...['e', post2.id]]) }, sk),
);
}
events.push(post2);
for (const event of events) {
await db.store.event(event);
}
await db.kysely.updateTable('nostr_events')
.set('language', 'pt')
.where('id', '=', post1.id)
.execute();
await db.kysely.updateTable('nostr_events')
.set('language', 'en')
.where('id', '=', post2.id)
.execute();
const languagesIds = (await db.store.query([{ search: 'language:pt' }])).map((event) => event.id);
const trends = await getTrendingTagValues(db.kysely, ['e'], { kinds: [1, 7] }, languagesIds);
// portuguese post
const expected = [{ value: post1.id, authors: numberOfAuthorsWhoLikedPost1, uses: post1uses }];
assertEquals(trends, expected);
});