mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-01-22 18:30:09 +00:00
test(sync): update ImmediateUploadService tests for deferred initialization
Add DataInitStateService mock and tests for constructor-based initialization. Ensures tests verify the new timing behavior.
This commit is contained in:
parent
74f813d6c2
commit
2c1a443bc8
1 changed files with 51 additions and 0 deletions
|
|
@ -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<SyncProviderManager>;
|
||||
let mockSyncService: jasmine.SpyObj<OperationLogSyncService>;
|
||||
let mockDataInitStateService: { isAllDataLoadedInitially$: BehaviorSubject<boolean> };
|
||||
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<boolean>(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();
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue