2019-11-19 23:06:27 +08:00
// Initial env variable setup for tests.
process . env [ "INPUT_FOLDER" ] = "build" ;
2019-12-22 05:51:39 +08:00
process . env [ "GITHUB_SHA" ] = "123" ;
2019-11-19 23:06:27 +08:00
2019-12-22 05:51:39 +08:00
import { action } from "../src/constants" ;
import { deploy , generateBranch , init , switchToBaseBranch } from "../src/git" ;
2020-01-12 09:26:08 +08:00
import { execute } from "../src/execute" ;
2020-01-20 04:33:14 +08:00
import { setFailed } from "@actions/core" ;
2019-11-19 23:06:27 +08:00
2020-01-19 03:41:49 +08:00
const originalAction = JSON . stringify ( action ) ;
2019-11-19 23:06:27 +08:00
2020-01-20 04:33:14 +08:00
jest . mock ( "@actions/core" , ( ) = > ( {
setFailed : jest.fn ( ) ,
getInput : jest.fn ( )
} ) ) ;
2020-01-12 09:26:08 +08:00
jest . mock ( "../src/execute" , ( ) = > ( {
2019-11-19 23:06:27 +08:00
execute : jest.fn ( )
} ) ) ;
describe ( "git" , ( ) = > {
afterEach ( ( ) = > {
2020-01-19 03:41:49 +08:00
Object . assign ( action , JSON . parse ( originalAction ) ) ;
2019-11-19 23:06:27 +08:00
} ) ;
describe ( "init" , ( ) = > {
2020-01-20 05:23:47 +08:00
it ( "should execute commands if a GitHub token is provided" , async ( ) = > {
2019-12-22 05:51:39 +08:00
Object . assign ( action , {
2020-03-02 20:52:38 +08:00
repositoryPath : "JamesIves/github-pages-deploy-action" ,
folder : "build" ,
2020-01-20 04:33:14 +08:00
branch : "branch" ,
2019-12-22 05:51:39 +08:00
gitHubToken : "123" ,
pusher : {
name : "asd" ,
email : "as@cat"
}
} ) ;
2019-11-19 23:06:27 +08:00
2020-03-02 20:52:38 +08:00
await init ( action ) ;
2020-01-15 04:14:15 +08:00
expect ( execute ) . toBeCalledTimes ( 6 ) ;
2019-11-19 23:06:27 +08:00
} ) ;
2020-01-20 05:23:47 +08:00
it ( "should execute commands if an Access Token is provided" , async ( ) = > {
2019-11-19 23:06:27 +08:00
Object . assign ( action , {
2020-03-02 20:52:38 +08:00
repositoryPath : "JamesIves/github-pages-deploy-action" ,
folder : "build" ,
2020-01-20 04:33:14 +08:00
branch : "branch" ,
2019-12-22 05:51:39 +08:00
accessToken : "123" ,
2019-11-19 23:06:27 +08:00
pusher : {
2019-12-22 05:51:39 +08:00
name : "asd" ,
email : "as@cat"
}
2019-11-19 23:06:27 +08:00
} ) ;
2020-03-02 20:52:38 +08:00
await init ( action ) ;
2020-01-15 04:14:15 +08:00
expect ( execute ) . toBeCalledTimes ( 6 ) ;
2019-12-22 05:51:39 +08:00
} ) ;
2020-01-20 05:23:47 +08:00
it ( "should execute commands if SSH is true" , async ( ) = > {
Object . assign ( action , {
2020-03-02 20:52:38 +08:00
repositoryPath : "JamesIves/github-pages-deploy-action" ,
folder : "build" ,
2020-01-20 05:23:47 +08:00
branch : "branch" ,
ssh : true ,
pusher : {
name : "asd" ,
email : "as@cat"
}
} ) ;
2020-03-02 20:52:38 +08:00
await init ( action ) ;
2020-01-20 05:23:47 +08:00
expect ( execute ) . toBeCalledTimes ( 6 ) ;
} ) ;
it ( "should fail if there is no provided GitHub Token, Access Token or SSH bool" , async ( ) = > {
2019-11-19 23:06:27 +08:00
Object . assign ( action , {
2020-03-02 20:52:38 +08:00
repositoryPath : null ,
folder : "build" ,
2020-01-20 04:33:14 +08:00
branch : "branch" ,
2019-11-19 23:06:27 +08:00
pusher : {
2019-12-22 05:51:39 +08:00
name : "asd" ,
email : "as@cat"
2020-01-20 04:33:14 +08:00
} ,
gitHubToken : null ,
accessToken : null ,
ssh : null
2019-12-22 05:51:39 +08:00
} ) ;
2019-11-19 23:06:27 +08:00
2020-03-02 20:52:38 +08:00
try {
await init ( action ) ;
} catch ( e ) {
expect ( execute ) . toBeCalledTimes ( 0 ) ;
expect ( e . message ) . toMatch (
"There was an error initializing the repository: 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 folder" , async ( ) = > {
Object . assign ( action , {
repositoryPath : "JamesIves/github-pages-deploy-action" ,
gitHubToken : "123" ,
branch : "branch" ,
pusher : {
name : "asd" ,
email : "as@cat"
} ,
folder : null ,
ssh : true
} ) ;
try {
await init ( action ) ;
} catch ( e ) {
expect ( execute ) . toBeCalledTimes ( 0 ) ;
expect ( e . message ) . toMatch (
"There was an error initializing the repository: You must provide the action with a folder to deploy. ❌"
) ;
}
} ) ;
it ( "should fail if there is no provided repository path" , async ( ) = > {
Object . assign ( action , {
repositoryPath : null ,
folder : "build" ,
branch : "branch" ,
pusher : {
name : "asd" ,
email : "as@cat"
} ,
gitHubToken : "123" ,
accessToken : null ,
ssh : null
} ) ;
try {
await init ( action ) ;
} catch ( e ) {
expect ( execute ) . toBeCalledTimes ( 0 ) ;
expect ( e . message ) . toMatch (
"There was an error initializing the repository: 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. "
) ;
}
2019-12-22 05:51:39 +08:00
} ) ;
2019-11-19 23:06:27 +08:00
it ( "should fail if the build folder begins with a /" , async ( ) = > {
Object . assign ( action , {
2019-12-22 05:51:39 +08:00
accessToken : "123" ,
2020-03-02 20:52:38 +08:00
repositoryPath : "JamesIves/github-pages-deploy-action" ,
2020-01-20 04:33:14 +08:00
branch : "branch" ,
2020-03-02 20:52:38 +08:00
folder : "/" ,
2019-11-19 23:06:27 +08:00
pusher : {
2019-12-22 05:51:39 +08:00
name : "asd" ,
email : "as@cat"
}
} ) ;
2019-11-19 23:06:27 +08:00
2020-03-02 20:52:38 +08:00
try {
await init ( action ) ;
} catch ( e ) {
expect ( execute ) . toBeCalledTimes ( 0 ) ;
expect ( e . message ) . toMatch (
"There was an error initializing the repository: Incorrectly formatted build folder. The deployment folder cannot be prefixed with '/' or './'. Instead reference the folder name directly. ❌"
) ;
}
2019-12-22 05:51:39 +08:00
} ) ;
2019-11-19 23:06:27 +08:00
it ( "should fail if the build folder begins with a ./" , async ( ) = > {
Object . assign ( action , {
2019-12-22 05:51:39 +08:00
accessToken : "123" ,
2020-01-20 04:33:14 +08:00
branch : "branch" ,
2020-03-02 20:52:38 +08:00
folder : "./" ,
2019-11-19 23:06:27 +08:00
pusher : {
2019-12-22 05:51:39 +08:00
name : "asd" ,
email : "as@cat"
}
} ) ;
2019-11-19 23:06:27 +08:00
2020-03-02 20:52:38 +08:00
try {
await init ( action ) ;
} catch ( e ) {
expect ( execute ) . toBeCalledTimes ( 0 ) ;
expect ( e . message ) . toMatch (
"There was an error initializing the repository: Incorrectly formatted build folder. The deployment folder cannot be prefixed with '/' or './'. Instead reference the folder name directly. ❌"
) ;
}
2019-12-22 05:51:39 +08:00
} ) ;
2019-11-19 23:06:27 +08:00
it ( "should not fail if root is used" , async ( ) = > {
Object . assign ( action , {
2020-03-02 20:52:38 +08:00
repositoryPath : "JamesIves/github-pages-deploy-action" ,
2019-12-22 05:51:39 +08:00
accessToken : "123" ,
2020-01-20 04:33:14 +08:00
branch : "branch" ,
2020-03-02 20:52:38 +08:00
folder : "." ,
root : "." ,
2019-11-19 23:06:27 +08:00
pusher : {
2019-12-22 05:51:39 +08:00
name : "asd" ,
email : "as@cat"
}
} ) ;
2019-11-19 23:06:27 +08:00
2020-03-02 20:52:38 +08:00
await init ( action ) ;
2019-11-19 23:06:27 +08:00
2020-01-15 04:14:15 +08:00
expect ( execute ) . toBeCalledTimes ( 6 ) ;
2019-12-22 05:51:39 +08:00
} ) ;
2019-11-19 23:06:27 +08:00
} ) ;
2019-12-22 05:51:39 +08:00
describe ( "generateBranch" , ( ) = > {
2020-01-20 04:33:14 +08:00
it ( "should execute six commands" , async ( ) = > {
Object . assign ( action , {
accessToken : "123" ,
branch : "branch" ,
2020-03-02 20:52:38 +08:00
folder : "." ,
2020-01-20 04:33:14 +08:00
pusher : {
name : "asd" ,
email : "as@cat"
}
} ) ;
2020-03-02 20:52:38 +08:00
await generateBranch ( action ) ;
2020-01-15 03:25:10 +08:00
expect ( execute ) . toBeCalledTimes ( 6 ) ;
2019-12-22 05:51:39 +08:00
} ) ;
2020-01-20 04:33:14 +08:00
it ( "should fail if there is no branch" , async ( ) = > {
Object . assign ( action , {
accessToken : "123" ,
branch : null ,
2020-03-02 20:52:38 +08:00
folder : "." ,
2020-01-20 04:33:14 +08:00
pusher : {
name : "asd" ,
email : "as@cat"
}
} ) ;
2020-03-02 20:52:38 +08:00
try {
await generateBranch ( action ) ;
} catch ( e ) {
expect ( e . message ) . toMatch (
"There was an error creating the deployment branch: Branch is required. ❌"
) ;
}
2020-01-20 04:33:14 +08:00
} ) ;
2019-12-22 05:51:39 +08:00
} ) ;
2019-11-19 23:06:27 +08:00
2019-12-22 05:51:39 +08:00
describe ( "switchToBaseBranch" , ( ) = > {
it ( "should execute one command" , async ( ) = > {
2020-01-20 04:33:14 +08:00
Object . assign ( action , {
accessToken : "123" ,
branch : "branch" ,
2020-03-02 20:52:38 +08:00
folder : "." ,
2020-01-20 04:33:14 +08:00
pusher : {
name : "asd" ,
email : "as@cat"
}
} ) ;
2020-03-02 20:52:38 +08:00
await switchToBaseBranch ( action ) ;
2019-12-22 05:51:39 +08:00
expect ( execute ) . toBeCalledTimes ( 1 ) ;
2020-03-02 20:52:38 +08:00
} ) ;
it ( "should execute one command if using custom baseBranch" , async ( ) = > {
Object . assign ( action , {
baseBranch : "123" ,
accessToken : "123" ,
branch : "branch" ,
folder : "." ,
pusher : {
name : "asd" ,
email : "as@cat"
}
} ) ;
await switchToBaseBranch ( action ) ;
expect ( execute ) . toBeCalledTimes ( 1 ) ;
} ) ;
it ( "should fail if one of the required parameters is not available" , async ( ) = > {
Object . assign ( action , {
baseBranch : "123" ,
accessToken : null ,
gitHubToken : null ,
ssh : null ,
branch : "branch" ,
folder : null ,
pusher : {
name : "asd" ,
email : "as@cat"
}
} ) ;
try {
await switchToBaseBranch ( action ) ;
} catch ( e ) {
expect ( execute ) . toBeCalledTimes ( 0 ) ;
expect ( e . message ) . toMatch (
"There was an error switching to the base branch: 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. ❌"
) ;
}
2019-12-22 05:51:39 +08:00
} ) ;
} ) ;
describe ( "deploy" , ( ) = > {
2020-01-20 05:16:28 +08:00
it ( "should execute commands" , async ( ) = > {
2019-11-19 23:06:27 +08:00
Object . assign ( action , {
2020-03-02 20:52:38 +08:00
folder : "build" ,
2020-01-20 04:33:14 +08:00
branch : "branch" ,
2019-12-22 05:51:39 +08:00
gitHubToken : "123" ,
2019-11-19 23:06:27 +08:00
pusher : {
2019-12-22 05:51:39 +08:00
name : "asd" ,
email : "as@cat"
}
} ) ;
2020-03-02 20:52:38 +08:00
await deploy ( action ) ;
2019-11-19 23:06:27 +08:00
// Includes the call to generateBranch
2020-01-20 05:16:28 +08:00
expect ( execute ) . toBeCalledTimes ( 12 ) ;
2019-12-22 05:51:39 +08:00
} ) ;
2020-01-20 04:33:14 +08:00
2020-03-02 20:52:38 +08:00
it ( "should execute commands with clean options, ommits sha commit message" , async ( ) = > {
process . env . GITHUB_SHA = "" ;
2020-01-20 04:33:14 +08:00
Object . assign ( action , {
2020-03-02 20:52:38 +08:00
folder : "build" ,
2020-01-20 04:33:14 +08:00
branch : "branch" ,
gitHubToken : "123" ,
pusher : {
name : "asd" ,
email : "as@cat"
} ,
clean : true ,
cleanExclude : '["cat", "montezuma"]'
} ) ;
2020-03-02 20:52:38 +08:00
await deploy ( action ) ;
// Includes the call to generateBranch
expect ( execute ) . toBeCalledTimes ( 12 ) ;
} ) ;
it ( "should execute commands with clean options stored as an array instead" , async ( ) = > {
Object . assign ( action , {
folder : "build" ,
branch : "branch" ,
gitHubToken : "123" ,
pusher : {
name : "asd" ,
email : "as@cat"
} ,
clean : true ,
cleanExclude : [ "cat" , "montezuma" ]
} ) ;
await deploy ( action ) ;
2020-01-20 04:33:14 +08:00
// Includes the call to generateBranch
2020-01-20 05:16:28 +08:00
expect ( execute ) . toBeCalledTimes ( 12 ) ;
2020-01-20 04:33:14 +08:00
} ) ;
it ( "should gracefully handle incorrectly formatted clean exclude items" , async ( ) = > {
Object . assign ( action , {
2020-03-02 20:52:38 +08:00
folder : "." ,
2020-01-20 04:33:14 +08:00
branch : "branch" ,
gitHubToken : "123" ,
2020-01-20 05:16:28 +08:00
pusher : { } ,
2020-01-20 04:33:14 +08:00
clean : true ,
2020-01-20 05:16:28 +08:00
targetFolder : "new_folder" ,
commitMessage : "Hello!" ,
isTest : true ,
2020-01-20 04:33:14 +08:00
cleanExclude : '["cat, "montezuma"]' // There is a syntax errror in the string.
} ) ;
2020-03-02 20:52:38 +08:00
await deploy ( action ) ;
2020-01-20 04:33:14 +08:00
2020-01-20 05:16:28 +08:00
expect ( execute ) . toBeCalledTimes ( 12 ) ;
2020-01-20 04:33:14 +08:00
} ) ;
it ( "should stop early if there is nothing to commit" , async ( ) = > {
Object . assign ( action , {
2020-03-02 20:52:38 +08:00
folder : "build" ,
2020-01-20 04:33:14 +08:00
branch : "branch" ,
gitHubToken : "123" ,
pusher : {
name : "asd" ,
email : "as@cat"
} ,
isTest : false // Setting this env variable to false means there will never be anything to commit and the action will exit early.
} ) ;
2020-03-02 20:52:38 +08:00
await deploy ( action ) ;
expect ( execute ) . toBeCalledTimes ( 13 ) ;
} ) ;
it ( "should throw an error if one of the required parameters is not available" , async ( ) = > {
Object . assign ( action , {
folder : "build" ,
branch : "branch" ,
ssh : null ,
accessToken : null ,
gitHubToken : null ,
pusher : {
name : "asd" ,
email : "as@cat"
} ,
isTest : false // Setting this env variable to false means there will never be anything to commit and the action will exit early.
} ) ;
try {
await deploy ( action ) ;
} catch ( e ) {
expect ( execute ) . toBeCalledTimes ( 1 ) ;
expect ( e . message ) . toMatch (
"The deploy step encountered an error: 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. ❌"
) ;
}
2020-01-20 04:33:14 +08:00
} ) ;
2019-12-22 05:51:39 +08:00
} ) ;
2019-11-19 23:06:27 +08:00
} ) ;