2019-10-25 14:58:59 +02:00
package cmd
import (
"github.com/SAP/jenkins-library/pkg/config"
2019-11-04 15:43:33 +02:00
"github.com/SAP/jenkins-library/pkg/log"
2019-10-25 14:58:59 +02:00
"github.com/spf13/cobra"
)
type karmaExecuteTestsOptions struct {
InstallCommand string ` json:"installCommand,omitempty" `
ModulePath string ` json:"modulePath,omitempty" `
RunCommand string ` json:"runCommand,omitempty" `
}
var myKarmaExecuteTestsOptions karmaExecuteTestsOptions
var karmaExecuteTestsStepConfigJSON string
// KarmaExecuteTestsCommand Executes the Karma test runner
func KarmaExecuteTestsCommand ( ) * cobra . Command {
metadata := karmaExecuteTestsMetadata ( )
var createKarmaExecuteTestsCmd = & cobra . Command {
Use : "karmaExecuteTests" ,
Short : "Executes the Karma test runner" ,
Long : ` In this step the ( [ Karma test runner ] ( http : //karma-runner.github.io)) is executed.
The step is using the ` + " ` " + `seleniumExecuteTest` + " ` " + ` step to spin up two containers in a Docker network :
* a Selenium / Chrome container ( ` + " ` " + `selenium/standalone-chrome` + " ` " + ` )
* a NodeJS container ( ` + " ` " + `node:8-stretch` + " ` " + ` )
In the Docker network , the containers can be referenced by the values provided in ` + " ` " + `dockerName` + " ` " + ` and ` + " ` " + `sidecarName` + " ` " + ` , the default values are ` + " ` " + `karma` + " ` " + ` and ` + " ` " + `selenium` + " ` " + ` . These values must be used in the ` + " ` " + `hostname` + " ` " + ` properties of the test configuration ( [ Karma ] ( https : //karma-runner.github.io/1.0/config/configuration-file.html) and [WebDriver](https://github.com/karma-runner/karma-webdriver-launcher#usage)).
! ! ! note
In a Kubernetes environment , the containers both need to be referenced with ` + " ` " + `localhost` + " ` " + ` . ` ,
PreRunE : func ( cmd * cobra . Command , args [ ] string ) error {
2019-11-04 15:43:33 +02:00
log . SetStepName ( "karmaExecuteTests" )
2019-11-06 17:22:50 +02:00
log . SetVerbose ( GeneralConfig . Verbose )
2019-11-21 17:09:57 +02:00
return PrepareConfig ( cmd , & metadata , "karmaExecuteTests" , & myKarmaExecuteTestsOptions , config . OpenPiperFile )
2019-10-25 14:58:59 +02:00
} ,
RunE : func ( cmd * cobra . Command , args [ ] string ) error {
return karmaExecuteTests ( myKarmaExecuteTestsOptions )
} ,
}
addKarmaExecuteTestsFlags ( createKarmaExecuteTestsCmd )
return createKarmaExecuteTestsCmd
}
func addKarmaExecuteTestsFlags ( cmd * cobra . Command ) {
cmd . Flags ( ) . StringVar ( & myKarmaExecuteTestsOptions . InstallCommand , "installCommand" , "npm install --quiet" , "The command that is executed to install the test tool." )
cmd . Flags ( ) . StringVar ( & myKarmaExecuteTestsOptions . ModulePath , "modulePath" , "." , "Define the path of the module to execute tests on." )
cmd . Flags ( ) . StringVar ( & myKarmaExecuteTestsOptions . RunCommand , "runCommand" , "npm run karma" , "The command that is executed to start the tests." )
cmd . MarkFlagRequired ( "installCommand" )
cmd . MarkFlagRequired ( "modulePath" )
cmd . MarkFlagRequired ( "runCommand" )
}
// retrieve step metadata
func karmaExecuteTestsMetadata ( ) config . StepData {
var theMetaData = config . StepData {
Spec : config . StepSpec {
Inputs : config . StepInputs {
Parameters : [ ] config . StepParameters {
{
Name : "installCommand" ,
Scope : [ ] string { "GENERAL" , "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
} ,
{
Name : "modulePath" ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
} ,
{
Name : "runCommand" ,
Scope : [ ] string { "GENERAL" , "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
} ,
} ,
} ,
} ,
}
return theMetaData
}