236 lines
7.4 KiB
TypeScript
236 lines
7.4 KiB
TypeScript
import { test, expect } from './mind-elixir-test'
|
|
|
|
const data = {
|
|
nodeData: {
|
|
topic: 'Root Node',
|
|
id: 'root',
|
|
children: [
|
|
{
|
|
id: 'left-1',
|
|
topic: 'Left Branch 1',
|
|
children: [
|
|
{
|
|
id: 'left-1-1',
|
|
topic: 'Left Child 1',
|
|
},
|
|
{
|
|
id: 'left-1-2',
|
|
topic: 'Left Child 2',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'right-1',
|
|
topic: 'Right Branch 1',
|
|
children: [
|
|
{
|
|
id: 'right-1-1',
|
|
topic: 'Right Child 1',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
}
|
|
|
|
test.beforeEach(async ({ me }) => {
|
|
await me.init(data)
|
|
})
|
|
|
|
test('Keyboard Shortcuts - Ctrl+Z for Undo', async ({ page, me }) => {
|
|
// Perform an operation that can be undone
|
|
await me.click('Left Child 1')
|
|
await page.keyboard.press('Delete')
|
|
await expect(page.getByText('Left Child 1')).toBeHidden()
|
|
|
|
// Test Ctrl+Z
|
|
await page.keyboard.press('Control+z')
|
|
await expect(page.getByText('Left Child 1')).toBeVisible()
|
|
})
|
|
|
|
test('Keyboard Shortcuts - Ctrl+Y for Redo', async ({ page, me }) => {
|
|
// Perform and undo an operation
|
|
await me.click('Left Child 1')
|
|
await page.keyboard.press('Delete')
|
|
await page.keyboard.press('Control+z')
|
|
await expect(page.getByText('Left Child 1')).toBeVisible()
|
|
|
|
// Test Ctrl+Y
|
|
await page.keyboard.press('Control+y')
|
|
await expect(page.getByText('Left Child 1')).toBeHidden()
|
|
})
|
|
|
|
test('Keyboard Shortcuts - Ctrl+Shift+Z for Redo', async ({ page, me }) => {
|
|
// Perform and undo an operation
|
|
await me.click('Right Child 1')
|
|
await page.keyboard.press('Tab') // Add child
|
|
await page.keyboard.press('Enter')
|
|
await expect(page.getByText('New Node')).toBeVisible()
|
|
|
|
await page.keyboard.press('Control+z') // Undo
|
|
await expect(page.getByText('New Node')).toBeHidden()
|
|
|
|
// Test Ctrl+Shift+Z (alternative redo)
|
|
await page.keyboard.press('Control+Shift+Z')
|
|
await expect(page.getByText('New Node')).toBeVisible()
|
|
})
|
|
|
|
test('Keyboard Shortcuts - Meta+Z for Undo (Mac style)', async ({ page, me }) => {
|
|
// This test simulates Mac-style shortcuts
|
|
await me.click('Right Branch 1')
|
|
await page.keyboard.press('Enter') // Add sibling
|
|
await page.keyboard.press('Enter')
|
|
await expect(page.getByText('New Node')).toBeVisible()
|
|
|
|
// Test Meta+Z (Mac style undo)
|
|
await page.keyboard.press('Meta+z')
|
|
await expect(page.getByText('New Node')).toBeHidden()
|
|
})
|
|
|
|
test('Keyboard Shortcuts - Meta+Y for Redo (Mac style)', async ({ page, me }) => {
|
|
// Perform and undo an operation
|
|
await me.click('Left Branch 1')
|
|
await page.keyboard.press('Shift+Enter') // Add before
|
|
await page.keyboard.press('Enter')
|
|
await expect(page.getByText('New Node')).toBeVisible()
|
|
|
|
await page.keyboard.press('Meta+z') // Undo
|
|
await expect(page.getByText('New Node')).toBeHidden()
|
|
|
|
// Test Meta+Y (Mac style redo)
|
|
await page.keyboard.press('Meta+y')
|
|
await expect(page.getByText('New Node')).toBeVisible()
|
|
})
|
|
|
|
test('Keyboard Shortcuts - Meta+Shift+Z for Redo (Mac style)', async ({ page, me }) => {
|
|
// Perform and undo an operation
|
|
await me.click('Left Child 2')
|
|
await page.keyboard.press('Control+Enter') // Add parent
|
|
await page.keyboard.press('Enter')
|
|
await expect(page.getByText('New Node')).toBeVisible()
|
|
|
|
await page.keyboard.press('Meta+z') // Undo
|
|
await expect(page.getByText('New Node')).toBeHidden()
|
|
|
|
// Test Meta+Shift+Z (Mac style alternative redo)
|
|
await page.keyboard.press('Meta+Shift+Z')
|
|
await expect(page.getByText('New Node')).toBeVisible()
|
|
})
|
|
|
|
test('Keyboard Shortcuts - Rapid Undo/Redo Sequence', async ({ page, me }) => {
|
|
// Perform multiple operations
|
|
await me.click('Root Node')
|
|
|
|
// Operation 1: Add child
|
|
await page.keyboard.press('Tab')
|
|
await page.keyboard.press('Enter')
|
|
await expect(page.getByText('New Node')).toBeVisible()
|
|
|
|
// Operation 2: Edit the new node
|
|
await me.dblclick('New Node')
|
|
await page.keyboard.press('Control+a')
|
|
await page.keyboard.insertText('Edited Node')
|
|
await page.keyboard.press('Enter')
|
|
await expect(page.getByText('Edited Node')).toBeVisible()
|
|
|
|
// Operation 3: Add sibling
|
|
await page.keyboard.press('Enter')
|
|
await page.keyboard.press('Enter')
|
|
const newNodes = page.getByText('New Node')
|
|
await expect(newNodes).toHaveCount(1)
|
|
|
|
// Rapid undo sequence
|
|
await page.keyboard.press('Control+z') // Undo add sibling
|
|
await expect(newNodes).toHaveCount(0)
|
|
|
|
await page.keyboard.press('Control+z') // Undo edit
|
|
await expect(page.getByText('Edited Node')).toBeHidden()
|
|
await expect(page.getByText('New Node')).toBeVisible()
|
|
|
|
await page.keyboard.press('Control+z') // Undo add child
|
|
await expect(page.getByText('New Node')).toBeHidden()
|
|
|
|
// Rapid redo sequence
|
|
await page.keyboard.press('Control+y') // Redo add child
|
|
await expect(page.getByText('New Node')).toBeVisible()
|
|
|
|
await page.keyboard.press('Control+y') // Redo edit
|
|
await expect(page.getByText('Edited Node')).toBeVisible()
|
|
|
|
await page.keyboard.press('Control+y') // Redo add sibling
|
|
await expect(newNodes).toHaveCount(1)
|
|
})
|
|
|
|
test('Keyboard Shortcuts - Undo/Redo with Node Movement', async ({ page, me }) => {
|
|
// Move a node using keyboard shortcuts
|
|
await me.click('Left Child 1')
|
|
await page.keyboard.press('Alt+ArrowUp') // Move up
|
|
|
|
// Verify the node moved (this depends on the specific implementation)
|
|
// We'll check by trying to undo the move
|
|
await page.keyboard.press('Control+z')
|
|
|
|
// Redo the move
|
|
await page.keyboard.press('Control+y')
|
|
})
|
|
|
|
test('Keyboard Shortcuts - Undo/Redo Edge Cases', async ({ page, me }) => {
|
|
// Test undo when at the beginning of history
|
|
await page.keyboard.press('Control+z')
|
|
await page.keyboard.press('Control+z')
|
|
await page.keyboard.press('Control+z')
|
|
// Should not crash or cause issues
|
|
await expect(page.getByText('Root Node')).toBeVisible()
|
|
|
|
// Perform an operation
|
|
await me.click('Right Child 1')
|
|
await page.keyboard.press('Delete')
|
|
await expect(page.getByText('Right Child 1')).toBeHidden()
|
|
|
|
// Test redo when at the end of history
|
|
await page.keyboard.press('Control+y')
|
|
await page.keyboard.press('Control+y')
|
|
await page.keyboard.press('Control+y')
|
|
// Should not crash or cause issues
|
|
await expect(page.getByText('Right Child 1')).toBeHidden()
|
|
})
|
|
|
|
test('Keyboard Shortcuts - Undo/Redo with Complex Node Operations', async ({ page, me }) => {
|
|
// Test with copy/paste operations
|
|
await me.click('Left Branch 1')
|
|
await page.keyboard.press('Control+c') // Copy
|
|
|
|
await me.click('Right Branch 1')
|
|
await page.keyboard.press('Control+v') // Paste
|
|
|
|
// Should have two "Left Branch 1" nodes now
|
|
const leftBranchNodes = page.getByText('Left Branch 1')
|
|
await expect(leftBranchNodes).toHaveCount(2)
|
|
|
|
// Undo the paste
|
|
await page.keyboard.press('Control+z')
|
|
await expect(leftBranchNodes).toHaveCount(1)
|
|
|
|
// Redo the paste
|
|
await page.keyboard.press('Control+y')
|
|
await expect(leftBranchNodes).toHaveCount(2)
|
|
})
|
|
|
|
test('Keyboard Shortcuts - Undo/Redo Preserves Focus', async ({ page, me }) => {
|
|
// Select a node and perform an operation
|
|
await me.click('Left Child 2')
|
|
await page.keyboard.press('Enter') // Add sibling
|
|
await page.keyboard.press('Enter')
|
|
|
|
// Undo should restore focus to the original node
|
|
await page.keyboard.press('Control+z')
|
|
|
|
// Test that the original node still has focus by performing an action
|
|
await page.keyboard.press('Delete')
|
|
await expect(page.getByText('Left Child 2')).toBeHidden()
|
|
|
|
// Restore for cleanup
|
|
await page.keyboard.press('Control+z')
|
|
await expect(page.getByText('Left Child 2')).toBeVisible()
|
|
})
|