You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.3 KiB
72 lines
2.3 KiB
import { describe, expect, it } from 'vitest' |
|
import { kinds } from 'nostr-tools' |
|
import type { Event } from 'nostr-tools' |
|
import { ExtendedKind } from '@/constants' |
|
import { |
|
isThreadBoosterOnlyRow, |
|
isThreadReactionOnlyRow, |
|
shouldHideThreadResponseEvent |
|
} from './thread-response-filter' |
|
|
|
function baseEvent(overrides: Partial<Event> = {}): Event { |
|
return { |
|
id: 'a'.repeat(64), |
|
pubkey: 'b'.repeat(64), |
|
created_at: 1000, |
|
kind: kinds.ShortTextNote, |
|
tags: [], |
|
content: 'hello', |
|
sig: 'd'.repeat(128), |
|
...overrides |
|
} |
|
} |
|
|
|
describe('thread response filter', () => { |
|
it('treats NIP-18 reposts as booster-only rows', () => { |
|
const repost = baseEvent({ |
|
kind: kinds.Repost, |
|
tags: [['e', 'c'.repeat(64)]], |
|
content: '' |
|
}) |
|
expect(isThreadBoosterOnlyRow(repost)).toBe(true) |
|
expect(shouldHideThreadResponseEvent(repost, new Set(), false)).toBe(true) |
|
}) |
|
|
|
it('does not treat kind-1 rows as booster-only (only kinds 6 and 16)', () => { |
|
const target = baseEvent({ content: 'boosted note' }) |
|
expect(isThreadBoosterOnlyRow(baseEvent({ content: JSON.stringify(target) }))).toBe(false) |
|
expect( |
|
isThreadBoosterOnlyRow( |
|
baseEvent({ content: `My take.\n\n${JSON.stringify(target)}` }) |
|
) |
|
).toBe(false) |
|
}) |
|
|
|
it('hides generic repost kind 16', () => { |
|
const repost = baseEvent({ |
|
kind: ExtendedKind.GENERIC_REPOST, |
|
tags: [['e', 'c'.repeat(64)]] |
|
}) |
|
expect(isThreadBoosterOnlyRow(repost)).toBe(true) |
|
}) |
|
|
|
it('hides all NIP-25 reactions from thread rows (stats only)', () => { |
|
const reaction = baseEvent({ |
|
kind: kinds.Reaction, |
|
content: '🔥', |
|
tags: [['e', 'c'.repeat(64), '', 'root']] |
|
}) |
|
expect(isThreadReactionOnlyRow(reaction)).toBe(true) |
|
expect(shouldHideThreadResponseEvent(reaction, new Set(), false)).toBe(true) |
|
|
|
const external = baseEvent({ kind: ExtendedKind.EXTERNAL_REACTION, content: '👍' }) |
|
expect(isThreadReactionOnlyRow(external)).toBe(true) |
|
expect(shouldHideThreadResponseEvent(external, new Set(), false)).toBe(true) |
|
}) |
|
|
|
it('does not hide kind-1 replies as reactions', () => { |
|
const reply = baseEvent({ kind: kinds.ShortTextNote, content: 'thanks' }) |
|
expect(isThreadReactionOnlyRow(reply)).toBe(false) |
|
expect(shouldHideThreadResponseEvent(reply, new Set(), false)).toBe(false) |
|
}) |
|
})
|
|
|