github.com/haya14busa/reviewdog@v0.0.0-20180723114510-ffb00ef78fd3/cmd/reviewdog/doghouse_test.go (about) 1 package main 2 3 import ( 4 "context" 5 "io/ioutil" 6 "os" 7 "strings" 8 "testing" 9 10 "github.com/google/go-cmp/cmp" 11 "github.com/haya14busa/reviewdog" 12 "github.com/haya14busa/reviewdog/cienv" 13 "github.com/haya14busa/reviewdog/doghouse" 14 "github.com/haya14busa/reviewdog/doghouse/client" 15 "github.com/haya14busa/reviewdog/project" 16 "golang.org/x/oauth2" 17 ) 18 19 func TestNewDoghouseCli(t *testing.T) { 20 if _, ok := newDoghouseCli(context.Background()).Client.Transport.(*oauth2.Transport); ok { 21 t.Error("got oauth2 http client, want default client") 22 } 23 24 const tokenEnv = "REVIEWDOG_TOKEN" 25 saveToken := os.Getenv(tokenEnv) 26 defer func() { 27 if saveToken != "" { 28 os.Setenv(tokenEnv, saveToken) 29 } else { 30 os.Unsetenv(tokenEnv) 31 } 32 }() 33 os.Setenv(tokenEnv, "xxx") 34 35 if _, ok := newDoghouseCli(context.Background()).Client.Transport.(*oauth2.Transport); !ok { 36 t.Error("w/ TOKEN: got unexpected http client, want oauth client") 37 } 38 } 39 40 func TestCheckResultSet_Project(t *testing.T) { 41 defer func(f func(ctx context.Context, conf *project.Config) (map[string][]*reviewdog.CheckResult, error)) { 42 projectRunAndParse = f 43 }(projectRunAndParse) 44 45 wantCheckResult := map[string][]*reviewdog.CheckResult{ 46 "name1": { 47 &reviewdog.CheckResult{ 48 Lnum: 1, 49 Col: 14, 50 Message: "msg", 51 Path: "reviewdog.go", 52 }, 53 }, 54 } 55 56 projectRunAndParse = func(ctx context.Context, conf *project.Config) (map[string][]*reviewdog.CheckResult, error) { 57 return wantCheckResult, nil 58 } 59 60 tmp, err := ioutil.TempFile("", "") 61 if err != nil { 62 t.Fatal(err) 63 } 64 defer os.Remove(tmp.Name()) 65 66 got, err := checkResultSet(context.Background(), nil, &option{conf: tmp.Name()}, true) 67 if err != nil { 68 t.Fatal(err) 69 } 70 if diff := cmp.Diff(got, wantCheckResult); diff != "" { 71 t.Errorf("result has diff:\n%s", diff) 72 } 73 } 74 75 func TestCheckResultSet_NonProject(t *testing.T) { 76 opt := &option{ 77 f: "golint", 78 } 79 input := `reviewdog.go:14:14: test message` 80 got, err := checkResultSet(context.Background(), strings.NewReader(input), opt, false) 81 if err != nil { 82 t.Fatal(err) 83 } 84 want := map[string][]*reviewdog.CheckResult{ 85 "golint": { 86 &reviewdog.CheckResult{ 87 Lnum: 14, 88 Col: 14, 89 Message: "test message", 90 Path: "reviewdog.go", 91 Lines: []string{input}, 92 }, 93 }, 94 } 95 if diff := cmp.Diff(got, want); diff != "" { 96 t.Errorf("result has diff:\n%s", diff) 97 } 98 } 99 100 type fakeDoghouseCli struct { 101 client.DogHouseClientInterface 102 FakeCheck func(context.Context, *doghouse.CheckRequest) (*doghouse.CheckResponse, error) 103 } 104 105 func (f *fakeDoghouseCli) Check(ctx context.Context, req *doghouse.CheckRequest) (*doghouse.CheckResponse, error) { 106 return f.FakeCheck(ctx, req) 107 } 108 109 func TestPostResultSet(t *testing.T) { 110 const ( 111 owner = "haya14busa" 112 repo = "reviewdog" 113 prNum = 14 114 sha = "1414" 115 ) 116 117 fakeCli := &fakeDoghouseCli{} 118 fakeCli.FakeCheck = func(ctx context.Context, req *doghouse.CheckRequest) (*doghouse.CheckResponse, error) { 119 if req.Owner != owner { 120 t.Errorf("req.Owner = %q, want %q", req.Owner, owner) 121 } 122 if req.Repo != repo { 123 t.Errorf("req.Repo = %q, want %q", req.Repo, repo) 124 } 125 if req.SHA != sha { 126 t.Errorf("req.SHA = %q, want %q", req.SHA, sha) 127 } 128 if req.PullRequest != prNum { 129 t.Errorf("req.PullRequest = %d, want %d", req.PullRequest, prNum) 130 } 131 switch req.Name { 132 case "name1": 133 if diff := cmp.Diff(req.Annotations, []*doghouse.Annotation{ 134 { 135 Line: 14, 136 Message: "name1: test 1", 137 Path: "reviewdog.go", 138 RawMessage: "L1\nL2", 139 }, 140 { 141 Message: "name1: test 2", 142 Path: "reviewdog.go", 143 }, 144 }); diff != "" { 145 t.Errorf("%s: req.Annotation have diff:\n%s", req.Name, diff) 146 } 147 case "name2": 148 if diff := cmp.Diff(req.Annotations, []*doghouse.Annotation{ 149 { 150 Line: 14, 151 Message: "name2: test 1", 152 Path: "cmd/reviewdog/doghouse.go", 153 }, 154 }); diff != "" { 155 t.Errorf("%s: req.Annotation have diff:\n%s", req.Name, diff) 156 } 157 default: 158 t.Errorf("unexpected req.Name: %s", req.Name) 159 } 160 return &doghouse.CheckResponse{}, nil 161 } 162 163 resultSet := map[string][]*reviewdog.CheckResult{ 164 "name1": { 165 &reviewdog.CheckResult{ 166 Lnum: 14, 167 Message: "name1: test 1", 168 Path: "reviewdog.go", 169 Lines: []string{"L1", "L2"}, 170 }, 171 &reviewdog.CheckResult{ 172 Message: "name1: test 2", 173 Path: "reviewdog.go", 174 }, 175 }, 176 "name2": { 177 &reviewdog.CheckResult{ 178 Lnum: 14, 179 Message: "name2: test 1", 180 Path: "cmd/reviewdog/doghouse.go", 181 }, 182 }, 183 } 184 185 ghInfo := &cienv.BuildInfo{ 186 Owner: owner, 187 Repo: repo, 188 PullRequest: prNum, 189 SHA: sha, 190 } 191 192 if err := postResultSet(context.Background(), resultSet, ghInfo, fakeCli); err != nil { 193 t.Fatal(err) 194 } 195 }