import FileTreeRoot from '../../../../../frontend/js/features/file-tree/components/file-tree-root' import { EditorProviders } from '../../../helpers/editor-providers' describe('FileTree Context Menu Flow', function () { beforeEach(function () { cy.window().then(win => { win.metaAttributesCache.set('ol-user', { id: 'user1' }) }) }) it('opens on contextMenu event', function () { const rootFolder = [ { _id: 'root-folder-id', name: 'rootFolder', docs: [{ _id: '456def', name: 'main.tex' }], folders: [], fileRefs: [], }, ] cy.mount( ) cy.findByRole('menu').should('not.exist') cy.findByRole('treeitem', { name: 'main.tex' }).trigger('contextmenu') cy.findByRole('menu') }) it('should not open on Shift+right-click', function () { const rootFolder = [ { _id: 'root-folder-id', name: 'rootFolder', docs: [{ _id: '456def', name: 'main.tex' }], folders: [], fileRefs: [], }, ] cy.mount( ) cy.findByRole('menu').should('not.exist') cy.findByRole('treeitem', { name: 'main.tex' }).trigger('contextmenu', { button: 2, shiftKey: true, bubbles: true, cancelable: true, force: true, }) cy.findByRole('menu').should('not.exist') }) it('should close an already-open menu on Shift+right-click', function () { const rootFolder = [ { _id: 'root-folder-id', name: 'rootFolder', docs: [{ _id: '456def', name: 'main.tex' }], folders: [], fileRefs: [], }, ] cy.mount( ) cy.findByRole('treeitem', { name: 'main.tex' }).trigger('contextmenu') cy.findByRole('menu').should('exist') cy.findByRole('treeitem', { name: 'main.tex' }).trigger('contextmenu', { button: 2, shiftKey: true, bubbles: true, cancelable: true, force: true, }) cy.findByRole('menu').should('not.exist') }) it('closes when a new selection is started', function () { const rootFolder = [ { _id: 'root-folder-id', name: 'rootFolder', docs: [ { _id: '456def', name: 'main.tex' }, { _id: '456def', name: 'foo.tex' }, ], folders: [], fileRefs: [], }, ] cy.mount( ) cy.findByRole('menu').should('not.exist') cy.findByRole('treeitem', { name: 'main.tex' }).trigger('contextmenu') cy.findByRole('menu') cy.findAllByRole('treeitem', { name: 'foo.tex' }).click() cy.findByRole('menu').should('not.exist') }) it("doesn't open in read only mode", function () { const rootFolder = [ { _id: 'root-folder-id', name: 'rootFolder', docs: [{ _id: '456def', name: 'main.tex' }], folders: [], fileRefs: [], }, ] cy.mount( ) cy.findAllByRole('treeitem', { name: 'main.tex' }).trigger('contextmenu') cy.findByRole('menu').should('not.exist') }) it('shows "set main document" item when appropriate', function () { const rootFolder = [ { _id: 'root-folder-id', name: 'rootFolder', docs: [ { _id: 'main-doc', name: 'main.tex' }, { _id: 'other-doc', name: 'other.tex' }, ], folders: [], fileRefs: [], }, ] cy.mount( ) cy.findByRole('menu').should('not.exist') // main.tex is already the main document cy.findByRole('treeitem', { name: 'main.tex' }).trigger('contextmenu') cy.findByRole('menu') .findByRole('menuitem', { name: 'Set as main document' }) .should('not.exist') // set other.tex as the main document cy.findByRole('treeitem', { name: 'other.tex' }).click({ force: true }) cy.findByRole('treeitem', { name: 'other.tex' }).trigger('contextmenu') cy.intercept('POST', '/project/123abc/settings', { statusCode: 204 }).as( 'update-settings' ) cy.findByRole('menu') .findByRole('menuitem', { name: 'Set as main document' }) .click() cy.wait('@update-settings') .its('request.body.rootDocId') .should('eq', 'other-doc') // main.tex is now not the main document cy.findByRole('treeitem', { name: 'main.tex' }).trigger('contextmenu') cy.findByRole('menu').findByRole('menuitem', { name: 'Set as main document', }) }) })