2020-09-18 06:05:05 -04:00
|
|
|
import { expect } from 'chai'
|
|
|
|
import React from 'react'
|
|
|
|
import sinon from 'sinon'
|
2020-12-14 06:44:10 -05:00
|
|
|
import { screen, fireEvent } from '@testing-library/react'
|
2020-09-18 06:05:05 -04:00
|
|
|
|
|
|
|
import OutlinePane from '../../../../../frontend/js/features/outline/components/outline-pane'
|
2020-12-14 06:44:10 -05:00
|
|
|
import { renderWithEditorContext } from '../../../helpers/render-with-context'
|
2020-09-18 06:05:05 -04:00
|
|
|
|
|
|
|
describe('<OutlinePane />', function() {
|
|
|
|
const jumpToLine = () => {}
|
|
|
|
const onToggle = sinon.stub()
|
|
|
|
const eventTracking = { sendMB: sinon.stub() }
|
|
|
|
|
2020-12-14 06:44:10 -05:00
|
|
|
function render(children) {
|
|
|
|
renderWithEditorContext(children, { projectId: '123abc' })
|
|
|
|
}
|
|
|
|
|
2021-02-09 10:39:44 -05:00
|
|
|
let originalLocalStorage
|
2020-09-18 06:05:05 -04:00
|
|
|
before(function() {
|
2021-02-09 10:39:44 -05:00
|
|
|
originalLocalStorage = global.localStorage
|
|
|
|
|
|
|
|
Object.defineProperty(global, 'localStorage', {
|
|
|
|
value: {
|
|
|
|
getItem: sinon.stub().returns(null),
|
|
|
|
setItem: sinon.stub()
|
|
|
|
}
|
|
|
|
})
|
2020-09-18 06:05:05 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
afterEach(function() {
|
|
|
|
onToggle.reset()
|
|
|
|
eventTracking.sendMB.reset()
|
|
|
|
global.localStorage.getItem.resetHistory()
|
|
|
|
global.localStorage.setItem.resetHistory()
|
|
|
|
})
|
|
|
|
|
|
|
|
after(function() {
|
2021-02-09 10:39:44 -05:00
|
|
|
Object.defineProperty(global, 'localStorage', {
|
|
|
|
value: originalLocalStorage
|
|
|
|
})
|
2020-09-18 06:05:05 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
it('renders expanded outline', function() {
|
|
|
|
const outline = [
|
|
|
|
{
|
|
|
|
title: 'Section',
|
|
|
|
line: 1,
|
|
|
|
level: 10
|
|
|
|
}
|
|
|
|
]
|
|
|
|
render(
|
|
|
|
<OutlinePane
|
|
|
|
isTexFile
|
|
|
|
outline={outline}
|
|
|
|
jumpToLine={jumpToLine}
|
|
|
|
onToggle={onToggle}
|
|
|
|
eventTracking={eventTracking}
|
|
|
|
/>
|
|
|
|
)
|
|
|
|
|
|
|
|
screen.getByRole('tree')
|
|
|
|
})
|
|
|
|
|
|
|
|
it('renders disabled outline', function() {
|
|
|
|
const outline = []
|
|
|
|
render(
|
|
|
|
<OutlinePane
|
|
|
|
isTexFile={false}
|
|
|
|
outline={outline}
|
|
|
|
jumpToLine={jumpToLine}
|
|
|
|
onToggle={onToggle}
|
|
|
|
eventTracking={eventTracking}
|
|
|
|
/>
|
|
|
|
)
|
|
|
|
|
|
|
|
expect(screen.queryByRole('tree')).to.be.null
|
|
|
|
})
|
|
|
|
|
|
|
|
it('expand outline and use local storage', function() {
|
|
|
|
global.localStorage.getItem.returns(false)
|
|
|
|
const outline = [
|
|
|
|
{
|
|
|
|
title: 'Section',
|
|
|
|
line: 1,
|
|
|
|
level: 10
|
|
|
|
}
|
|
|
|
]
|
|
|
|
render(
|
|
|
|
<OutlinePane
|
|
|
|
isTexFile
|
|
|
|
outline={outline}
|
|
|
|
jumpToLine={jumpToLine}
|
|
|
|
onToggle={onToggle}
|
|
|
|
eventTracking={eventTracking}
|
|
|
|
/>
|
|
|
|
)
|
|
|
|
|
|
|
|
expect(screen.queryByRole('tree')).to.be.null
|
|
|
|
const collapseButton = screen.getByRole('button', {
|
|
|
|
name: 'Show File outline'
|
|
|
|
})
|
|
|
|
fireEvent.click(collapseButton)
|
|
|
|
|
|
|
|
screen.getByRole('tree')
|
|
|
|
expect(global.localStorage.setItem).to.be.calledOnce
|
|
|
|
expect(global.localStorage.setItem).to.be.calledWithMatch(/123abc/, 'true')
|
|
|
|
expect(onToggle).to.be.calledTwice
|
|
|
|
})
|
|
|
|
})
|