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) // }) // }) })