From deaf43692dc17489000e882d62134ed1417e9f1e Mon Sep 17 00:00:00 2001
From: Sergey Dolin <dsame@github.com>
Date: Fri, 18 Aug 2023 09:01:34 +0200
Subject: [PATCH] Add unit tests

---
 __tests__/cache-utils.test.ts | 74 +++++++++++++++++++++++++++++++++++
 dist/cache-save/index.js      | 46 ++++++----------------
 dist/setup/index.js           | 46 ++++++----------------
 src/cache-save.ts             |  7 +++-
 src/cache-utils.ts            |  7 ++++
 src/main.ts                   |  3 +-
 src/utils.ts                  |  9 +----
 7 files changed, 114 insertions(+), 78 deletions(-)

diff --git a/__tests__/cache-utils.test.ts b/__tests__/cache-utils.test.ts
index 695c561..58e7ac6 100644
--- a/__tests__/cache-utils.test.ts
+++ b/__tests__/cache-utils.test.ts
@@ -3,6 +3,7 @@ import * as cache from '@actions/cache';
 import * as core from '@actions/core';
 import * as cacheUtils from '../src/cache-utils';
 import {PackageManagerInfo} from '../src/package-managers';
+import * as utils from '../src/utils';
 
 describe('getCommandOutput', () => {
   //Arrange
@@ -209,3 +210,76 @@ describe('isCacheFeatureAvailable', () => {
     expect(warningSpy).toHaveBeenCalledWith(warningMessage);
   });
 });
+
+describe('Detect environment', () => {
+  it('"RUNNER_ENVIRONMENT" = "github-hosted" should be hosted environment', () => {
+    delete process.env['AGENT_ISSELFHOSTED'];
+    process.env['RUNNER_ENVIRONMENT'] = 'github-hosted';
+    expect(utils.isSelfHosted()).toBeFalsy();
+  });
+
+  it('"RUNNER_ENVIRONMENT" = "hosted" should be self-hosted environment', () => {
+    delete process.env['AGENT_ISSELFHOSTED'];
+    process.env['RUNNER_ENVIRONMENT'] = 'hosted';
+    expect(utils.isSelfHosted()).toBeTruthy();
+  });
+
+  it('"AGENT_ISSELFHOSTED" = "0" should be hosted environment', () => {
+    process.env['AGENT_ISSELFHOSTED'] = '0';
+    delete process.env['RUNNER_ENVIRONMENT'];
+    expect(utils.isSelfHosted()).toBeFalsy();
+  });
+
+  it('"AGENT_ISSELFHOSTED" = "0" should be self-hosted environment', () => {
+    process.env['AGENT_ISSELFHOSTED'] = '1';
+    delete process.env['RUNNER_ENVIRONMENT'];
+    expect(utils.isSelfHosted()).toBeTruthy();
+  });
+
+  it('unset "RUNNER_ENVIRONMENT" and "AGENT_ISSELFHOSTED" should be self-hosted environment', () => {
+    delete process.env['AGENT_ISSELFHOSTED'];
+    delete process.env['RUNNER_ENVIRONMENT'];
+    expect(utils.isSelfHosted()).toBeTruthy();
+  });
+});
+describe('Default cache values', () => {
+  const inputSpy = jest.spyOn(utils, 'isSelfHosted');
+
+  beforeEach(() => {
+    delete process.env['INPUT_CACHE'];
+  });
+
+  it('default cache should be false in self-hosted environment', () => {
+    inputSpy.mockReturnValueOnce(true);
+    expect(cacheUtils.getCacheInput()).toBeFalsy();
+  });
+
+  it('cache should be false if set to false in self-hosted environment', () => {
+    inputSpy.mockReturnValueOnce(true);
+    process.env['INPUT_CACHE'] = 'false';
+    expect(cacheUtils.getCacheInput()).toBeFalsy();
+  });
+
+  it('cache should be tue if set to true in self-hosted environment', () => {
+    inputSpy.mockReturnValueOnce(true);
+    process.env['INPUT_CACHE'] = 'true';
+    expect(cacheUtils.getCacheInput()).toBeTruthy();
+  });
+
+  it('default cache should be handled by action.yml default in hosted environment', () => {
+    inputSpy.mockReturnValueOnce(false);
+    expect(() => cacheUtils.getCacheInput()).toThrow();
+  });
+
+  it('cache should be false if set to false in hosted environment', () => {
+    inputSpy.mockReturnValueOnce(false);
+    process.env['INPUT_CACHE'] = 'true';
+    expect(cacheUtils.getCacheInput()).toBeTruthy();
+  });
+
+  it('cache should be tue if set to true in hosted environment', () => {
+    inputSpy.mockReturnValueOnce(false);
+    process.env['INPUT_CACHE'] = 'false';
+    expect(cacheUtils.getCacheInput()).toBeFalsy();
+  });
+});
diff --git a/dist/cache-save/index.js b/dist/cache-save/index.js
index e286017..78584ea 100644
--- a/dist/cache-save/index.js
+++ b/dist/cache-save/index.js
@@ -58495,7 +58495,6 @@ const cache = __importStar(__nccwpck_require__(7799));
 const fs_1 = __importDefault(__nccwpck_require__(7147));
 const constants_1 = __nccwpck_require__(9042);
 const cache_utils_1 = __nccwpck_require__(1678);
