| // 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") | 
 | 	} | 
 | } |