1082815dcSEvan Baconimport rnFixture from '../../plugins/__tests__/fixtures/react-native-project'; 2082815dcSEvan Baconimport { 3082815dcSEvan Bacon addGoogleMapsAppDelegateImport, 4082815dcSEvan Bacon addGoogleMapsAppDelegateInit, 5082815dcSEvan Bacon addMapsCocoaPods, 6082815dcSEvan Bacon getGoogleMapsApiKey, 7082815dcSEvan Bacon MATCH_INIT, 8082815dcSEvan Bacon removeGoogleMapsAppDelegateImport, 9082815dcSEvan Bacon removeGoogleMapsAppDelegateInit, 10082815dcSEvan Bacon removeMapsCocoaPods, 11082815dcSEvan Bacon setGoogleMapsApiKey, 12082815dcSEvan Bacon} from '../Maps'; 13082815dcSEvan Bacon 14082815dcSEvan Bacondescribe('MATCH_INIT', () => { 15082815dcSEvan Bacon it(`matches React AppDelegate`, () => { 16082815dcSEvan Bacon expect( 17857ad32fSBrent Vatne `- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions` 18082815dcSEvan Bacon ).toMatch(MATCH_INIT); 19082815dcSEvan Bacon }); 20082815dcSEvan Bacon}); 21082815dcSEvan Bacon 22082815dcSEvan Bacondescribe(getGoogleMapsApiKey, () => { 23082815dcSEvan Bacon it(`returns null from all getters if no value provided`, () => { 24082815dcSEvan Bacon expect(getGoogleMapsApiKey({})).toBe(null); 25082815dcSEvan Bacon }); 26082815dcSEvan Bacon 27082815dcSEvan Bacon it(`returns the correct values from all getters if a value is provided`, () => { 28082815dcSEvan Bacon expect(getGoogleMapsApiKey({ ios: { config: { googleMapsApiKey: '123' } } })).toBe('123'); 29082815dcSEvan Bacon }); 30082815dcSEvan Bacon}); 31082815dcSEvan Bacondescribe(getGoogleMapsApiKey, () => { 32082815dcSEvan Bacon it(`sets the google maps api key if provided or returns plist`, () => { 33082815dcSEvan Bacon expect(setGoogleMapsApiKey({ ios: { config: { googleMapsApiKey: '123' } } }, {})).toMatchObject( 34082815dcSEvan Bacon { 35082815dcSEvan Bacon GMSApiKey: '123', 36082815dcSEvan Bacon } 37082815dcSEvan Bacon ); 38082815dcSEvan Bacon 39082815dcSEvan Bacon expect(setGoogleMapsApiKey({}, {})).toMatchObject({}); 40082815dcSEvan Bacon }); 41082815dcSEvan Bacon}); 42082815dcSEvan Bacon 43082815dcSEvan Bacondescribe(addMapsCocoaPods, () => { 44082815dcSEvan Bacon it(`adds maps pods to Podfile`, () => { 45*ed3bd27bSEvan Bacon const results = addMapsCocoaPods(rnFixture['ios/Podfile']); 46082815dcSEvan Bacon // matches a static snapshot 47082815dcSEvan Bacon expect(results.contents).toMatchSnapshot(); 48082815dcSEvan Bacon expect(results.contents).toMatch(/e9cc66c360abe50bc66d89fffb3c55b034d7d369/); 49082815dcSEvan Bacon // did add new content 50082815dcSEvan Bacon expect(results.didMerge).toBe(true); 51082815dcSEvan Bacon // didn't remove old content 52082815dcSEvan Bacon expect(results.didClear).toBe(false); 53082815dcSEvan Bacon 54082815dcSEvan Bacon const modded = addMapsCocoaPods(results.contents); 55082815dcSEvan Bacon // nothing changed 56082815dcSEvan Bacon expect(modded.didMerge).toBe(false); 57082815dcSEvan Bacon expect(modded.didClear).toBe(false); 58082815dcSEvan Bacon 59082815dcSEvan Bacon const modded2 = removeMapsCocoaPods(modded.contents); 60*ed3bd27bSEvan Bacon expect(modded2.contents).toBe(rnFixture['ios/Podfile']); 61082815dcSEvan Bacon // didn't add new content 62082815dcSEvan Bacon expect(modded2.didMerge).toBe(false); 63082815dcSEvan Bacon // did remove the generated content 64082815dcSEvan Bacon expect(modded2.didClear).toBe(true); 65082815dcSEvan Bacon }); 66082815dcSEvan Bacon}); 67082815dcSEvan Bacon 68082815dcSEvan Bacondescribe(addGoogleMapsAppDelegateImport, () => { 69082815dcSEvan Bacon it(`adds maps import to AppDelegate`, () => { 70*ed3bd27bSEvan Bacon const results = addGoogleMapsAppDelegateImport(rnFixture['ios/HelloWorld/AppDelegate.mm']); 71082815dcSEvan Bacon // matches a static snapshot 72082815dcSEvan Bacon expect(results.contents).toMatchSnapshot(); 73082815dcSEvan Bacon expect(results.contents).toMatch(/f2f83125c99c0d74b42a2612947510c4e08c423a/); 74082815dcSEvan Bacon // did add new content 75082815dcSEvan Bacon expect(results.didMerge).toBe(true); 76082815dcSEvan Bacon // didn't remove old content 77082815dcSEvan Bacon expect(results.didClear).toBe(false); 78082815dcSEvan Bacon 79082815dcSEvan Bacon const modded = addGoogleMapsAppDelegateImport(results.contents); 80082815dcSEvan Bacon // nothing changed 81082815dcSEvan Bacon expect(modded.didMerge).toBe(false); 82082815dcSEvan Bacon expect(modded.didClear).toBe(false); 83082815dcSEvan Bacon 84082815dcSEvan Bacon const modded2 = removeGoogleMapsAppDelegateImport(modded.contents); 85*ed3bd27bSEvan Bacon expect(modded2.contents).toBe(rnFixture['ios/HelloWorld/AppDelegate.mm']); 86082815dcSEvan Bacon // didn't add new content 87082815dcSEvan Bacon expect(modded2.didMerge).toBe(false); 88082815dcSEvan Bacon // did remove the generated content 89082815dcSEvan Bacon expect(modded2.didClear).toBe(true); 90082815dcSEvan Bacon }); 91082815dcSEvan Bacon it(`fails to add to a malformed podfile`, () => { 92082815dcSEvan Bacon expect(() => addGoogleMapsAppDelegateImport(`foobar`)).toThrow(/foobar/); 93082815dcSEvan Bacon }); 94082815dcSEvan Bacon}); 95082815dcSEvan Bacon 96082815dcSEvan Bacondescribe(addGoogleMapsAppDelegateInit, () => { 97082815dcSEvan Bacon it(`adds maps import to AppDelegate`, () => { 98082815dcSEvan Bacon const results = addGoogleMapsAppDelegateInit( 99*ed3bd27bSEvan Bacon rnFixture['ios/HelloWorld/AppDelegate.mm'], 100082815dcSEvan Bacon 'mykey' 101082815dcSEvan Bacon ); 102082815dcSEvan Bacon // matches a static snapshot 103082815dcSEvan Bacon expect(results.contents).toMatchSnapshot(); 104082815dcSEvan Bacon expect(results.contents).toMatch(/97501819d6911e5f50d66c63d369b0cec62853c2/); 105082815dcSEvan Bacon // did add new content 106082815dcSEvan Bacon expect(results.didMerge).toBe(true); 107082815dcSEvan Bacon // didn't remove old content 108082815dcSEvan Bacon expect(results.didClear).toBe(false); 109082815dcSEvan Bacon 110082815dcSEvan Bacon const modded = addGoogleMapsAppDelegateInit(results.contents, 'mykey'); 111082815dcSEvan Bacon // nothing changed 112082815dcSEvan Bacon expect(modded.didMerge).toBe(false); 113082815dcSEvan Bacon expect(modded.didClear).toBe(false); 114082815dcSEvan Bacon 115082815dcSEvan Bacon // Test that the block is updated when the API key changes 116082815dcSEvan Bacon const modded2 = addGoogleMapsAppDelegateInit(results.contents, 'mykey-2'); 117082815dcSEvan Bacon expect(modded2.contents).not.toMatch(/97501819d6911e5f50d66c63d369b0cec62853c2/); 118082815dcSEvan Bacon expect(modded2.contents).toMatch(/a5c6f82bb5656264220096dea4cfdaa4383d60ab/); 119082815dcSEvan Bacon // nothing changed 120082815dcSEvan Bacon expect(modded2.didMerge).toBe(true); 121082815dcSEvan Bacon expect(modded2.didClear).toBe(true); 122082815dcSEvan Bacon 123082815dcSEvan Bacon const modded3 = removeGoogleMapsAppDelegateInit(modded.contents); 124*ed3bd27bSEvan Bacon expect(modded3.contents).toBe(rnFixture['ios/HelloWorld/AppDelegate.mm']); 125082815dcSEvan Bacon // didn't add new content 126082815dcSEvan Bacon expect(modded3.didMerge).toBe(false); 127082815dcSEvan Bacon // did remove the generated content 128082815dcSEvan Bacon expect(modded3.didClear).toBe(true); 129082815dcSEvan Bacon }); 130857ad32fSBrent Vatne it(`adds maps import to AppDelegate`, () => { 131*ed3bd27bSEvan Bacon const results = addGoogleMapsAppDelegateInit( 132*ed3bd27bSEvan Bacon rnFixture['ios/HelloWorld/AppDelegate.mm'], 133*ed3bd27bSEvan Bacon 'mykey' 134*ed3bd27bSEvan Bacon ); 135082815dcSEvan Bacon // matches a static snapshot 136082815dcSEvan Bacon expect(results.contents).toMatchSnapshot(); 137082815dcSEvan Bacon expect(results.contents).toMatch(/97501819d6911e5f50d66c63d369b0cec62853c2/); 138082815dcSEvan Bacon // did add new content 139082815dcSEvan Bacon expect(results.didMerge).toBe(true); 140082815dcSEvan Bacon // didn't remove old content 141082815dcSEvan Bacon expect(results.didClear).toBe(false); 142082815dcSEvan Bacon }); 143082815dcSEvan Bacon 144082815dcSEvan Bacon it(`fails to add to a malformed app delegate`, () => { 145082815dcSEvan Bacon expect(() => addGoogleMapsAppDelegateInit(`foobar`, 'mykey')).toThrow(/foobar/); 146082815dcSEvan Bacon }); 147082815dcSEvan Bacon}); 148