1import { getConfig } from '@expo/config'; 2import { AndroidConfig } from '@expo/config-plugins'; 3 4import { asMock } from '../../../../__tests__/asMock'; 5import { AndroidAppIdResolver } from '../AndroidAppIdResolver'; 6 7jest.mock('@expo/config-plugins', () => ({ 8 AndroidConfig: { 9 Package: { 10 getApplicationIdAsync: jest.fn(), 11 }, 12 Paths: { 13 getProjectPathOrThrowAsync: jest.fn(async () => '/path/to/file'), 14 }, 15 }, 16})); 17jest.mock('@expo/config', () => ({ 18 getConfig: jest.fn(() => ({ 19 pkg: {}, 20 exp: { 21 sdkVersion: '45.0.0', 22 name: 'my-app', 23 slug: 'my-app', 24 }, 25 })), 26})); 27 28// Most cases are tested in the superclass. 29 30describe('getAppIdAsync', () => { 31 it('resolves the app id from native files', async () => { 32 const resolver = new AndroidAppIdResolver('/'); 33 resolver.hasNativeProjectAsync = jest.fn(resolver.hasNativeProjectAsync); 34 resolver.getAppIdFromNativeAsync = jest.fn(resolver.getAppIdFromNativeAsync); 35 asMock(AndroidConfig.Package.getApplicationIdAsync).mockResolvedValueOnce('dev.bacon.myapp'); 36 expect(await resolver.getAppIdAsync()).toBe('dev.bacon.myapp'); 37 expect(resolver.getAppIdFromNativeAsync).toBeCalledTimes(1); 38 expect(resolver.hasNativeProjectAsync).toBeCalledTimes(1); 39 }); 40 41 it('resolves the app id from project config', async () => { 42 const resolver = new AndroidAppIdResolver('/'); 43 resolver.hasNativeProjectAsync = jest.fn(async () => false); 44 resolver.getAppIdFromConfigAsync = jest.fn(resolver.getAppIdFromConfigAsync); 45 46 asMock(getConfig).mockReturnValueOnce({ 47 exp: { 48 android: { 49 package: 'dev.bacon.myapp', 50 }, 51 }, 52 } as any); 53 expect(await resolver.getAppIdAsync()).toBe('dev.bacon.myapp'); 54 expect(resolver.getAppIdFromConfigAsync).toBeCalledTimes(1); 55 expect(resolver.hasNativeProjectAsync).toBeCalledTimes(1); 56 }); 57}); 58