From 4d62da4173efd0a6155b15434734544b33c73d60 Mon Sep 17 00:00:00 2001 From: "Ivan Zosimov (Akvelon INC)" Date: Sat, 5 Mar 2022 11:01:57 +0300 Subject: [PATCH] Add some unit tests fot cache-utils.ts file --- __tests__/cache-utils.test.ts | 106 ++++++++++++++++++++++++++++++++++ src/cache-utils.ts | 1 + 2 files changed, 107 insertions(+) create mode 100644 __tests__/cache-utils.test.ts diff --git a/__tests__/cache-utils.test.ts b/__tests__/cache-utils.test.ts new file mode 100644 index 0000000..422b179 --- /dev/null +++ b/__tests__/cache-utils.test.ts @@ -0,0 +1,106 @@ +import * as exec from '@actions/exec'; +import * as cacheUtils from '../src/cache-utils'; +import {PackageManagerInfo} from '../src/package-managers'; + +describe('getCommandOutput', () => { + //Arrange + let getExecOutputSpy = jest.spyOn(exec, 'getExecOutput'); + + it('should return trimmed stdout in case of successful exit code', async () => { + //Arrange + const stdoutResult = ' some stdout '; + const trimmedStdout = stdoutResult.trim(); + + getExecOutputSpy.mockImplementation((commandLine: string) => { + return new Promise(resolve => { + resolve({exitCode: 0, stdout: stdoutResult, stderr: ''}); + }); + }); + + //Act + Assert + return cacheUtils + .getCommandOutput('some command') + .then(data => expect(data).toBe(trimmedStdout)); + }); + + it('should return error in case of unsuccessful exit code', async () => { + //Arrange + const stderrResult = 'Some error message'; + + getExecOutputSpy.mockImplementation((commandLine: string) => { + return new Promise(resolve => { + resolve({exitCode: 10, stdout: '', stderr: stderrResult}); + }); + }); + + //Act + Assert + expect(async () => { + await cacheUtils.getCommandOutput('some command'); + }).rejects.toThrow(); + }); +}); + +describe('getPackageManagerInfo', () => { + it('should return package manager info in case of valid package manager name', async () => { + //Arrange + const packageManagerName = 'default'; + const expectedResult = { + dependencyFilePattern: 'go.sum', + getCacheFolderCommand: 'go env GOMODCACHE' + }; + + //Act + Assert + return cacheUtils + .getPackageManagerInfo(packageManagerName) + .then(data => expect(data).toEqual(expectedResult)); + }); + + it('should throw the error in case of invalid package manager name', async () => { + //Arrange + const packageManagerName = 'invalidName'; + + //Act + Assert + expect(async () => { + await cacheUtils.getPackageManagerInfo(packageManagerName); + }).rejects.toThrow(); + }); +}); + +describe('getCacheDirectoryPath', () => { + //Arrange + let getExecOutputSpy = jest.spyOn(exec, 'getExecOutput'); + + const validPackageManager: PackageManagerInfo = { + dependencyFilePattern: 'go.sum', + getCacheFolderCommand: 'go env GOMODCACHE' + }; + + it('should return path to the cache folder which specified package manager uses', async () => { + //Arrange + getExecOutputSpy.mockImplementation((commandLine: string) => { + return new Promise(resolve => { + resolve({exitCode: 0, stdout: 'path/to/cache/folder', stderr: ''}); + }); + }); + + const expectedResult = 'path/to/cache/folder'; + + //Act + Assert + return cacheUtils + .getCacheDirectoryPath(validPackageManager) + .then(data => expect(data).toEqual(expectedResult)); + }); + + it('should throw if the specified package name is invalid', async () => { + getExecOutputSpy.mockImplementation((commandLine: string) => { + return new Promise(resolve => { + resolve({exitCode: 10, stdout: '', stderr: 'Error message'}); + }); + }); + + //Act + Assert + expect(async () => { + await cacheUtils.getCacheDirectoryPath(validPackageManager); + }).rejects.toThrow(); + }); +}); diff --git a/src/cache-utils.ts b/src/cache-utils.ts index 0f92004..bc79209 100644 --- a/src/cache-utils.ts +++ b/src/cache-utils.ts @@ -1,6 +1,7 @@ import * as exec from '@actions/exec'; import {supportedPackageManagers, PackageManagerInfo} from './package-managers'; + export const getCommandOutput = async (toolCommand: string) => { let {stdout, stderr, exitCode} = await exec.getExecOutput( toolCommand,