Skip to content

Commit 598dbd3

Browse files
committed
refactor: update remote sync interfaces and improve test structure
1 parent e4b9e8d commit 598dbd3

4 files changed

Lines changed: 31 additions & 26 deletions

File tree

src/apps/main/interface.d.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,10 @@ export interface IElectronAPI {
157157
startRemoteSync(): Promise<void>;
158158
getUpdateStatus(): Promise<{ version: string } | null>;
159159
onUpdateAvailable(callback: (info: { version: string }) => void): () => void;
160-
getRemoteSyncStatus(): Promise<import('./remote-sync/helpers').RemoteSyncStatus>;
161-
onRemoteSyncStatusChange(callback: (status: import('./remote-sync/helpers').RemoteSyncStatus) => void): () => void;
160+
getRemoteSyncStatus(): Promise<import('../../backend/features/remote-sync/helpers').RemoteSyncStatus>;
161+
onRemoteSyncStatusChange(
162+
callback: (status: import('../../backend/features/remote-sync/helpers').RemoteSyncStatus) => void,
163+
): () => void;
162164
getVirtualDriveStatus(): Promise<import('../../backend/features/virtual-drive').FuseDriveStatus>;
163165
onVirtualDriveStatusChange(
164166
callback: (event: { status: import('../../backend/features/virtual-drive').FuseDriveStatus }) => void,

src/apps/main/preload.d.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,10 @@ declare interface Window {
149149

150150
getUsage: () => Promise<import('../../backend/features/usage/usage.types').Usage>;
151151

152-
onRemoteSyncStatusChange(callback: (status: import('./remote-sync/helpers').RemoteSyncStatus) => void): () => void;
153-
getRemoteSyncStatus(): Promise<import('./remote-sync/helpers').RemoteSyncStatus>;
152+
onRemoteSyncStatusChange(
153+
callback: (status: import('../../backend/features/remote-sync/helpers').RemoteSyncStatus) => void,
154+
): () => void;
155+
getRemoteSyncStatus(): Promise<import('../../backend/features/remote-sync/helpers').RemoteSyncStatus>;
154156
getVirtualDriveStatus(): Promise<import('../../backend/features/virtual-drive').FuseDriveStatus>;
155157
onVirtualDriveStatusChange(
156158
callback: (event: { status: import('../../backend/features/virtual-drive').FuseDriveStatus }) => void,

src/backend/features/remote-sync/handlers.test.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
import { ipcMain } from 'electron';
21
import { logger } from '@internxt/drive-desktop-core/build/backend';
32
import { vi } from 'vitest';
4-
import { getIpcHandler } from '../../../../tests/vitest/ipc.helper';
53
import { call, calls, partialSpyOn } from '../../../../tests/vitest/utils.helper';
64

75
const mocks = vi.hoisted(() => {
@@ -22,12 +20,19 @@ vi.mock('./service', () => ({
2220
startRemoteSync: mocks.startRemoteSync,
2321
}));
2422

23+
type IpcMainHandleMock = {
24+
handle: { mock: { calls: Array<[string, (...args: unknown[]) => unknown]> } };
25+
};
26+
2527
async function loadHandlersModule() {
2628
vi.resetModules();
2729

30+
const electronModule = await import('electron');
2831
const eventBusModule = await import('../../../apps/main/event-bus');
2932
const initialSyncReadyModule = await import('./InitialSyncReady');
3033

34+
const ipcMain = electronModule.ipcMain as unknown as IpcMainHandleMock;
35+
3136
const eventBusOnMock = partialSpyOn(eventBusModule.default, 'on', false);
3237
const eventBusEmitMock = partialSpyOn(eventBusModule.default, 'emit');
3338
const setInitialSyncStateMock = partialSpyOn(initialSyncReadyModule, 'setInitialSyncState');
@@ -37,10 +42,15 @@ async function loadHandlersModule() {
3742
return {
3843
eventBusEmitMock,
3944
eventBusOnMock,
45+
ipcMain,
4046
setInitialSyncStateMock,
4147
};
4248
}
4349

50+
function getIpcHandler(ipcMain: IpcMainHandleMock, eventName: string) {
51+
return ipcMain.handle.mock.calls.find(([name]) => name === eventName)?.[1];
52+
}
53+
4454
function getEventBusHandler(eventBusOnMock: ReturnType<typeof partialSpyOn>, eventName: string) {
4555
const calls = eventBusOnMock.mock.calls as Array<[string, (...args: unknown[]) => unknown]>;
4656

@@ -57,7 +67,7 @@ describe('handlers.test', () => {
5767

5868
it('should register ipc handlers and event listeners', async () => {
5969
// When
60-
const { eventBusOnMock } = await loadHandlersModule();
70+
const { eventBusOnMock, ipcMain } = await loadHandlersModule();
6171

6272
// Then
6373
expect(ipcMain.handle).toHaveBeenCalledWith('START_REMOTE_SYNC', expect.any(Function));
@@ -69,8 +79,8 @@ describe('handlers.test', () => {
6979

7080
it('should start a sync from the ipc handler and emit remote changes synched', async () => {
7181
// Given
72-
const { eventBusEmitMock } = await loadHandlersModule();
73-
const handler = getIpcHandler('START_REMOTE_SYNC');
82+
const { eventBusEmitMock, ipcMain } = await loadHandlersModule();
83+
const handler = getIpcHandler(ipcMain, 'START_REMOTE_SYNC');
7484

7585
// When
7686
await handler?.();
@@ -83,8 +93,8 @@ describe('handlers.test', () => {
8393
it('should return the current sync status from the ipc handler', async () => {
8494
// Given
8595
mocks.remoteSyncController.getSyncStatus.mockReturnValue('SYNCED');
86-
await loadHandlersModule();
87-
const handler = getIpcHandler('get-remote-sync-status');
96+
const { ipcMain } = await loadHandlersModule();
97+
const handler = getIpcHandler(ipcMain, 'get-remote-sync-status');
8898

8999
// When
90100
const result = await handler?.();

src/backend/features/remote-sync/service.test.ts

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ function createUpdatedRemoteItemsDtoFixture(): UpdatedRemoteItemsDto {
4141
const mocks = vi.hoisted(() => {
4242
const filesCollection = {
4343
getAll: vi.fn(),
44-
getAllWhere: vi.fn(),
4544
};
4645

4746
const foldersCollection = {
@@ -69,11 +68,15 @@ vi.mock('lodash', () => ({
6968
}));
7069

7170
vi.mock('../../../apps/main/database/collections/DriveFileCollection', () => ({
72-
DriveFilesCollection: vi.fn(() => mocks.filesCollection),
71+
DriveFilesCollection: vi.fn(function DriveFilesCollectionMock() {
72+
return mocks.filesCollection;
73+
}),
7374
}));
7475

7576
vi.mock('../../../apps/main/database/collections/DriveFolderCollection', () => ({
76-
DriveFoldersCollection: vi.fn(() => mocks.foldersCollection),
77+
DriveFoldersCollection: vi.fn(function DriveFoldersCollectionMock() {
78+
return mocks.foldersCollection;
79+
}),
7780
}));
7881

7982
vi.mock('./remote-sync-controller', () => ({
@@ -123,7 +126,6 @@ describe('service.test', () => {
123126
const result = createUpdatedRemoteItemsDtoFixture();
124127
mocks.filesCollection.getAll.mockResolvedValue({ success: true, result: result.files });
125128
mocks.foldersCollection.getAll.mockResolvedValue({ success: true, result: result.folders });
126-
mocks.filesCollection.getAllWhere.mockResolvedValue({ result: [{ uuid: 'file-1' }] });
127129
});
128130

129131
it('should mark initial sync as ready and broadcast when the controller becomes synced for the first time', async () => {
@@ -203,15 +205,4 @@ describe('service.test', () => {
203205
call(eventBusEmitMock).toBe('REMOTE_CHANGES_SYNCHED');
204206
});
205207

206-
it('should return only existing files from the local collection', async () => {
207-
// Given
208-
const { service } = await loadServiceModule();
209-
210-
// When
211-
const result = await service.getExistingFiles();
212-
213-
// Then
214-
call(mocks.filesCollection.getAllWhere).toStrictEqual({ status: 'EXISTS' });
215-
expect(result).toStrictEqual([{ uuid: 'file-1' }]);
216-
});
217208
});

0 commit comments

Comments
 (0)