diff --git a/packages/desktop-gui/cypress/integration/specs_list_spec.js b/packages/desktop-gui/cypress/integration/specs_list_spec.js index 24a4c1e9e7cb..65c3c72d57d5 100644 --- a/packages/desktop-gui/cypress/integration/specs_list_spec.js +++ b/packages/desktop-gui/cypress/integration/specs_list_spec.js @@ -279,6 +279,87 @@ describe('Specs List', function () { }) }) + context('expand/collapse root specs', function () { + describe('with folders', function () { + beforeEach(function () { + this.ipc.getSpecs.yields(null, this.specs) + + this.openProject.resolve(this.config) + }) + + it('collapsing root spec will keep root itself expanded', function () { + cy.get('.level-0 .folder-name').find('a:first').click({ multiple: true }) + cy.get('.folder.folder-collapsed').should('have.length', 3) + cy.get('.folder.folder-expanded').should('have.length', 2) + }) + + it('collapses all children folders', function () { + cy.get('.level-0 .folder-name').find('a:first').click({ multiple: true }) + + const lastCollapsedFolderSelector = '.folder-collapsed:last .folder-name' + const rootSpecCollapsedFoldersSelector = '.folder-collapsed' + + cy.get(lastCollapsedFolderSelector).click() + cy.get(rootSpecCollapsedFoldersSelector).should('have.length', 3) + + cy.get(lastCollapsedFolderSelector).click() + cy.get(rootSpecCollapsedFoldersSelector).should('have.length', 3) + + cy.get(lastCollapsedFolderSelector).click() + cy.get(rootSpecCollapsedFoldersSelector).should('have.length', 3) + + cy.get(lastCollapsedFolderSelector).click() + cy.get(rootSpecCollapsedFoldersSelector).should('have.length', 3) + + cy.get(lastCollapsedFolderSelector).click() + cy.get(rootSpecCollapsedFoldersSelector).should('have.length', 2) + + cy.get(lastCollapsedFolderSelector).click() + cy.get(rootSpecCollapsedFoldersSelector).should('have.length', 2) + + cy.get(lastCollapsedFolderSelector).click() + cy.get(rootSpecCollapsedFoldersSelector).should('have.length', 1) + + cy.get(lastCollapsedFolderSelector).click() + cy.get(rootSpecCollapsedFoldersSelector).should('have.length', 0) + }) + + it('expand all expands all sub folders', function () { + cy.get('.level-0 .folder-name').find('a:first').click({ multiple: true }) + cy.get('.folder-expanded').should('have.length', 2) + cy.get('.folder-collapsed').should('have.length', 3) + + cy.get('.level-0 .folder-name').find('a:last').click({ multiple: true }) + cy.get('.folder-expanded').should('have.length', 10) + cy.get('.folder-collapsed').should('have.length', 0) + }) + }) + + describe('without folders', function () { + beforeEach(function () { + this.ipc.getSpecs.yields(null, { + integration: [ + { + name: 'app_spec.coffee', + relative: 'app_spec.coffee', + }, + { + name: 'account_new_spec.coffee', + relative: 'account_new_spec.coffee', + }, + ], + unit: [], + }) + + this.openProject.resolve(this.config) + }) + + it('hides expand/collapse buttons when there are no folders', function () { + cy.get('.level-0 .folder-name a').should('not.exist') + }) + }) + }) + context('filtering specs', function () { it('scrolls the specs and not the filter', function () { this.ipc.getSpecs.yields(null, this.specs) diff --git a/packages/desktop-gui/src/specs/folder-model.js b/packages/desktop-gui/src/specs/folder-model.js index ddeb48d6486c..9fd27c7497c1 100644 --- a/packages/desktop-gui/src/specs/folder-model.js +++ b/packages/desktop-gui/src/specs/folder-model.js @@ -1,11 +1,13 @@ import { action, computed, observable } from 'mobx' -export default class Directory { +export default class Folder { @observable path @observable displayName @observable isExpanded = true @observable children = [] + isFolder = true + constructor ({ path, displayName }) { this.path = path this.displayName = displayName diff --git a/packages/desktop-gui/src/specs/specs-list.jsx b/packages/desktop-gui/src/specs/specs-list.jsx index 98a654708618..c30eb5f58243 100644 --- a/packages/desktop-gui/src/specs/specs-list.jsx +++ b/packages/desktop-gui/src/specs/specs-list.jsx @@ -117,10 +117,18 @@ class SpecsList extends Component { return projectsApi.runSpec(project, spec, project.chosenBrowser) } + _setExpandRootFolder (specFolderPath, isExpanded, e) { + e.preventDefault() + e.stopPropagation() + + specsStore.setExpandSpecChildren(specFolderPath, isExpanded) + specsStore.setExpandSpecFolder(specFolderPath, true) + } + _selectSpecFolder (specFolderPath, e) { e.preventDefault() - specsStore.setExpandSpecFolder(specFolderPath) + specsStore.toggleExpandSpecFolder(specFolderPath) } _folderContent (spec, nestingLevel) { @@ -132,7 +140,20 @@ class SpecsList extends Component {