From 6df9c4836c15a0adfd1b2ebbeec865ff6a3e1b68 Mon Sep 17 00:00:00 2001 From: Yuki Hattori Date: Fri, 27 Sep 2024 00:54:11 +0900 Subject: [PATCH] Add test for `CHROME_PATH` and `FIREFOX_PATH` environment variable --- test/browser/finders/chrome.ts | 46 ++++++++++++++++++++++++++++ test/browser/finders/edge.ts | 4 +-- test/browser/finders/firefox.ts | 54 ++++++++++++++++++++++++++++++--- test/utils/edge-finder.ts | 4 +-- 4 files changed, 100 insertions(+), 8 deletions(-) diff --git a/test/browser/finders/chrome.ts b/test/browser/finders/chrome.ts index 5b436776..b0a289e5 100644 --- a/test/browser/finders/chrome.ts +++ b/test/browser/finders/chrome.ts @@ -30,6 +30,52 @@ describe('Chrome finder', () => { }) }) + describe('with CHROME_PATH environment variable', () => { + const originalEnv = { ...process.env } + const regularResolution = new Error('Starting regular resolution') + + beforeEach(() => { + jest.resetModules() + jest.spyOn(utils, 'getPlatform').mockRejectedValue(regularResolution) + }) + + afterEach(() => { + process.env = { ...originalEnv } + }) + + it('return the path for executable specified in CHROME_PATH', async () => { + process.env.CHROME_PATH = executableMock('empty') + + expect(await chromeFinder({})).toStrictEqual({ + path: process.env.CHROME_PATH, + acceptedBrowsers: [ChromeBrowser, ChromeCdpBrowser], + }) + }) + + it('processes regular resolution if CHROME_PATH is not executable', async () => { + process.env.CHROME_PATH = executableMock('non-executable') + + await expect(chromeFinder({})).rejects.toThrow(regularResolution) + }) + + it('processes regular resolution if CHROME_PATH is not found', async () => { + process.env.CHROME_PATH = executableMock('not-found') + + await expect(chromeFinder({})).rejects.toThrow(regularResolution) + }) + + it('prefers the preferred path over CHROME_PATH', async () => { + process.env.CHROME_PATH = executableMock('empty') + + expect( + await chromeFinder({ preferredPath: '/test/preferred/chrome' }) + ).toStrictEqual({ + path: '/test/preferred/chrome', + acceptedBrowsers: [ChromeBrowser, ChromeCdpBrowser], + }) + }) + }) + describe('with Linux', () => { beforeEach(() => { jest.spyOn(utils, 'getPlatform').mockResolvedValue('linux') diff --git a/test/browser/finders/edge.ts b/test/browser/finders/edge.ts index c4f6ad35..77ace60c 100644 --- a/test/browser/finders/edge.ts +++ b/test/browser/finders/edge.ts @@ -136,7 +136,7 @@ describe('Edge finder', () => { const winLocalAppData = ['C:', 'Mock', 'AppData', 'Local'] const edgePath = path.join(...winProgramFiles, ...winEdgeStable) - const originalEnv = process.env + const originalEnv = { ...process.env } beforeEach(() => { jest.resetModules() @@ -155,7 +155,7 @@ describe('Edge finder', () => { }) afterEach(() => { - process.env = originalEnv + process.env = { ...originalEnv } }) it('finds possible executable path and returns the matched path', async () => { diff --git a/test/browser/finders/firefox.ts b/test/browser/finders/firefox.ts index fc19adc4..e14c3dfd 100644 --- a/test/browser/finders/firefox.ts +++ b/test/browser/finders/firefox.ts @@ -38,6 +38,52 @@ describe('Firefox finder', () => { }) }) + describe('with FIREFOX_PATH environment variable', () => { + const originalEnv = { ...process.env } + const regularResolution = new Error('Starting regular resolution') + + beforeEach(() => { + jest.resetModules() + jest.spyOn(utils, 'getPlatform').mockRejectedValue(regularResolution) + }) + + afterEach(() => { + process.env = { ...originalEnv } + }) + + it('return the path for executable specified in FIREFOX_PATH', async () => { + process.env.FIREFOX_PATH = executableMock('empty') + + expect(await firefoxFinder({})).toStrictEqual({ + path: process.env.FIREFOX_PATH, + acceptedBrowsers: [FirefoxBrowser], + }) + }) + + it('processes regular resolution if FIREFOX_PATH is not executable', async () => { + process.env.FIREFOX_PATH = executableMock('non-executable') + + await expect(firefoxFinder({})).rejects.toThrow(regularResolution) + }) + + it('processes regular resolution if FIREFOX_PATH is not found', async () => { + process.env.FIREFOX_PATH = executableMock('not-found') + + await expect(firefoxFinder({})).rejects.toThrow(regularResolution) + }) + + it('prefers the preferred path over FIREFOX_PATH', async () => { + process.env.FIREFOX_PATH = executableMock('empty') + + expect( + await firefoxFinder({ preferredPath: '/test/preferred/firefox' }) + ).toStrictEqual({ + path: '/test/preferred/firefox', + acceptedBrowsers: [FirefoxBrowser], + }) + }) + }) + describe('with Linux', () => { beforeEach(() => { jest.spyOn(utils, 'getPlatform').mockResolvedValue('linux') @@ -147,7 +193,7 @@ describe('Firefox finder', () => { 'Mozilla Firefox', 'firefox.exe' ) - const originalEnv = process.env + const originalEnv = { ...process.env } beforeEach(() => { jest.resetModules() @@ -166,7 +212,7 @@ describe('Firefox finder', () => { }) afterEach(() => { - process.env = originalEnv + process.env = { ...originalEnv } }) it('finds possible executable path and returns the matched path', async () => { @@ -249,7 +295,7 @@ describe('Firefox finder', () => { }) describe('with WSL1', () => { - const originalEnv = process.env + const originalEnv = { ...process.env } beforeEach(() => { jest.resetModules() @@ -265,7 +311,7 @@ describe('Firefox finder', () => { }) afterEach(() => { - process.env = originalEnv + process.env = { ...originalEnv } }) it('finds possible executable path and returns the matched path', async () => { diff --git a/test/utils/edge-finder.ts b/test/utils/edge-finder.ts index 4c830c2f..e88b3894 100644 --- a/test/utils/edge-finder.ts +++ b/test/utils/edge-finder.ts @@ -40,7 +40,7 @@ describe('#findEdgeInstallation', () => { }) it('finds out the first accessible Edge from 3 locations', async () => { - const currentEnv = process.env + const currentEnv = { ...process.env } const programFiles = path.join('C:', 'Mock', 'Program Files') const programFilesX86 = path.join('C:', 'Mock', 'Program Files (x86)') @@ -79,7 +79,7 @@ describe('#findEdgeInstallation', () => { delete process.env['PROGRAMFILES(X86)'] delete process.env.LOCALAPPDATA - process.env = currentEnv + process.env = { ...currentEnv } } }) })