1*082815dcSEvan Baconimport { ExpoConfig } from '@expo/config';
2*082815dcSEvan Bacon
3*082815dcSEvan Baconimport { ConfigPlugin, ExportedConfigWithProps, Mod } from '../../Plugin.types';
4*082815dcSEvan Bacon
5*082815dcSEvan Bacon// Usage: add the following mock to the mods you are using:
6*082815dcSEvan Bacon// jest.mock('../../plugins/android-plugins');
7*082815dcSEvan Bacon
8*082815dcSEvan Baconexport function mockModWithResults(withMod, modResults) {
9*082815dcSEvan Bacon  withMod.mockImplementationOnce((config, action) => {
10*082815dcSEvan Bacon    return action({ ...config, modResults });
11*082815dcSEvan Bacon  });
12*082815dcSEvan Bacon}
13*082815dcSEvan Bacon
14*082815dcSEvan Bacon/**
15*082815dcSEvan Bacon * Mock a single mod and evaluate the plugin that uses that mod
16*082815dcSEvan Bacon * @param config
17*082815dcSEvan Bacon * @param param1
18*082815dcSEvan Bacon * @returns
19*082815dcSEvan Bacon */
20*082815dcSEvan Baconexport async function compileMockModWithResultsAsync<T>(
21*082815dcSEvan Bacon  config: Partial<ExpoConfig>,
22*082815dcSEvan Bacon  {
23*082815dcSEvan Bacon    mod,
24*082815dcSEvan Bacon    plugin,
25*082815dcSEvan Bacon    modResults,
26*082815dcSEvan Bacon  }: {
27*082815dcSEvan Bacon    mod: ConfigPlugin<Mod<T>>;
28*082815dcSEvan Bacon    plugin: ConfigPlugin;
29*082815dcSEvan Bacon    modResults: T;
30*082815dcSEvan Bacon  }
31*082815dcSEvan Bacon): Promise<ExportedConfigWithProps<T>> {
32*082815dcSEvan Bacon  mockModWithResults(mod, modResults);
33*082815dcSEvan Bacon  return (await plugin(config as any)) as ExportedConfigWithProps<T>;
34*082815dcSEvan Bacon}
35