pagesState.test.ts109 lines · main
1import { beforeEach, describe, expect, it } from 'vitest'
2
3import { initPagesState, PageType, type IPagesState, type PageDefinition } from './pagesState'
4
5describe('pagesState', () => {
6 let pagesState: IPagesState
7
8 beforeEach(() => {
9 pagesState = initPagesState()
10 })
11
12 it('Starts with an empty page stack', () => {
13 expect(pagesState.pageStack.length).toBe(0)
14 })
15
16 it('Starts with no pages', () => {
17 expect(Object.keys(pagesState.commandPages).length).toBe(0)
18 })
19
20 it('Registers a new page', () => {
21 const newPage: PageDefinition = {
22 type: PageType.Commands,
23 sections: [],
24 }
25
26 pagesState.registerNewPage('page', newPage)
27
28 expect(pagesState.commandPages.page).toStrictEqual(newPage)
29 })
30
31 it('Returned function unregisters the page', () => {
32 const newPage: PageDefinition = {
33 type: PageType.Commands,
34 sections: [],
35 }
36
37 const unregister = pagesState.registerNewPage('page', newPage)
38 expect(pagesState.commandPages.page).toStrictEqual(newPage)
39
40 unregister()
41 expect(Object.keys(pagesState.commandPages).length).toBe(0)
42 })
43
44 it('Registered page can be appended to page stack', () => {
45 const newPage: PageDefinition = {
46 type: PageType.Commands,
47 sections: [],
48 }
49
50 pagesState.registerNewPage('page', newPage)
51 pagesState.appendPageStack('page')
52
53 expect(pagesState.pageStack.length).toBe(1)
54 expect(pagesState.pageStack[0]).toBe('page')
55 })
56
57 it('Non-registered page cannot be appended to page stack', () => {
58 pagesState.appendPageStack('invalid')
59
60 expect(pagesState.pageStack.length).toBe(0)
61 })
62
63 it('Unregistered page cannot be appended to page stack', () => {
64 const newPage: PageDefinition = {
65 type: PageType.Commands,
66 sections: [],
67 }
68
69 const unregister = pagesState.registerNewPage('page', newPage)
70 unregister()
71
72 pagesState.appendPageStack('page')
73
74 expect(pagesState.pageStack.length).toBe(0)
75 })
76
77 it('Noops if reappending the currently active page', () => {
78 const newPage: PageDefinition = {
79 type: PageType.Commands,
80 sections: [],
81 }
82
83 pagesState.registerNewPage('page', newPage)
84
85 pagesState.appendPageStack('page')
86 pagesState.appendPageStack('page')
87
88 expect(pagesState.pageStack.length).toBe(1)
89 expect(pagesState.pageStack[0]).toBe('page')
90 })
91
92 it('Unregistered page is automatically popped from stack', () => {
93 const newPage: PageDefinition = {
94 type: PageType.Commands,
95 sections: [],
96 }
97
98 const unregister = pagesState.registerNewPage('page', newPage)
99 pagesState.appendPageStack('page')
100 expect(pagesState.pageStack.length).toBe(1)
101
102 unregister()
103 expect(pagesState.pageStack.length).toBe(0)
104 })
105
106 it('Does not error when popping from empty pagestack', () => {
107 expect(() => pagesState.popPageStack()).not.toThrowError()
108 })
109})