diff --git a/e2e/cypress/component/1-store/actions/edges/removeSelectedEdges.cy.ts b/e2e/cypress/component/1-store/actions/edges/removeSelectedEdges.cy.ts new file mode 100644 index 00000000..22b1c972 --- /dev/null +++ b/e2e/cypress/component/1-store/actions/edges/removeSelectedEdges.cy.ts @@ -0,0 +1,34 @@ +import { useVueFlow } from '@braks/vue-flow' +import { getElements } from '../../../../utils' + +const { nodes, edges } = getElements() + +describe('Store Action: `removeSelectedEdges`', () => { + const store = useVueFlow({ id: 'test' }) + let randomNumber: number + let randomNumber2: number + + beforeEach(() => { + cy.vueFlow({ + nodes, + edges, + }) + }) + + beforeEach(() => { + randomNumber = Math.floor(Math.random() * edges.length) + randomNumber2 = Math.floor(Math.random() * randomNumber) + store.addSelectedEdges(Array.from({ length: randomNumber }, (_, i) => store.edges.value[i])) + store.removeSelectedEdges(Array.from({ length: randomNumber2 }, (_, i) => store.edges.value[i])) + }) + + it('removes selected edges from store', () => { + expect(store.getSelectedEdges.value).to.have.length(randomNumber2) + }) + + it('removes `selected` class from edges', () => { + cy.get('.vue-flow__edge').then((edges) => { + expect(edges[randomNumber2 - 1]).to.have.class('selected') + }) + }) +}) diff --git a/e2e/cypress/component/1-store/actions/elements/removeSelectedElements.cy.ts b/e2e/cypress/component/1-store/actions/elements/removeSelectedElements.cy.ts new file mode 100644 index 00000000..e8bab7a4 --- /dev/null +++ b/e2e/cypress/component/1-store/actions/elements/removeSelectedElements.cy.ts @@ -0,0 +1,48 @@ +import type { GraphEdge, GraphNode } from '@braks/vue-flow' +import { isNode, useVueFlow } from '@braks/vue-flow' +import { getElements } from '../../../../utils' + +const { nodes, edges } = getElements() + +describe('Store Action: `removeSelectedElements`', () => { + const store = useVueFlow({ id: 'test' }) + let randomNumber: number + let randomNumber2: number + + beforeEach(() => { + cy.vueFlow({ + nodes, + edges, + }) + }) + + it('removes passed elements from selected elements in store', () => { + randomNumber = Math.floor(Math.random() * [...nodes, ...edges].length) + randomNumber2 = Math.floor(Math.random() * randomNumber) + store.addSelectedElements(Array.from({ length: randomNumber }, (_, i) => store.getElements.value[i])) + store.removeSelectedElements( + Array.from({ length: randomNumber2 }, (_, i) => store.getElements.value[i]).reduce( + (acc, curr) => { + if (isNode(curr)) { + acc.nodes.push(curr) + } else { + acc.edges.push(curr) + } + + return acc + }, + { nodes: [] as GraphNode[], edges: [] as GraphEdge[] }, + ), + ) + + expect(store.getSelectedElements.value).to.have.length(randomNumber2) + }) + + it('resets all selected elements in store when no argument is passed', () => { + randomNumber = Math.floor(Math.random() * [...nodes, ...edges].length) + store.addSelectedElements(Array.from({ length: randomNumber }, (_, i) => store.getElements.value[i])) + store.removeSelectedElements() + + expect(store.getSelectedElements.value).to.have.length(0) + }) +}) diff --git a/e2e/cypress/component/1-store/actions/nodes/removeSelectedNodes.cy.ts b/e2e/cypress/component/1-store/actions/nodes/removeSelectedNodes.cy.ts new file mode 100644 index 00000000..ffe1435e --- /dev/null +++ b/e2e/cypress/component/1-store/actions/nodes/removeSelectedNodes.cy.ts @@ -0,0 +1,34 @@ +import { useVueFlow } from '@braks/vue-flow' +import { getElements } from '../../../../utils' + +const { nodes, edges } = getElements() + +describe('Store Action: `removeSelectedNodes`', () => { + const store = useVueFlow({ id: 'test' }) + let randomNumber: number + let randomNumber2: number + + beforeEach(() => { + cy.vueFlow({ + nodes, + edges, + }) + }) + + beforeEach(() => { + randomNumber = Math.floor(Math.random() * nodes.length) + randomNumber2 = Math.floor(Math.random() * randomNumber) + store.addSelectedNodes(Array.from({ length: randomNumber }, (_, i) => store.nodes.value[i])) + store.removeSelectedNodes(Array.from({ length: randomNumber2 }, (_, i) => store.nodes.value[i])) + }) + + it('removes selected nodes from store', () => { + expect(store.getSelectedNodes.value).to.have.length(randomNumber2) + }) + + it('removes `selected` class from nodes', () => { + cy.get('.vue-flow__node').then((nodes) => { + expect(nodes[randomNumber2 - 1]).to.have.class('selected') + }) + }) +})