diff --git a/src/app/op-log/sync/immediate-upload.service.spec.ts b/src/app/op-log/sync/immediate-upload.service.spec.ts index 67d68a74a..7320e3fda 100644 --- a/src/app/op-log/sync/immediate-upload.service.spec.ts +++ b/src/app/op-log/sync/immediate-upload.service.spec.ts @@ -4,11 +4,14 @@ import { SyncProviderManager } from '../sync-providers/provider-manager.service' import { OperationLogSyncService } from './operation-log-sync.service'; import { ActionType, Operation, OpType } from '../core/operation.types'; import { SyncProviderId } from '../sync-providers/provider.const'; +import { DataInitStateService } from '../../core/data-init/data-init-state.service'; +import { BehaviorSubject } from 'rxjs'; describe('ImmediateUploadService', () => { let service: ImmediateUploadService; let mockProviderManager: jasmine.SpyObj; let mockSyncService: jasmine.SpyObj; + let mockDataInitStateService: { isAllDataLoadedInitially$: BehaviorSubject }; let mockProvider: any; const createMockOp = (id: string): Operation => ({ @@ -50,11 +53,18 @@ describe('ImmediateUploadService', () => { 'uploadPendingOps', ]); + // Mock DataInitStateService with BehaviorSubject that starts as false + // This prevents constructor from auto-initializing during tests + mockDataInitStateService = { + isAllDataLoadedInitially$: new BehaviorSubject(false), + }; + TestBed.configureTestingModule({ providers: [ ImmediateUploadService, { provide: SyncProviderManager, useValue: mockProviderManager }, { provide: OperationLogSyncService, useValue: mockSyncService }, + { provide: DataInitStateService, useValue: mockDataInitStateService }, ], }); @@ -293,4 +303,45 @@ describe('ImmediateUploadService', () => { expect(mockSyncService.uploadPendingOps).toHaveBeenCalledTimes(1); })); }); + + describe('constructor initialization', () => { + it('should auto-initialize when data is loaded', fakeAsync(() => { + mockSyncService.uploadPendingOps.and.returnValue( + Promise.resolve({ + uploadedCount: 1, + rejectedCount: 0, + piggybackedOps: [], + rejectedOps: [], + }), + ); + + // Simulate data loading complete + mockDataInitStateService.isAllDataLoadedInitially$.next(true); + tick(); + + // Trigger upload - should work because service auto-initialized + service.trigger(); + tick(2100); + + expect(mockSyncService.uploadPendingOps).toHaveBeenCalledTimes(1); + })); + + it('should not auto-initialize before data is loaded', fakeAsync(() => { + mockSyncService.uploadPendingOps.and.returnValue( + Promise.resolve({ + uploadedCount: 1, + rejectedCount: 0, + piggybackedOps: [], + rejectedOps: [], + }), + ); + + // Data not loaded (still false) + // Trigger upload - should NOT work because service not initialized + service.trigger(); + tick(2100); + + expect(mockSyncService.uploadPendingOps).not.toHaveBeenCalled(); + })); + }); });