elk/tests/reorder-timeline.test.ts

92 lines
3.2 KiB
TypeScript
Raw Normal View History

2023-01-04 12:09:09 +00:00
/**
* @vitest-environment jsdom
*/
2023-01-08 06:21:09 +00:00
import type { mastodon } from 'masto'
2023-01-04 12:09:09 +00:00
import { describe, expect, it } from 'vitest'
import { reorderedTimeline } from '~/composables/timeline'
function status(id: string, filtered?: mastodon.v1.FilterContext): mastodon.v1.Status {
if (filtered) {
return {
id,
filtered: [
{
filter: {
filterAction: 'hide',
context: [filtered],
},
} as mastodon.v1.FilterResult,
],
} as mastodon.v1.Status
}
2023-01-08 06:21:09 +00:00
return { id } as mastodon.v1.Status
2023-01-04 12:09:09 +00:00
}
2023-01-08 06:21:09 +00:00
function reply(id: string, s: mastodon.v1.Status) {
return { id, inReplyToId: s.id } as mastodon.v1.Status
2023-01-04 12:09:09 +00:00
}
2023-01-08 06:21:09 +00:00
function reblog(id: string, s: mastodon.v1.Status) {
return { id, reblog: s } as mastodon.v1.Status
2023-01-04 12:09:09 +00:00
}
const p_a1 = status('p_a1')
const p_b1 = status('p_b1')
const p_a2 = reply('p_a2', p_a1)
const p_b2 = reply('p_b2', p_b1)
const p_a3 = reply('p_a3', p_a2)
const p_b3 = reply('p_b3', p_b2)
const r_a1 = reblog('r_a1', p_a1)
const r_b1 = reblog('r_b1', p_b1)
const r_a2 = reblog('r_a2', p_a2)
const r_b2 = reblog('r_b2', p_b2)
const f = status('f', 'public')
const r_f = reply('r_f', f)
const rb_f = reblog('rb_f', f)
const n_f = status('f', 'notifications')
2023-01-04 12:09:09 +00:00
describe('timeline reordering', () => {
it('reorder basic', () => {
2023-01-04 13:14:33 +00:00
expect(reorderedTimeline([r_a2, r_a1])).toEqual([r_a1, r_a2])
2023-01-04 12:09:09 +00:00
2023-01-04 13:14:33 +00:00
expect(reorderedTimeline([r_a2, p_a1])).toEqual([p_a1, r_a2])
2023-01-04 12:09:09 +00:00
2023-01-04 13:14:33 +00:00
expect(reorderedTimeline([p_a1, p_a2, p_a3])).toEqual([p_a1, p_a2, p_a3])
2023-01-04 12:09:09 +00:00
2023-01-04 13:14:33 +00:00
expect(reorderedTimeline([p_a3, p_a2, p_a1])).toEqual([p_a1, p_a2, p_a3])
2023-01-04 12:09:09 +00:00
2023-01-04 13:14:33 +00:00
expect(reorderedTimeline([p_a2, p_a3, p_a1])).toEqual([p_a1, p_a2, p_a3])
2023-01-04 12:09:09 +00:00
2023-01-04 13:14:33 +00:00
expect(reorderedTimeline([p_a2, p_b3, p_a3, p_b1, p_a1, p_b2])).toEqual([p_a1, p_a2, p_a3, p_b1, p_b2, p_b3])
2023-01-04 12:09:09 +00:00
2023-01-04 13:14:33 +00:00
expect(reorderedTimeline([r_a2, p_b3, p_a3, p_b1, p_a1, r_b2])).toEqual([p_a1, r_a2, p_a3, p_b1, r_b2, p_b3])
2023-01-04 12:09:09 +00:00
2023-01-04 13:14:33 +00:00
expect(reorderedTimeline([r_a2, p_b3, p_a3, p_b1, p_a1, r_b2])).toEqual([p_a1, r_a2, p_a3, p_b1, r_b2, p_b3])
2023-01-04 12:09:09 +00:00
2023-01-04 13:14:33 +00:00
expect(reorderedTimeline([p_a1, p_b1, p_a2, p_b2, p_a3, p_b3])).toEqual([p_a1, p_a2, p_a3, p_b1, p_b2, p_b3])
2023-01-04 12:09:09 +00:00
2023-01-04 13:14:33 +00:00
expect(reorderedTimeline([p_a3, r_a1, r_a2, r_b2, p_b3, r_b1])).toEqual([r_a1, r_a2, p_a3, r_b1, r_b2, p_b3])
2023-01-04 12:09:09 +00:00
})
it('reorder with filtered item', () => {
// should not show filtered status with 'hide' filterAction
expect(reorderedTimeline([p_a3, f, r_a1, r_a2, r_b2, p_b3, r_b1])).toEqual([r_a1, r_a2, p_a3, r_b1, r_b2, p_b3])
// should not filter status with 'hide' filterAction but does not matches context
expect(reorderedTimeline([p_a3, n_f, r_a1, r_a2, r_b2, p_b3, r_b1], 'public')).toEqual([r_a1, r_a2, p_a3, n_f, r_b1, r_b2, p_b3])
// should filter status with 'hide' filterAction and matches context
expect(reorderedTimeline([p_a3, n_f, r_a1, r_a2, r_b2, p_b3, r_b1], 'notifications')).toEqual([r_a1, r_a2, p_a3, r_b1, r_b2, p_b3])
// should show reply to a filtered status
expect(reorderedTimeline([p_a3, f, r_a1, r_f, r_a2, r_b2, p_b3, r_b1])).toEqual([r_a1, r_a2, p_a3, r_f, r_b1, r_b2, p_b3])
// should not show reblogged status that is filtered with 'hide' filterAction
expect(reorderedTimeline([p_a3, f, r_a1, rb_f, r_a2, r_b2, p_b3, r_b1])).toEqual([r_a1, r_a2, p_a3, r_b1, r_b2, p_b3])
})
2023-01-04 12:09:09 +00:00
})