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'); const table = new CoreDatabaseTableProxy<User>(config, database, 'users');
mockSingleton(CoreConfig, { isReady: () => Promise.resolve() }); mockSingleton(CoreConfig, { ready: () => Promise.resolve() });
return [records, database, table]; return [records, database, table];
} }

View File

@ -33,7 +33,15 @@ describe('CoreFormatTextDirective', () => {
beforeEach(() => { beforeEach(() => {
mockSingleton(CoreSites, { getSite: () => Promise.reject() }); 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(CoreFilter, { formatText: text => Promise.resolve(text) });
mockSingleton(CoreFilterHelper, { getFiltersAndFormatText: text => Promise.resolve({ text, filters: [] }) }); mockSingleton(CoreFilterHelper, { getFiltersAndFormatText: text => Promise.resolve({ text, filters: [] }) });
@ -64,7 +72,7 @@ describe('CoreFormatTextDirective', () => {
it('should format text', async () => { it('should format text', async () => {
// Arrange // Arrange
mockSingleton(CoreFilter, { formatText: () => 'Formatted text' }); mockSingleton(CoreFilter, { formatText: () => Promise.resolve('Formatted text') });
// Act // Act
const { nativeElement } = await renderTemplate( const { nativeElement } = await renderTemplate(
@ -131,7 +139,7 @@ describe('CoreFormatTextDirective', () => {
mockSingleton(CoreFilepool, { getSrcByUrl: () => Promise.resolve('file://local-path') }); mockSingleton(CoreFilepool, { getSrcByUrl: () => Promise.resolve('file://local-path') });
mockSingleton(CoreSites, { mockSingleton(CoreSites, {
getSite: () => Promise.resolve(site), getSite: () => Promise.resolve(site),
getCurrentSite: () => Promise.resolve(site), getCurrentSite: () => site,
}); });
// Act // Act

View File

@ -40,7 +40,7 @@ describe('CoreNavigator', () => {
router = mockSingleton(Router, { url: '/' }); 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)) }); mockSingleton(CoreMainMenu, { isMainMenuTab: path => Promise.resolve(currentMainMenuHandlers.includes(path)) });
}); });

View File

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