1*082815dcSEvan Baconimport {
2*082815dcSEvan Bacon  appendScheme,
3*082815dcSEvan Bacon  getScheme,
4*082815dcSEvan Bacon  getSchemesFromPlist,
5*082815dcSEvan Bacon  hasScheme,
6*082815dcSEvan Bacon  removeScheme,
7*082815dcSEvan Bacon  setScheme,
8*082815dcSEvan Bacon} from '../Scheme';
9*082815dcSEvan Bacon
10*082815dcSEvan Bacondescribe('scheme', () => {
11*082815dcSEvan Bacon  it(`returns empty array if no scheme is provided`, () => {
12*082815dcSEvan Bacon    expect(getScheme({})).toStrictEqual([]);
13*082815dcSEvan Bacon  });
14*082815dcSEvan Bacon
15*082815dcSEvan Bacon  it(`returns the scheme if provided`, () => {
16*082815dcSEvan Bacon    expect(getScheme({ scheme: 'myapp' })).toStrictEqual(['myapp']);
17*082815dcSEvan Bacon    expect(
18*082815dcSEvan Bacon      getScheme({
19*082815dcSEvan Bacon        scheme: ['myapp', 'other', null],
20*082815dcSEvan Bacon      })
21*082815dcSEvan Bacon    ).toStrictEqual(['myapp', 'other']);
22*082815dcSEvan Bacon  });
23*082815dcSEvan Bacon
24*082815dcSEvan Bacon  it(`sets the CFBundleUrlTypes if scheme is given`, () => {
25*082815dcSEvan Bacon    expect(
26*082815dcSEvan Bacon      setScheme(
27*082815dcSEvan Bacon        {
28*082815dcSEvan Bacon          // @ts-ignore: TODO -- add this to the ExpoConfig type
29*082815dcSEvan Bacon          scheme: ['myapp', 'more'],
30*082815dcSEvan Bacon          ios: {
31*082815dcSEvan Bacon            // @ts-ignore: TODO -- add this to the ExpoConfig type
32*082815dcSEvan Bacon            scheme: ['ios-only'],
33*082815dcSEvan Bacon            bundleIdentifier: 'com.demo.value',
34*082815dcSEvan Bacon          },
35*082815dcSEvan Bacon        },
36*082815dcSEvan Bacon        {}
37*082815dcSEvan Bacon      )
38*082815dcSEvan Bacon    ).toMatchObject({
39*082815dcSEvan Bacon      CFBundleURLTypes: [{ CFBundleURLSchemes: ['myapp', 'more', 'ios-only', 'com.demo.value'] }],
40*082815dcSEvan Bacon    });
41*082815dcSEvan Bacon  });
42*082815dcSEvan Bacon
43*082815dcSEvan Bacon  it(`makes no changes to the infoPlist no scheme is provided`, () => {
44*082815dcSEvan Bacon    expect(setScheme({}, {})).toMatchObject({});
45*082815dcSEvan Bacon  });
46*082815dcSEvan Bacon
47*082815dcSEvan Bacon  it(`verifies that a scheme exists`, () => {
48*082815dcSEvan Bacon    const infoPlist = {
49*082815dcSEvan Bacon      CFBundleURLTypes: [{ CFBundleURLSchemes: ['myapp'] }],
50*082815dcSEvan Bacon    };
51*082815dcSEvan Bacon    expect(hasScheme('myapp', infoPlist)).toBe(true);
52*082815dcSEvan Bacon    expect(hasScheme('myapp2', infoPlist)).toBe(false);
53*082815dcSEvan Bacon  });
54*082815dcSEvan Bacon
55*082815dcSEvan Bacon  it(`lists all of the schemes`, () => {
56*082815dcSEvan Bacon    const infoPlist = {
57*082815dcSEvan Bacon      CFBundleURLTypes: [
58*082815dcSEvan Bacon        { CFBundleURLSchemes: ['myapp1', 'myapp2'] },
59*082815dcSEvan Bacon        { CFBundleURLSchemes: ['myapp3'] },
60*082815dcSEvan Bacon      ],
61*082815dcSEvan Bacon    };
62*082815dcSEvan Bacon    expect(getSchemesFromPlist(infoPlist).length).toBe(3);
63*082815dcSEvan Bacon  });
64*082815dcSEvan Bacon
65*082815dcSEvan Bacon  it(`append a scheme`, () => {
66*082815dcSEvan Bacon    const infoPlist = {
67*082815dcSEvan Bacon      CFBundleURLTypes: [
68*082815dcSEvan Bacon        { CFBundleURLSchemes: ['myapp1', 'myapp2'] },
69*082815dcSEvan Bacon        { CFBundleURLSchemes: ['myapp3'] },
70*082815dcSEvan Bacon      ],
71*082815dcSEvan Bacon    };
72*082815dcSEvan Bacon    expect(appendScheme('myapp3', infoPlist)).toStrictEqual({
73*082815dcSEvan Bacon      CFBundleURLTypes: [
74*082815dcSEvan Bacon        { CFBundleURLSchemes: ['myapp1', 'myapp2'] },
75*082815dcSEvan Bacon        { CFBundleURLSchemes: ['myapp3'] },
76*082815dcSEvan Bacon      ],
77*082815dcSEvan Bacon    });
78*082815dcSEvan Bacon    expect(appendScheme('myapp4', infoPlist)).toStrictEqual({
79*082815dcSEvan Bacon      CFBundleURLTypes: [
80*082815dcSEvan Bacon        { CFBundleURLSchemes: ['myapp1', 'myapp2'] },
81*082815dcSEvan Bacon        { CFBundleURLSchemes: ['myapp3'] },
82*082815dcSEvan Bacon        { CFBundleURLSchemes: ['myapp4'] },
83*082815dcSEvan Bacon      ],
84*082815dcSEvan Bacon    });
85*082815dcSEvan Bacon  });
86*082815dcSEvan Bacon
87*082815dcSEvan Bacon  it(`removes a scheme`, () => {
88*082815dcSEvan Bacon    const infoPlist = {
89*082815dcSEvan Bacon      CFBundleURLTypes: [
90*082815dcSEvan Bacon        { CFBundleURLSchemes: ['myapp1', 'myapp2'] },
91*082815dcSEvan Bacon        { CFBundleURLSchemes: ['myapp3'] },
92*082815dcSEvan Bacon      ],
93*082815dcSEvan Bacon    };
94*082815dcSEvan Bacon    expect(removeScheme('myapp3', infoPlist)).toStrictEqual({
95*082815dcSEvan Bacon      CFBundleURLTypes: [{ CFBundleURLSchemes: ['myapp1', 'myapp2'] }],
96*082815dcSEvan Bacon    });
97*082815dcSEvan Bacon  });
98*082815dcSEvan Bacon});
99