blob: a4ba9aaa44a1edad7af39627452bda42d167f0c0 [file] [log] [blame] [edit]
// Copyright 2019 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 whereiscl
import (
"net/http"
"testing"
"github.com/google/go-cmp/cmp"
th "go.fuchsia.dev/fuchsia/tools/whereiscl/testhelper"
)
func TestParseReviewURL(t *testing.T) {
for _, url := range []string{
"https://fxr/123456789",
"https://fxr/123456789/some/file/path/foo.cc",
"http://fxr/123456789",
"http://fxr/123456789/some/file/path/foo.cc",
"fxr/123456789",
"fxr/123456789/some/file/path/foo.cc",
"https://fuchsia-review.googlesource.com/c/fuchsia/+/123456789",
"https://fuchsia-review.googlesource.com/c/fuchsia/+/123456789/some/file/path/foo.cc",
"http://fuchsia-review.googlesource.com/c/fuchsia/+/123456789",
"http://fuchsia-review.googlesource.com/c/fuchsia/+/123456789/some/file/path/foo.cc",
"fuchsia-review.googlesource.com/c/fuchsia/+/123456789",
"fuchsia-review.googlesource.com/c/fuchsia/+/123456789/some/file/path/foo.cc",
"123456789",
} {
got, err := ParseReviewURL(url)
if err != nil {
t.Fatalf("ParseReviewURL(%q): %v", url, err)
}
want := &QueryInfo{
APIEndpoint: "https://fuchsia-review.googlesource.com",
Query: "123456789",
}
if d := cmp.Diff(want, got, cmp.AllowUnexported(*want)); d != "" {
t.Errorf("ParseReviewURL(%q): mismatch (-want +got):\n%s", url, d)
}
}
}
func TestParseReviewURL_ChangeId(t *testing.T) {
for _, url := range []string{
"https://fxr/Ie8dddbce1eeb01a561f3b36e1685f4136fb61378",
"fxr/Ie8dddbce1eeb01a561f3b36e1685f4136fb61378",
"Ie8dddbce1eeb01a561f3b36e1685f4136fb61378",
} {
got, err := ParseReviewURL(url)
if err != nil {
t.Fatalf("ParseReviewURL(%q): %v", url, err)
}
want := &QueryInfo{
APIEndpoint: "https://fuchsia-review.googlesource.com",
Query: "Ie8dddbce1eeb01a561f3b36e1685f4136fb61378",
}
if d := cmp.Diff(want, got, cmp.AllowUnexported(*want)); d != "" {
t.Errorf("ParseReviewURL(%q): mismatch (-want +got):\n%s", url, d)
}
}
}
func TestParseReviewURL_invalidURL(t *testing.T) {
for _, url := range []string{
"https://fxr/non_digits/foo/bar",
"https://random-url.com/foo/bar",
} {
qi, err := ParseReviewURL(url)
if err == nil {
t.Errorf("ParseReviewURL(%q): error expected; got nil with result %+v", url, qi)
}
}
}
func TestGetChangeInfo(t *testing.T) {
transport := th.MockTransport{}
transport.AddResponse(
"https://fuchsia-review.googlesource.com/changes/?q=987654321&o=CURRENT_REVISION",
`)]}'
[
{
"foo": 42,
"status": "MERGED",
"current_revision": "abcdefg",
"project": "my_project",
"_number": 12345
}
]`,
)
http.DefaultClient.Transport = &transport
got, err := GetChangeInfo(&QueryInfo{
APIEndpoint: "https://fuchsia-review.googlesource.com",
Query: "987654321",
})
if err != nil {
t.Fatalf("GetChangeInfo: %v", err)
}
want := &ChangeInfo{
Project: "my_project",
Status: CLStatusMerged,
CurrentRevision: "abcdefg",
Number: 12345,
}
if d := cmp.Diff(want, got); d != "" {
t.Errorf("GetChangeInfo: mismatch (-want +got):\n%s", d)
}
}
func TestGetChangeInfo_clNotFound(t *testing.T) {
transport := th.MockTransport{}
transport.AddResponse(
"https://fuchsia-review.googlesource.com/changes/?q=987654321&o=CURRENT_REVISION",
`)]}'
[]`,
)
http.DefaultClient.Transport = &transport
_, err := GetChangeInfo(&QueryInfo{
APIEndpoint: "https://fuchsia-review.googlesource.com",
Query: "987654321",
})
if err == nil {
t.Error("GetChangeInfo: error expected; got nil")
}
}
func TestGetChangeInfo_tooManyCLs(t *testing.T) {
transport := th.MockTransport{}
transport.AddResponse(
"https://fuchsia-review.googlesource.com/changes/?q=987654321&o=CURRENT_REVISION",
`)]}'
[
{
"status": "ACTIVE",
"current_revision": "abcdefg"
},
{
"status": "MERGED",
"current_revision": "hijklmn"
}
]`,
)
http.DefaultClient.Transport = &transport
_, err := GetChangeInfo(&QueryInfo{
APIEndpoint: "https://fuchsia-review.googlesource.com",
Query: "987654321",
})
if err == nil {
t.Error("GetChangeInfo: error expected; got nil")
}
}