2021-02-17 10:59:56 +02:00
package cmd
import (
"path/filepath"
"testing"
"github.com/SAP/jenkins-library/pkg/mock"
"github.com/stretchr/testify/assert"
)
type integrationArtifactUploadMockUtils struct {
* mock . ExecMockRunner
* mock . FilesMock
}
func newIntegrationArtifactUploadTestsUtils ( ) integrationArtifactUploadMockUtils {
utils := integrationArtifactUploadMockUtils {
ExecMockRunner : & mock . ExecMockRunner { } ,
FilesMock : & mock . FilesMock { } ,
}
return utils
}
func TestRunIntegrationArtifactUpload ( t * testing . T ) {
t . Parallel ( )
t . Run ( "Successfull Integration Flow Create Test" , func ( t * testing . T ) {
filesMock := mock . FilesMock { }
path := filepath . Join ( "tempDir" , "iflow4.zip" )
filesMock . AddFile ( path , [ ] byte ( "dummy content" ) )
exists , err := filesMock . FileExists ( path )
assert . NoError ( t , err )
assert . True ( t , exists )
2021-06-28 10:50:33 +02:00
apiServiceKey := ` {
"oauth" : {
"url" : "https://demo" ,
"clientid" : "demouser" ,
"clientsecret" : "******" ,
"tokenurl" : "https://demo/oauth/token"
}
} `
2021-02-17 10:59:56 +02:00
config := integrationArtifactUploadOptions {
2021-07-16 16:09:55 +02:00
APIServiceKey : apiServiceKey ,
IntegrationFlowName : "flow4" ,
IntegrationFlowID : "flow4" ,
PackageID : "CICD" ,
FilePath : path ,
2021-02-17 10:59:56 +02:00
}
httpClient := httpMockCpis { CPIFunction : "" , ResponseBody : ` ` , TestType : "PositiveAndCreateIntegrationDesigntimeArtifactResBody" }
err = runIntegrationArtifactUpload ( & config , nil , & filesMock , & httpClient )
if assert . NoError ( t , err ) {
t . Run ( "check url" , func ( t * testing . T ) {
2021-07-16 16:09:55 +02:00
assert . Equal ( t , "https://demo/api/v1/IntegrationDesigntimeArtifacts(Id='flow4',Version='Active')" , httpClient . URL )
2021-02-17 10:59:56 +02:00
} )
t . Run ( "check method" , func ( t * testing . T ) {
2021-07-16 16:09:55 +02:00
assert . Equal ( t , "PUT" , httpClient . Method )
2021-02-17 10:59:56 +02:00
} )
}
} )
t . Run ( "Successfull Integration Flow Update Test" , func ( t * testing . T ) {
files := mock . FilesMock { }
path := filepath . Join ( "tempDir" , "iflow4.zip" )
files . AddFile ( path , [ ] byte ( "dummy content" ) )
exists , err := files . FileExists ( path )
assert . NoError ( t , err )
assert . True ( t , exists )
2021-06-28 10:50:33 +02:00
apiServiceKey := ` {
"oauth" : {
"url" : "https://demo" ,
"clientid" : "demouser" ,
"clientsecret" : "******" ,
"tokenurl" : "https://demo/oauth/token"
}
} `
2021-02-17 10:59:56 +02:00
config := integrationArtifactUploadOptions {
2021-07-16 16:09:55 +02:00
APIServiceKey : apiServiceKey ,
IntegrationFlowName : "flow4" ,
IntegrationFlowID : "flow4" ,
PackageID : "CICD" ,
FilePath : path ,
2021-02-17 10:59:56 +02:00
}
httpClient := httpMockCpis { CPIFunction : "" , ResponseBody : ` ` , TestType : "PositiveAndUpdateIntegrationDesigntimeArtifactResBody" }
err = runIntegrationArtifactUpload ( & config , nil , & files , & httpClient )
if assert . NoError ( t , err ) {
t . Run ( "check url" , func ( t * testing . T ) {
assert . Equal ( t , "https://demo/api/v1/IntegrationDesigntimeArtifacts" , httpClient . URL )
} )
t . Run ( "check method" , func ( t * testing . T ) {
assert . Equal ( t , "POST" , httpClient . Method )
} )
}
} )
t . Run ( "Failed case of Integration Flow Get Test" , func ( t * testing . T ) {
2021-06-28 10:50:33 +02:00
apiServiceKey := ` {
"oauth" : {
"url" : "https://demo" ,
"clientid" : "demouser" ,
"clientsecret" : "******" ,
"tokenurl" : "https://demo/oauth/token"
}
} `
2021-02-17 10:59:56 +02:00
config := integrationArtifactUploadOptions {
2021-07-16 16:09:55 +02:00
APIServiceKey : apiServiceKey ,
IntegrationFlowName : "flow4" ,
IntegrationFlowID : "flow4" ,
PackageID : "CICD" ,
FilePath : "path" ,
2021-02-17 10:59:56 +02:00
}
httpClient := httpMockCpis { CPIFunction : "" , ResponseBody : ` ` , TestType : "NegativeAndGetIntegrationDesigntimeArtifactResBody" }
err := runIntegrationArtifactUpload ( & config , nil , nil , & httpClient )
assert . Error ( t , err )
} )
t . Run ( "Failed case of Integration Flow Update Test" , func ( t * testing . T ) {
files := mock . FilesMock { }
path := filepath . Join ( "tempDir" , "iflow4.zip" )
files . AddFile ( path , [ ] byte ( "dummy content" ) )
exists , err := files . FileExists ( path )
assert . NoError ( t , err )
assert . True ( t , exists )
2021-06-28 10:50:33 +02:00
apiServiceKey := ` {
"oauth" : {
"url" : "https://demo" ,
"clientid" : "demouser" ,
"clientsecret" : "******" ,
"tokenurl" : "https://demo/oauth/token"
}
} `
2021-02-17 10:59:56 +02:00
config := integrationArtifactUploadOptions {
2021-07-16 16:09:55 +02:00
APIServiceKey : apiServiceKey ,
IntegrationFlowName : "flow4" ,
IntegrationFlowID : "flow4" ,
PackageID : "CICD" ,
FilePath : path ,
2021-02-17 10:59:56 +02:00
}
httpClient := httpMockCpis { CPIFunction : "" , ResponseBody : ` ` , TestType : "NegativeAndCreateIntegrationDesigntimeArtifactResBody" }
err = runIntegrationArtifactUpload ( & config , nil , & files , & httpClient )
2021-07-16 16:09:55 +02:00
assert . EqualError ( t , err , "HTTP PUT request to https://demo/api/v1/IntegrationDesigntimeArtifacts(Id='flow4',Version='Active') failed with error: : 401 Unauthorized" )
2021-02-17 10:59:56 +02:00
} )
t . Run ( "Failed case of Integration Flow Create Test" , func ( t * testing . T ) {
filesMock := mock . FilesMock { }
path := filepath . Join ( "tempDir" , "iflow4.zip" )
filesMock . AddFile ( path , [ ] byte ( "dummy content" ) )
exists , err := filesMock . FileExists ( path )
assert . NoError ( t , err )
assert . True ( t , exists )
2021-06-28 10:50:33 +02:00
apiServiceKey := ` {
"oauth" : {
"url" : "https://demo" ,
"clientid" : "demouser" ,
"clientsecret" : "******" ,
"tokenurl" : "https://demo/oauth/token"
}
} `
2021-02-17 10:59:56 +02:00
config := integrationArtifactUploadOptions {
2021-07-16 16:09:55 +02:00
APIServiceKey : apiServiceKey ,
IntegrationFlowName : "flow4" ,
IntegrationFlowID : "flow4" ,
PackageID : "CICD" ,
FilePath : path ,
2021-02-17 10:59:56 +02:00
}
httpClient := httpMockCpis { CPIFunction : "" , ResponseBody : ` ` , TestType : "NegativeAndUpdateIntegrationDesigntimeArtifactResBody" }
err = runIntegrationArtifactUpload ( & config , nil , & filesMock , & httpClient )
2021-04-30 09:43:25 +02:00
assert . EqualError ( t , err , "HTTP POST request to https://demo/api/v1/IntegrationDesigntimeArtifacts failed with error: : 401 Unauthorized" )
2021-02-17 10:59:56 +02:00
} )
}