1*082815dcSEvan Baconimport fs from 'fs';
2*082815dcSEvan Baconimport { vol } from 'memfs';
3*082815dcSEvan Bacon
4*082815dcSEvan Baconimport { copyFilePathToPathAsync, removeFile } from '../fs';
5*082815dcSEvan Baconjest.mock('fs');
6*082815dcSEvan Bacon
7*082815dcSEvan Bacondescribe(copyFilePathToPathAsync, () => {
8*082815dcSEvan Bacon  beforeAll(() => {
9*082815dcSEvan Bacon    jest.spyOn(fs.promises, 'readFile');
10*082815dcSEvan Bacon    jest.spyOn(fs.promises, 'writeFile');
11*082815dcSEvan Bacon  });
12*082815dcSEvan Bacon  afterAll(() => {
13*082815dcSEvan Bacon    vol.reset();
14*082815dcSEvan Bacon  });
15*082815dcSEvan Bacon
16*082815dcSEvan Bacon  it(`copies a single file into a nested location`, async () => {
17*082815dcSEvan Bacon    const projectRoot = '/';
18*082815dcSEvan Bacon    const CONTENTS = '{ foobar }';
19*082815dcSEvan Bacon    vol.fromJSON(
20*082815dcSEvan Bacon      {
21*082815dcSEvan Bacon        'google-services.json': CONTENTS,
22*082815dcSEvan Bacon      },
23*082815dcSEvan Bacon      projectRoot
24*082815dcSEvan Bacon    );
25*082815dcSEvan Bacon
26*082815dcSEvan Bacon    await copyFilePathToPathAsync('/google-services.json', '/android/app/google-services.json');
27*082815dcSEvan Bacon
28*082815dcSEvan Bacon    expect(fs.promises.readFile).toHaveBeenLastCalledWith('/google-services.json');
29*082815dcSEvan Bacon
30*082815dcSEvan Bacon    expect(fs.promises.writeFile).toHaveBeenLastCalledWith(
31*082815dcSEvan Bacon      '/android/app/google-services.json',
32*082815dcSEvan Bacon      expect.anything()
33*082815dcSEvan Bacon    );
34*082815dcSEvan Bacon
35*082815dcSEvan Bacon    expect(vol.toJSON(projectRoot)).toEqual({
36*082815dcSEvan Bacon      // New
37*082815dcSEvan Bacon      '/android/app/google-services.json': CONTENTS,
38*082815dcSEvan Bacon      // Old -- both should still exist
39*082815dcSEvan Bacon      '/google-services.json': CONTENTS,
40*082815dcSEvan Bacon    });
41*082815dcSEvan Bacon  });
42*082815dcSEvan Bacon});
43*082815dcSEvan Bacon
44*082815dcSEvan Bacondescribe(removeFile, () => {
45*082815dcSEvan Bacon  afterAll(() => {
46*082815dcSEvan Bacon    vol.reset();
47*082815dcSEvan Bacon  });
48*082815dcSEvan Bacon
49*082815dcSEvan Bacon  it(`removes a single file`, () => {
50*082815dcSEvan Bacon    const projectRoot = '/';
51*082815dcSEvan Bacon    vol.fromJSON(
52*082815dcSEvan Bacon      {
53*082815dcSEvan Bacon        'google-services.json': '{ foobar }',
54*082815dcSEvan Bacon      },
55*082815dcSEvan Bacon      projectRoot
56*082815dcSEvan Bacon    );
57*082815dcSEvan Bacon
58*082815dcSEvan Bacon    expect(removeFile('/google-services.json')).toBe(true);
59*082815dcSEvan Bacon
60*082815dcSEvan Bacon    expect(vol.toJSON(projectRoot)).toEqual({});
61*082815dcSEvan Bacon  });
62*082815dcSEvan Bacon  it(`returns false if the requested file is missing`, () => {
63*082815dcSEvan Bacon    vol.fromJSON({}, '/');
64*082815dcSEvan Bacon
65*082815dcSEvan Bacon    expect(removeFile('/google-services.json')).toBe(false);
66*082815dcSEvan Bacon  });
67*082815dcSEvan Bacon
68*082815dcSEvan Bacon  it(`does not remove non-empty directories`, async () => {
69*082815dcSEvan Bacon    const projectRoot = '/';
70*082815dcSEvan Bacon    vol.fromJSON(
71*082815dcSEvan Bacon      {
72*082815dcSEvan Bacon        '/android/app/file.txt': '{}',
73*082815dcSEvan Bacon      },
74*082815dcSEvan Bacon      projectRoot
75*082815dcSEvan Bacon    );
76*082815dcSEvan Bacon
77*082815dcSEvan Bacon    expect(() => removeFile('/android/app')).toThrow(/Dir not empty/);
78*082815dcSEvan Bacon  });
79*082815dcSEvan Bacon});
80