MindMap/mind-elixir-core-master/tests/expand-collapse.spec.ts

192 lines
6.3 KiB
TypeScript

import { test, expect } from './mind-elixir-test'
const data = {
nodeData: {
topic: 'root',
id: 'root',
children: [
{
id: 'branch1',
topic: 'Branch 1',
expanded: true,
children: [
{
id: 'child1',
topic: 'Child 1',
},
{
id: 'child2',
topic: 'Child 2',
children: [
{
id: 'grandchild1',
topic: 'Grandchild 1',
},
{
id: 'grandchild2',
topic: 'Grandchild 2',
},
],
},
],
},
{
id: 'branch2',
topic: 'Branch 2',
expanded: false, // Initially collapsed
children: [
{
id: 'child3',
topic: 'Child 3',
},
{
id: 'child4',
topic: 'Child 4',
},
],
},
{
id: 'branch3',
topic: 'Branch 3',
children: [
{
id: 'child5',
topic: 'Child 5',
},
],
},
],
},
}
test.beforeEach(async ({ me }) => {
await me.init(data)
})
test('Expand collapsed node', async ({ page, me }) => {
// Verify initial state: Branch 2 is collapsed
const branch2 = page.getByText('Branch 2', { exact: true })
await expect(branch2).toBeVisible()
// Child nodes should not be visible
await expect(page.getByText('Child 3', { exact: true })).not.toBeVisible()
await expect(page.getByText('Child 4', { exact: true })).not.toBeVisible()
// Click expand button
const expandButton = page.locator('me-tpc[data-nodeid="mebranch2"]').locator('..').locator('me-epd')
await expandButton.click()
// Verify child nodes are now visible
await expect(page.getByText('Child 3', { exact: true })).toBeVisible()
await expect(page.getByText('Child 4', { exact: true })).toBeVisible()
})
test('Collapse expanded node', async ({ page, me }) => {
// Branch 1 is initially expanded
await expect(page.getByText('Child 1', { exact: true })).toBeVisible()
await expect(page.getByText('Child 2', { exact: true })).toBeVisible()
// Click collapse button
const collapseButton = page.locator('me-tpc[data-nodeid="mebranch1"]').locator('..').locator('me-epd')
await collapseButton.click()
// Verify child nodes are now not visible
await expect(page.getByText('Child 1', { exact: true })).not.toBeVisible()
await expect(page.getByText('Child 2', { exact: true })).not.toBeVisible()
})
test('Expand all children recursively', async ({ page, me }) => {
// First collapse Branch 1
const branch1Button = page.locator('me-tpc[data-nodeid="mebranch1"]').locator('..').locator('me-epd')
await branch1Button.click()
// Verify all child nodes are not visible
await expect(page.getByText('Child 1', { exact: true })).not.toBeVisible()
await expect(page.getByText('Child 2', { exact: true })).not.toBeVisible()
await expect(page.getByText('Grandchild 1', { exact: true })).not.toBeVisible()
// Ctrl click for recursive expansion
await page.keyboard.down("Control");
await branch1Button.click()
await page.keyboard.up("Control");
// Verify all levels of child nodes are visible
await expect(page.getByText('Child 1', { exact: true })).toBeVisible()
await expect(page.getByText('Child 2', { exact: true })).toBeVisible()
await expect(page.getByText('Grandchild 1', { exact: true })).toBeVisible()
await expect(page.getByText('Grandchild 2', { exact: true })).toBeVisible()
})
test('Auto expand when moving node to collapsed parent', async ({ page, me }) => {
// First ensure Branch 2 is collapsed
const branch2 = page.getByText('Branch 2', { exact: true })
await expect(page.getByText('Child 3', { exact: true })).not.toBeVisible()
// Select Child 5 for moving
const child5 = page.getByText('Child 5', { exact: true })
await child5.hover({ force: true })
await page.mouse.down()
// Drag to collapsed Branch 2
await me.dragOver('Branch 2', 'in')
await expect(page.locator('.insert-preview.in')).toBeVisible()
// Release mouse to complete move
await page.mouse.up()
// Verify Branch 2 auto-expands and Child 5 is now in it
await expect(page.getByText('Child 3', { exact: true })).toBeVisible()
await expect(page.getByText('Child 4', { exact: true })).toBeVisible()
await expect(page.getByText('Child 5', { exact: true })).toBeVisible()
// Verify Child 5 actually moved under Branch 2
const branch2Container = page.locator('me-tpc[data-nodeid="mebranch2"]').locator('..').locator('..').locator('me-children')
await expect(branch2Container.getByText('Child 5', { exact: true })).toBeVisible()
})
test('Auto expand when copying node to collapsed parent', async ({ page, me }) => {
// Ensure Branch 2 is collapsed
await expect(page.getByText('Child 3', { exact: true })).not.toBeVisible()
// Select Child 1 and copy
await me.click('Child 1')
await page.keyboard.press('Control+c')
// Select collapsed Branch 2
await me.click('Branch 2')
// Paste
await page.keyboard.press('Control+v')
// Verify Branch 2 auto-expands and contains copied node
await expect(page.getByText('Child 3', { exact: true })).toBeVisible()
await expect(page.getByText('Child 4', { exact: true })).toBeVisible()
// Should have two "Child 1" (original and copied)
const child1Elements = page.getByText('Child 1', { exact: true })
await expect(child1Elements).toHaveCount(2)
})
test('Expand state persistence after layout refresh', async ({ page, me }) => {
// Expand Branch 2
const expandButton = page.locator('me-tpc[data-nodeid="mebranch2"]').locator('..').locator('me-epd')
await expandButton.click()
await expect(page.getByText('Child 3', { exact: true })).toBeVisible()
// Get current data and reinitialize
const currentData = await me.getData()
await me.init(currentData)
// Verify expand state persists
await expect(page.getByText('Child 3', { exact: true })).toBeVisible()
await expect(page.getByText('Child 4', { exact: true })).toBeVisible()
})