1import { vol } from 'memfs'; 2 3import { clearNativeFolder, getMalformedNativeProjectsAsync } from '../clearNativeFolder'; 4import rnFixture from './fixtures/react-native-project'; 5 6describe(clearNativeFolder, () => { 7 it(`clears folders`, async () => { 8 const platforms = ['android', 'ios']; 9 // mock out some non-empty ios and android folders. 10 vol.fromJSON( 11 { 12 'android/foobar': 'x', 13 'ios/Info.plist': 'xx', 14 'ios/another/file': 'xx', 15 }, 16 '/' 17 ); 18 await clearNativeFolder('/', platforms); 19 expect(vol.toJSON()).toEqual({}); 20 }); 21}); 22 23describe(getMalformedNativeProjectsAsync, () => { 24 afterEach(() => { 25 vol.reset(); 26 }); 27 28 it(`gets fully qualified list of native projects to clear`, async () => { 29 const projectRoot = '/'; 30 vol.fromJSON(rnFixture, projectRoot); 31 const malformed = await getMalformedNativeProjectsAsync(projectRoot, ['android', 'ios']); 32 expect(malformed).toStrictEqual([]); 33 }); 34 35 it(`skips platforms that are missing native project folders`, async () => { 36 const projectRoot = '/'; 37 vol.fromJSON( 38 { 39 ...Object.entries(rnFixture).reduce((prev, [key, value]) => { 40 // Skip ios project files 41 if (key.startsWith('ios')) return prev; 42 return { 43 ...prev, 44 [key]: value, 45 }; 46 }, {}), 47 }, 48 projectRoot 49 ); 50 const malformed = await getMalformedNativeProjectsAsync(projectRoot, ['android', 'ios']); 51 expect(malformed).toStrictEqual([]); 52 }); 53 54 it(`finds a single platform`, async () => { 55 const projectRoot = '/'; 56 vol.fromJSON(rnFixture, projectRoot); 57 const malformed = await getMalformedNativeProjectsAsync(projectRoot, ['ios']); 58 expect(malformed).toStrictEqual([]); 59 }); 60 61 it(`finds malformed projects`, async () => { 62 const projectRoot = '/'; 63 vol.fromJSON( 64 { 65 ...Object.entries(rnFixture).reduce((prev, [key, value]) => { 66 // Skip core files to emulate a malformed project 67 if ( 68 [ 69 'ios/ReactNativeProject/Info.plist', 70 'android/app/src/main/java/com/reactnativeproject/MainApplication.java', 71 ].includes(key) 72 ) { 73 return prev; 74 } 75 return { 76 ...prev, 77 [key]: value, 78 }; 79 }, {}), 80 }, 81 projectRoot 82 ); 83 const malformed = await getMalformedNativeProjectsAsync(projectRoot, ['ios', 'android']); 84 expect(malformed).toStrictEqual(['ios', 'android']); 85 }); 86 87 // Most closely emulates the core use-case. 88 it(`finds malformed projects with empty folders`, async () => { 89 const projectRoot = '/'; 90 vol.fromJSON( 91 { 92 'ios/foo': undefined, 93 'android/foo': undefined, 94 }, 95 projectRoot 96 ); 97 const malformed = await getMalformedNativeProjectsAsync(projectRoot, ['ios', 'android']); 98 expect(malformed).toStrictEqual(['ios', 'android']); 99 }); 100 101 it(`finds neither platform when no native projects exist`, async () => { 102 const projectRoot = '/'; 103 vol.fromJSON({}, projectRoot); 104 const malformed = await getMalformedNativeProjectsAsync(projectRoot, ['ios', 'android']); 105 expect(malformed).toStrictEqual([]); 106 }); 107}); 108