From 87fc22a4ce93a6fb637ebc64e898c5bfafad984d Mon Sep 17 00:00:00 2001
From: Yun Lai <ylai@squareup.com>
Date: Fri, 5 Aug 2022 19:21:54 +1000
Subject: [PATCH] fix: fix failed hermit binary source tests due to findUp
 module acts differently in windows (#16985)

* fix: fix failed hermit binary source tests due to findUp module acts differently in windows

* fix: set localDir in GlobalConfig in getHermitEnvs test

* Apply suggestions from code review

Co-authored-by: Michael Kriese <michael.kriese@visualon.de>

* fix: added two more mockResolvedValueOnce for extra test case and remove mockResolvedValueOnce('')

Co-authored-by: Rhys Arkins <rhys@arkins.net>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
---
 lib/util/exec/hermit.spec.ts | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/lib/util/exec/hermit.spec.ts b/lib/util/exec/hermit.spec.ts
index f5b82c2c4a..62761c2bc5 100644
--- a/lib/util/exec/hermit.spec.ts
+++ b/lib/util/exec/hermit.spec.ts
@@ -1,10 +1,15 @@
-import tmp, { DirectoryResult } from 'tmp-promise';
+import _findUp from 'find-up';
+import upath from 'upath';
 import { mockExecAll } from '../../../test/exec-util';
+import { mockedFunction } from '../../../test/util';
 import { GlobalConfig } from '../../config/global';
-import { writeLocalFile } from '../fs';
 import { findHermitCwd, getHermitEnvs, isHermit } from './hermit';
 import type { RawExecOptions } from './types';
 
+jest.mock('find-up');
+const findUp = mockedFunction(_findUp);
+const localDir = '/tmp/renovate/repository/project-a';
+
 describe('util/exec/hermit', () => {
   describe('isHermit', () => {
     it('should return true when binarySource is hermit', () => {
@@ -16,29 +21,21 @@ describe('util/exec/hermit', () => {
   });
 
   describe('findHermitCwd', () => {
-    let localDirResult: DirectoryResult;
-    let localDir: string;
-
-    beforeEach(async () => {
-      localDirResult = await tmp.dir({ unsafeCleanup: true });
-      localDir = localDirResult.path;
-
+    beforeEach(() => {
       GlobalConfig.set({ localDir });
     });
 
-    afterEach(async () => {
-      await localDirResult?.cleanup();
-    });
-
     it('should find the closest hermit cwd to the given path', async () => {
-      await writeLocalFile('nested/bin/hermit', 'foo');
-      await writeLocalFile('bin/hermit', 'bar');
-
+      findUp.mockResolvedValueOnce(upath.join(localDir, 'nested/bin/hermit'));
       const nestedCwd = 'nested/other/directory';
 
       expect(await findHermitCwd(nestedCwd)).toBe(`${localDir}/nested/bin`);
+      findUp.mockResolvedValueOnce(upath.join(localDir, 'nested/bin/hermit'));
       expect(await findHermitCwd('nested')).toBe(`${localDir}/nested/bin`);
+
+      findUp.mockResolvedValueOnce(upath.join(localDir, 'bin/hermit'));
       expect(await findHermitCwd('')).toBe(`${localDir}/bin`);
+      findUp.mockResolvedValueOnce(upath.join(localDir, 'bin/hermit'));
       expect(await findHermitCwd('other/directory')).toBe(`${localDir}/bin`);
     });
 
@@ -50,8 +47,12 @@ describe('util/exec/hermit', () => {
   });
 
   describe('getHermitEnvs', () => {
+    beforeEach(() => {
+      GlobalConfig.set({ localDir });
+    });
+
     it('should return hermit environment variables when hermit env returns successfully', async () => {
-      await writeLocalFile('bin/hermit', 'bar');
+      findUp.mockResolvedValueOnce(upath.join(localDir, 'bin/hermit'));
       mockExecAll({
         stdout: `GOBIN=/usr/src/app/repository-a/.hermit/go/bin
 PATH=/usr/src/app/repository-a/bin
-- 
GitLab