aboutsummaryrefslogtreecommitdiff
path: root/internal/gitutil/pull_request_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/gitutil/pull_request_test.go')
-rw-r--r--internal/gitutil/pull_request_test.go108
1 files changed, 108 insertions, 0 deletions
diff --git a/internal/gitutil/pull_request_test.go b/internal/gitutil/pull_request_test.go
new file mode 100644
index 00000000..d7453ff3
--- /dev/null
+++ b/internal/gitutil/pull_request_test.go
@@ -0,0 +1,108 @@
+// Copyright 2020 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package gitutil
+
+import (
+ "fmt"
+ "testing"
+
+ "github.com/gogs/git-module"
+ "github.com/pkg/errors"
+ "github.com/stretchr/testify/assert"
+)
+
+func TestModuler_PullRequestMeta(t *testing.T) {
+ headPath := "/head/path"
+ basePath := "/base/path"
+ headBranch := "head_branch"
+ baseBranch := "base_branch"
+ mergeBase := "MERGE-BASE"
+ changedFiles := []string{"a.go", "b.txt"}
+ commits := []*git.Commit{
+ {ID: git.MustIDFromString("adfd6da3c0a3fb038393144becbf37f14f780087")},
+ }
+
+ MockModule.RepoAddRemote = func(repoPath, name, url string, opts ...git.AddRemoteOptions) error {
+ if repoPath != headPath {
+ return fmt.Errorf("repoPath: want %q but got %q", headPath, repoPath)
+ } else if name == "" {
+ return errors.New("empty name")
+ } else if url != basePath {
+ return fmt.Errorf("url: want %q but got %q", basePath, url)
+ }
+
+ if len(opts) == 0 {
+ return errors.New("no options")
+ } else if !opts[0].Fetch {
+ return fmt.Errorf("opts.Fetch: want %v but got %v", true, opts[0].Fetch)
+ }
+
+ return nil
+ }
+ MockModule.RepoMergeBase = func(repoPath, base, head string, opts ...git.MergeBaseOptions) (string, error) {
+ if repoPath != headPath {
+ return "", fmt.Errorf("repoPath: want %q but got %q", headPath, repoPath)
+ } else if base == "" {
+ return "", errors.New("empty base")
+ } else if head != headBranch {
+ return "", fmt.Errorf("head: want %q but got %q", headBranch, head)
+ }
+
+ return mergeBase, nil
+ }
+ MockModule.RepoLog = func(repoPath, rev string, opts ...git.LogOptions) ([]*git.Commit, error) {
+ if repoPath != headPath {
+ return nil, fmt.Errorf("repoPath: want %q but got %q", headPath, repoPath)
+ }
+
+ expRev := mergeBase + "..." + headBranch
+ if rev != expRev {
+ return nil, fmt.Errorf("rev: want %q but got %q", expRev, rev)
+ }
+
+ return commits, nil
+ }
+ MockModule.RepoDiffNameOnly = func(repoPath, base, head string, opts ...git.DiffNameOnlyOptions) ([]string, error) {
+ if repoPath != headPath {
+ return nil, fmt.Errorf("repoPath: want %q but got %q", headPath, repoPath)
+ } else if base == "" {
+ return nil, errors.New("empty base")
+ } else if head != headBranch {
+ return nil, fmt.Errorf("head: want %q but got %q", headBranch, head)
+ }
+
+ if len(opts) == 0 {
+ return nil, errors.New("no options")
+ } else if !opts[0].NeedsMergeBase {
+ return nil, fmt.Errorf("opts.NeedsMergeBase: want %v but got %v", true, opts[0].NeedsMergeBase)
+ }
+
+ return changedFiles, nil
+ }
+ MockModule.RepoRemoveRemote = func(repoPath, name string, opts ...git.RemoveRemoteOptions) error {
+ if repoPath != headPath {
+ return fmt.Errorf("repoPath: want %q but got %q", headPath, repoPath)
+ } else if name == "" {
+ return errors.New("empty name")
+ }
+
+ return nil
+ }
+ defer func() {
+ MockModule = MockModuleStore{}
+ }()
+
+ meta, err := Module.PullRequestMeta(headPath, basePath, headBranch, baseBranch)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ expMeta := &PullRequestMeta{
+ MergeBase: mergeBase,
+ Commits: commits,
+ NumFiles: 2,
+ }
+ assert.Equal(t, expMeta, meta)
+}