MOBILE-4059 testing: Improve mockSingleton types

main
Noel De Martin 2022-10-05 11:37:50 +02:00
parent 4ca9a4ad7b
commit 0545d3a8c8
4 changed files with 14 additions and 7 deletions

View File

@ -63,7 +63,7 @@ function prepareStubs(config: Partial<CoreDatabaseConfiguration> = {}): [User[],
});
const table = new CoreDatabaseTableProxy<User>(config, database, 'users');
mockSingleton(CoreConfig, { isReady: () => Promise.resolve() });
mockSingleton(CoreConfig, { ready: () => Promise.resolve() });
return [records, database, table];
}

View File

@ -33,7 +33,15 @@ describe('CoreFormatTextDirective', () => {
beforeEach(() => {
mockSingleton(CoreSites, { getSite: () => Promise.reject() });
mockSingleton(CoreConfig, { get: (_, defaultValue) => defaultValue });
mockSingleton(CoreConfig, {
get(name, defaultValue) {
if (defaultValue === undefined) {
throw Error(`Default value not provided for '${name}'`);
}
return Promise.resolve(defaultValue);
},
});
mockSingleton(CoreFilter, { formatText: text => Promise.resolve(text) });
mockSingleton(CoreFilterHelper, { getFiltersAndFormatText: text => Promise.resolve({ text, filters: [] }) });
@ -64,7 +72,7 @@ describe('CoreFormatTextDirective', () => {
it('should format text', async () => {
// Arrange
mockSingleton(CoreFilter, { formatText: () => 'Formatted text' });
mockSingleton(CoreFilter, { formatText: () => Promise.resolve('Formatted text') });
// Act
const { nativeElement } = await renderTemplate(
@ -131,7 +139,7 @@ describe('CoreFormatTextDirective', () => {
mockSingleton(CoreFilepool, { getSrcByUrl: () => Promise.resolve('file://local-path') });
mockSingleton(CoreSites, {
getSite: () => Promise.resolve(site),
getCurrentSite: () => Promise.resolve(site),
getCurrentSite: () => site,
});
// Act

View File

@ -40,7 +40,7 @@ describe('CoreNavigator', () => {
router = mockSingleton(Router, { url: '/' });
mockSingleton(CoreSites, { getCurrentSiteId: () => 42, isLoggedIn: () => true });
mockSingleton(CoreSites, { getCurrentSiteId: () => '42', isLoggedIn: () => true });
mockSingleton(CoreMainMenu, { isMainMenuTab: path => Promise.resolve(currentMainMenuHandlers.includes(path)) });
});

View File

@ -183,8 +183,7 @@ export function mock<T>(
return instance as T;
}
export function mockSingleton<T>(singletonClass: CoreSingletonProxy<T>, instance: T): T;
export function mockSingleton<T>(singletonClass: CoreSingletonProxy<unknown>, instance?: Record<string, unknown>): T;
export function mockSingleton<T>(singletonClass: CoreSingletonProxy<T>, instance: T | Partial<T>): T;
export function mockSingleton<T>(
singletonClass: CoreSingletonProxy<unknown>,
methods: string[],