From ff1f656dc2c189a9523458a3e351c33483abd4ed Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Tue, 20 Jan 2026 15:10:36 +0100 Subject: [PATCH] test: fix 15 failing unit tests - Add missing TranslateService and LanguageService mock providers to OperationLogMigrationService tests (14 failures) - Use safe property access (optional chaining) for androidInterface in CapacitorReminderService logging (1 failure) All tests now passing: 6460 SUCCESS --- src/app/core/platform/capacitor-reminder.service.ts | 4 ++-- .../operation-log-migration.service.spec.ts | 12 ++++++++++++ .../legacy-data-migration.integration.spec.ts | 12 ++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/app/core/platform/capacitor-reminder.service.ts b/src/app/core/platform/capacitor-reminder.service.ts index f15b9d65c..e56a8e7a6 100644 --- a/src/app/core/platform/capacitor-reminder.service.ts +++ b/src/app/core/platform/capacitor-reminder.service.ts @@ -97,7 +97,7 @@ export class CapacitorReminderService { triggerInMs: triggerAt - now, triggerInMinutes: Math.round((triggerAt - now) / 1000 / 60), isAndroidWebView: IS_ANDROID_WEB_VIEW, - hasNativeScheduler: !!androidInterface.scheduleNativeReminder, + hasNativeScheduler: !!androidInterface?.scheduleNativeReminder, }); // On Android, use native AlarmManager for precision @@ -196,7 +196,7 @@ export class CapacitorReminderService { Log.log('🚫 CapacitorReminderService.cancelReminder called', { notificationId, isAndroidWebView: IS_ANDROID_WEB_VIEW, - hasNativeCanceller: !!androidInterface.cancelNativeReminder, + hasNativeCanceller: !!androidInterface?.cancelNativeReminder, }); // On Android, use native cancellation diff --git a/src/app/op-log/persistence/operation-log-migration.service.spec.ts b/src/app/op-log/persistence/operation-log-migration.service.spec.ts index 5b42e0e26..81cd86cc1 100644 --- a/src/app/op-log/persistence/operation-log-migration.service.spec.ts +++ b/src/app/op-log/persistence/operation-log-migration.service.spec.ts @@ -1,10 +1,12 @@ import { TestBed } from '@angular/core/testing'; import { MatDialog } from '@angular/material/dialog'; import { Store } from '@ngrx/store'; +import { TranslateService } from '@ngx-translate/core'; import { OperationLogMigrationService } from './operation-log-migration.service'; import { OperationLogStoreService } from './operation-log-store.service'; import { LegacyPfDbService } from '../../core/persistence/legacy-pf-db.service'; import { ClientIdService } from '../../core/util/client-id.service'; +import { LanguageService } from '../../core/language/language.service'; import { OpLog } from '../../core/log'; import { ActionType, OpType } from '../core/operation.types'; @@ -15,6 +17,8 @@ describe('OperationLogMigrationService', () => { let mockMatDialog: jasmine.SpyObj; let mockStore: jasmine.SpyObj; let mockClientIdService: jasmine.SpyObj; + let mockTranslateService: jasmine.SpyObj; + let mockLanguageService: jasmine.SpyObj; beforeEach(() => { mockOpLogStore = jasmine.createSpyObj('OperationLogStoreService', [ @@ -41,6 +45,12 @@ describe('OperationLogMigrationService', () => { mockClientIdService = jasmine.createSpyObj('ClientIdService', [ 'generateNewClientId', ]); + mockTranslateService = jasmine.createSpyObj('TranslateService', [ + 'instant', + 'getBrowserCultureLang', + 'getBrowserLang', + ]); + mockLanguageService = jasmine.createSpyObj('LanguageService', ['setLng']); // Default returns for legacy db mockLegacyPfDb.hasUsableEntityData.and.resolveTo(false); @@ -56,6 +66,8 @@ describe('OperationLogMigrationService', () => { { provide: MatDialog, useValue: mockMatDialog }, { provide: Store, useValue: mockStore }, { provide: ClientIdService, useValue: mockClientIdService }, + { provide: TranslateService, useValue: mockTranslateService }, + { provide: LanguageService, useValue: mockLanguageService }, ], }); service = TestBed.inject(OperationLogMigrationService); diff --git a/src/app/op-log/testing/integration/legacy-data-migration.integration.spec.ts b/src/app/op-log/testing/integration/legacy-data-migration.integration.spec.ts index aa6676eea..e44c8440f 100644 --- a/src/app/op-log/testing/integration/legacy-data-migration.integration.spec.ts +++ b/src/app/op-log/testing/integration/legacy-data-migration.integration.spec.ts @@ -1,10 +1,12 @@ import { TestBed } from '@angular/core/testing'; import { provideMockStore } from '@ngrx/store/testing'; import { MatDialog } from '@angular/material/dialog'; +import { TranslateService } from '@ngx-translate/core'; import { OperationLogMigrationService } from '../../persistence/operation-log-migration.service'; import { OperationLogStoreService } from '../../persistence/operation-log-store.service'; import { LegacyPfDbService } from '../../../core/persistence/legacy-pf-db.service'; import { ClientIdService } from '../../../core/util/client-id.service'; +import { LanguageService } from '../../../core/language/language.service'; import { ActionType, OpType } from '../../core/operation.types'; import { resetTestUuidCounter } from './helpers/test-client.helper'; @@ -23,6 +25,8 @@ describe('Legacy Data Migration Integration', () => { let mockLegacyPfDb: jasmine.SpyObj; let mockClientIdService: jasmine.SpyObj; let mockMatDialog: jasmine.SpyObj; + let mockTranslateService: jasmine.SpyObj; + let mockLanguageService: jasmine.SpyObj; beforeEach(async () => { mockLegacyPfDb = jasmine.createSpyObj('LegacyPfDbService', [ @@ -37,6 +41,12 @@ describe('Legacy Data Migration Integration', () => { 'generateNewClientId', ]); mockMatDialog = jasmine.createSpyObj('MatDialog', ['open']); + mockTranslateService = jasmine.createSpyObj('TranslateService', [ + 'instant', + 'getBrowserCultureLang', + 'getBrowserLang', + ]); + mockLanguageService = jasmine.createSpyObj('LanguageService', ['setLng']); // Default mocks - no legacy data by default mockLegacyPfDb.hasUsableEntityData.and.returnValue(Promise.resolve(false)); @@ -49,6 +59,8 @@ describe('Legacy Data Migration Integration', () => { { provide: LegacyPfDbService, useValue: mockLegacyPfDb }, { provide: ClientIdService, useValue: mockClientIdService }, { provide: MatDialog, useValue: mockMatDialog }, + { provide: TranslateService, useValue: mockTranslateService }, + { provide: LanguageService, useValue: mockLanguageService }, ], });