MindMap/mind-elixir-core-master/tests/operation-history.spec.ts

294 lines
8.8 KiB
TypeScript
Raw Normal View History

import { test, expect } from './mind-elixir-test'
const complexData = {
nodeData: {
topic: 'Main Topic',
id: 'main',
children: [
{
id: 'branch-a',
topic: 'Branch A',
children: [
{
id: 'leaf-a1',
topic: 'Leaf A1',
},
{
id: 'leaf-a2',
topic: 'Leaf A2',
},
],
},
{
id: 'branch-b',
topic: 'Branch B',
children: [
{
id: 'leaf-b1',
topic: 'Leaf B1',
},
],
},
],
},
}
test.beforeEach(async ({ me }) => {
await me.init(complexData)
})
test('Operation History - Single Node Operations', async ({ page, me }) => {
// Test createNode operation
await me.click('Leaf A1')
await page.keyboard.press('Tab') // Add child
await page.keyboard.press('Enter')
await expect(me.getByText('New Node')).toBeVisible()
// Undo createNode
await page.keyboard.press('Control+z')
await expect(me.getByText('New Node')).toBeHidden()
// Redo createNode
await page.keyboard.press('Control+y')
await expect(me.getByText('New Node')).toBeVisible()
// Test removeNode operation
await page.keyboard.press('Delete')
await expect(me.getByText('New Node')).toBeHidden()
// Undo removeNode
await page.keyboard.press('Control+z')
await expect(me.getByText('New Node')).toBeVisible()
})
test('Operation History - Node Edit Operations', async ({ page, me }) => {
const originalText = 'Leaf A2'
const editedText = 'Modified Leaf A2'
// Test finishEdit operation
await me.dblclick(originalText)
await page.keyboard.press('Control+a')
await page.keyboard.insertText(editedText)
await page.keyboard.press('Enter')
await expect(me.getByText(editedText)).toBeVisible()
// Undo edit
await page.keyboard.press('Control+z')
await expect(me.getByText(originalText)).toBeVisible()
await expect(me.getByText(editedText)).toBeHidden()
// Redo edit
await page.keyboard.press('Control+y')
await expect(me.getByText(editedText)).toBeVisible()
await expect(me.getByText(originalText)).toBeHidden()
})
test('Operation History - Multiple Node Operations', async ({ page, me }) => {
// Select multiple nodes using drag selection
await me.dragSelect('Leaf A1', 'Leaf A2')
// Remove multiple nodes
await page.keyboard.press('Delete')
await expect(me.getByText('Leaf A1')).toBeHidden()
await expect(me.getByText('Leaf A2')).toBeHidden()
// Undo removeNodes operation
await page.keyboard.press('Control+z')
await expect(me.getByText('Leaf A1')).toBeVisible()
await expect(me.getByText('Leaf A2')).toBeVisible()
// Redo removeNodes operation
await page.keyboard.press('Control+y')
await expect(me.getByText('Leaf A1')).toBeHidden()
await expect(me.getByText('Leaf A2')).toBeHidden()
})
test('Operation History - Copy Multiple Nodes', async ({ page, me }) => {
// Select and copy multiple nodes
await me.dragSelect('Leaf A1', 'Leaf A2')
await page.keyboard.press('Control+c')
// Paste to another location
await me.click('Branch B')
await page.keyboard.press('Control+v')
// Should have copied nodes under Branch B
const leafA1Nodes = me.getByText('Leaf A1')
const leafA2Nodes = me.getByText('Leaf A2')
await expect(leafA1Nodes).toHaveCount(2)
await expect(leafA2Nodes).toHaveCount(2)
// Undo copyNodes operation
await page.keyboard.press('Control+z')
await expect(leafA1Nodes).toHaveCount(1)
await expect(leafA2Nodes).toHaveCount(1)
// Redo copyNodes operation
await page.keyboard.press('Control+y')
await expect(leafA1Nodes).toHaveCount(2)
await expect(leafA2Nodes).toHaveCount(2)
})
test('Operation History - Node Movement Operations', async ({ page, me }) => {
// Test moveNodeBefore operation
await me.click('Leaf A2')
await page.keyboard.press('Alt+ArrowUp') // Move up (before sibling)
// Undo move operation
await page.keyboard.press('Control+z')
// Redo move operation
await page.keyboard.press('Control+y')
// Test moveNodeAfter operation
await page.keyboard.press('Alt+ArrowDown') // Move down (after sibling)
// Undo move operation
await page.keyboard.press('Control+z')
// Redo move operation
await page.keyboard.press('Control+y')
})
test('Operation History - Complex Operation Sequence', async ({ page, me }) => {
// Perform a complex sequence of operations
// 1. Edit a node
await me.dblclick('Branch A')
await page.keyboard.press('Control+a')
await page.keyboard.insertText('Modified Branch A')
await page.keyboard.press('Enter')
// 2. Add a child to the modified node
await page.keyboard.press('Tab')
await page.keyboard.press('Enter')
// 3. Edit the new child
await me.dblclick('New Node')
await page.keyboard.press('Control+a')
await page.keyboard.insertText('New Child Node')
await page.keyboard.press('Enter')
// 4. Copy the branch
await me.click('Modified Branch A')
await page.keyboard.press('Control+c')
// 5. Paste to main topic
await me.click('Main Topic')
await page.keyboard.press('Control+v')
// Verify all operations completed
await expect(me.getByText('Modified Branch A')).toHaveCount(2)
await expect(me.getByText('New Child Node')).toHaveCount(2)
// Undo operations step by step
await page.keyboard.press('Control+z') // Undo paste
await expect(me.getByText('Modified Branch A')).toHaveCount(1)
await expect(me.getByText('New Child Node')).toHaveCount(1)
await page.keyboard.press('Control+z') // Undo edit new child
await expect(me.getByText('New Child Node')).toBeHidden()
await expect(me.getByText('New Node')).toBeVisible()
await page.keyboard.press('Control+z') // Undo add child
await expect(me.getByText('New Node')).toBeHidden()
await page.keyboard.press('Control+z') // Undo edit branch
await expect(me.getByText('Modified Branch A')).toBeHidden()
await expect(me.getByText('Branch A')).toBeVisible()
// Redo all operations
await page.keyboard.press('Control+y') // Redo edit branch
await expect(me.getByText('Modified Branch A')).toBeVisible()
await page.keyboard.press('Control+y') // Redo add child
await expect(me.getByText('New Node')).toBeVisible()
await page.keyboard.press('Control+y') // Redo edit new child
await expect(me.getByText('New Child Node')).toBeVisible()
await page.keyboard.press('Control+y') // Redo paste
await expect(me.getByText('Modified Branch A')).toHaveCount(2)
})
test('Operation History - History Branching', async ({ page, me }) => {
// Perform an operation
await me.click('Leaf B1')
await page.keyboard.press('Enter')
await page.keyboard.press('Enter')
await expect(me.getByText('New Node')).toBeVisible()
// Undo the operation
await page.keyboard.press('Control+z')
await expect(me.getByText('New Node')).toBeHidden()
// Perform a different operation (this should clear the redo history)
await page.keyboard.press('Tab') // Add child instead
await page.keyboard.press('Enter')
await expect(me.getByText('New Node')).toBeVisible()
// Try to redo the original operation (should not work)
await page.keyboard.press('Control+y')
// The new child should still be there, not the sibling
await expect(me.getByText('New Node')).toBeVisible()
// Undo the child operation
await page.keyboard.press('Control+z')
await expect(me.getByText('New Node')).toBeHidden()
})
test('Operation History - Node Selection After Undo/Redo', async ({ page, me }) => {
// Add a node and verify selection
await me.click('Branch B')
await page.keyboard.press('Tab')
await page.keyboard.press('Enter')
// The new node should be selected
const newNode = me.getByText('New Node')
await expect(newNode).toBeVisible()
// Undo - should restore selection to Branch B
await page.keyboard.press('Control+z')
await expect(newNode).toBeHidden()
// Verify Branch B is selected by performing an action
await page.keyboard.press('Enter') // Add sibling
await page.keyboard.press('Enter')
await expect(me.getByText('New Node')).toBeVisible()
// Clean up
await page.keyboard.press('Control+z')
})
test('Operation History - Stress Test Multiple Rapid Operations', async ({ page, me }) => {
// Perform many rapid operations
await me.click('Main Topic')
for (let i = 0; i < 5; i++) {
await page.keyboard.press('Tab') // Add child
await page.keyboard.press('Enter')
await page.keyboard.press('Enter') // Add sibling
await page.keyboard.press('Enter')
}
// Should have multiple new nodes
const newNodes = me.getByText('New Node')
await expect(newNodes).toHaveCount(10)
// Undo all operations
for (let i = 0; i < 10; i++) {
await page.keyboard.press('Control+z')
}
// Should be back to original state
await expect(newNodes).toHaveCount(0)
// Redo all operations
for (let i = 0; i < 10; i++) {
await page.keyboard.press('Control+y')
}
// Should have all nodes back
await expect(newNodes).toHaveCount(10)
})