147 lines
5.1 KiB
TypeScript
147 lines
5.1 KiB
TypeScript
import { ContentType } from '@standardnotes/common'
|
|
import { FullyFormedPayloadInterface } from '@standardnotes/models'
|
|
import { GetSortedPayloadsByPriority } from './Utils'
|
|
|
|
describe('GetSortedPayloadsByPriority', () => {
|
|
let payloads: FullyFormedPayloadInterface[] = []
|
|
const contentTypePriority = [ContentType.ItemsKey, ContentType.UserPrefs, ContentType.Component, ContentType.Theme]
|
|
let launchPriorityUuids: string[] = []
|
|
|
|
it('should sort payloads based on content type priority', () => {
|
|
payloads = [
|
|
{
|
|
content_type: ContentType.Theme,
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.UserPrefs,
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.Component,
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.ItemsKey,
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.Note,
|
|
} as FullyFormedPayloadInterface,
|
|
]
|
|
|
|
const { itemsKeyPayloads, contentTypePriorityPayloads, remainingPayloads } = GetSortedPayloadsByPriority(
|
|
payloads,
|
|
contentTypePriority,
|
|
launchPriorityUuids,
|
|
)
|
|
|
|
expect(itemsKeyPayloads.length).toBe(1)
|
|
expect(itemsKeyPayloads[0].content_type).toBe(ContentType.ItemsKey)
|
|
|
|
expect(contentTypePriorityPayloads.length).toBe(3)
|
|
expect(contentTypePriorityPayloads[0].content_type).toBe(ContentType.UserPrefs)
|
|
expect(contentTypePriorityPayloads[1].content_type).toBe(ContentType.Component)
|
|
expect(contentTypePriorityPayloads[2].content_type).toBe(ContentType.Theme)
|
|
|
|
expect(remainingPayloads.length).toBe(1)
|
|
expect(remainingPayloads[0].content_type).toBe(ContentType.Note)
|
|
})
|
|
|
|
it('should sort payloads based on launch priority uuids', () => {
|
|
const unprioritizedNoteUuid = 'unprioritized-note'
|
|
const unprioritizedTagUuid = 'unprioritized-tag'
|
|
|
|
const prioritizedNoteUuid = 'prioritized-note'
|
|
const prioritizedTagUuid = 'prioritized-tag'
|
|
|
|
payloads = [
|
|
{
|
|
content_type: ContentType.Theme,
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.UserPrefs,
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.Component,
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.ItemsKey,
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.Note,
|
|
uuid: unprioritizedNoteUuid,
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.Tag,
|
|
uuid: unprioritizedTagUuid,
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.Note,
|
|
uuid: prioritizedNoteUuid,
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.Tag,
|
|
uuid: prioritizedTagUuid,
|
|
} as FullyFormedPayloadInterface,
|
|
]
|
|
|
|
launchPriorityUuids = [prioritizedNoteUuid, prioritizedTagUuid]
|
|
|
|
const { itemsKeyPayloads, contentTypePriorityPayloads, remainingPayloads } = GetSortedPayloadsByPriority(
|
|
payloads,
|
|
contentTypePriority,
|
|
launchPriorityUuids,
|
|
)
|
|
|
|
expect(itemsKeyPayloads.length).toBe(1)
|
|
expect(itemsKeyPayloads[0].content_type).toBe(ContentType.ItemsKey)
|
|
|
|
expect(contentTypePriorityPayloads.length).toBe(3)
|
|
expect(contentTypePriorityPayloads[0].content_type).toBe(ContentType.UserPrefs)
|
|
expect(contentTypePriorityPayloads[1].content_type).toBe(ContentType.Component)
|
|
expect(contentTypePriorityPayloads[2].content_type).toBe(ContentType.Theme)
|
|
|
|
expect(remainingPayloads.length).toBe(4)
|
|
expect(remainingPayloads[0].uuid).toBe(prioritizedNoteUuid)
|
|
expect(remainingPayloads[1].uuid).toBe(prioritizedTagUuid)
|
|
expect(remainingPayloads[2].uuid).toBe(unprioritizedNoteUuid)
|
|
expect(remainingPayloads[3].uuid).toBe(unprioritizedTagUuid)
|
|
})
|
|
|
|
it('should sort payloads based on server updated date if same content type', () => {
|
|
const unprioritizedNoteUuid = 'unprioritized-note'
|
|
const unprioritizedTagUuid = 'unprioritized-tag'
|
|
|
|
const prioritizedNoteUuid = 'prioritized-note'
|
|
const prioritizedTagUuid = 'prioritized-tag'
|
|
|
|
payloads = [
|
|
{
|
|
content_type: ContentType.Note,
|
|
uuid: unprioritizedNoteUuid,
|
|
serverUpdatedAt: new Date(1),
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.Tag,
|
|
uuid: unprioritizedTagUuid,
|
|
serverUpdatedAt: new Date(2),
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.Note,
|
|
uuid: prioritizedNoteUuid,
|
|
} as FullyFormedPayloadInterface,
|
|
{
|
|
content_type: ContentType.Tag,
|
|
uuid: prioritizedTagUuid,
|
|
} as FullyFormedPayloadInterface,
|
|
]
|
|
|
|
launchPriorityUuids = [prioritizedNoteUuid, prioritizedTagUuid]
|
|
|
|
const { remainingPayloads } = GetSortedPayloadsByPriority(payloads, contentTypePriority, launchPriorityUuids)
|
|
|
|
expect(remainingPayloads.length).toBe(4)
|
|
expect(remainingPayloads[0].uuid).toBe(prioritizedNoteUuid)
|
|
expect(remainingPayloads[1].uuid).toBe(prioritizedTagUuid)
|
|
expect(remainingPayloads[2].uuid).toBe(unprioritizedTagUuid)
|
|
expect(remainingPayloads[3].uuid).toBe(unprioritizedNoteUuid)
|
|
})
|
|
})
|