pinafore/tests/unit/test-thread-ordering.mjs
Nolan Lawson 16e66346d7
fix!: remove esm package, use native Node ES modules (#2064)
BREAKING CHANGE: Node v12.20+, v14.14+, or v16.0+ is required

* fix!: remove esm package, use native Node ES modules

* fix: fix some CJS imports
2021-07-04 20:19:04 -07:00

339 lines
8.4 KiB
JavaScript

/* global describe, it */
import assert from 'assert'
import { sortItemSummariesForThread } from '../../src/routes/_utils/sortItemSummariesForThread.js'
describe('test-thread-ordering.js', () => {
it('orders a complex thread correctly', () => {
const summaries = [
{
id: '104170273205084988',
accountId: '2',
content: 'a'
},
{
id: '104170273237400789',
accountId: '5',
replyId: '104170273205084988',
content: 'b'
},
{
id: '104170273276841718',
accountId: '5',
replyId: '104170273205084988',
content: 'a1'
},
{
id: '104170273256426023',
accountId: '5',
replyId: '104170273237400789',
content: 'c'
},
{
id: '104170273298534371',
accountId: '5',
replyId: '104170273256426023',
content: 'd'
},
{
id: '104170273356931049',
accountId: '5',
replyId: '104170273298534371',
content: 'e'
},
{
id: '104170273341388633',
accountId: '5',
replyId: '104170273237400789',
content: 'b1'
},
{
id: '104170273365802755',
accountId: '5',
replyId: '104170273341388633',
content: 'b2'
},
{
id: '104170273331400302',
accountId: '5',
replyId: '104170273276841718',
content: 'a2'
},
{
id: '104170273348336156',
accountId: '5',
replyId: '104170273331400302',
content: 'a3'
},
{
id: '104170273376273045',
accountId: '5',
replyId: '104170273348336156',
content: 'a4'
},
{
id: '104170273388248109',
accountId: '5',
replyId: '104170273276841718',
content: 'a1a'
}
]
const expected = 'a b c d e b1 b2 a1 a2 a3 a4 a1a'.split(' ')
const sorted = sortItemSummariesForThread(summaries, summaries[0].id)
const sortedContents = sorted.map(_ => _.content)
assert.deepStrictEqual(sortedContents, expected)
})
it('orders a complex thread correctly - original account involved', () => {
const summaries = [
{
id: '104170273205084988',
accountId: '2',
content: 'a'
},
{
id: '104170273237400789',
accountId: '5',
replyId: '104170273205084988',
content: 'b'
},
{
id: '104170273276841718',
accountId: '2',
replyId: '104170273205084988',
content: 'a1'
},
{
id: '104170273256426023',
accountId: '5',
replyId: '104170273237400789',
content: 'c'
},
{
id: '104170273298534371',
accountId: '5',
replyId: '104170273256426023',
content: 'd'
},
{
id: '104170273356931049',
accountId: '5',
replyId: '104170273298534371',
content: 'e'
},
{
id: '104170273341388633',
accountId: '5',
replyId: '104170273237400789',
content: 'b1'
},
{
id: '104170273365802755',
accountId: '5',
replyId: '104170273341388633',
content: 'b2'
},
{
id: '104170273331400302',
accountId: '2',
replyId: '104170273276841718',
content: 'a2'
},
{
id: '104170273348336156',
accountId: '2',
replyId: '104170273331400302',
content: 'a3'
},
{
id: '104170273376273045',
accountId: '2',
replyId: '104170273348336156',
content: 'a4'
},
{
id: '104170273388248109',
accountId: '5',
replyId: '104170273276841718',
content: 'a1a'
}
]
const expected = 'a a1 a2 a3 a4 b c d e b1 b2 a1a'.split(' ')
const sorted = sortItemSummariesForThread(summaries, summaries[0].id)
const sortedContents = sorted.map(_ => _.content)
assert.deepStrictEqual(sortedContents, expected)
})
it('complex thread is in correct order - with mixed self-replies 2', () => {
const summaries = [{
id: '104176454386581622',
accountId: '2',
content: 'a'
}, {
id: '104176454485378729',
accountId: '2',
replyId: '104176454386581622',
content: 'foobar-mixed1'
}, {
id: '104176454515584245',
accountId: '2',
replyId: '104176454386581622',
content: 'foobar-mixed1a'
}, {
id: '104176454522882883',
accountId: '2',
replyId: '104176454386581622',
content: 'foobar-mixed1b'
}, {
id: '104176454396619534',
accountId: '5',
replyId: '104176454386581622',
content: 'b'
}, {
id: '104176454413613662',
accountId: '5',
replyId: '104176454386581622',
content: 'a1'
}, {
id: '104176454529610049',
accountId: '2',
replyId: '104176454485378729',
content: 'foobar-mixed2a'
}, {
id: '104176454403991688',
accountId: '5',
replyId: '104176454396619534',
content: 'c'
}, {
id: '104176454422082616',
accountId: '5',
replyId: '104176454403991688',
content: 'd'
}, {
id: '104176454453810927',
accountId: '5',
replyId: '104176454422082616',
content: 'e'
}, {
id: '104176454437136977',
accountId: '5',
replyId: '104176454396619534',
content: 'b1'
}, {
id: '104176454461082666',
accountId: '5',
replyId: '104176454437136977',
content: 'b2'
}, {
id: '104176454429382434',
accountId: '5',
replyId: '104176454413613662',
content: 'a2'
}, {
id: '104176454446265415',
accountId: '5',
replyId: '104176454429382434',
content: 'a3'
}, {
id: '104176454468322929',
accountId: '5',
replyId: '104176454446265415',
content: 'a4'
}, {
id: '104176454477242935',
accountId: '5',
replyId: '104176454413613662',
content: 'a1a'
}, {
id: '104176454493347083',
accountId: '5',
replyId: '104176454485378729',
content: 'baz-mixed2'
}, {
id: '104176454500705115',
accountId: '2',
replyId: '104176454493347083',
content: 'foobar-mixed3'
}, {
id: '104176454508488937',
accountId: '2',
replyId: '104176454500705115',
content: 'foobar-mixed4'
}]
const expected = ('a foobar-mixed1 foobar-mixed2a foobar-mixed1a foobar-mixed1b ' +
'b c d e b1 b2 a1 a2 a3 a4 a1a baz-mixed2 foobar-mixed3 foobar-mixed4').split(' ')
const sorted = sortItemSummariesForThread(summaries, summaries[0].id)
const sortedContents = sorted.map(_ => _.content)
assert.deepStrictEqual(sortedContents, expected)
})
it('orders another complex thread correctly', () => {
const summaries = [{
id: '104179325085424124',
accountId: '2',
content: 'this-is-my-thread-1'
}, {
id: '104179325166234979',
accountId: '2',
replyId: '104179325085424124',
content: 'this-is-my-thread-2'
}, {
id: '104179325240180153',
accountId: '2',
replyId: '104179325166234979',
content: 'this-is-my-thread-3'
}, {
id: '104179325498778701',
accountId: '2',
replyId: '104179325240180153',
content: 'this-is-my-thread-4'
}, {
id: '104179325543709477',
accountId: '2',
replyId: '104179325498778701',
content: 'this-is-my-thread-5'
}, {
id: '104179325275861201',
accountId: '1',
replyId: '104179325240180153',
content: 'hey-i-am-replying-to-3'
}, {
id: '104179325263377436',
accountId: '3',
replyId: '104179325085424124',
content: 'hey-i-am-replying-to-1'
}, {
id: '104179325387035947',
accountId: '3',
replyId: '104179325085424124',
content: 'hey-check-this-reply'
}, {
id: '104179325564606101',
accountId: '1',
replyId: '104179325085424124',
content: 'hey-i-am-replying-to-1-again'
}]
const expected = [
'this-is-my-thread-1',
'this-is-my-thread-2',
'this-is-my-thread-3',
'this-is-my-thread-4',
'this-is-my-thread-5',
'hey-i-am-replying-to-3',
'hey-i-am-replying-to-1',
'hey-check-this-reply',
'hey-i-am-replying-to-1-again'
]
const sorted = sortItemSummariesForThread(summaries, summaries[0].id)
const sortedContents = sorted.map(_ => _.content)
assert.deepStrictEqual(sortedContents, expected)
})
})