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