forked from StellarSplit/StellarSplit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConflictResolver.test.tsx
More file actions
64 lines (55 loc) · 2.28 KB
/
Copy pathConflictResolver.test.tsx
File metadata and controls
64 lines (55 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { render, screen, fireEvent } from '@testing-library/react';
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { ConflictResolver } from './ConflictResolver';
import * as useCollaborationModule from '../../hooks/useCollaboration';
vi.mock('../../hooks/useCollaboration');
describe('ConflictResolver', () => {
const mockResolveConflict = vi.fn();
beforeEach(() => {
vi.clearAllMocks();
});
it('renders nothing when no conflicts', () => {
vi.mocked(useCollaborationModule.useCollaboration).mockReturnValue({
connected: true,
presence: {},
activities: [],
conflicts: [],
joinSplit: vi.fn(),
leaveSplit: vi.fn(),
setTyping: vi.fn(),
sendUpdate: vi.fn(),
resolveConflict: mockResolveConflict,
updateCursor: vi.fn(),
});
const { container } = render(<ConflictResolver />);
expect(container.firstChild).toBeNull();
});
it('renders conflict details and handles resolution clicks', () => {
vi.mocked(useCollaborationModule.useCollaboration).mockReturnValue({
connected: true,
presence: {},
activities: [],
conflicts: [
{ field: 'Lunch item', localValue: 15, remoteValue: 25, remoteUser: 'Charlie', timestamp: new Date() }
],
joinSplit: vi.fn(),
leaveSplit: vi.fn(),
setTyping: vi.fn(),
sendUpdate: vi.fn(),
resolveConflict: mockResolveConflict,
updateCursor: vi.fn(),
});
render(<ConflictResolver />);
expect(screen.getByText('Concurrent Edit Detected')).toBeDefined();
expect(screen.getByText('Charlie')).toBeDefined();
expect(screen.getByText('Lunch item')).toBeDefined();
expect(screen.getByText('15')).toBeDefined();
expect(screen.getByText('25')).toBeDefined();
// Click Keep Mine
fireEvent.click(screen.getByText('Keep Mine'));
expect(mockResolveConflict).toHaveBeenCalledWith('Lunch item', 'local');
// Click Accept Theirs
fireEvent.click(screen.getByText('Accept Theirs'));
expect(mockResolveConflict).toHaveBeenCalledWith('Lunch item', 'remote');
});
});