From faaa3912ca1d75ce1c892389d8e13dc105443362 Mon Sep 17 00:00:00 2001
From: Danny Gleckler <daniel.gleckler@d2l.com>
Date: Thu, 8 Feb 2024 20:52:30 -0500
Subject: [PATCH] Add save-always inpute/output test

---
 __tests__/restoreImpl.test.ts | 37 +++++++++++++++++++++++++++++++++++
 src/utils/testUtils.ts        |  4 ++++
 2 files changed, 41 insertions(+)

diff --git a/__tests__/restoreImpl.test.ts b/__tests__/restoreImpl.test.ts
index 130690c..bc40973 100644
--- a/__tests__/restoreImpl.test.ts
+++ b/__tests__/restoreImpl.test.ts
@@ -489,3 +489,40 @@ test("restore failure with earlyExit should call process exit", async () => {
     );
     expect(processExitMock).toHaveBeenCalledWith(1);
 });
+
+test("restore with save-always set", async () => {
+    jest.spyOn(actionUtils, "isGhes").mockImplementation(() => true);
+    const path = "node_modules";
+    const key = "node-test";
+    testUtils.setInputs({
+        path: path,
+        key,
+        saveAlways: true
+    });
+
+    const setCacheHitOutputMock = jest.spyOn(core, "setOutput");
+    const restoreCacheMock = jest
+        .spyOn(cache, "restoreCache")
+        .mockImplementationOnce(() => {
+            return Promise.resolve(undefined);
+        });
+
+    await restoreImpl(new StateProvider());
+
+    expect(restoreCacheMock).toHaveBeenCalledTimes(1);
+    expect(restoreCacheMock).toHaveBeenCalledWith(
+        [path],
+        key,
+        [],
+        {
+            lookupOnly: false
+        },
+        false
+    );
+
+    expect(setCacheHitOutputMock).toHaveBeenCalledTimes(1);
+    expect(setCacheHitOutputMock).toHaveBeenCalledWith(
+        "save-always-d18d746b9",
+        "true"
+    );
+});
diff --git a/src/utils/testUtils.ts b/src/utils/testUtils.ts
index ba0670b..84aeae9 100644
--- a/src/utils/testUtils.ts
+++ b/src/utils/testUtils.ts
@@ -16,6 +16,7 @@ interface CacheInput {
     enableCrossOsArchive?: boolean;
     failOnCacheMiss?: boolean;
     lookupOnly?: boolean;
+    saveAlways?: boolean;
 }
 
 export function setInputs(input: CacheInput): void {
@@ -32,6 +33,8 @@ export function setInputs(input: CacheInput): void {
         setInput(Inputs.FailOnCacheMiss, input.failOnCacheMiss.toString());
     input.lookupOnly !== undefined &&
         setInput(Inputs.LookupOnly, input.lookupOnly.toString());
+    input.saveAlways !== undefined &&
+        setInput(Inputs.SaveAlways, input.saveAlways.toString());
 }
 
 export function clearInputs(): void {
@@ -42,4 +45,5 @@ export function clearInputs(): void {
     delete process.env[getInputName(Inputs.EnableCrossOsArchive)];
     delete process.env[getInputName(Inputs.FailOnCacheMiss)];
     delete process.env[getInputName(Inputs.LookupOnly)];
+    delete process.env[getInputName(Inputs.SaveAlways)];
 }