2019-12-03 18:28:59 +03:00
import * as assert from 'assert'
2020-02-13 21:25:46 +03:00
import * as core from '@actions/core'
import * as fsHelper from '../lib/fs-helper'
import * as github from '@actions/github'
import * as inputHelper from '../lib/input-helper'
2019-12-03 18:28:59 +03:00
import * as path from 'path'
2020-03-02 19:33:30 +03:00
import { IGitSourceSettings } from '../lib/git-source-settings'
2019-12-03 18:28:59 +03:00
const originalGitHubWorkspace = process . env [ 'GITHUB_WORKSPACE' ]
const gitHubWorkspace = path . resolve ( '/checkout-tests/workspace' )
2020-02-13 21:25:46 +03:00
// Inputs for mock @actions/core
2019-12-03 18:28:59 +03:00
let inputs = { } as any
2020-02-13 21:25:46 +03:00
// Shallow clone original @actions/github context
let originalContext = { . . . github . context }
2019-12-03 18:28:59 +03:00
describe ( 'input-helper tests' , ( ) = > {
beforeAll ( ( ) = > {
2020-03-02 19:33:30 +03:00
// Mock getInput
2020-02-13 21:25:46 +03:00
jest . spyOn ( core , 'getInput' ) . mockImplementation ( ( name : string ) = > {
return inputs [ name ]
} )
2020-03-02 19:33:30 +03:00
// Mock error/warning/info/debug
jest . spyOn ( core , 'error' ) . mockImplementation ( jest . fn ( ) )
jest . spyOn ( core , 'warning' ) . mockImplementation ( jest . fn ( ) )
jest . spyOn ( core , 'info' ) . mockImplementation ( jest . fn ( ) )
jest . spyOn ( core , 'debug' ) . mockImplementation ( jest . fn ( ) )
// Mock github context
2020-02-13 21:25:46 +03:00
jest . spyOn ( github . context , 'repo' , 'get' ) . mockImplementation ( ( ) = > {
return {
owner : 'some-owner' ,
repo : 'some-repo'
}
} )
github . context . ref = 'refs/heads/some-ref'
github . context . sha = '1234567890123456789012345678901234567890'
// Mock ./fs-helper directoryExistsSync()
jest
. spyOn ( fsHelper , 'directoryExistsSync' )
. mockImplementation ( ( path : string ) = > path == gitHubWorkspace )
2019-12-03 18:28:59 +03:00
// GitHub workspace
process . env [ 'GITHUB_WORKSPACE' ] = gitHubWorkspace
} )
beforeEach ( ( ) = > {
// Reset inputs
inputs = { }
} )
afterAll ( ( ) = > {
2020-02-13 21:25:46 +03:00
// Restore GitHub workspace
2019-12-03 18:28:59 +03:00
delete process . env [ 'GITHUB_WORKSPACE' ]
if ( originalGitHubWorkspace ) {
process . env [ 'GITHUB_WORKSPACE' ] = originalGitHubWorkspace
}
2020-02-13 21:25:46 +03:00
// Restore @actions/github context
github . context . ref = originalContext . ref
github . context . sha = originalContext . sha
// Restore
jest . restoreAllMocks ( )
2019-12-03 18:28:59 +03:00
} )
it ( 'sets defaults' , ( ) = > {
2020-03-02 19:33:30 +03:00
const settings : IGitSourceSettings = inputHelper . getInputs ( )
2019-12-03 18:28:59 +03:00
expect ( settings ) . toBeTruthy ( )
2019-12-12 21:49:26 +03:00
expect ( settings . authToken ) . toBeFalsy ( )
2019-12-03 18:28:59 +03:00
expect ( settings . clean ) . toBe ( true )
expect ( settings . commit ) . toBeTruthy ( )
expect ( settings . commit ) . toBe ( '1234567890123456789012345678901234567890' )
expect ( settings . fetchDepth ) . toBe ( 1 )
expect ( settings . lfs ) . toBe ( false )
expect ( settings . ref ) . toBe ( 'refs/heads/some-ref' )
expect ( settings . repositoryName ) . toBe ( 'some-repo' )
expect ( settings . repositoryOwner ) . toBe ( 'some-owner' )
expect ( settings . repositoryPath ) . toBe ( gitHubWorkspace )
} )
2020-01-21 22:17:04 +03:00
it ( 'qualifies ref' , ( ) = > {
2020-02-13 21:25:46 +03:00
let originalRef = github . context . ref
2020-01-21 22:17:04 +03:00
try {
2020-02-13 21:25:46 +03:00
github . context . ref = 'some-unqualified-ref'
2020-03-02 19:33:30 +03:00
const settings : IGitSourceSettings = inputHelper . getInputs ( )
2020-01-21 22:17:04 +03:00
expect ( settings ) . toBeTruthy ( )
expect ( settings . commit ) . toBe ( '1234567890123456789012345678901234567890' )
expect ( settings . ref ) . toBe ( 'refs/heads/some-unqualified-ref' )
} finally {
2020-02-13 21:25:46 +03:00
github . context . ref = originalRef
2020-01-21 22:17:04 +03:00
}
} )
2019-12-03 18:28:59 +03:00
it ( 'requires qualified repo' , ( ) = > {
inputs . repository = 'some-unqualified-repo'
assert . throws ( ( ) = > {
inputHelper . getInputs ( )
} , /Invalid repository 'some-unqualified-repo'/ )
} )
it ( 'roots path' , ( ) = > {
inputs . path = 'some-directory/some-subdirectory'
2020-03-02 19:33:30 +03:00
const settings : IGitSourceSettings = inputHelper . getInputs ( )
2019-12-03 18:28:59 +03:00
expect ( settings . repositoryPath ) . toBe (
path . join ( gitHubWorkspace , 'some-directory' , 'some-subdirectory' )
)
} )
it ( 'sets correct default ref/sha for other repo' , ( ) = > {
inputs . repository = 'some-owner/some-other-repo'
2020-03-02 19:33:30 +03:00
const settings : IGitSourceSettings = inputHelper . getInputs ( )
2019-12-03 18:28:59 +03:00
expect ( settings . ref ) . toBe ( 'refs/heads/master' )
expect ( settings . commit ) . toBeFalsy ( )
} )
it ( 'sets ref to empty when explicit sha' , ( ) = > {
inputs . ref = '1111111111222222222233333333334444444444'
2020-03-02 19:33:30 +03:00
const settings : IGitSourceSettings = inputHelper . getInputs ( )
2019-12-03 18:28:59 +03:00
expect ( settings . ref ) . toBeFalsy ( )
expect ( settings . commit ) . toBe ( '1111111111222222222233333333334444444444' )
} )
it ( 'sets sha to empty when explicit ref' , ( ) = > {
inputs . ref = 'refs/heads/some-other-ref'
2020-03-02 19:33:30 +03:00
const settings : IGitSourceSettings = inputHelper . getInputs ( )
2019-12-03 18:28:59 +03:00
expect ( settings . ref ) . toBe ( 'refs/heads/some-other-ref' )
expect ( settings . commit ) . toBeFalsy ( )
} )
} )