205 lines
5.1 KiB
Go
205 lines
5.1 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"log"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
"testing"
|
|
|
|
"go.uber.org/mock/gomock"
|
|
"src.opensuse.org/autogits/common"
|
|
"src.opensuse.org/autogits/common/gitea-generated/models"
|
|
mock_common "src.opensuse.org/autogits/common/mock"
|
|
)
|
|
|
|
func TestSyncPR(t *testing.T) {
|
|
pr := PullRequestSynced{}
|
|
|
|
config := &common.AutogitConfig{
|
|
Reviewers: []string{"reviewer1", "reviewer2"},
|
|
Branch: "testing",
|
|
Organization: "test",
|
|
GitProjectName: "prj",
|
|
}
|
|
|
|
event := &common.PullRequestWebhookEvent{
|
|
Action: "syncronized",
|
|
Number: 42,
|
|
Pull_Request: &common.PullRequest{
|
|
Number: 42,
|
|
Base: common.Head{
|
|
Ref: "branch",
|
|
Sha: "8a6a69a4232cabda04a4d9563030aa888ff5482f75aa4c6519da32a951a072e2",
|
|
Repo: &common.Repository{
|
|
Name: "testRepo",
|
|
Default_Branch: "main1",
|
|
},
|
|
},
|
|
Head: common.Head{
|
|
Ref: "branch",
|
|
Sha: "11eb36d5a58d7bb376cac59ac729a1986c6a7bfc63e7818e14382f545ccda985",
|
|
Repo: &common.Repository{
|
|
Name: "testRepo",
|
|
Default_Branch: "main1",
|
|
},
|
|
},
|
|
},
|
|
Repository: &common.Repository{
|
|
Owner: &common.Organization{
|
|
Username: "test",
|
|
},
|
|
},
|
|
}
|
|
|
|
PrjGitPR := &models.PullRequest{
|
|
Title: "some pull request",
|
|
Head: &models.PRBranchInfo{
|
|
Name: "testing",
|
|
Sha: "db8adab91edb476b9762097d10c6379aa71efd6b60933a1c0e355ddacf419a95",
|
|
Repo: &models.Repository{
|
|
SSHURL: "./prj",
|
|
},
|
|
},
|
|
}
|
|
|
|
git := &common.GitHandler{
|
|
GitCommiter: "tester",
|
|
GitEmail: "test@suse.com",
|
|
}
|
|
|
|
t.Run("PR sync request against PrjGit == no action", func(t *testing.T) {
|
|
ctl := gomock.NewController(t)
|
|
pr.gitea = mock_common.NewMockGitea(ctl)
|
|
|
|
git.GitPath = t.TempDir()
|
|
|
|
config.GitProjectName = "testRepo"
|
|
event.Repository.Name = "testRepo"
|
|
|
|
if err := pr.Process(event, git, config); err != nil {
|
|
t.Error("Error PrjGit sync request. Should be no error.", err)
|
|
}
|
|
})
|
|
|
|
t.Run("Missing submodule in prjgit", func(t *testing.T) {
|
|
ctl := gomock.NewController(t)
|
|
mock := mock_common.NewMockGitea(ctl)
|
|
|
|
pr.gitea = mock
|
|
git.GitPath = t.TempDir()
|
|
|
|
config.GitProjectName = "prjGit"
|
|
event.Repository.Name = "tester"
|
|
|
|
setupGitForTests(t, git)
|
|
|
|
mock.EXPECT().GetAssociatedPrjGitPR(event).Return(PrjGitPR, nil)
|
|
|
|
err := pr.Process(event, git, config)
|
|
|
|
if err == nil || err.Error() != "Cannot fetch submodule commit id in prjgit for 'tester'" {
|
|
t.Error("Invalid error received.", err)
|
|
}
|
|
})
|
|
|
|
t.Run("Missing PrjGit PR for the sync", func(t *testing.T) {
|
|
ctl := gomock.NewController(t)
|
|
mock := mock_common.NewMockGitea(ctl)
|
|
|
|
pr.gitea = mock
|
|
git.GitPath = t.TempDir()
|
|
|
|
config.GitProjectName = "prjGit"
|
|
event.Repository.Name = "tester"
|
|
|
|
setupGitForTests(t, git)
|
|
|
|
expectedErr := errors.New("Missing PR should throw error")
|
|
mock.EXPECT().GetAssociatedPrjGitPR(event).Return(PrjGitPR, expectedErr)
|
|
|
|
err := pr.Process(event, git, config)
|
|
|
|
if err == nil || errors.Unwrap(err) != expectedErr {
|
|
t.Error("Invalid error received.", err)
|
|
}
|
|
})
|
|
|
|
t.Run("PR sync", func(t *testing.T) {
|
|
var b bytes.Buffer
|
|
w := log.Writer()
|
|
log.SetOutput(&b)
|
|
defer log.SetOutput(w)
|
|
|
|
ctl := gomock.NewController(t)
|
|
mock := mock_common.NewMockGitea(ctl)
|
|
|
|
pr.gitea = mock
|
|
git.GitPath = t.TempDir()
|
|
|
|
config.GitProjectName = "prjGit"
|
|
event.Repository.Name = "testRepo"
|
|
|
|
setupGitForTests(t, git)
|
|
|
|
git.DebugLogger = true
|
|
DebugMode = true
|
|
mock.EXPECT().GetAssociatedPrjGitPR(event).Return(PrjGitPR, nil)
|
|
|
|
err := pr.Process(event, git, config)
|
|
|
|
if err != nil {
|
|
t.Error("Invalid error received.", err)
|
|
t.Error(b.String())
|
|
}
|
|
|
|
// check that we actually created the branch in the prjgit
|
|
id, ok := git.GitSubmoduleCommitId("prj", "testRepo", "c097b9d1d69892d0ef2afa66d4e8abf0a1612c6f95d271a6e15d6aff1ad2854c")
|
|
if id != "11eb36d5a58d7bb376cac59ac729a1986c6a7bfc63e7818e14382f545ccda985" || !ok {
|
|
t.Error("Failed creating PR")
|
|
t.Error(b.String())
|
|
}
|
|
|
|
/*
|
|
* does nothing on next sync of already synced data -- PR is updated
|
|
*/
|
|
os.RemoveAll(path.Join(git.GitPath, common.DefaultGitPrj))
|
|
mock.EXPECT().GetAssociatedPrjGitPR(event).Return(&models.PullRequest{
|
|
Title: "some pull request",
|
|
Head: &models.PRBranchInfo{
|
|
Name: "testing",
|
|
Sha: "c097b9d1d69892d0ef2afa66d4e8abf0a1612c6f95d271a6e15d6aff1ad2854c",
|
|
Repo: &models.Repository{
|
|
SSHURL: "./prj",
|
|
},
|
|
},
|
|
}, nil)
|
|
|
|
err = pr.Process(event, git, config)
|
|
|
|
if err != nil {
|
|
t.Error("Invalid error received.", err)
|
|
t.Error(b.String())
|
|
}
|
|
|
|
// check that we actually created the branch in the prjgit
|
|
id, ok = git.GitSubmoduleCommitId("prj", "testRepo", "c097b9d1d69892d0ef2afa66d4e8abf0a1612c6f95d271a6e15d6aff1ad2854c")
|
|
if id != "11eb36d5a58d7bb376cac59ac729a1986c6a7bfc63e7818e14382f545ccda985" || !ok {
|
|
t.Error("Failed creating PR")
|
|
t.Error(b.String())
|
|
}
|
|
|
|
if id, err := git.GitBranchHead("prj", "PR_testRepo#42"); id != "c097b9d1d69892d0ef2afa66d4e8abf0a1612c6f95d271a6e15d6aff1ad2854c" || err != nil {
|
|
t.Error("no branch?", err)
|
|
t.Error(b.String())
|
|
}
|
|
|
|
if !strings.Contains(b.String(), "commitID already match - nothing to do") {
|
|
// os.CopyFS("/tmp/test", os.DirFS(git.GitPath))
|
|
t.Log(b.String())
|
|
}
|
|
})
|
|
}
|