1*ed3bd27bSEvan Baconimport rnFixture from '../../plugins/__tests__/fixtures/react-native-project'; 2*ed3bd27bSEvan Baconimport * as XML from '../../utils/XML'; 3082815dcSEvan Baconimport { getGoogleMapsApiKey, setGoogleMapsApiKey } from '../GoogleMapsApiKey'; 4*ed3bd27bSEvan Baconimport { AndroidManifest, getMainApplicationOrThrow } from '../Manifest'; 5082815dcSEvan Bacon 6*ed3bd27bSEvan Baconasync function getFixtureManifestAsync() { 7*ed3bd27bSEvan Bacon return (await XML.parseXMLAsync( 8*ed3bd27bSEvan Bacon rnFixture['android/app/src/main/AndroidManifest.xml'] 9*ed3bd27bSEvan Bacon )) as AndroidManifest; 10*ed3bd27bSEvan Bacon} 11082815dcSEvan Bacon 12082815dcSEvan Bacondescribe(getGoogleMapsApiKey, () => { 13082815dcSEvan Bacon it(`returns null if no android google maps API key is provided`, () => { 14082815dcSEvan Bacon expect(getGoogleMapsApiKey({ android: { config: { googleMaps: {} } } })).toBe(null); 15082815dcSEvan Bacon }); 16082815dcSEvan Bacon 17082815dcSEvan Bacon it(`returns API key if android google maps api key is provided`, () => { 18082815dcSEvan Bacon expect( 19082815dcSEvan Bacon getGoogleMapsApiKey({ android: { config: { googleMaps: { apiKey: 'MY-API-KEY' } } } }) 20082815dcSEvan Bacon ).toBe('MY-API-KEY'); 21082815dcSEvan Bacon }); 22082815dcSEvan Bacon}); 23082815dcSEvan Bacon 24082815dcSEvan Bacondescribe(setGoogleMapsApiKey, () => { 25082815dcSEvan Bacon it('adds and removes google maps key', async () => { 26082815dcSEvan Bacon function hasSingleEntry(androidManifest: AndroidManifest) { 27082815dcSEvan Bacon const mainApplication = getMainApplicationOrThrow(androidManifest); 28082815dcSEvan Bacon 29*ed3bd27bSEvan Bacon const apiKeyItem = mainApplication!['meta-data']!.filter( 30082815dcSEvan Bacon (e) => e.$['android:name'] === 'com.google.android.geo.API_KEY' 31082815dcSEvan Bacon ); 32082815dcSEvan Bacon expect(apiKeyItem).toHaveLength(1); 33082815dcSEvan Bacon expect(apiKeyItem[0].$['android:value']).toMatch('MY-API-KEY'); 34082815dcSEvan Bacon 35*ed3bd27bSEvan Bacon const usesLibraryItem = mainApplication['uses-library']!.filter( 36082815dcSEvan Bacon (e) => e.$['android:name'] === 'org.apache.http.legacy' 37082815dcSEvan Bacon ); 38082815dcSEvan Bacon expect(usesLibraryItem).toHaveLength(1); 39082815dcSEvan Bacon expect(usesLibraryItem[0].$['android:required']).toBe(false); 40082815dcSEvan Bacon } 41082815dcSEvan Bacon function isRemoved(androidManifest: AndroidManifest) { 42082815dcSEvan Bacon const mainApplication = getMainApplicationOrThrow(androidManifest); 43082815dcSEvan Bacon 44*ed3bd27bSEvan Bacon const apiKeyItem = mainApplication['meta-data']!.filter( 45082815dcSEvan Bacon (e) => e.$['android:name'] === 'com.google.android.geo.API_KEY' 46082815dcSEvan Bacon ); 47082815dcSEvan Bacon expect(apiKeyItem).toHaveLength(0); 48082815dcSEvan Bacon 49*ed3bd27bSEvan Bacon const usesLibraryItem = mainApplication['uses-library']!.filter( 50082815dcSEvan Bacon (e) => e.$['android:name'] === 'org.apache.http.legacy' 51082815dcSEvan Bacon ); 52082815dcSEvan Bacon expect(usesLibraryItem).toHaveLength(0); 53082815dcSEvan Bacon } 54082815dcSEvan Bacon 55*ed3bd27bSEvan Bacon let manifest = await getFixtureManifestAsync(); 56082815dcSEvan Bacon 57082815dcSEvan Bacon // Add the key once 58082815dcSEvan Bacon manifest = setGoogleMapsApiKey( 59082815dcSEvan Bacon { android: { config: { googleMaps: { apiKey: 'MY-API-KEY' } } } }, 60082815dcSEvan Bacon manifest 61082815dcSEvan Bacon ); 62082815dcSEvan Bacon 63082815dcSEvan Bacon hasSingleEntry(manifest); 64082815dcSEvan Bacon 65082815dcSEvan Bacon // Test that adding it twice doesn't cause duplicate entries 66082815dcSEvan Bacon manifest = setGoogleMapsApiKey( 67082815dcSEvan Bacon { android: { config: { googleMaps: { apiKey: 'MY-API-KEY' } } } }, 68082815dcSEvan Bacon manifest 69082815dcSEvan Bacon ); 70082815dcSEvan Bacon 71082815dcSEvan Bacon hasSingleEntry(manifest); 72082815dcSEvan Bacon 73082815dcSEvan Bacon // Remove meta 74082815dcSEvan Bacon manifest = setGoogleMapsApiKey({}, manifest); 75082815dcSEvan Bacon 76082815dcSEvan Bacon isRemoved(manifest); 77082815dcSEvan Bacon }); 78082815dcSEvan Bacon}); 79