1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-12 10:55:20 +02:00
sap-jenkins-library/pkg/abaputils/manageGitRepositoryUtils_test.go
Daniel Mieg dbc3d41b37
SAP_COM_0948 (#4715)
* SAP_COM_0948 clone, pull & checkout

* Fix log output

* Enable compatibility for old tests

* Fix tests

* Add tests for SAP_COM_0948

* Change message

* Add tags for test

* add retry for error code 501

---------

Co-authored-by: tiloKo <70266685+tiloKo@users.noreply.github.com>
2023-12-19 15:16:48 +01:00

303 lines
8.9 KiB
Go

//go:build unit
// +build unit
package abaputils
import (
"encoding/json"
"fmt"
"math"
"os"
"testing"
"github.com/stretchr/testify/assert"
)
var executionLogString string
func init() {
executionLog := LogProtocolResults{
Count: fmt.Sprint(math.Round(numberOfEntriesPerPage * 1.5)),
Results: []LogProtocol{
{
ProtocolLine: 1,
OverviewIndex: 1,
Type: "LogEntry",
Description: "S",
Timestamp: "/Date(1644332299000+0000)/",
},
},
}
executionLogResponse, _ := json.Marshal(executionLog)
executionLogString = string(executionLogResponse)
}
func TestPollEntity(t *testing.T) {
t.Run("Test poll entity - success case", func(t *testing.T) {
logResultSuccess := fmt.Sprintf(`{"d": { "sc_name": "/DMO/SWC", "status": "S", "to_Log_Overview": { "results": [ { "log_index": 1, "log_name": "Main Import", "type_of_found_issues": "Success", "timestamp": "/Date(1644332299000+0000)/", "to_Log_Protocol": { "results": [ { "log_index": 1, "index_no": "1", "log_name": "", "type": "Info", "descr": "Main import", "timestamp": null, "criticality": 0 } ] } } ] } } }`)
client := &ClientMock{
BodyList: []string{
`{"d" : ` + executionLogString + `}`,
`{"d" : ` + executionLogString + `}`,
logResultSuccess,
`{"d" : { "status" : "S" } }`,
`{"d" : { "status" : "R" } }`,
`{"d" : { "status" : "Q" } }`,
`{}`,
},
Token: "myToken",
StatusCode: 200,
}
con := ConnectionDetailsHTTP{
User: "MY_USER",
Password: "MY_PW",
URL: "https://api.endpoint.com/Entity/",
XCsrfToken: "MY_TOKEN",
}
swcManager := SoftwareComponentApiManager{Client: client, Force0510: true}
repo := Repository{Name: "testRepo1"}
api, _ := swcManager.GetAPI(con, repo)
status, _ := PollEntity(api, 0)
assert.Equal(t, "S", status)
assert.Equal(t, 0, len(client.BodyList), "Not all requests were done")
})
t.Run("Test poll entity - error case", func(t *testing.T) {
logResultError := fmt.Sprintf(`{"d": { "sc_name": "/DMO/SWC", "status": "S", "to_Log_Overview": { "results": [ { "log_index": 1, "log_name": "Main Import", "type_of_found_issues": "Error", "timestamp": "/Date(1644332299000+0000)/", "to_Log_Protocol": { "results": [ { "log_index": 1, "index_no": "1", "log_name": "", "type": "Info", "descr": "Main import", "timestamp": null, "criticality": 0 } ] } } ] } } }`)
client := &ClientMock{
BodyList: []string{
`{"d" : ` + executionLogString + `}`,
`{"d" : ` + executionLogString + `}`,
logResultError,
`{"d" : { "status" : "E" } }`,
`{"d" : { "status" : "R" } }`,
`{"d" : { "status" : "Q" } }`,
`{}`,
},
Token: "myToken",
StatusCode: 200,
}
con := ConnectionDetailsHTTP{
User: "MY_USER",
Password: "MY_PW",
URL: "https://api.endpoint.com/Entity/",
XCsrfToken: "MY_TOKEN",
}
swcManager := SoftwareComponentApiManager{Client: client, Force0510: true}
repo := Repository{Name: "testRepo1"}
api, _ := swcManager.GetAPI(con, repo)
status, _ := PollEntity(api, 0)
assert.Equal(t, "E", status)
assert.Equal(t, 0, len(client.BodyList), "Not all requests were done")
})
}
func TestGetRepositories(t *testing.T) {
t.Run("Get Repositories from config - success case", func(t *testing.T) {
expectedRepositoryList := []Repository{{
Name: "testRepo",
Branch: "testBranch",
}, {
Name: "testRepo2",
Branch: "testBranch2",
}, {
Name: "testRepo3",
Branch: "testBranch3",
}, {
Name: "testRepository",
Branch: "testBranch",
}, {
Name: "testRepository",
}}
dir := t.TempDir()
oldCWD, _ := os.Getwd()
_ = os.Chdir(dir)
defer func() {
_ = os.Chdir(oldCWD)
}()
manifestFileString := `
repositories:
- name: 'testRepo'
branch: 'testBranch'
- name: 'testRepo2'
branch: 'testBranch2'
- name: 'testRepo3'
branch: 'testBranch3'`
err := os.WriteFile("repositoriesTest.yml", []byte(manifestFileString), 0644)
config := RepositoriesConfig{
BranchName: "testBranch",
RepositoryName: "testRepository",
RepositoryNames: []string{"testRepository"},
Repositories: "repositoriesTest.yml",
}
repositories, err := GetRepositories(&config, true)
assert.Equal(t, expectedRepositoryList, repositories)
assert.NoError(t, err)
})
t.Run("Get Repositories from file config - failure case", func(t *testing.T) {
expectedRepositoryList := []Repository([]Repository{})
expectedErrorMessage := "Error in config file repositoriesTest.yml, AddonDescriptor doesn't contain any repositories"
dir := t.TempDir()
oldCWD, _ := os.Getwd()
_ = os.Chdir(dir)
defer func() {
_ = os.Chdir(oldCWD)
}()
manifestFileString := `
repositories:
- repo: 'testRepo'
- repo: 'testRepo2'`
err := os.WriteFile("repositoriesTest.yml", []byte(manifestFileString), 0644)
config := RepositoriesConfig{
Repositories: "repositoriesTest.yml",
}
repositories, err := GetRepositories(&config, false)
assert.Equal(t, expectedRepositoryList, repositories)
assert.EqualError(t, err, expectedErrorMessage)
})
t.Run("Get Repositories from config - failure case", func(t *testing.T) {
expectedRepositoryList := []Repository([]Repository{})
expectedErrorMessage := "Error in config file repositoriesTest.yml, AddonDescriptor doesn't contain any repositories"
dir := t.TempDir()
oldCWD, _ := os.Getwd()
_ = os.Chdir(dir)
defer func() {
_ = os.Chdir(oldCWD)
}()
manifestFileString := `
repositories:
- repo: 'testRepo'
- repo: 'testRepo2'`
err := os.WriteFile("repositoriesTest.yml", []byte(manifestFileString), 0644)
config := RepositoriesConfig{
Repositories: "repositoriesTest.yml",
}
repositories, err := GetRepositories(&config, false)
assert.Equal(t, expectedRepositoryList, repositories)
assert.EqualError(t, err, expectedErrorMessage)
})
t.Run("Get Repositories from empty config - failure case", func(t *testing.T) {
expectedRepositoryList := []Repository([]Repository{})
expectedErrorMessage := "Failed to read repository configuration: You have not specified any repository configuration. Please make sure that you have correctly specified it. For more information please read the User documentation"
config := RepositoriesConfig{}
repositories, err := GetRepositories(&config, false)
assert.Equal(t, expectedRepositoryList, repositories)
assert.EqualError(t, err, expectedErrorMessage)
})
}
func TestCreateLogStrings(t *testing.T) {
t.Run("Clone LogString Tag and Commit", func(t *testing.T) {
repo := Repository{
Name: "/DMO/REPO",
Branch: "main",
CommitID: "1234567",
Tag: "myTag",
}
logString := repo.GetCloneLogString()
assert.Equal(t, "repository / software component '/DMO/REPO', branch 'main', commit '1234567'", logString, "Expected different string")
})
t.Run("Clone LogString Tag", func(t *testing.T) {
repo := Repository{
Name: "/DMO/REPO",
Branch: "main",
Tag: "myTag",
}
logString := repo.GetCloneLogString()
assert.Equal(t, "repository / software component '/DMO/REPO', branch 'main', tag 'myTag'", logString, "Expected different string")
})
t.Run("Pull LogString Tag and Commit", func(t *testing.T) {
repo := Repository{
Name: "/DMO/REPO",
Branch: "main",
CommitID: "1234567",
Tag: "myTag",
}
logString := repo.GetPullLogString()
assert.Equal(t, "repository / software component '/DMO/REPO', commit '1234567'", logString, "Expected different string")
})
t.Run("Pull LogString Tag", func(t *testing.T) {
repo := Repository{
Name: "/DMO/REPO",
Branch: "main",
Tag: "myTag",
}
logString := repo.GetPullLogString()
assert.Equal(t, "repository / software component '/DMO/REPO', tag 'myTag'", logString, "Expected different string")
})
}
func TestCreateRequestBodies(t *testing.T) {
t.Run("Clone Body Tag and Commit", func(t *testing.T) {
repo := Repository{
Name: "/DMO/REPO",
Branch: "main",
CommitID: "1234567",
Tag: "myTag",
}
body := repo.GetCloneRequestBody()
assert.Equal(t, `{"sc_name":"/DMO/REPO", "branch_name":"main", "commit_id":"1234567"}`, body, "Expected different body")
})
t.Run("Clone Body Tag", func(t *testing.T) {
repo := Repository{
Name: "/DMO/REPO",
Branch: "main",
Tag: "myTag",
}
body := repo.GetCloneRequestBody()
assert.Equal(t, `{"sc_name":"/DMO/REPO", "branch_name":"main", "tag_name":"myTag"}`, body, "Expected different body")
})
t.Run("Pull Body Tag and Commit", func(t *testing.T) {
repo := Repository{
Name: "/DMO/REPO",
Branch: "main",
CommitID: "1234567",
Tag: "myTag",
}
body := repo.GetPullRequestBody()
assert.Equal(t, `{"sc_name":"/DMO/REPO", "commit_id":"1234567"}`, body, "Expected different body")
})
t.Run("Pull Body Tag", func(t *testing.T) {
repo := Repository{
Name: "/DMO/REPO",
Branch: "main",
Tag: "myTag",
}
body := repo.GetPullRequestBody()
assert.Equal(t, `{"sc_name":"/DMO/REPO", "tag_name":"myTag"}`, body, "Expected different body")
})
}