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