1f1bb9346SEvan Baconimport { AndroidConfig, AndroidManifest } from '@expo/config-plugins';
2f1bb9346SEvan Bacon
3*8f4283e8Sandyimport {
4*8f4283e8Sandy  removeExpoSchemaFromVerifiedIntentFilters,
5*8f4283e8Sandy  setGeneratedAndroidScheme,
6*8f4283e8Sandy} from '../withGeneratedAndroidScheme';
7f1bb9346SEvan Bacon
8f1bb9346SEvan Bacondescribe(setGeneratedAndroidScheme, () => {
9f1bb9346SEvan Bacon  it(`prevents adding duplicates`, () => {
10f1bb9346SEvan Bacon    let androidManifest: AndroidManifest = {
11f1bb9346SEvan Bacon      manifest: {
12f1bb9346SEvan Bacon        application: [
13f1bb9346SEvan Bacon          {
14f1bb9346SEvan Bacon            activity: [
15f1bb9346SEvan Bacon              {
16f1bb9346SEvan Bacon                $: {
17f1bb9346SEvan Bacon                  'android:name': '.MainActivity',
18f1bb9346SEvan Bacon                  'android:launchMode': 'singleTask',
19f1bb9346SEvan Bacon                },
20f1bb9346SEvan Bacon                'intent-filter': [
21f1bb9346SEvan Bacon                  {
22f1bb9346SEvan Bacon                    action: [
23f1bb9346SEvan Bacon                      {
24f1bb9346SEvan Bacon                        $: {
25f1bb9346SEvan Bacon                          'android:name': 'android.intent.action.VIEW',
26f1bb9346SEvan Bacon                        },
27f1bb9346SEvan Bacon                      },
28f1bb9346SEvan Bacon                    ],
29f1bb9346SEvan Bacon                    category: [
30f1bb9346SEvan Bacon                      {
31f1bb9346SEvan Bacon                        $: {
32f1bb9346SEvan Bacon                          'android:name': 'android.intent.category.DEFAULT',
33f1bb9346SEvan Bacon                        },
34f1bb9346SEvan Bacon                      },
35f1bb9346SEvan Bacon                      {
36f1bb9346SEvan Bacon                        $: {
37f1bb9346SEvan Bacon                          'android:name': 'android.intent.category.BROWSABLE',
38f1bb9346SEvan Bacon                        },
39f1bb9346SEvan Bacon                      },
40f1bb9346SEvan Bacon                    ],
41f1bb9346SEvan Bacon                    data: [],
42f1bb9346SEvan Bacon                  },
43f1bb9346SEvan Bacon                ],
44f1bb9346SEvan Bacon              },
45f1bb9346SEvan Bacon            ],
46f1bb9346SEvan Bacon            $: {
47f1bb9346SEvan Bacon              'android:name': '.MainApplication',
48f1bb9346SEvan Bacon            },
49f1bb9346SEvan Bacon          },
50f1bb9346SEvan Bacon        ],
51f1bb9346SEvan Bacon        $: {
52f1bb9346SEvan Bacon          'xmlns:android': 'http://schemas.android.com/apk/res/android',
53f1bb9346SEvan Bacon          package: 'com.placeholder.appid',
54f1bb9346SEvan Bacon        },
55f1bb9346SEvan Bacon      },
56f1bb9346SEvan Bacon    };
57f1bb9346SEvan Bacon    const config = { slug: 'cello' };
58f1bb9346SEvan Bacon
59f1bb9346SEvan Bacon    for (let i = 0; i < 2; i++) {
60f1bb9346SEvan Bacon      androidManifest = setGeneratedAndroidScheme(config, androidManifest);
61f1bb9346SEvan Bacon
62f1bb9346SEvan Bacon      expect(AndroidConfig.Scheme.getSchemesFromManifest(androidManifest)).toStrictEqual([
63f1bb9346SEvan Bacon        'exp+cello',
64f1bb9346SEvan Bacon      ]);
65f1bb9346SEvan Bacon    }
66f1bb9346SEvan Bacon  });
67*8f4283e8Sandy
68*8f4283e8Sandy  it(`removes exp+ scheme when intent filter autoVerify is true`, () => {
69*8f4283e8Sandy    let androidManifest: AndroidManifest = {
70*8f4283e8Sandy      manifest: {
71*8f4283e8Sandy        application: [
72*8f4283e8Sandy          {
73*8f4283e8Sandy            activity: [
74*8f4283e8Sandy              {
75*8f4283e8Sandy                $: {
76*8f4283e8Sandy                  'android:name': '.MainActivity',
77*8f4283e8Sandy                  'android:launchMode': 'singleTask',
78*8f4283e8Sandy                },
79*8f4283e8Sandy                'intent-filter': [
80*8f4283e8Sandy                  {
81*8f4283e8Sandy                    $: {
82*8f4283e8Sandy                      'android:autoVerify': 'true',
83*8f4283e8Sandy                    },
84*8f4283e8Sandy                    action: [
85*8f4283e8Sandy                      {
86*8f4283e8Sandy                        $: {
87*8f4283e8Sandy                          'android:name': 'android.intent.action.VIEW',
88*8f4283e8Sandy                        },
89*8f4283e8Sandy                      },
90*8f4283e8Sandy                    ],
91*8f4283e8Sandy                    category: [
92*8f4283e8Sandy                      {
93*8f4283e8Sandy                        $: {
94*8f4283e8Sandy                          'android:name': 'android.intent.category.DEFAULT',
95*8f4283e8Sandy                        },
96*8f4283e8Sandy                      },
97*8f4283e8Sandy                      {
98*8f4283e8Sandy                        $: {
99*8f4283e8Sandy                          'android:name': 'android.intent.category.BROWSABLE',
100*8f4283e8Sandy                        },
101*8f4283e8Sandy                      },
102*8f4283e8Sandy                    ],
103*8f4283e8Sandy                    data: [],
104*8f4283e8Sandy                  },
105*8f4283e8Sandy                  {
106*8f4283e8Sandy                    action: [
107*8f4283e8Sandy                      {
108*8f4283e8Sandy                        $: {
109*8f4283e8Sandy                          'android:name': 'android.intent.action.VIEW',
110*8f4283e8Sandy                        },
111*8f4283e8Sandy                      },
112*8f4283e8Sandy                    ],
113*8f4283e8Sandy                    category: [
114*8f4283e8Sandy                      {
115*8f4283e8Sandy                        $: {
116*8f4283e8Sandy                          'android:name': 'android.intent.category.DEFAULT',
117*8f4283e8Sandy                        },
118*8f4283e8Sandy                      },
119*8f4283e8Sandy                      {
120*8f4283e8Sandy                        $: {
121*8f4283e8Sandy                          'android:name': 'android.intent.category.BROWSABLE',
122*8f4283e8Sandy                        },
123*8f4283e8Sandy                      },
124*8f4283e8Sandy                    ],
125*8f4283e8Sandy                    data: [],
126*8f4283e8Sandy                  },
127*8f4283e8Sandy                ],
128*8f4283e8Sandy              },
129*8f4283e8Sandy            ],
130*8f4283e8Sandy            $: {
131*8f4283e8Sandy              'android:name': '.MainApplication',
132*8f4283e8Sandy            },
133*8f4283e8Sandy          },
134*8f4283e8Sandy        ],
135*8f4283e8Sandy        $: {
136*8f4283e8Sandy          'xmlns:android': 'http://schemas.android.com/apk/res/android',
137*8f4283e8Sandy          package: 'com.placeholder.appid',
138*8f4283e8Sandy        },
139*8f4283e8Sandy      },
140*8f4283e8Sandy    };
141*8f4283e8Sandy    const config = { slug: 'cello' };
142*8f4283e8Sandy    androidManifest = setGeneratedAndroidScheme(config, androidManifest);
143*8f4283e8Sandy    androidManifest = removeExpoSchemaFromVerifiedIntentFilters(config, androidManifest);
144*8f4283e8Sandy    const schemes = AndroidConfig.Scheme.getSchemesFromManifest(androidManifest);
145*8f4283e8Sandy    expect(schemes.length).toEqual(1);
146*8f4283e8Sandy  });
147f1bb9346SEvan Bacon});
148