import { expect } from 'chai'
import { screen, fireEvent } from '@testing-library/react'
import renderWithContext from '../helpers/render-with-context'
import FileTreeFolderList from '../../../../../frontend/js/features/file-tree/components/file-tree-folder-list'
describe('', function () {
it('renders empty', function () {
renderWithContext()
screen.queryByRole('tree')
expect(screen.queryByRole('treeitem')).to.not.exist
})
it('renders docs, files and folders', function () {
const aFolder = {
_id: '456def',
name: 'A Folder',
folders: [],
docs: [],
fileRefs: [],
}
const aDoc = { _id: '789ghi', name: 'doc.tex', linkedFileData: {} }
const aFile = { _id: '987jkl', name: 'file.bib', linkedFileData: {} }
renderWithContext(
)
screen.queryByRole('tree')
screen.queryByRole('treeitem', { name: 'A Folder' })
screen.queryByRole('treeitem', { name: 'doc.tex' })
screen.queryByRole('treeitem', { name: 'file.bib' })
})
describe('selection and multi-selection', function () {
it('without write permissions', function () {
const docs = [
{ _id: '1', name: '1.tex' },
{ _id: '2', name: '2.tex' },
]
renderWithContext(
,
{
contextProps: {
permissionsLevel: 'readOnly',
rootFolder: [
{
_id: 'root-folder-id',
name: 'rootFolder',
docs: [{ _id: '1' }, { _id: '2' }],
fileRefs: [],
folders: [],
},
],
},
}
)
const treeitem1 = screen.getByRole('treeitem', { name: '1.tex' })
const treeitem2 = screen.getByRole('treeitem', { name: '2.tex' })
// click on item 1: it gets selected
fireEvent.click(treeitem1)
screen.getByRole('treeitem', { name: '1.tex', selected: true })
screen.getByRole('treeitem', { name: '2.tex', selected: false })
// meta-click on item 2: no changes
fireEvent.click(treeitem2, { ctrlKey: true })
screen.getByRole('treeitem', { name: '1.tex', selected: true })
screen.getByRole('treeitem', { name: '2.tex', selected: false })
})
it('with write permissions', function () {
const docs = [
{ _id: '1', name: '1.tex' },
{ _id: '2', name: '2.tex' },
{ _id: '3', name: '3.tex' },
]
renderWithContext(
,
{
contextProps: {
rootFolder: [
{
_id: 'root-folder-id',
name: 'rootFolder',
docs: [{ _id: '1' }, { _id: '2' }, { _id: '3' }],
fileRefs: [],
folders: [],
},
],
},
}
)
const treeitem1 = screen.getByRole('treeitem', { name: '1.tex' })
const treeitem2 = screen.getByRole('treeitem', { name: '2.tex' })
const treeitem3 = screen.getByRole('treeitem', { name: '3.tex' })
// click item 1: it gets selected
fireEvent.click(treeitem1)
screen.getByRole('treeitem', { name: '1.tex', selected: true })
screen.getByRole('treeitem', { name: '2.tex', selected: false })
screen.getByRole('treeitem', { name: '3.tex', selected: false })
// click on item 2: it gets selected and item 1 is not selected anymore
fireEvent.click(treeitem2)
screen.getByRole('treeitem', { name: '1.tex', selected: false })
screen.getByRole('treeitem', { name: '2.tex', selected: true })
screen.getByRole('treeitem', { name: '3.tex', selected: false })
// meta-click on item 3: it gets selected and item 2 as well
fireEvent.click(treeitem3, { ctrlKey: true })
screen.getByRole('treeitem', { name: '1.tex', selected: false })
screen.getByRole('treeitem', { name: '2.tex', selected: true })
screen.getByRole('treeitem', { name: '3.tex', selected: true })
// meta-click on item 1: add to selection
fireEvent.click(treeitem1, { ctrlKey: true })
screen.getByRole('treeitem', { name: '1.tex', selected: true })
screen.getByRole('treeitem', { name: '2.tex', selected: true })
screen.getByRole('treeitem', { name: '3.tex', selected: true })
// meta-click on item 1: remove from selection
fireEvent.click(treeitem1, { ctrlKey: true })
screen.getByRole('treeitem', { name: '1.tex', selected: false })
screen.getByRole('treeitem', { name: '2.tex', selected: true })
screen.getByRole('treeitem', { name: '3.tex', selected: true })
// meta-click on item 3: remove from selection
fireEvent.click(treeitem3, { ctrlKey: true })
screen.getByRole('treeitem', { name: '1.tex', selected: false })
screen.getByRole('treeitem', { name: '2.tex', selected: true })
screen.getByRole('treeitem', { name: '3.tex', selected: false })
// meta-click on item 2: cannot unselect
fireEvent.click(treeitem2, { ctrlKey: true })
screen.getByRole('treeitem', { name: '1.tex', selected: false })
screen.getByRole('treeitem', { name: '2.tex', selected: true })
screen.getByRole('treeitem', { name: '3.tex', selected: false })
// meta-click on item 3: add back to selection
fireEvent.click(treeitem3, { ctrlKey: true })
screen.getByRole('treeitem', { name: '1.tex', selected: false })
screen.getByRole('treeitem', { name: '2.tex', selected: true })
screen.getByRole('treeitem', { name: '3.tex', selected: true })
// click on item 3: unselect other items
fireEvent.click(treeitem3)
screen.getByRole('treeitem', { name: '1.tex', selected: false })
screen.getByRole('treeitem', { name: '2.tex', selected: false })
screen.getByRole('treeitem', { name: '3.tex', selected: true })
})
})
})