github.com/mattbailey/reviewdog@v0.10.0/service/gitlab/gitlab_mr_commit_test.go (about) 1 package gitlab 2 3 import ( 4 "context" 5 "encoding/json" 6 "net/http" 7 "net/http/httptest" 8 "os" 9 "testing" 10 11 "github.com/kylelemons/godebug/pretty" 12 "github.com/xanzy/go-gitlab" 13 14 "github.com/reviewdog/reviewdog" 15 "github.com/reviewdog/reviewdog/service/serviceutil" 16 ) 17 18 func TestGitLabMergeRequestCommitCommenter_Post_Flush_review_api(t *testing.T) { 19 cwd, _ := os.Getwd() 20 defer os.Chdir(cwd) 21 os.Chdir("../..") 22 23 apiCalled := 0 24 mux := http.NewServeMux() 25 mux.HandleFunc("/api/v4/projects/o/r/merge_requests/14/commits", func(w http.ResponseWriter, r *http.Request) { 26 apiCalled++ 27 if r.Method != http.MethodGet { 28 t.Errorf("unexpected access: %v %v", r.Method, r.URL) 29 } 30 cs := []*gitlab.Commit{ 31 { 32 ID: "0123456789abcdef", 33 ShortID: "012345678", 34 }, 35 } 36 if err := json.NewEncoder(w).Encode(cs); err != nil { 37 t.Fatal(err) 38 } 39 }) 40 mux.HandleFunc("/api/v4/projects/o/r/repository/commits/0123456789abcdef/comments", func(w http.ResponseWriter, r *http.Request) { 41 apiCalled++ 42 if r.Method != http.MethodGet { 43 t.Errorf("unexpected access: %v %v", r.Method, r.URL) 44 } 45 cs := []*gitlab.CommitComment{ 46 { 47 Path: "notExistFile.go", 48 Line: 1, 49 Note: serviceutil.BodyPrefix + "\nalready commented", 50 }, 51 } 52 if err := json.NewEncoder(w).Encode(cs); err != nil { 53 t.Fatal(err) 54 } 55 }) 56 mux.HandleFunc("/api/v4/projects/o/r/repository/commits/sha/comments", func(w http.ResponseWriter, r *http.Request) { 57 apiCalled++ 58 if r.Method != http.MethodPost { 59 t.Errorf("unexpected access: %v %v", r.Method, r.URL) 60 } 61 var req gitlab.CommitComment 62 if err := json.NewDecoder(r.Body).Decode(&req); err != nil { 63 t.Error(err) 64 } 65 want := gitlab.CommitComment{ 66 Path: "notExistFile.go", 67 Line: 14, 68 Note: serviceutil.BodyPrefix + "\nnew comment", 69 LineType: "new", 70 } 71 if diff := pretty.Compare(want, req); diff != "" { 72 t.Errorf("req.Comments diff: (-got +want)\n%s", diff) 73 } 74 if err := json.NewEncoder(w).Encode(req); err != nil { 75 t.Fatal(err) 76 } 77 }) 78 ts := httptest.NewServer(mux) 79 defer ts.Close() 80 81 cli := gitlab.NewClient(nil, "") 82 cli.SetBaseURL(ts.URL + "/api/v4") 83 g, err := NewGitLabMergeRequestCommitCommenter(cli, "o", "r", 14, "sha") 84 if err != nil { 85 t.Fatal(err) 86 } 87 // Path is set to non existing file path for mock test not to use last commit id of the line. 88 // If setting exists file path, sha is changed by last commit id. 89 comments := []*reviewdog.Comment{ 90 { 91 CheckResult: &reviewdog.CheckResult{ 92 Path: "notExistFile.go", 93 Lnum: 1, 94 }, 95 Body: "already commented", 96 }, 97 { 98 CheckResult: &reviewdog.CheckResult{ 99 Path: "notExistFile.go", 100 Lnum: 14, 101 }, 102 Body: "new comment", 103 }, 104 } 105 for _, c := range comments { 106 if err := g.Post(context.Background(), c); err != nil { 107 t.Error(err) 108 } 109 } 110 if err := g.Flush(context.Background()); err != nil { 111 t.Error(err) 112 } 113 if want := 3; apiCalled != want { 114 t.Errorf("GitLab API is called %d times, want %d times", apiCalled, want) 115 } 116 } 117 118 func TestGitLabPullRequest_workdir(t *testing.T) { 119 cwd, _ := os.Getwd() 120 defer os.Chdir(cwd) 121 os.Chdir("../..") 122 123 g, err := NewGitLabMergeRequestCommitCommenter(nil, "", "", 0, "") 124 if err != nil { 125 t.Fatal(err) 126 } 127 if g.wd != "" { 128 t.Fatalf("g.wd = %q, want empty", g.wd) 129 } 130 ctx := context.Background() 131 want := "a/b/c" 132 g.Post(ctx, &reviewdog.Comment{CheckResult: &reviewdog.CheckResult{Path: want}}) 133 if got := g.postComments[0].Path; got != want { 134 t.Errorf("wd=%q path=%q, want %q", g.wd, got, want) 135 } 136 137 subDir := "cmd/" 138 if err := os.Chdir(subDir); err != nil { 139 t.Fatal(err) 140 } 141 g, _ = NewGitLabMergeRequestCommitCommenter(nil, "", "", 0, "") 142 if g.wd != subDir { 143 t.Fatalf("gitRelWorkdir() = %q, want %q", g.wd, subDir) 144 } 145 path := "a/b/c" 146 wantPath := "cmd/" + path 147 g.Post(ctx, &reviewdog.Comment{CheckResult: &reviewdog.CheckResult{Path: path}}) 148 if got := g.postComments[0].Path; got != wantPath { 149 t.Errorf("wd=%q path=%q, want %q", g.wd, got, wantPath) 150 } 151 }