-const utils_1 = __nccwpck_require__(1314);
 // Catch and log any unhandled exceptions.  These exceptions can leak out of the uploadChunk method in
 // @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
 // throw an uncaught exception.  Instead of failing this action, just warn.
@@ -58522,7 +58521,7 @@ function run() {
 }
 exports.run = run;
 const cachePackages = () => __awaiter(void 0, void 0, void 0, function* () {
-    if (!utils_1.getCacheInput())
+    if (!cache_utils_1.getCacheInput())
         return;
     const packageManager = 'default';
     const state = core.getState(constants_1.State.CacheMatchedKey);
@@ -58594,11 +58593,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
     });
 };
 Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0;
+exports.getCacheInput = exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0;
 const cache = __importStar(__nccwpck_require__(7799));
 const core = __importStar(__nccwpck_require__(2186));
 const exec = __importStar(__nccwpck_require__(1514));
 const package_managers_1 = __nccwpck_require__(6663);
+const utils_1 = __nccwpck_require__(1314);
 const getCommandOutput = (toolCommand) => __awaiter(void 0, void 0, void 0, function* () {
     let { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand, undefined, { ignoreReturnCode: true });
     if (exitCode) {
@@ -58653,6 +58653,13 @@ function isCacheFeatureAvailable() {
     return false;
 }
 exports.isCacheFeatureAvailable = isCacheFeatureAvailable;
+const getCacheInput = () => {
+    // for self-hosted environment turn off cache by default
+    if (utils_1.isSelfHosted() && core.getInput('cache') === '')
+        return false;
+    return core.getBooleanInput('cache');
+};
+exports.getCacheInput = getCacheInput;
 
 
 /***/ }),
@@ -58695,47 +58702,20 @@ exports.supportedPackageManagers = {
 /***/ }),
 
 /***/ 1314:
-/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+/***/ ((__unused_webpack_module, exports) => {
 
 "use strict";
 
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
 Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.getCacheInput = exports.isSelfHosted = exports.StableReleaseAlias = void 0;
-const core = __importStar(__nccwpck_require__(2186));
+exports.isSelfHosted = exports.StableReleaseAlias = void 0;
 var StableReleaseAlias;
 (function (StableReleaseAlias) {
     StableReleaseAlias["Stable"] = "stable";
     StableReleaseAlias["OldStable"] = "oldstable";
 })(StableReleaseAlias = exports.StableReleaseAlias || (exports.StableReleaseAlias = {}));
 const isSelfHosted = () => process.env['RUNNER_ENVIRONMENT'] !== 'github-hosted' &&
-    process.env['AGENT_ISSELFHOSTED'] === '1';
+    process.env['AGENT_ISSELFHOSTED'] !== '0';
 exports.isSelfHosted = isSelfHosted;
-const getCacheInput = () => {
-    // for self-hosted environment turn off cache by default
-    if (exports.isSelfHosted() && core.getInput('cache') === '')
-        return false;
-    return core.getBooleanInput('cache');
-};
-exports.getCacheInput = getCacheInput;
 
 
 /***/ }),
diff --git a/dist/setup/index.js b/dist/setup/index.js
index 9b5533d..3e993d2 100644
--- a/dist/setup/index.js
+++ b/dist/setup/index.js
@@ -61265,11 +61265,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
     });
 };
 Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0;
+exports.getCacheInput = exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0;
 const cache = __importStar(__nccwpck_require__(7799));
 const core = __importStar(__nccwpck_require__(2186));
 const exec = __importStar(__nccwpck_require__(1514));
 const package_managers_1 = __nccwpck_require__(6663);
