1import { AndroidConfig } from 'expo/config-plugins';
2import { resolve } from 'path';
3
4import { getBranchApiKey, setBranchApiKey } from '../withBranchAndroid';
5
6const { findMetaDataItem, getMainApplication, readAndroidManifestAsync } = AndroidConfig.Manifest;
7
8const fixturesPath = resolve(__dirname, 'fixtures');
9
10const sampleManifestPath = resolve(fixturesPath, 'react-native-AndroidManifest.xml');
11
12describe(getBranchApiKey, () => {
13  it(`returns null if no android branch api key is provided`, () => {
14    expect(getBranchApiKey({ android: { config: {} } } as any)).toBe(null);
15  });
16
17  it(`returns apikey if android branch api key is provided`, () => {
18    expect(
19      getBranchApiKey({ android: { config: { branch: { apiKey: 'MY-API-KEY' } } } } as any)
20    ).toBe('MY-API-KEY');
21  });
22});
23
24describe(setBranchApiKey, () => {
25  it('sets branch api key in AndroidManifest.xml if given', async () => {
26    let androidManifestJson = await readAndroidManifestAsync(sampleManifestPath);
27    androidManifestJson = await setBranchApiKey(
28      { android: { config: { branch: { apiKey: 'MY-API-KEY' } } } } as any,
29      androidManifestJson
30    );
31    let mainApplication = getMainApplication(androidManifestJson);
32
33    expect(findMetaDataItem(mainApplication, 'io.branch.sdk.BranchKey')).toBeGreaterThan(-1);
34
35    // Unset the item
36
37    androidManifestJson = await setBranchApiKey(
38      { android: { config: { branch: { apiKey: null } } } } as any,
39      androidManifestJson
40    );
41    mainApplication = getMainApplication(androidManifestJson);
42
43    expect(findMetaDataItem(mainApplication, 'io.branch.sdk.BranchKey')).toBe(-1);
44  });
45});
46