1082815dcSEvan Baconimport { vol } from 'memfs';
2082815dcSEvan Baconimport path from 'path';
3082815dcSEvan Bacon
4082815dcSEvan Baconimport {
5082815dcSEvan Bacon  getGoogleServicesFile,
6*5f51f606SEvan Bacon  getGoogleSignInReversedClientId,
7*5f51f606SEvan Bacon  setGoogleSignInReversedClientId,
8082815dcSEvan Bacon} from '../Google';
9082815dcSEvan Baconimport { appendScheme } from '../Scheme';
10082815dcSEvan Bacon
11082815dcSEvan Baconjest.mock('fs');
12*5f51f606SEvan Baconjest.mock('../Scheme', () => ({
13*5f51f606SEvan Bacon  appendScheme: jest.fn((...props) => jest.requireActual('../Scheme').appendScheme(...props)),
14*5f51f606SEvan Bacon}));
15082815dcSEvan Bacon
16*5f51f606SEvan Baconconst googleServicesFixture = jest
17*5f51f606SEvan Bacon  .requireActual('fs')
18*5f51f606SEvan Bacon  .readFileSync(path.join(__dirname, 'fixtures/GoogleService-Info.plist'), 'utf-8');
19082815dcSEvan Bacon
20*5f51f606SEvan Bacondescribe(getGoogleSignInReversedClientId, () => {
21082815dcSEvan Bacon  afterEach(() => vol.reset());
22*5f51f606SEvan Bacon  it(`returns null when no file is defined`, () => {
23*5f51f606SEvan Bacon    expect(getGoogleSignInReversedClientId({}, { projectRoot: '' })).toBe(null);
24082815dcSEvan Bacon    expect(getGoogleServicesFile({})).toBe(null);
25082815dcSEvan Bacon  });
26*5f51f606SEvan Bacon  it(`returns the REVERSED_CLIENT_ID from the linked file`, () => {
27082815dcSEvan Bacon    vol.fromJSON(
28082815dcSEvan Bacon      {
29*5f51f606SEvan Bacon        'path/to/GoogleService-Info.plist': googleServicesFixture,
30082815dcSEvan Bacon      },
31*5f51f606SEvan Bacon      '/'
32082815dcSEvan Bacon    );
33082815dcSEvan Bacon
34*5f51f606SEvan Bacon    const config = {
35*5f51f606SEvan Bacon      ios: { googleServicesFile: './path/to/GoogleService-Info.plist' },
36*5f51f606SEvan Bacon    };
37082815dcSEvan Bacon
38*5f51f606SEvan Bacon    expect(getGoogleServicesFile(config)).toBe('./path/to/GoogleService-Info.plist');
39*5f51f606SEvan Bacon    expect(getGoogleSignInReversedClientId(config, { projectRoot: '/' })).toBe(
40*5f51f606SEvan Bacon      'com.googleusercontent.apps.1234567890123-abcdef'
41*5f51f606SEvan Bacon    );
42*5f51f606SEvan Bacon  });
43082815dcSEvan Bacon});
44082815dcSEvan Bacon
45*5f51f606SEvan Bacondescribe(setGoogleSignInReversedClientId, () => {
46*5f51f606SEvan Bacon  afterEach(() => vol.reset());
47*5f51f606SEvan Bacon
48*5f51f606SEvan Bacon  it(`adds the reversed client id to scheme from GoogleService-Info.Plist`, () => {
49082815dcSEvan Bacon    vol.fromJSON(
50082815dcSEvan Bacon      {
51*5f51f606SEvan Bacon        'path/to/GoogleService-Info.plist': googleServicesFixture,
52082815dcSEvan Bacon      },
53*5f51f606SEvan Bacon      '/'
54082815dcSEvan Bacon    );
55082815dcSEvan Bacon
56*5f51f606SEvan Bacon    expect(
57*5f51f606SEvan Bacon      setGoogleSignInReversedClientId(
58082815dcSEvan Bacon        {
59082815dcSEvan Bacon          ios: { googleServicesFile: './path/to/GoogleService-Info.plist' },
60082815dcSEvan Bacon        },
61*5f51f606SEvan Bacon        {},
62*5f51f606SEvan Bacon        { projectRoot: '/' }
63*5f51f606SEvan Bacon      )
64*5f51f606SEvan Bacon    ).toEqual({
65*5f51f606SEvan Bacon      CFBundleURLTypes: [
66*5f51f606SEvan Bacon        { CFBundleURLSchemes: ['com.googleusercontent.apps.1234567890123-abcdef'] },
67*5f51f606SEvan Bacon      ],
68*5f51f606SEvan Bacon    });
69082815dcSEvan Bacon
70082815dcSEvan Bacon    expect(appendScheme).toHaveBeenCalledWith(
71082815dcSEvan Bacon      'com.googleusercontent.apps.1234567890123-abcdef',
72*5f51f606SEvan Bacon      {}
73082815dcSEvan Bacon    );
74082815dcSEvan Bacon  });
75082815dcSEvan Bacon});
76