158 lines
3.9 KiB
TypeScript
158 lines
3.9 KiB
TypeScript
import {RootStoreModel} from './../../../src/state/models/root-store'
|
|
import {NavigationModel} from './../../../src/state/models/navigation'
|
|
import * as flags from '../../../src/lib/build-flags'
|
|
import AtpAgent from '@atproto/api'
|
|
import {DEFAULT_SERVICE} from '../../../src/state'
|
|
|
|
describe('NavigationModel', () => {
|
|
let model: NavigationModel
|
|
let rootStore: RootStoreModel
|
|
|
|
beforeEach(() => {
|
|
rootStore = new RootStoreModel(new AtpAgent({service: DEFAULT_SERVICE}))
|
|
model = new NavigationModel(rootStore)
|
|
model.setTitle('0-0', 'title')
|
|
})
|
|
|
|
afterAll(() => {
|
|
jest.clearAllMocks()
|
|
})
|
|
|
|
it('should clear() to the correct base state', async () => {
|
|
await model.clear()
|
|
expect(model.tabCount).toBe(3)
|
|
expect(model.tab).toEqual({
|
|
fixedTabPurpose: 0,
|
|
history: [
|
|
{
|
|
id: expect.anything(),
|
|
ts: expect.anything(),
|
|
url: '/',
|
|
},
|
|
],
|
|
id: expect.anything(),
|
|
index: 0,
|
|
isNewTab: false,
|
|
})
|
|
})
|
|
|
|
it('should call the navigate method', async () => {
|
|
const navigateSpy = jest.spyOn(model.tab, 'navigate')
|
|
await model.navigate('testurl', 'teststring')
|
|
expect(navigateSpy).toHaveBeenCalledWith('testurl', 'teststring')
|
|
})
|
|
|
|
it('should call the refresh method', async () => {
|
|
const refreshSpy = jest.spyOn(model.tab, 'refresh')
|
|
await model.refresh()
|
|
expect(refreshSpy).toHaveBeenCalled()
|
|
})
|
|
|
|
it('should call the isCurrentScreen method', () => {
|
|
expect(model.isCurrentScreen('11', 0)).toEqual(false)
|
|
})
|
|
|
|
it('should call the tab getter', () => {
|
|
expect(model.tab).toEqual({
|
|
fixedTabPurpose: 0,
|
|
history: [
|
|
{
|
|
id: expect.anything(),
|
|
ts: expect.anything(),
|
|
url: '/',
|
|
},
|
|
],
|
|
id: expect.anything(),
|
|
index: 0,
|
|
isNewTab: false,
|
|
})
|
|
})
|
|
|
|
it('should call the tabCount getter', () => {
|
|
expect(model.tabCount).toBe(3)
|
|
})
|
|
|
|
describe('tabs not enabled', () => {
|
|
jest.mock('../../../src/build-flags', () => ({
|
|
TABS_ENABLED: false,
|
|
}))
|
|
|
|
afterAll(() => {
|
|
jest.clearAllMocks()
|
|
})
|
|
|
|
it('should not create new tabs', () => {
|
|
// @ts-expect-error
|
|
flags.TABS_ENABLED = false
|
|
model.newTab('testurl')
|
|
expect(model.tab.isNewTab).toBe(false)
|
|
expect(model.tabIndex).toBe(0)
|
|
})
|
|
|
|
it('should not change the active tab', () => {
|
|
// @ts-expect-error
|
|
flags.TABS_ENABLED = false
|
|
model.setActiveTab(3)
|
|
expect(model.tabIndex).toBe(0)
|
|
})
|
|
|
|
it('should note close tabs', () => {
|
|
// @ts-expect-error
|
|
flags.TABS_ENABLED = false
|
|
model.closeTab(0)
|
|
expect(model.tabCount).toBe(3)
|
|
})
|
|
})
|
|
|
|
// TODO restore when tabs get re-enabled
|
|
// describe('tabs enabled', () => {
|
|
// jest.mock('../../../src/build-flags', () => ({
|
|
// TABS_ENABLED: true,
|
|
// }))
|
|
|
|
// afterAll(() => {
|
|
// jest.clearAllMocks()
|
|
// })
|
|
|
|
// it('should create new tabs', () => {
|
|
// // @ts-expect-error
|
|
// flags.TABS_ENABLED = true
|
|
|
|
// model.newTab('testurl', 'title')
|
|
// expect(model.tab.isNewTab).toBe(true)
|
|
// expect(model.tabIndex).toBe(2)
|
|
// })
|
|
|
|
// it('should change the current tab', () => {
|
|
// // @ts-expect-error
|
|
// flags.TABS_ENABLED = true
|
|
|
|
// model.setActiveTab(0)
|
|
// expect(model.tabIndex).toBe(0)
|
|
// })
|
|
|
|
// it('should close tabs', () => {
|
|
// // @ts-expect-error
|
|
// flags.TABS_ENABLED = true
|
|
|
|
// model.closeTab(0)
|
|
// expect(model.tabs).toEqual([
|
|
// {
|
|
// fixedTabPurpose: 1,
|
|
// history: [
|
|
// {
|
|
// id: expect.anything(),
|
|
// ts: expect.anything(),
|
|
// url: '/notifications',
|
|
// },
|
|
// ],
|
|
// id: expect.anything(),
|
|
// index: 0,
|
|
// isNewTab: false,
|
|
// },
|
|
// ])
|
|
// expect(model.tabIndex).toBe(0)
|
|
// })
|
|
// })
|
|
})
|