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  }