diff --git a/packages/codemods/src/__test__/integration.test.js b/packages/codemods/src/__test__/integration.test.js index e7b87151..436a5774 100644 --- a/packages/codemods/src/__test__/integration.test.js +++ b/packages/codemods/src/__test__/integration.test.js @@ -1,7 +1,24 @@ -import { it, describe } from 'vitest'; +import { it, describe, expect } from 'vitest'; +import transformer from '../index'; + +function expectCodemodResult(src, expected) { + expect(transformer({ source: src })).toEqual(expected); +} describe('integration', () => { - it('allow passing in one or more variable names for fetch-mock', () => {}); + it('allow passing in one or more variable names for fetch-mock', () => { + process.env.FM_VARIABLES = 'fm1,fm2'; + expectCodemodResult( + `const fetchMock = require('fetch-mock'); +fetchMock.mock("blah", 200); +fm1.mock("blah", 200); +fm2.mock("blah", 200);`, + `const fetchMock = require('fetch-mock'); +fetchMock.route("blah", 200); +fm1.route("blah", 200); +fm2.route("blah", 200);`, + ); + }); it('can operate on a js file', () => {}); it('can operate on a ts file', () => {}); it('can operate on a jsx file', () => {}); diff --git a/packages/codemods/src/__test__/method-codemods.test.js b/packages/codemods/src/__test__/method-codemods.test.js index 44c4e282..9d099c76 100644 --- a/packages/codemods/src/__test__/method-codemods.test.js +++ b/packages/codemods/src/__test__/method-codemods.test.js @@ -1,6 +1,5 @@ import { describe, it, expect } from 'vitest'; import { codemod } from '../index'; -import jscodeshift from 'jscodeshift'; const prependFetchMock = (src, fetchMockVariableName) => `const ${fetchMockVariableName} = require('fetch-mock');\n${src}`; @@ -10,9 +9,9 @@ function expectCodemodResult( expected, fetchMockVariableName = 'fetchMock', ) { - expect( - codemod(prependFetchMock(src, fetchMockVariableName), jscodeshift), - ).toEqual(prependFetchMock(expected, fetchMockVariableName)); + expect(codemod(prependFetchMock(src, fetchMockVariableName))).toEqual( + prependFetchMock(expected, fetchMockVariableName), + ); } describe('codemods operating on methods', () => { diff --git a/packages/codemods/src/__test__/option-codemods.test.js b/packages/codemods/src/__test__/option-codemods.test.js index a9dbb29f..eeba1305 100644 --- a/packages/codemods/src/__test__/option-codemods.test.js +++ b/packages/codemods/src/__test__/option-codemods.test.js @@ -1,14 +1,11 @@ import { describe, it, expect } from 'vitest'; import { codemod } from '../index'; -import jscodeshift from 'jscodeshift'; const prependFetchMock = (src) => `const fetchMock = require('fetch-mock');${src ? '\n' : ''}${src}`; function expectCodemodResult(src, expected) { - expect(codemod(prependFetchMock(src), jscodeshift)).toEqual( - prependFetchMock(expected), - ); + expect(codemod(prependFetchMock(src))).toEqual(prependFetchMock(expected)); } describe('codemods operating on options', () => { diff --git a/packages/codemods/src/index.js b/packages/codemods/src/index.js index f5c5027c..6797f6c7 100644 --- a/packages/codemods/src/index.js +++ b/packages/codemods/src/index.js @@ -29,9 +29,9 @@ function findFetchMockVariableName(root) { return fetchMockVariableName; } -export function codemod(source) { +export function codemod(source, variableName) { const root = j(source); - const fetchMockVariableName = findFetchMockVariableName(root); + const fetchMockVariableName = variableName || findFetchMockVariableName(root); simpleMethods(fetchMockVariableName, root); // run after simpleMethods because means the options rewriters have to iterate // over smaller list of methods @@ -41,5 +41,12 @@ export function codemod(source) { } export default function transformer(file) { - return codemod(file.source); + let modifiedSource = codemod(file.source); + if (process.env.FM_VARIABLES) { + const extraVariables = process.env.FM_VARIABLES.split(','); + extraVariables.forEach((variableName) => { + modifiedSource = codemod(modifiedSource, variableName); + }); + } + return modifiedSource; }