1import { AndroidConfig, IOSConfig } from '@expo/config-plugins'; 2import { getInfoPlistPathFromPbxproj } from '@expo/config-plugins/build/ios/utils/getInfoPlistPath'; 3import { vol } from 'memfs'; 4import path from 'path'; 5 6import { getSchemesForAndroidAsync, getSchemesForIosAsync } from '../scheme'; 7 8jest.mock('fs'); 9jest.mock('@expo/config-plugins'); 10jest.mock('@expo/config-plugins/build/ios/utils/getInfoPlistPath'); 11 12// TODO: replace with `jest.mocked`, when updating Jest 13const asMock = (fn: any): jest.Mock => fn; 14 15describe(getSchemesForAndroidAsync, () => { 16 it('resolves longest scheme without known expo schemes', async () => { 17 asMock(AndroidConfig.Scheme.getSchemesFromManifest).mockResolvedValue([ 18 'com.expo.test', 19 'com.expo.longertest', 20 'com.expo.longesttest', 21 ]); 22 23 await expect(getSchemesForAndroidAsync('/fake-project')).resolves.toEqual([ 24 'com.expo.longesttest', 25 'com.expo.longertest', 26 'com.expo.test', 27 ]); 28 }); 29 30 it('resolves known expo schemes before longest schemes', async () => { 31 asMock(AndroidConfig.Scheme.getSchemesFromManifest).mockResolvedValue([ 32 'com.expo.longesttest', 33 'exp+com.expo.test', 34 ]); 35 36 await expect(getSchemesForAndroidAsync('/fake-project')).resolves.toEqual([ 37 'exp+com.expo.test', 38 ]); 39 }); 40}); 41 42describe(getSchemesForIosAsync, () => { 43 beforeAll(() => { 44 const fakePlist = ` 45 <?xml version="1.0" encoding="UTF-8"?> 46 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 47 <plist version="1.0"> 48 <dict> 49 <key>fake</key> 50 <string>plist</string> 51 </dic> 52 </plist> 53 `; 54 55 vol.fromJSON({ 56 [path.join('fake-project', 'ios', 'fake-pbxproject')]: fakePlist, 57 }); 58 }); 59 60 afterAll(() => { 61 vol.reset(); 62 }); 63 64 it('resolves longest scheme without known expo schemes', async () => { 65 asMock(getInfoPlistPathFromPbxproj).mockReturnValue('fake-pbxproject'); 66 asMock(IOSConfig.Scheme.getSchemesFromPlist).mockReturnValue([ 67 'com.expo.test', 68 'com.expo.longertest', 69 'com.expo.longesttest', 70 ]); 71 72 await expect(getSchemesForIosAsync('fake-project')).resolves.toEqual([ 73 'com.expo.longesttest', 74 'com.expo.longertest', 75 'com.expo.test', 76 ]); 77 }); 78 79 it('resolves known expo schemes before longest schemes', async () => { 80 asMock(getInfoPlistPathFromPbxproj).mockReturnValue('fake-pbxproject'); 81 asMock(IOSConfig.Scheme.getSchemesFromPlist).mockReturnValue([ 82 'com.expo.longesttest', 83 'exp+com.expo.test', 84 ]); 85 86 await expect(getSchemesForIosAsync('fake-project')).resolves.toEqual(['exp+com.expo.test']); 87 }); 88}); 89