From f9d27c72fbc43d8878d0545b9cdd18c3a5392e79 Mon Sep 17 00:00:00 2001 From: Dushusir <1414556676@qq.com> Date: Tue, 14 May 2024 20:18:58 +0800 Subject: [PATCH] test(facade): test cell hooks --- .../sheets/__tests__/f-sheet-hooks.spec.ts | 86 +++++++++++++++++-- .../facade/src/apis/sheets/f-sheet-hooks.ts | 2 +- 2 files changed, 81 insertions(+), 7 deletions(-) diff --git a/packages/facade/src/apis/sheets/__tests__/f-sheet-hooks.spec.ts b/packages/facade/src/apis/sheets/__tests__/f-sheet-hooks.spec.ts index 2213df157529..9729a0a01b46 100644 --- a/packages/facade/src/apis/sheets/__tests__/f-sheet-hooks.spec.ts +++ b/packages/facade/src/apis/sheets/__tests__/f-sheet-hooks.spec.ts @@ -21,12 +21,35 @@ import type { Injector } from '@wendellhu/redi'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { Subject } from 'rxjs'; -import type { IHoverCellPosition } from '@univerjs/sheets-ui'; -import { HoverManagerService } from '@univerjs/sheets-ui'; +import type { IDragCellPosition, IHoverCellPosition } from '@univerjs/sheets-ui'; +import { DragManagerService, HoverManagerService } from '@univerjs/sheets-ui'; import type { FUniver } from '../../facade'; import { createFacadeTestBed } from '../../__tests__/create-test-bed'; import { FSheetHooks } from '../f-sheet-hooks'; +class MockDataTransfer implements DataTransfer { + effectAllowed: 'none' | 'copy' | 'link' | 'move' | 'all' | 'copyLink' | 'copyMove' | 'linkMove' | 'uninitialized'; + files: FileList; + items: DataTransferItemList; + types: readonly string[]; + clearData(format?: string | undefined): void { + throw new Error('Method not implemented.'); + } + + getData(format: string): string { + throw new Error('Method not implemented.'); + } + + setData(format: string, data: string): void { + throw new Error('Method not implemented.'); + } + + dropEffect: 'none' | 'copy' | 'link' | 'move' = 'none'; + setDragImage(image: Element, x: number, y: number): void { + throw new Error('Method not implemented.'); + } +} + describe('Test FSheetHooks', () => { let get: Injector['get']; let injector: Injector; @@ -46,7 +69,11 @@ describe('Test FSheetHooks', () => { endColumn: number ) => Nullable; let mockHoverManagerService: Partial; - let currentCell$: Subject>; + let mockDragManagerService: Partial; + let hoverCurrentCell$: Subject>; + let hoverCurrentPosition$: Subject>; + let dragCurrentCell$: Subject>; + let dragEndCell$: Subject>; let sheetHooks: FSheetHooks; let workbook: Workbook; @@ -56,15 +83,26 @@ describe('Test FSheetHooks', () => { beforeEach(() => { // Initialize the subject - currentCell$ = new Subject>(); + hoverCurrentCell$ = new Subject>(); + hoverCurrentPosition$ = new Subject>(); + dragCurrentCell$ = new Subject>(); + dragEndCell$ = new Subject>(); // Create a mock HoverManagerService with currentCell$ mockHoverManagerService = { - currentCell$: currentCell$.asObservable(), + currentCell$: hoverCurrentCell$.asObservable(), + currentPosition$: hoverCurrentPosition$.asObservable(), + }; + + // Create a mock DragManagerService with currentCell$ + mockDragManagerService = { + currentCell$: dragCurrentCell$.asObservable(), + endCell$: dragEndCell$.asObservable(), }; const testBed = createFacadeTestBed(undefined, [ [HoverManagerService, { useValue: mockHoverManagerService }], + [DragManagerService, { useValue: mockDragManagerService }], ]); get = testBed.get; injector = testBed.injector; @@ -109,6 +147,18 @@ describe('Test FSheetHooks', () => { }); it('Test onCellPointerMove', () => { + sheetHooks.onCellPointerMove((cellPos) => { + expect(cellPos).toEqual({ location: { workbook, worksheet, unitId: workbook.getUnitId(), subUnitId: worksheet.getSheetId(), row: 0, col: 0 }, position: { startX: 0, endX: 1, startY: 0, endY: 1 } }); + }); + + // Trigger the Observable to emit a new value + const worksheet = workbook.getActiveSheet(); + const unitId = workbook.getUnitId(); + const subUnitId = worksheet.getSheetId(); + hoverCurrentPosition$.next({ location: { workbook, worksheet, unitId, subUnitId, row: 0, col: 0 }, position: { startX: 0, endX: 1, startY: 0, endY: 1 } }); + }); + + it('Test onCellPointerOver', () => { sheetHooks.onCellPointerOver((cellPos) => { expect(cellPos).toEqual({ location: { workbook, worksheet, unitId: workbook.getUnitId(), subUnitId: worksheet.getSheetId(), row: 0, col: 0 }, position: { startX: 0, endX: 1, startY: 0, endY: 1 } }); }); @@ -117,6 +167,30 @@ describe('Test FSheetHooks', () => { const worksheet = workbook.getActiveSheet(); const unitId = workbook.getUnitId(); const subUnitId = worksheet.getSheetId(); - currentCell$.next({ location: { workbook, worksheet, unitId, subUnitId, row: 0, col: 0 }, position: { startX: 0, endX: 1, startY: 0, endY: 1 } }); + hoverCurrentCell$.next({ location: { workbook, worksheet, unitId, subUnitId, row: 0, col: 0 }, position: { startX: 0, endX: 1, startY: 0, endY: 1 } }); + }); + + it('Test onCellDragOver', () => { + sheetHooks.onCellDragOver((cellPos) => { + expect(cellPos).toEqual({ location: { workbook, worksheet, unitId: workbook.getUnitId(), subUnitId: worksheet.getSheetId(), row: 0, col: 0 }, position: { startX: 0, endX: 1, startY: 0, endY: 1 }, dataTransfer: new MockDataTransfer() }); + }); + + // Trigger the Observable to emit a new value + const worksheet = workbook.getActiveSheet(); + const unitId = workbook.getUnitId(); + const subUnitId = worksheet.getSheetId(); + dragCurrentCell$.next({ location: { workbook, worksheet, unitId, subUnitId, row: 0, col: 0 }, position: { startX: 0, endX: 1, startY: 0, endY: 1 }, dataTransfer: new MockDataTransfer() }); + }); + + it('Test onCellDrop', () => { + sheetHooks.onCellDrop((cellPos) => { + expect(cellPos).toEqual({ location: { workbook, worksheet, unitId: workbook.getUnitId(), subUnitId: worksheet.getSheetId(), row: 0, col: 0 }, position: { startX: 0, endX: 1, startY: 0, endY: 1 }, dataTransfer: new MockDataTransfer() }); + }); + + // Trigger the Observable to emit a new value + const worksheet = workbook.getActiveSheet(); + const unitId = workbook.getUnitId(); + const subUnitId = worksheet.getSheetId(); + dragEndCell$.next({ location: { workbook, worksheet, unitId, subUnitId, row: 0, col: 0 }, position: { startX: 0, endX: 1, startY: 0, endY: 1 }, dataTransfer: new MockDataTransfer() }); }); }); diff --git a/packages/facade/src/apis/sheets/f-sheet-hooks.ts b/packages/facade/src/apis/sheets/f-sheet-hooks.ts index dcd00b7978e9..ac9820442613 100644 --- a/packages/facade/src/apis/sheets/f-sheet-hooks.ts +++ b/packages/facade/src/apis/sheets/f-sheet-hooks.ts @@ -25,7 +25,7 @@ export class FSheetHooks { constructor( @Inject(HoverManagerService) private readonly _hoverManagerService: HoverManagerService, @Inject(DragManagerService) private readonly _dragManagerService: DragManagerService - ) { + ) { // empty }