blob: 5a2ff3e855b4ebb0b3c884ffc16a2cff46e74c10 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package gitiles
import (
"context"
"testing"
"github.com/golang/mock/gomock"
"go.chromium.org/luci/common/proto/git"
gitilespb "go.chromium.org/luci/common/proto/gitiles"
"go.chromium.org/luci/common/proto/gitiles/mock_gitiles"
"github.com/google/go-cmp/cmp"
)
func TestLatestCommit(t *testing.T) {
t.Parallel()
tests := []struct {
project string
expected string
}{
{
project: "test-project",
expected: "foobar",
},
}
for _, test := range tests {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockGitilesClient := mock_gitiles.NewMockGitilesClient(ctrl)
req := gitilespb.LogRequest{
Project: test.project,
Committish: "refs/heads/main",
PageSize: 1,
}
// Client returns a successful Log response.
resp := gitilespb.LogResponse{
Log: []*git.Commit{{Id: "foobar"}},
}
mockGitilesClient.EXPECT().Log(gomock.Any(), &req).Return(&resp, nil)
mockGitilesClientWrapper := gitilesClientWrapper{
client: mockGitilesClient,
project: test.project,
}
ctx := context.Background()
commit, err := mockGitilesClientWrapper.LatestCommit(ctx, "refs/heads/main")
if err != nil {
t.Fatal(err)
}
if test.expected != commit {
t.Fatalf("expected: %s\nactual: %s\n", test.expected, commit)
}
}
}
func TestLog(t *testing.T) {
t.Parallel()
tests := []struct {
project string
expected []*git.Commit
}{
{
project: "test-project",
expected: []*git.Commit{
{
Id: "c",
},
{
Id: "b",
},
{
Id: "a",
},
},
},
}
for _, test := range tests {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockGitilesClient := mock_gitiles.NewMockGitilesClient(ctrl)
req := gitilespb.LogRequest{
Project: test.project,
Committish: test.expected[0].Id,
PageSize: int32(len(test.expected)),
}
// Client returns a successful Log response.
resp := gitilespb.LogResponse{
Log: test.expected,
}
mockGitilesClient.EXPECT().Log(gomock.Any(), &req).Return(&resp, nil)
mockGitilesClientWrapper := gitilesClientWrapper{
client: mockGitilesClient,
project: test.project,
}
ctx := context.Background()
log, err := mockGitilesClientWrapper.Log(ctx, test.expected[0].Id, int32(len(test.expected)))
if err != nil {
t.Fatal(err)
}
if diff := cmp.Diff(test.expected, log, cmp.Comparer(func(x, y *git.Commit) bool {
return x.Id == y.Id
})); diff != "" {
t.Fatalf("different (-want +got):\n%s", diff)
}
}
}
func TestDownloadFile(t *testing.T) {
t.Parallel()
tests := []struct {
project string
path string
ref string
expected string
}{
{
project: "test-project",
path: "a/b/c.txt",
ref: "foo",
expected: "file contents",
},
}
for _, test := range tests {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockGitilesClient := mock_gitiles.NewMockGitilesClient(ctrl)
req := gitilespb.DownloadFileRequest{
Project: test.project,
Committish: test.ref,
Path: test.path,
Format: gitilespb.DownloadFileRequest_TEXT,
}
// Client returns a successful DownloadFile response.
resp := gitilespb.DownloadFileResponse{
Contents: test.expected,
}
mockGitilesClient.EXPECT().DownloadFile(gomock.Any(), &req).Return(&resp, nil)
mockGitilesClientWrapper := gitilesClientWrapper{
client: mockGitilesClient,
project: test.project,
}
ctx := context.Background()
contents, err := mockGitilesClientWrapper.DownloadFile(ctx, test.path, test.ref)
if err != nil {
t.Fatal(err)
}
if contents != test.expected {
t.Fatalf("expected: %s\nactual: %s\n", test.expected, contents)
}
}
}