UNPKG

react-native-integrate

Version:

Automate integration of additional code into React Native projects

125 lines (124 loc) 5.87 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); require('../../../mocks/mockAll'); const mockRunTask = jest.spyOn(require('../../../../utils/runTask'), 'runTask'); const path_1 = __importDefault(require("path")); const getProjectPath_1 = require("../../../../utils/getProjectPath"); const runUpgradeTasks_1 = require("../../../../utils/upgrade/runUpgradeTasks"); const mockFs_1 = require("../../../mocks/mockFs"); describe('runUpgradeTasks', () => { afterEach(() => { mockRunTask.mockReset(); }); it('should execute upgrade.yml tasks', async () => { mockRunTask.mockResolvedValueOnce(undefined); mockFs_1.mockFs.writeFileSync(path_1.default.join((0, getProjectPath_1.getProjectPath)(), '.upgrade/upgrade.yml'), ` env: value: true steps: - task: app_delegate label: AppDelegate.mm modification actions: - append: test`); const result = await (0, runUpgradeTasks_1.runUpgradeTasks)(undefined); expect(result.didRun).toBeTruthy(); expect(mockRunTask).toHaveBeenCalledWith({ configPath: path_1.default.join((0, getProjectPath_1.getProjectPath)(), '.upgrade/upgrade.yml'), packageName: 'upgrade.yml', task: { task: 'app_delegate', label: 'AppDelegate.mm modification', actions: [{ append: 'test' }], }, }); }); it('should not execute when tasks does not meet condition', async () => { mockRunTask.mockResolvedValueOnce(undefined); mockFs_1.mockFs.writeFileSync(path_1.default.join((0, getProjectPath_1.getProjectPath)(), '.upgrade/upgrade.yml'), ` env: value: true steps: - task: app_delegate when: '!value' actions: - append: test`); const result = await (0, runUpgradeTasks_1.runUpgradeTasks)(undefined); expect(result.didRun).toBeTruthy(); expect(mockRunTask).not.toHaveBeenCalled(); }); it('should handle not finding upgrade.yml', async () => { const result = await (0, runUpgradeTasks_1.runUpgradeTasks)(undefined); expect(result.didRun).toBeFalsy(); }); it('should handle invalid upgrade.yml', async () => { mockFs_1.mockFs.writeFileSync(path_1.default.join((0, getProjectPath_1.getProjectPath)(), '.upgrade/upgrade.yml'), 'random'); const result = await (0, runUpgradeTasks_1.runUpgradeTasks)(undefined); expect(result.didRun).toBeFalsy(); }); it('should handle failed tasks', async () => { mockRunTask.mockRejectedValueOnce(new Error('random')); mockFs_1.mockFs.writeFileSync(path_1.default.join((0, getProjectPath_1.getProjectPath)(), '.upgrade/upgrade.yml'), ` steps: - task: app_delegate actions: - append: test`); const result = await (0, runUpgradeTasks_1.runUpgradeTasks)(undefined); expect(result.didRun).toBeTruthy(); if (result.didRun) { expect(result.failedTaskCount).toBe(1); } }); it('should execute upgrade.yml imports', async () => { mockFs_1.mockFs.writeFileSync('/oldProject/path/some.file', 'random'); mockFs_1.mockFs.writeFileSync(path_1.default.join((0, getProjectPath_1.getProjectPath)(), '.upgrade/upgrade.yml'), ` imports: - path - path/some.file`); const result = await (0, runUpgradeTasks_1.runUpgradeTasks)('/oldProject'); expect(result.didRun).toBeTruthy(); expect(mockFs_1.mockFs.readFileSync(path_1.default.join((0, getProjectPath_1.getProjectPath)() + '/path/some.file'))).toBe('random'); }); it('should skip non existing upgrade.yml imports', async () => { mockFs_1.mockFs.writeFileSync(path_1.default.join((0, getProjectPath_1.getProjectPath)(), '.upgrade/upgrade.yml'), ` imports: - path/some.file`); mockFs_1.mockFs.lstatSync.mockClear(); const result = await (0, runUpgradeTasks_1.runUpgradeTasks)('/oldProject'); expect(result.didRun).toBeTruthy(); expect(mockFs_1.mockFs.lstatSync).not.toHaveBeenCalled(); }); it('should skip blacklisted upgrade.yml imports', async () => { mockFs_1.mockFs.writeFileSync('/oldProject/android/some.file', 'random'); mockFs_1.mockFs.writeFileSync('/oldProject/node_modules/some.file', 'random'); mockFs_1.mockFs.writeFileSync(path_1.default.join((0, getProjectPath_1.getProjectPath)(), '.upgrade/upgrade.yml'), ` imports: - android - node_modules/some.file`); mockFs_1.mockFs.lstatSync.mockClear(); const result = await (0, runUpgradeTasks_1.runUpgradeTasks)('/oldProject'); expect(result.didRun).toBeTruthy(); expect(mockFs_1.mockFs.lstatSync).not.toHaveBeenCalled(); }); it('should skip when no old project path specified', async () => { mockFs_1.mockFs.writeFileSync(path_1.default.join((0, getProjectPath_1.getProjectPath)(), '.upgrade/upgrade.yml'), ` imports: - path/some.file`); mockFs_1.mockFs.lstatSync.mockClear(); const result = await (0, runUpgradeTasks_1.runUpgradeTasks)(undefined); expect(result.didRun).toBeTruthy(); expect(mockFs_1.mockFs.lstatSync).not.toHaveBeenCalled(); }); it('should handle copy error', async () => { mockFs_1.mockFs.writeFileSync('/oldProject/path/some.file', 'random'); mockFs_1.mockFs.writeFileSync(path_1.default.join((0, getProjectPath_1.getProjectPath)(), '.upgrade/upgrade.yml'), ` imports: - path/some.file`); mockFs_1.mockFs.copyFile.mockImplementationOnce((_from, _to, cb) => { cb(new Error('random')); }); await expect((0, runUpgradeTasks_1.runUpgradeTasks)('/oldProject')).rejects.toThrow('random'); }); });