github-pages-deploy-action/__tests__/util.test.ts

306 lines
8.9 KiB
TypeScript
Raw Normal View History

import {ActionInterface, TestFlag} from '../src/constants'
import {
isNullOrUndefined,
generateTokenType,
generateRepositoryPath,
generateFolderPath,
suppressSensitiveInformation,
checkParameters
2020-03-05 21:19:45 +08:00
} from '../src/util'
2020-03-05 21:19:45 +08:00
describe('util', () => {
describe('isNullOrUndefined', () => {
it('should return true if the value is null', async () => {
const value = null
expect(isNullOrUndefined(value)).toBeTruthy()
})
2020-01-12 09:26:08 +08:00
2020-03-05 21:19:45 +08:00
it('should return true if the value is undefined', async () => {
const value = undefined
expect(isNullOrUndefined(value)).toBeTruthy()
})
2020-01-12 09:26:08 +08:00
2020-03-05 21:19:45 +08:00
it('should return false if the value is defined', async () => {
const value = 'montezuma'
expect(isNullOrUndefined(value)).toBeFalsy()
})
it('should return false if the value is empty string', async () => {
const value = ''
expect(isNullOrUndefined(value)).toBeTruthy()
})
2020-03-05 21:19:45 +08:00
})
2020-03-05 21:19:45 +08:00
describe('generateTokenType', () => {
it('should return ssh if ssh is provided', async () => {
const action = {
2020-03-05 21:19:45 +08:00
branch: '123',
workspace: 'src/',
folder: 'build',
token: null,
2020-06-27 02:16:54 +08:00
ssh: true,
silent: false,
isTest: TestFlag.NONE
2020-03-05 21:19:45 +08:00
}
expect(generateTokenType(action)).toEqual('SSH Deploy Key')
})
it('should return deploy token if token is provided', async () => {
const action = {
2020-03-05 21:19:45 +08:00
branch: '123',
workspace: 'src/',
folder: 'build',
token: '123',
2020-06-27 02:16:54 +08:00
ssh: null,
silent: false,
isTest: TestFlag.NONE
2020-03-05 21:19:45 +08:00
}
expect(generateTokenType(action)).toEqual('Deploy Token')
2020-03-05 21:19:45 +08:00
})
2020-03-05 21:19:45 +08:00
it('should return ... if no token is provided', async () => {
const action = {
2020-03-05 21:19:45 +08:00
branch: '123',
workspace: 'src/',
folder: 'build',
token: null,
2020-06-27 02:16:54 +08:00
ssh: null,
silent: false,
isTest: TestFlag.NONE
2020-03-05 21:19:45 +08:00
}
expect(generateTokenType(action)).toEqual('…')
2020-03-05 21:19:45 +08:00
})
})
2020-03-05 21:19:45 +08:00
describe('generateRepositoryPath', () => {
it('should return ssh if ssh is provided', async () => {
const action = {
2020-03-05 21:19:45 +08:00
repositoryName: 'JamesIves/github-pages-deploy-action',
branch: '123',
workspace: 'src/',
folder: 'build',
token: null,
2020-06-27 02:16:54 +08:00
ssh: true,
silent: false,
isTest: TestFlag.NONE
2020-03-05 21:19:45 +08:00
}
expect(generateRepositoryPath(action)).toEqual(
2020-03-05 21:19:45 +08:00
'git@github.com:JamesIves/github-pages-deploy-action'
)
})
it('should return https with x-access-token if deploy token is provided', async () => {
const action = {
2020-03-05 21:19:45 +08:00
repositoryName: 'JamesIves/github-pages-deploy-action',
branch: '123',
workspace: 'src/',
folder: 'build',
token: '123',
2020-06-27 02:16:54 +08:00
ssh: null,
silent: false,
isTest: TestFlag.NONE
2020-03-05 21:19:45 +08:00
}
expect(generateRepositoryPath(action)).toEqual(
2020-03-05 21:19:45 +08:00
'https://x-access-token:123@github.com/JamesIves/github-pages-deploy-action.git'
)
})
2020-03-05 21:19:45 +08:00
describe('suppressSensitiveInformation', () => {
it('should replace any sensitive information with ***', async () => {
const action = {
2020-03-05 21:19:45 +08:00
repositoryName: 'JamesIves/github-pages-deploy-action',
repositoryPath:
2020-03-05 21:19:45 +08:00
'https://x-access-token:supersecret999%%%@github.com/anothersecret123333',
branch: '123',
workspace: 'src/',
folder: 'build',
token: 'anothersecret123333',
silent: false,
isTest: TestFlag.NONE
2020-03-05 21:19:45 +08:00
}
const string = `This is an error message! It contains ${action.token} and ${action.repositoryPath} and ${action.token} again!`
expect(suppressSensitiveInformation(string, action)).toBe(
'This is an error message! It contains *** and *** and *** again!'
2020-03-05 21:19:45 +08:00
)
})
2020-03-05 21:19:45 +08:00
it('should not suppress information when in debug mode', async () => {
const action = {
2020-03-05 21:19:45 +08:00
repositoryName: 'JamesIves/github-pages-deploy-action',
repositoryPath:
2020-03-05 21:19:45 +08:00
'https://x-access-token:supersecret999%%%@github.com/anothersecret123333',
branch: '123',
workspace: 'src/',
folder: 'build',
token: 'anothersecret123333',
silent: false,
isTest: TestFlag.NONE
2020-03-05 21:19:45 +08:00
}
2020-03-28 22:35:26 +08:00
process.env['RUNNER_DEBUG'] = '1'
const string = `This is an error message! It contains ${action.token} and ${action.repositoryPath}`
expect(suppressSensitiveInformation(string, action)).toBe(
'This is an error message! It contains anothersecret123333 and https://x-access-token:supersecret999%%%@github.com/anothersecret123333'
2020-03-05 21:19:45 +08:00
)
})
})
})
describe('generateFolderPath', () => {
it('should return absolute path if folder name is provided', () => {
const action = {
branch: '123',
workspace: 'src/',
folder: 'build',
token: null,
ssh: null,
silent: false,
isTest: TestFlag.NONE
}
expect(generateFolderPath(action)).toEqual('src/build')
})
it('should return original path if folder name begins with /', () => {
const action = {
branch: '123',
workspace: 'src/',
folder: '/home/user/repo/build',
token: null,
ssh: null,
silent: false,
isTest: TestFlag.NONE
}
expect(generateFolderPath(action)).toEqual('/home/user/repo/build')
})
it('should process as relative path if folder name begins with ./', () => {
const action = {
branch: '123',
workspace: 'src/',
folder: './build',
token: null,
ssh: null,
silent: false,
isTest: TestFlag.NONE
}
expect(generateFolderPath(action)).toEqual('src/build')
})
it('should return absolute path if folder name begins with ~', () => {
const action = {
branch: '123',
workspace: 'src/',
folder: '~/repo/build',
token: null,
ssh: null,
silent: false,
isTest: TestFlag.NONE
}
process.env.HOME = '/home/user'
expect(generateFolderPath(action)).toEqual('/home/user/repo/build')
})
})
describe('hasRequiredParameters', () => {
it('should fail if there is no provided GitHub Token, Access Token or SSH bool', () => {
const action = {
silent: false,
repositoryPath: undefined,
branch: 'branch',
folder: 'build',
workspace: 'src/',
isTest: TestFlag.NONE
}
try {
checkParameters(action)
} catch (e) {
expect(e.message).toMatch(
'No deployment token/method was provided. You must provide the action with either a Personal Access Token or the GitHub Token secret in order to deploy. If you wish to use an ssh deploy token then you must set SSH to true.'
)
}
})
it('should fail if token is defined but it is an empty string', () => {
const action = {
silent: false,
repositoryPath: undefined,
token: '',
branch: 'branch',
folder: 'build',
workspace: 'src/',
isTest: TestFlag.NONE
}
try {
checkParameters(action)
} catch (e) {
expect(e.message).toMatch(
'No deployment token/method was provided. You must provide the action with either a Personal Access Token or the GitHub Token secret in order to deploy. If you wish to use an ssh deploy token then you must set SSH to true.'
)
}
})
it('should fail if there is no branch', () => {
const action = {
silent: false,
repositoryPath: undefined,
token: '123',
branch: '',
folder: 'build',
workspace: 'src/',
isTest: TestFlag.NONE
}
try {
checkParameters(action)
} catch (e) {
expect(e.message).toMatch('Branch is required.')
}
})
it('should fail if there is no folder', () => {
const action = {
silent: false,
repositoryPath: undefined,
token: '123',
branch: 'branch',
folder: '',
workspace: 'src/',
isTest: TestFlag.NONE
}
try {
checkParameters(action)
} catch (e) {
expect(e.message).toMatch(
'You must provide the action with a folder to deploy.'
)
}
})
it('should fail if the folder does not exist in the tree', () => {
const action: ActionInterface = {
silent: false,
repositoryPath: undefined,
token: '123',
branch: 'branch',
folder: 'notARealFolder',
workspace: '.',
isTest: TestFlag.NONE
}
try {
action.folderPath = generateFolderPath(action)
checkParameters(action)
} catch (e) {
expect(e.message).toMatch(
2020-10-17 23:47:44 +08:00
`The directory you're trying to deploy named notARealFolder doesn't exist. Please double check the path and any prerequisite build scripts and try again. ❗`
)
}
})
})
2020-03-05 21:19:45 +08:00
})