2021-02-24 16:44:23 +02:00
package sonar
import (
"net/http"
"testing"
"github.com/jarcoal/httpmock"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
piperhttp "github.com/SAP/jenkins-library/pkg/http"
)
func TestIssueService ( t * testing . T ) {
testURL := "https://example.org"
t . Run ( "success" , func ( t * testing . T ) {
httpmock . Activate ( )
defer httpmock . DeactivateAndReset ( )
sender := & piperhttp . Client { }
2021-06-15 11:13:24 +02:00
sender . SetOptions ( piperhttp . ClientOptions { MaxRetries : - 1 , UseDefaultTransport : true } )
2021-02-24 16:44:23 +02:00
// add response handler
httpmock . RegisterResponder ( http . MethodGet , testURL + "/api/" + EndpointIssuesSearch + "" , httpmock . NewStringResponder ( http . StatusOK , responseIssueSearchCritical ) )
// create service instance
serviceUnderTest := NewIssuesService ( testURL , mock . Anything , mock . Anything , mock . Anything , mock . Anything , mock . Anything , sender )
// test
count , err := serviceUnderTest . GetNumberOfBlockerIssues ( )
// assert
assert . NoError ( t , err )
assert . Equal ( t , 111 , count )
assert . Equal ( t , 1 , httpmock . GetTotalCallCount ( ) , "unexpected number of requests" )
} )
t . Run ( "error" , func ( t * testing . T ) {
httpmock . Activate ( )
defer httpmock . DeactivateAndReset ( )
sender := & piperhttp . Client { }
2021-06-15 11:13:24 +02:00
sender . SetOptions ( piperhttp . ClientOptions { MaxRetries : - 1 , UseDefaultTransport : true } )
2021-02-24 16:44:23 +02:00
// add response handler
httpmock . RegisterResponder ( http . MethodGet , testURL + "/api/" + EndpointIssuesSearch + "" , httpmock . NewStringResponder ( http . StatusNotFound , responseIssueSearchError ) )
// create service instance
serviceUnderTest := NewIssuesService ( testURL , mock . Anything , mock . Anything , mock . Anything , mock . Anything , mock . Anything , sender )
// test
count , err := serviceUnderTest . GetNumberOfCriticalIssues ( )
// assert
assert . Error ( t , err )
assert . Equal ( t , - 1 , count )
assert . Equal ( t , 1 , httpmock . GetTotalCallCount ( ) , "unexpected number of requests" )
} )
t . Run ( "" , func ( t * testing . T ) {
httpmock . Activate ( )
defer httpmock . DeactivateAndReset ( )
sender := & piperhttp . Client { }
2021-06-15 11:13:24 +02:00
sender . SetOptions ( piperhttp . ClientOptions { MaxRetries : - 1 , UseDefaultTransport : true } )
2021-02-24 16:44:23 +02:00
// add response handler
httpmock . RegisterResponder ( http . MethodGet , testURL + "/api/" + EndpointIssuesSearch + "" , httpmock . NewStringResponder ( http . StatusOK , responseIssueSearchCritical ) )
// create service instance
serviceUnderTest := NewIssuesService ( testURL , mock . Anything , mock . Anything , mock . Anything , mock . Anything , mock . Anything , sender )
// test
countMajor , err := serviceUnderTest . GetNumberOfMajorIssues ( )
countMinor , err := serviceUnderTest . GetNumberOfMinorIssues ( )
countInfo , err := serviceUnderTest . GetNumberOfInfoIssues ( )
// assert
assert . NoError ( t , err )
assert . Equal ( t , 111 , countMajor )
assert . Equal ( t , 111 , countMinor )
assert . Equal ( t , 111 , countInfo )
assert . Equal ( t , 3 , httpmock . GetTotalCallCount ( ) , "unexpected number of requests" )
} )
}
const responseIssueSearchError = ` {
"errors" : [
{
"msg" : "At least one of the following parameters must be specified: organization, projects, projectKeys (deprecated), componentKeys, componentUuids (deprecated), assignees, issues"
}
]
} `
const responseIssueSearchCritical = ` {
"total" : 111 ,
"p" : 1 ,
"ps" : 1 ,
"paging" : {
"pageIndex" : 1 ,
"pageSize" : 1 ,
"total" : 111
} ,
"effortTotal" : 1176 ,
"debtTotal" : 1176 ,
"issues" : [
{
"key" : "AXW3MmCVOYWf3_DBLGvL" ,
"rule" : "go:S3776" ,
"severity" : "CRITICAL" ,
"component" : "SAP_jenkins-library:cmd/fortifyExecuteScan.go" ,
"project" : "SAP_jenkins-library" ,
"line" : 647 ,
"hash" : "a154a51bdb1502a2ac057a348d08e7f6" ,
"textRange" : {
"startLine" : 647 ,
"endLine" : 647 ,
"startOffset" : 5 ,
"endOffset" : 23
} ,
"flows" : [
{
"locations" : [
{
"component" : "SAP_jenkins-library:cmd/fortifyExecuteScan.go" ,
"textRange" : {
"startLine" : 651 ,
"endLine" : 651 ,
"startOffset" : 1 ,
"endOffset" : 3
} ,
"msg" : "+1"
}
]
}
] ,
"status" : "OPEN" ,
"message" : "Refactor this method to reduce its Cognitive Complexity from 16 to the 15 allowed." ,
"effort" : "6min" ,
"debt" : "6min" ,
"assignee" : "CCFenner@github" ,
"author" : "33484802+olivernocon@users.noreply.github.com" ,
"tags" : [ ] ,
"creationDate" : "2020-11-11T11:06:04+0100" ,
"updateDate" : "2020-11-11T11:06:04+0100" ,
"type" : "CODE_SMELL" ,
"organization" : "sap-1"
}
] ,
"components" : [
{
"organization" : "sap-1" ,
"key" : "SAP_jenkins-library:cmd/fortifyExecuteScan.go" ,
"uuid" : "AXVKXJIlrkwsFznOfAie" ,
"enabled" : true ,
"qualifier" : "FIL" ,
"name" : "fortifyExecuteScan.go" ,
"longName" : "cmd/fortifyExecuteScan.go" ,
"path" : "cmd/fortifyExecuteScan.go"
} ,
{
"organization" : "sap-1" ,
"key" : "SAP_jenkins-library" ,
"uuid" : "AXVFg_8dh6o1O3pu_MCx" ,
"enabled" : true ,
"qualifier" : "TRK" ,
"name" : "jenkins-library" ,
"longName" : "jenkins-library"
}
] ,
"organizations" : [
{
"key" : "sap-1" ,
"name" : "SAP"
}
] ,
"facets" : [ ]
} `