import { Component } from '@angular/core';
import { fakeAsync, inject, TestBed } from '@angular/core/testing';
import { DraggableItem, DraggableItemService, SortableItem } from '../index';
@Component({
template: `
Test
`
})
class TestComponent {}
describe('Service: DraggableItem', () => {
let transfer: DraggableItemService;
let draggableItem: DraggableItem;
beforeEach(
fakeAsync(() => {
TestBed.configureTestingModule({
declarations: [TestComponent],
providers: [DraggableItemService]
}).createComponent(TestComponent);
})
);
beforeEach(
inject([DraggableItemService], (service: DraggableItemService) => {
draggableItem = getDraggableItem(getItemToDrag(), undefined as unknown as DragEvent, 1);
transfer = service;
transfer.dragStart(draggableItem);
})
);
it('should return draggable item', () => {
// arrange
// act
const item = transfer.getItem();
// assert
expect(item).toBe(draggableItem);
});
it('should fire onCapture if item was captured by another zone', () => {
// arrange
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const spy = jest.spyOn(transfer.onCaptureItem(), 'next');
// act
transfer.captureItem(2, 0);
// assert
expect(spy).toHaveBeenCalledWith(draggableItem);
});
it('should NOT fire onCapture if item was captured by the same zone', () => {
// arrange
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const spy = jest.spyOn(transfer.onCaptureItem(), 'next');
// act
transfer.captureItem(1, 0);
// assert
expect(spy).not.toHaveBeenCalled();
});
function getItemToDrag(): SortableItem {
return { id: 0, value: 'item text', initData: 'item text' };
}
function getDraggableItem(
sortableItem: SortableItem,
dragEvent: DragEvent,
zone: number
): DraggableItem {
return {
event: dragEvent,
item: sortableItem,
i: 0,
initialIndex: 0,
lastZoneIndex: zone,
overZoneIndex: zone
};
}
});