+const utils_1 = __nccwpck_require__(1314);
 const getCommandOutput = (toolCommand) => __awaiter(void 0, void 0, void 0, function* () {
     let { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand, undefined, { ignoreReturnCode: true });
     if (exitCode) {
@@ -61324,6 +61325,13 @@ function isCacheFeatureAvailable() {
     return false;
 }
 exports.isCacheFeatureAvailable = isCacheFeatureAvailable;
+const getCacheInput = () => {
+    // for self-hosted environment turn off cache by default
+    if (utils_1.isSelfHosted() && core.getInput('cache') === '')
+        return false;
+    return core.getBooleanInput('cache');
+};
+exports.getCacheInput = getCacheInput;
 
 
 /***/ }),
@@ -61776,7 +61784,6 @@ const cache_utils_1 = __nccwpck_require__(1678);
 const child_process_1 = __importDefault(__nccwpck_require__(2081));
 const fs_1 = __importDefault(__nccwpck_require__(7147));
 const os_1 = __importDefault(__nccwpck_require__(2037));
-const utils_1 = __nccwpck_require__(1314);
 function run() {
     return __awaiter(this, void 0, void 0, function* () {
         try {
@@ -61785,7 +61792,7 @@ function run() {
             // If not supplied then problem matchers will still be setup.  Useful for self-hosted.
             //
             const versionSpec = resolveVersionInput();
-            const cache = utils_1.getCacheInput();
+            const cache = cache_utils_1.getCacheInput();
             core.info(`Setup go version spec ${versionSpec}`);
             let arch = core.getInput('architecture');
             if (!arch) {
@@ -61966,47 +61973,20 @@ exports.getArch = getArch;
 /***/ }),
 
 /***/ 1314:
-/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+/***/ ((__unused_webpack_module, exports) => {
 
 "use strict";
 
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
 Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.getCacheInput = exports.isSelfHosted = exports.StableReleaseAlias = void 0;
-const core = __importStar(__nccwpck_require__(2186));
+exports.isSelfHosted = exports.StableReleaseAlias = void 0;
 var StableReleaseAlias;
 (function (StableReleaseAlias) {
     StableReleaseAlias["Stable"] = "stable";
     StableReleaseAlias["OldStable"] = "oldstable";
 })(StableReleaseAlias = exports.StableReleaseAlias || (exports.StableReleaseAlias = {}));
 const isSelfHosted = () => process.env['RUNNER_ENVIRONMENT'] !== 'github-hosted' &&
-    process.env['AGENT_ISSELFHOSTED'] === '1';
+    process.env['AGENT_ISSELFHOSTED'] !== '0';
 exports.isSelfHosted = isSelfHosted;
-const getCacheInput = () => {
-    // for self-hosted environment turn off cache by default
-    if (exports.isSelfHosted() && core.getInput('cache') === '')
-        return false;
-    return core.getBooleanInput('cache');
-};
-exports.getCacheInput = getCacheInput;
 
 
 /***/ }),
diff --git a/src/cache-save.ts b/src/cache-save.ts
index 76ea87a..a9d9139 100644
--- a/src/cache-save.ts
+++ b/src/cache-save.ts
@@ -2,8 +2,11 @@ import * as core from '@actions/core';
 import * as cache from '@actions/cache';
 import fs from 'fs';
 import {State} from './constants';
-import {getCacheDirectoryPath, getPackageManagerInfo} from './cache-utils';
-import {getCacheInput} from './utils';
+import {
+  getCacheDirectoryPath,
+  getPackageManagerInfo,
+  getCacheInput
+} from './cache-utils';
 
 // Catch and log any unhandled exceptions.  These exceptions can leak out of the uploadChunk method in
 // @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
diff --git a/src/cache-utils.ts b/src/cache-utils.ts
index 545c97a..460e1f5 100644
--- a/src/cache-utils.ts
+++ b/src/cache-utils.ts
@@ -2,6 +2,7 @@ import * as cache from '@actions/cache';
 import * as core from '@actions/core';
 import * as exec from '@actions/exec';
 import {supportedPackageManagers, PackageManagerInfo} from './package-managers';
+import {isSelfHosted} from './utils';
 
 export const getCommandOutput = async (toolCommand: string) => {
   let {stdout, stderr, exitCode} = await exec.getExecOutput(
@@ -83,3 +84,9 @@ export function isCacheFeatureAvailable(): boolean {
   );
   return false;
 }
+export const getCacheInput = (): boolean => {
+  // for self-hosted environment turn off cache by default
+  if (isSelfHosted() && core.getInput('cache') === '') return false;
+
+  return core.getBooleanInput('cache');
+};
diff --git a/src/main.ts b/src/main.ts
index d03c8f7..f655d87 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -4,11 +4,10 @@ import * as installer from './installer';
 import * as semver from 'semver';
 import path from 'path';
 import {restoreCache} from './cache-restore';
-import {isCacheFeatureAvailable} from './cache-utils';
+import {isCacheFeatureAvailable, getCacheInput} from './cache-utils';
 import cp from 'child_process';
 import fs from 'fs';
 import os from 'os';
-import {getCacheInput} from './utils';
 
 export async function run() {
   try {
diff --git a/src/utils.ts b/src/utils.ts
index ddd3f74..f8e4597 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -7,11 +7,4 @@ export enum StableReleaseAlias {
 
 export const isSelfHosted = (): boolean =>
   process.env['RUNNER_ENVIRONMENT'] !== 'github-hosted' &&
-  process.env['AGENT_ISSELFHOSTED'] === '1';
-
-export const getCacheInput = (): boolean => {
-  // for self-hosted environment turn off cache by default
-  if (isSelfHosted() && core.getInput('cache') === '') return false;
-
-  return core.getBooleanInput('cache');
-};
+  process.env['AGENT_ISSELFHOSTED'] !== '0';