Skip to content

Commit fa6c8a4

Browse files
Copilotrenemadsen
andcommitted
Add unit tests for NavigationMenuDragDropService
Co-authored-by: renemadsen <[email protected]>
1 parent 566b7a5 commit fa6c8a4

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import { TestBed } from '@angular/core/testing';
2+
import { DOCUMENT } from '@angular/common';
3+
import { NavigationMenuDragDropService } from './navigation-menu-drag-drop.service';
4+
import { CdkDragMove, CdkDragRelease } from '@angular/cdk/drag-drop';
5+
6+
describe('NavigationMenuDragDropService', () => {
7+
let service: NavigationMenuDragDropService;
8+
let mockDocument: any;
9+
10+
beforeEach(() => {
11+
mockDocument = {
12+
elementFromPoint: jest.fn()
13+
};
14+
15+
TestBed.configureTestingModule({
16+
providers: [
17+
NavigationMenuDragDropService,
18+
{ provide: DOCUMENT, useValue: mockDocument }
19+
]
20+
});
21+
service = TestBed.inject(NavigationMenuDragDropService);
22+
});
23+
24+
it('should be created', () => {
25+
expect(service).toBeTruthy();
26+
});
27+
28+
it('should register drop lists', () => {
29+
const mockDropList: any = { id: 'test-drop-list' };
30+
service.register(mockDropList);
31+
expect(service.dropLists).toContain(mockDropList);
32+
});
33+
34+
it('should set currentHoverDropListId when dragging over a drop list', () => {
35+
const mockElement = document.createElement('div');
36+
mockElement.id = 'test-drop-list';
37+
mockElement.classList.add('cdk-drop-list');
38+
mockDocument.elementFromPoint.mockReturnValue(mockElement);
39+
40+
const mockEvent: Partial<CdkDragMove<any>> = {
41+
pointerPosition: { x: 100, y: 100 }
42+
};
43+
44+
service.dragMoved(mockEvent as CdkDragMove<any>);
45+
expect(service.currentHoverDropListId).toBe('test-drop-list');
46+
});
47+
48+
it('should clear currentHoverDropListId when element is not found', () => {
49+
mockDocument.elementFromPoint.mockReturnValue(null);
50+
51+
const mockEvent: Partial<CdkDragMove<any>> = {
52+
pointerPosition: { x: 100, y: 100 }
53+
};
54+
55+
service.dragMoved(mockEvent as CdkDragMove<any>);
56+
expect(service.currentHoverDropListId).toBeUndefined();
57+
});
58+
59+
it('should clear currentHoverDropListId when drag is released', () => {
60+
service.currentHoverDropListId = 'test-id';
61+
const mockEvent: Partial<CdkDragRelease> = {};
62+
63+
service.dragReleased(mockEvent as CdkDragRelease);
64+
expect(service.currentHoverDropListId).toBeUndefined();
65+
});
66+
67+
it('should find closest drop list when element itself is not a drop list', () => {
68+
const mockParentElement = document.createElement('div');
69+
mockParentElement.id = 'parent-drop-list';
70+
mockParentElement.classList.add('cdk-drop-list');
71+
72+
const mockChildElement = document.createElement('span');
73+
mockParentElement.appendChild(mockChildElement);
74+
mockChildElement.closest = jest.fn().mockReturnValue(mockParentElement);
75+
76+
mockDocument.elementFromPoint.mockReturnValue(mockChildElement);
77+
78+
const mockEvent: Partial<CdkDragMove<any>> = {
79+
pointerPosition: { x: 100, y: 100 }
80+
};
81+
82+
service.dragMoved(mockEvent as CdkDragMove<any>);
83+
expect(service.currentHoverDropListId).toBe('parent-drop-list');
84+
});
85+
});

0 commit comments

Comments
 (0)