workflow-pr: more tests
This commit is contained in:
parent
e8e51e21ca
commit
1d7d0a7b43
@ -41,10 +41,10 @@ type GitHandler struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type GitHandlerGenerator interface {
|
type GitHandlerGenerator interface {
|
||||||
CreateGitHandler(git_author, email, prj_name string) (*GitHandler, error);
|
CreateGitHandler(git_author, email, prj_name string) (*GitHandler, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type GitHandlerImpl struct {}
|
type GitHandlerImpl struct{}
|
||||||
|
|
||||||
func (*GitHandlerImpl) CreateGitHandler(git_author, email, prj_name string) (*GitHandler, error) {
|
func (*GitHandlerImpl) CreateGitHandler(git_author, email, prj_name string) (*GitHandler, error) {
|
||||||
var err error
|
var err error
|
||||||
|
@ -49,7 +49,7 @@ func gitExecs(t *testing.T, git *common.GitHandler, cmds [][]string) {
|
|||||||
command := exec.Command(cmd[2], cmd[3:]...)
|
command := exec.Command(cmd[2], cmd[3:]...)
|
||||||
command.Dir = filepath.Join(git.GitPath, cmd[1])
|
command.Dir = filepath.Join(git.GitPath, cmd[1])
|
||||||
command.Stdin = nil
|
command.Stdin = nil
|
||||||
command.Env = []string{"GIT_CONFIG_COUNT=1", "GIT_CONFIG_KEY_1=protocol.file.allow", "GIT_CONFIG_VALUE_1=always"}
|
command.Env = append([]string{"GIT_CONFIG_COUNT=1", "GIT_CONFIG_KEY_1=protocol.file.allow", "GIT_CONFIG_VALUE_1=always"}, common.ExtraGitParams...)
|
||||||
_, err := command.CombinedOutput()
|
_, err := command.CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf(" *** error: %v\n", err)
|
t.Errorf(" *** error: %v\n", err)
|
||||||
@ -91,6 +91,13 @@ func setupGitForTests(t *testing.T, git *common.GitHandler) {
|
|||||||
"GIT_CONFIG_COUNT=1",
|
"GIT_CONFIG_COUNT=1",
|
||||||
"GIT_CONFIG_KEY_0=protocol.file.allow",
|
"GIT_CONFIG_KEY_0=protocol.file.allow",
|
||||||
"GIT_CONFIG_VALUE_0=always",
|
"GIT_CONFIG_VALUE_0=always",
|
||||||
|
|
||||||
|
"GIT_AUTHOR_NAME=testname",
|
||||||
|
"GIT_AUTHOR_EMAIL=test@suse.com",
|
||||||
|
"GIT_AUTHOR_DATE='2005-04-07T22:13:13'",
|
||||||
|
"GIT_COMMITTER_NAME=testname",
|
||||||
|
"GIT_COMMITTER_EMAIL=test@suse.com",
|
||||||
|
"GIT_COMMITTER_DATE='2005-04-07T22:13:13'",
|
||||||
}
|
}
|
||||||
|
|
||||||
gitExecs(t, git, [][]string{
|
gitExecs(t, git, [][]string{
|
||||||
@ -101,7 +108,7 @@ func setupGitForTests(t *testing.T, git *common.GitHandler) {
|
|||||||
{"foo", "commit", "-m", "first commit"},
|
{"foo", "commit", "-m", "first commit"},
|
||||||
{"prj", "config", "receive.denyCurrentBranch", "ignore"},
|
{"prj", "config", "receive.denyCurrentBranch", "ignore"},
|
||||||
{"prj", "submodule", "init"},
|
{"prj", "submodule", "init"},
|
||||||
{"prj", "submodule", "add", filepath.Join(git.GitPath, "foo"), "testRepo"},
|
{"prj", "submodule", "add", "../foo", "testRepo"},
|
||||||
{"prj", "add", ".gitmodules", "testRepo"},
|
{"prj", "add", ".gitmodules", "testRepo"},
|
||||||
{"prj", "commit", "-m", "First instance"},
|
{"prj", "commit", "-m", "First instance"},
|
||||||
{"prj", "submodule", "deinit", "testRepo"},
|
{"prj", "submodule", "deinit", "testRepo"},
|
||||||
|
@ -29,8 +29,6 @@ func (o *PullRequestSynced) Process(req *common.PullRequestWebhookEvent, git *co
|
|||||||
return fmt.Errorf("Cannot get associated PrjGit PR in processPullRequestSync. Err: %w", err)
|
return fmt.Errorf("Cannot get associated PrjGit PR in processPullRequestSync. Err: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("associated pr:", prjPr)
|
|
||||||
|
|
||||||
common.PanicOnError(git.GitExec("", "clone", "--branch", prjPr.Head.Name, "--depth", "1", prjPr.Head.Repo.SSHURL, common.DefaultGitPrj))
|
common.PanicOnError(git.GitExec("", "clone", "--branch", prjPr.Head.Name, "--depth", "1", prjPr.Head.Repo.SSHURL, common.DefaultGitPrj))
|
||||||
commitId, ok := git.GitSubmoduleCommitId(common.DefaultGitPrj, req.Repository.Name, prjPr.Head.Sha)
|
commitId, ok := git.GitSubmoduleCommitId(common.DefaultGitPrj, req.Repository.Name, prjPr.Head.Sha)
|
||||||
|
|
||||||
@ -56,4 +54,3 @@ Update to %s`, req.Pull_Request.Head.Sha)
|
|||||||
branchName := prGitBranchNameForPR(req)
|
branchName := prGitBranchNameForPR(req)
|
||||||
return updateOrCreatePRBranch(req, git, commitMsg, branchName)
|
return updateOrCreatePRBranch(req, git, commitMsg, branchName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
202
workflow-pr/pr_sync_test.go
Normal file
202
workflow-pr/pr_sync_test.go
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
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())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user