1import { isModuleSymlinked } from '../../utils/isModuleSymlinked'; 2import { hashForDependencyMap, updatePkgDependencies } from '../updatePackageJson'; 3 4jest.mock('../../utils/isModuleSymlinked'); 5 6describe(hashForDependencyMap, () => { 7 it(`dependencies in any order hash to the same value`, () => { 8 expect(hashForDependencyMap({ a: '1.0.0', b: 2, c: '~3.0' })).toBe( 9 hashForDependencyMap({ c: '~3.0', b: 2, a: '1.0.0' }) 10 ); 11 }); 12}); 13 14describe(updatePkgDependencies, () => { 15 beforeAll(() => { 16 (isModuleSymlinked as any).mockImplementation(() => false); 17 }); 18 const requiredPackages = { 19 react: 'version-from-template-required-1', 20 'react-native': 'version-from-template-required-1', 21 'react-native-unimodules': 'version-from-template-required-1', 22 'expo-updates': 'version-from-template-required-1', 23 }; 24 25 test('default bahaviour', () => { 26 const pkg = { 27 dependencies: { 28 'react-native': 'version-from-project', 29 'optional-package': 'version-from-project-1', 30 'optional-package-3': 'version-from-project-3', 31 }, 32 devDependencies: {}, 33 }; 34 updatePkgDependencies('fake path', { 35 templatePkg: { 36 dependencies: { 37 ...requiredPackages, 38 'optional-package': 'version-from-template-1', 39 'optional-package-2': 'version-from-template-2', 40 }, 41 devDependencies: {}, 42 }, 43 pkg, 44 }); 45 expect(pkg.dependencies).toStrictEqual({ 46 ...requiredPackages, 47 'optional-package': 'version-from-project-1', 48 'optional-package-2': 'version-from-template-2', 49 'optional-package-3': 'version-from-project-3', 50 }); 51 }); 52 test('with skipDependencyUpdate', () => { 53 const pkg = { 54 dependencies: { 55 'react-native': 'version-from-project', 56 'optional-package': 'version-from-project-1', 57 'optional-package-3': 'version-from-project-3', 58 }, 59 devDependencies: {}, 60 }; 61 updatePkgDependencies('fake path', { 62 pkg, 63 templatePkg: { 64 dependencies: { 65 ...requiredPackages, 66 'react-native': 'version-from-project', 67 'optional-package': 'version-from-template-1', 68 'optional-package-2': 'version-from-template-2', 69 }, 70 devDependencies: {}, 71 }, 72 skipDependencyUpdate: ['react-native'], 73 }); 74 expect(pkg.dependencies).toStrictEqual({ 75 ...requiredPackages, 76 'react-native': 'version-from-project', 77 'optional-package': 'version-from-project-1', 78 'optional-package-2': 'version-from-template-2', 79 'optional-package-3': 'version-from-project-3', 80 }); 81 }); 82 test('test expo-updates not required by default in sdk 44', () => { 83 const sdk44RequiredPackages = { 84 react: 'version-from-template-required-1', 85 'react-native': 'version-from-template-required-1', 86 }; 87 const pkg = { 88 dependencies: { 89 'react-native': 'version-from-project', 90 'optional-package': 'version-from-project-1', 91 'optional-package-3': 'version-from-project-3', 92 }, 93 devDependencies: {}, 94 }; 95 updatePkgDependencies('fake path', { 96 templatePkg: { 97 dependencies: { 98 ...sdk44RequiredPackages, 99 'optional-package': 'version-from-template-1', 100 'optional-package-2': 'version-from-template-2', 101 }, 102 devDependencies: {}, 103 }, 104 pkg, 105 }); 106 expect(pkg.dependencies).toStrictEqual({ 107 ...sdk44RequiredPackages, 108 'optional-package': 'version-from-project-1', 109 'optional-package-2': 'version-from-template-2', 110 'optional-package-3': 'version-from-project-3', 111 }); 112 }); 113}); 114