package vendor

import (
	"fmt"
	"reflect"
	"testing"
)

func TestDeduceRemoteRepo(t *testing.T) {
	if testing.Short() {
		t.Skipf("skipping network tests in -short mode")
	}
	tests := []struct {
		path     string
		want     RemoteRepo
		extra    string
		err      error
		insecure bool
	}{{
		path: "",
		err:  fmt.Errorf(`"" is not a valid import path`),
	}, {
		path: "corporate",
		err:  fmt.Errorf(`"corporate" is not a valid import path`),
	}, {
		path: "github.com/cznic/b",
		want: &gitrepo{
			url: "https://github.com/cznic/b",
		},
	}, {
		path: "github.com/pkg/sftp",
		want: &gitrepo{
			url: "https://github.com/pkg/sftp",
		},
	}, {
		path: "github.com/pkg/sftp/examples/gsftp",
		want: &gitrepo{
			url: "https://github.com/pkg/sftp",
		},
		extra: "/examples/gsftp",
	}, {
		path: "github.com/coreos/go-etcd",
		want: &gitrepo{
			url: "https://github.com/coreos/go-etcd",
		},
	}, {
		path: "bitbucket.org/davecheney/gitrepo/cmd/main",
		want: &gitrepo{
			url: "https://bitbucket.org/davecheney/gitrepo",
		},
		extra: "/cmd/main",
	}, {
		path: "bitbucket.org/davecheney/hgrepo/cmd/main",
		want: &hgrepo{
			url: "https://bitbucket.org/davecheney/hgrepo",
		},
		extra: "/cmd/main",
	}, {
		path: "code.google.com/p/goauth2/oauth",
		want: &hgrepo{
			url: "https://code.google.com/p/goauth2",
		},
		extra: "/oauth",
	}, {
		path: "code.google.com/p/gami",
		want: &gitrepo{
			url: "https://code.google.com/p/gami",
		},
	}, {
		path: "git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.golang.git",
		want: &gitrepo{
			url: "https://git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.golang.git",
		},
	}, {
		path: "git.apache.org/thrift.git/lib/go/thrift",
		want: &gitrepo{
			url: "https://git.apache.org/thrift.git",
		},
		extra: "/lib/go/thrift",
	}, {
		path: "gopkg.in/check.v1",
		want: &gitrepo{
			url: "https://gopkg.in/check.v1",
		},
		extra: "",
	}, {
		path: "goji.io",
		want: &gitrepo{
			url: "https://github.com/goji/goji",
		},
		extra: "",
	}, {
		path: "golang.org/x/tools/go/vcs",
		want: &gitrepo{
			url: "https://go.googlesource.com/tools",
		},
		extra: "/go/vcs",
	}, {
		path: "labix.org/v2/mgo",
		want: &bzrrepo{
			url: "https://launchpad.net/mgo/v2",
		},
		insecure: true,
	}, {
		path: "launchpad.net/gnuflag",
		want: &bzrrepo{
			url: "https://launchpad.net/gnuflag",
		},
	}, {
		path: "https://github.com/pkg/sftp",
		want: &gitrepo{
			url: "https://github.com/pkg/sftp",
		},
	}, {
		path: "git://github.com/pkg/sftp",
		want: &gitrepo{
			url: "git://github.com/pkg/sftp",
		},
		insecure: true,
	}, {
		path: "code.google.com/p/google-api-go-client/bigquery/v2",
		want: &hgrepo{
			url: "https://code.google.com/p/google-api-go-client",
		},
		extra: "/bigquery/v2",
	}, {
		path: "code.google.com/p/go-sqlite/go1/sqlite3",
		want: &hgrepo{
			url: "https://code.google.com/p/go-sqlite",
		},
		extra: "/go1/sqlite3",
	}}

	for _, tt := range tests {
		t.Logf("DeduceRemoteRepo(%q, %v)", tt.path, tt.insecure)
		got, extra, err := DeduceRemoteRepo(tt.path, tt.insecure)
		if !reflect.DeepEqual(err, tt.err) {
			t.Errorf("DeduceRemoteRepo(%q): want err: %v, got err: %v", tt.path, tt.err, err)
			continue
		}
		if !reflect.DeepEqual(got, tt.want) || extra != tt.extra {
			t.Errorf("DeduceRemoteRepo(%q): want %#v, %v, got %#v, %v", tt.path, tt.want, tt.extra, got, extra)
		}

		if tt.want != nil {
			got, err := NewRemoteRepo(tt.want.URL(), tt.want.Type(), tt.insecure)
			if err != nil {
				t.Fatal(err)
			}
			if !reflect.DeepEqual(got, tt.want) {
				t.Errorf("NewRemoteRepo(%s, %s): want %#v, got %#v", tt.want.URL(), tt.want.Type(), tt.want, got)
			}
		}
	}
}
