blob: 5a98b1f044b670066c23d0c6da69611257912be8 [file]
package main
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
pb "go.skia.org/infra/pinpoint/proto/v1"
)
func TestParseGerritURL(t *testing.T) {
tests := []struct {
name string
url string
expected *pb.GerritChange
expectErr bool
}{
{
name: "valid Skia Gerrit URL with patchset",
url: "https://skia-review.googlesource.com/c/buildbot/+/1235860/3",
expected: &pb.GerritChange{
Host: "skia-review.googlesource.com",
Project: "buildbot",
Change: 1235860,
Patchset: 3,
},
expectErr: false,
},
{
name: "valid Chromium Gerrit URL without patchset",
url: "https://chromium-review.googlesource.com/c/chromium/src/+/987654",
expected: &pb.GerritChange{
Host: "chromium-review.googlesource.com",
Project: "chromium/src",
Change: 987654,
Patchset: 1, // default to 1
},
expectErr: false,
},
{
name: "valid http Gerrit URL",
url: "http://chrome-internal-review.googlesource.com/c/chrome/src/+/12345/2",
expected: &pb.GerritChange{
Host: "chrome-internal-review.googlesource.com",
Project: "chrome/src",
Change: 12345,
Patchset: 2,
},
expectErr: false,
},
{
name: "invalid URL missing scheme",
url: "skia-review.googlesource.com/c/buildbot/+/1235860",
expected: nil,
expectErr: true,
},
{
name: "invalid URL missing /c/",
url: "https://skia-review.googlesource.com/buildbot/+/1235860",
expected: nil,
expectErr: true,
},
{
name: "invalid URL missing /+/",
url: "https://skia-review.googlesource.com/c/buildbot/1235860",
expected: nil,
expectErr: true,
},
{
name: "invalid URL missing change ID",
url: "https://skia-review.googlesource.com/c/buildbot/+/",
expected: nil,
expectErr: true,
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
actual, err := parseGerritURL(tc.url)
if tc.expectErr {
require.Error(t, err)
assert.Nil(t, actual)
} else {
require.NoError(t, err)
assert.Equal(t, tc.expected, actual)
}
})
}
}