163 lines
4.1 KiB
JavaScript
163 lines
4.1 KiB
JavaScript
import { createTestingPinia } from '@pinia/testing'
|
|
import { setActivePinia } from 'pinia'
|
|
|
|
import { useMergedConfigStore } from 'src/stores/merged_config.js'
|
|
import { useStatusesStore } from 'src/stores/statuses.js'
|
|
|
|
import { useTreeConversationTopology } from 'src/composables/useTreeConversationTopology.js'
|
|
|
|
describe('useTreeConversationTopology', () => {
|
|
const conversation = [
|
|
{
|
|
id: 1,
|
|
},
|
|
{
|
|
id: 2,
|
|
in_reply_to_status_id: 1,
|
|
},
|
|
{
|
|
id: 3,
|
|
in_reply_to_status_id: 2,
|
|
},
|
|
{
|
|
id: 4,
|
|
in_reply_to_status_id: 1,
|
|
},
|
|
{
|
|
id: 5,
|
|
in_reply_to_status_id: 4,
|
|
},
|
|
{
|
|
id: 6,
|
|
in_reply_to_status_id: 3,
|
|
},
|
|
]
|
|
const replies = new Map([
|
|
[1, new Set([{ id: 2 }, { id: 4 }])],
|
|
[2, new Set([{ id: 3 }])],
|
|
[3, new Set([{ id: 6 }])],
|
|
[4, new Set([{ id: 5 }])],
|
|
[6, new Set([])],
|
|
])
|
|
|
|
beforeEach(() => {
|
|
setActivePinia(createTestingPinia())
|
|
useStatusesStore().allStatuses = new Map(
|
|
conversation.map(({ id }) => [id, { id }]),
|
|
)
|
|
})
|
|
|
|
it('should form a correct topology', () => {
|
|
const { topLevel, ancestors, currentAncestors } =
|
|
useTreeConversationTopology(conversation, null, 3)
|
|
|
|
expect(ancestors.value).to.eql(
|
|
new Map([
|
|
[1, new Set()],
|
|
[2, new Set([1])],
|
|
[3, new Set([2, 1])],
|
|
[4, new Set([1])],
|
|
[5, new Set([4, 1])],
|
|
[6, new Set([3, 2, 1])],
|
|
]),
|
|
)
|
|
expect(currentAncestors.value).to.eql([{ id: 1 }, { id: 2 }])
|
|
expect(topLevel.value.map(({ id }) => id)).to.eql([1])
|
|
})
|
|
|
|
describe('ThreadDisplay', () => {
|
|
it('should set default ThreadDisplay with maxDepth 3', () => {
|
|
useMergedConfigStore().mergedConfig = { maxDepthInThread: 3 }
|
|
|
|
const { threadDisplay } = useTreeConversationTopology(conversation)
|
|
|
|
expect(threadDisplay.value).to.eql(
|
|
new Map([
|
|
[1, 'showing'],
|
|
[2, 'showing'],
|
|
[3, 'hidden'],
|
|
[4, 'showing'],
|
|
[5, 'hidden'],
|
|
[6, 'hidden'],
|
|
]),
|
|
)
|
|
})
|
|
|
|
it('should set default ThreadDisplay with maxDepth 6', () => {
|
|
useMergedConfigStore().mergedConfig = { maxDepthInThread: 6 }
|
|
|
|
const { threadDisplay } = useTreeConversationTopology(conversation)
|
|
|
|
expect(threadDisplay.value).to.eql(
|
|
new Map([
|
|
[1, 'showing'],
|
|
[2, 'showing'],
|
|
[3, 'showing'],
|
|
[4, 'showing'],
|
|
[5, 'showing'],
|
|
[6, 'showing'],
|
|
]),
|
|
)
|
|
})
|
|
|
|
it('should set default ThreadDisplay with maxDepth 3 && current depth being 3', () => {
|
|
useMergedConfigStore().mergedConfig = { maxDepthInThread: 3 }
|
|
|
|
const { threadDisplay } = useTreeConversationTopology(
|
|
conversation,
|
|
null,
|
|
4,
|
|
)
|
|
|
|
expect(threadDisplay.value).to.eql(
|
|
new Map([
|
|
[1, 'showing'],
|
|
[2, 'showing'],
|
|
[3, 'showing'],
|
|
[4, 'showing'],
|
|
[5, 'showing'],
|
|
[6, 'hidden'],
|
|
]),
|
|
)
|
|
})
|
|
|
|
it('should recursively expand thread when calling showThreadRecursively', () => {
|
|
useMergedConfigStore().mergedConfig = { maxDepthInThread: 3 }
|
|
|
|
const { threadDisplay, showThreadRecursively } =
|
|
useTreeConversationTopology(conversation, replies, 1)
|
|
|
|
showThreadRecursively(3)
|
|
expect(threadDisplay.value).to.eql(
|
|
new Map([
|
|
[1, 'showing'],
|
|
[2, 'showing'],
|
|
[3, 'showing'],
|
|
[4, 'showing'],
|
|
[5, 'hidden'],
|
|
[6, 'showing'],
|
|
]),
|
|
)
|
|
})
|
|
|
|
it('should reset thread when calling resetThreadDisplay', () => {
|
|
useMergedConfigStore().mergedConfig = { maxDepthInThread: 3 }
|
|
|
|
const { threadDisplay, showThreadRecursively, resetThreadDisplay } =
|
|
useTreeConversationTopology(conversation, replies, 1)
|
|
|
|
showThreadRecursively(3)
|
|
resetThreadDisplay()
|
|
expect(threadDisplay.value).to.eql(
|
|
new Map([
|
|
[1, 'showing'],
|
|
[2, 'showing'],
|
|
[3, 'hidden'],
|
|
[4, 'showing'],
|
|
[5, 'hidden'],
|
|
[6, 'hidden'],
|
|
]),
|
|
)
|
|
})
|
|
})
|
|
})
|