154 lines
4.7 KiB
TypeScript
154 lines
4.7 KiB
TypeScript
import * as core from '@actions/core'
|
|
import {getInputs, Inputs} from '../inputs'
|
|
import {DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS} from '../constant'
|
|
|
|
jest.mock('@actions/core')
|
|
|
|
describe('getInputs', () => {
|
|
afterEach(() => {
|
|
jest.clearAllMocks()
|
|
})
|
|
|
|
test('should return default values when no inputs are provided', () => {
|
|
;(core.getInput as jest.Mock).mockImplementation(name => {
|
|
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
|
return g[1].toUpperCase()
|
|
}) as keyof Inputs
|
|
|
|
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
|
'') as string
|
|
})
|
|
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
|
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
|
return g[1].toUpperCase()
|
|
}) as keyof Inputs
|
|
|
|
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
|
false) as boolean
|
|
})
|
|
expect(getInputs()).toMatchSnapshot()
|
|
})
|
|
|
|
test('should correctly parse boolean inputs', () => {
|
|
;(core.getInput as jest.Mock).mockImplementation(name => {
|
|
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
|
return g[1].toUpperCase()
|
|
}) as keyof Inputs
|
|
|
|
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
|
'') as string
|
|
})
|
|
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
|
switch (name) {
|
|
case 'matrix':
|
|
return 'true'
|
|
case 'skip_initial_fetch':
|
|
return 'true'
|
|
default:
|
|
return 'false'
|
|
}
|
|
})
|
|
expect(getInputs()).toMatchSnapshot()
|
|
})
|
|
|
|
test('should handle matrix alias correctly', () => {
|
|
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
|
return name === 'matrix' ? 'true' : 'false'
|
|
})
|
|
|
|
const inputs = getInputs()
|
|
expect(inputs).toHaveProperty('json', true)
|
|
expect(inputs).toHaveProperty('escapeJson', false)
|
|
})
|
|
|
|
test('should correctly parse string inputs', () => {
|
|
;(core.getInput as jest.Mock).mockImplementation(name => {
|
|
switch (name) {
|
|
case 'token':
|
|
return 'token'
|
|
case 'api_url':
|
|
return 'https://api.github.com'
|
|
default:
|
|
return ''
|
|
}
|
|
})
|
|
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
|
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
|
return g[1].toUpperCase()
|
|
}) as keyof Inputs
|
|
|
|
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
|
false) as boolean
|
|
})
|
|
expect(getInputs()).toMatchSnapshot()
|
|
})
|
|
|
|
test('should correctly parse numeric inputs', () => {
|
|
;(core.getInput as jest.Mock).mockImplementation(name => {
|
|
switch (name) {
|
|
case 'fetch_depth':
|
|
return '5'
|
|
case 'dir_names_max_depth':
|
|
return '2'
|
|
default:
|
|
return ''
|
|
}
|
|
})
|
|
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
|
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
|
return g[1].toUpperCase()
|
|
}) as keyof Inputs
|
|
|
|
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
|
false) as boolean
|
|
})
|
|
expect(getInputs()).toMatchSnapshot()
|
|
})
|
|
|
|
test('should handle invalid numeric inputs correctly', () => {
|
|
;(core.getInput as jest.Mock).mockImplementation(name => {
|
|
// TODO: Add validation for invalid numbers which should result in an error instead of NaN
|
|
switch (name) {
|
|
case 'fetch_depth':
|
|
return 'invalid'
|
|
case 'dir_names_max_depth':
|
|
return '2'
|
|
default:
|
|
return ''
|
|
}
|
|
})
|
|
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
|
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
|
return g[1].toUpperCase()
|
|
}) as keyof Inputs
|
|
|
|
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
|
false) as boolean
|
|
})
|
|
expect(getInputs()).toMatchSnapshot()
|
|
})
|
|
|
|
test('should handle negative numeric inputs correctly', () => {
|
|
;(core.getInput as jest.Mock).mockImplementation(name => {
|
|
// TODO: Add validation for negative numbers which should result in an error
|
|
switch (name) {
|
|
case 'fetch_depth':
|
|
return '-5'
|
|
case 'dir_names_max_depth':
|
|
return '-2'
|
|
default:
|
|
return ''
|
|
}
|
|
})
|
|
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
|
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
|
return g[1].toUpperCase()
|
|
}) as keyof Inputs
|
|
|
|
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
|
false) as boolean
|
|
})
|
|
expect(getInputs()).toMatchSnapshot()
|
|
})
|
|
})
|