Some checks are pending
Docs Deploy / build_and_deploy (push) Waiting to run
Generate Docs / cli (push) Waiting to run
Generate Config Doc / cli (push) Waiting to run
Go formatting / go-formatting (push) Waiting to run
Check links / markdown-link-check (push) Waiting to run
Integration / pre-test (push) Waiting to run
Integration / test on (push) Blocked by required conditions
Integration / status (push) Blocked by required conditions
Lint / Lint Go code (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
230 lines
5.4 KiB
Go
230 lines
5.4 KiB
Go
package url
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestFindScpLikeComponents(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
url string
|
|
want URL
|
|
wantString string
|
|
err error
|
|
}{
|
|
{
|
|
name: "https protocol",
|
|
url: "https://github.com/james/bond",
|
|
wantString: "https://github.com/james/bond.git",
|
|
want: URL{
|
|
Protocol: "https",
|
|
Host: "github.com",
|
|
Path: "james/bond",
|
|
},
|
|
},
|
|
{
|
|
name: "https protocol with .git",
|
|
url: "https://github.com/james/bond.git",
|
|
wantString: "https://github.com/james/bond.git",
|
|
want: URL{
|
|
Protocol: "https",
|
|
Host: "github.com",
|
|
Path: "james/bond",
|
|
},
|
|
},
|
|
{
|
|
name: "http protocol",
|
|
url: "http://github.com/james/bond",
|
|
wantString: "http://github.com/james/bond.git",
|
|
want: URL{
|
|
Protocol: "http",
|
|
Host: "github.com",
|
|
Path: "james/bond",
|
|
},
|
|
},
|
|
{
|
|
name: "http protocol with port",
|
|
url: "http://github.com/james/bond:8080",
|
|
wantString: "http://github.com/james/bond.git",
|
|
want: URL{
|
|
Protocol: "http",
|
|
Host: "github.com",
|
|
Path: "james/bond",
|
|
},
|
|
},
|
|
{
|
|
name: "https with numeric path",
|
|
url: "https://github.com/007/bond",
|
|
wantString: "https://github.com/007/bond.git",
|
|
want: URL{
|
|
Protocol: "https",
|
|
Host: "github.com",
|
|
Path: "007/bond",
|
|
},
|
|
},
|
|
{
|
|
name: "https with single repo path",
|
|
url: "https://github.com/bond",
|
|
wantString: "https://github.com/bond.git",
|
|
want: URL{
|
|
Protocol: "https",
|
|
Host: "github.com",
|
|
Path: "bond",
|
|
},
|
|
},
|
|
{
|
|
name: "https repo path ending with .git and starting with _",
|
|
url: "https://github.com/_007.git",
|
|
wantString: "https://github.com/_007.git",
|
|
want: URL{
|
|
Protocol: "https",
|
|
Host: "github.com",
|
|
Path: "_007",
|
|
},
|
|
},
|
|
{
|
|
name: "https repo path ending with .git and starting with _",
|
|
url: "https://github.com/_james.git",
|
|
wantString: "https://github.com/_james.git",
|
|
want: URL{
|
|
Protocol: "https",
|
|
Host: "github.com",
|
|
Path: "_james",
|
|
},
|
|
},
|
|
{
|
|
name: "https repo path ending with .git and starting with _",
|
|
url: "https://github.com/_james/bond.git",
|
|
wantString: "https://github.com/_james/bond.git",
|
|
want: URL{
|
|
Protocol: "https",
|
|
Host: "github.com",
|
|
Path: "_james/bond",
|
|
},
|
|
},
|
|
{
|
|
name: "most-extended case",
|
|
url: "git@github.com:james/bond",
|
|
wantString: "git@github.com:james/bond.git",
|
|
want: URL{
|
|
Protocol: "ssh",
|
|
Host: "github.com",
|
|
Path: "james/bond",
|
|
},
|
|
},
|
|
{
|
|
name: "most-extended case with port",
|
|
url: "git@github.com:22:james/bond",
|
|
wantString: "git@github.com:james/bond.git",
|
|
want: URL{
|
|
Protocol: "ssh",
|
|
Host: "github.com",
|
|
Path: "james/bond",
|
|
},
|
|
},
|
|
{
|
|
name: "most-extended case with numeric path",
|
|
url: "git@github.com:007/bond",
|
|
wantString: "git@github.com:007/bond.git",
|
|
want: URL{
|
|
Protocol: "ssh",
|
|
Host: "github.com",
|
|
Path: "007/bond",
|
|
},
|
|
},
|
|
{
|
|
name: "most-extended case with port and numeric path",
|
|
url: "git@github.com:22:007/bond",
|
|
wantString: "git@github.com:007/bond.git",
|
|
want: URL{
|
|
Protocol: "ssh",
|
|
Host: "github.com",
|
|
Path: "007/bond",
|
|
},
|
|
},
|
|
{
|
|
name: "single repo path",
|
|
url: "git@github.com:bond",
|
|
wantString: "git@github.com:bond.git",
|
|
want: URL{
|
|
Protocol: "ssh",
|
|
Host: "github.com",
|
|
Path: "bond",
|
|
},
|
|
},
|
|
{
|
|
name: "single repo path with port",
|
|
url: "git@github.com:22:bond",
|
|
wantString: "git@github.com:bond.git",
|
|
want: URL{
|
|
Protocol: "ssh",
|
|
Host: "github.com",
|
|
Path: "bond",
|
|
},
|
|
},
|
|
{
|
|
name: "single repo path with port and numeric path",
|
|
url: "git@github.com:22:007",
|
|
wantString: "git@github.com:007.git",
|
|
want: URL{
|
|
Protocol: "ssh",
|
|
Host: "github.com",
|
|
Path: "007",
|
|
},
|
|
},
|
|
{
|
|
name: "repo path ending with .git and starting with _",
|
|
url: "git@github.com:22:_007.git",
|
|
wantString: "git@github.com:_007.git",
|
|
want: URL{
|
|
Protocol: "ssh",
|
|
Host: "github.com",
|
|
Path: "_007",
|
|
},
|
|
},
|
|
{
|
|
name: "repo path ending with .git, number and starting with _",
|
|
url: "git@github.com:_007.git",
|
|
wantString: "git@github.com:_007.git",
|
|
want: URL{
|
|
Protocol: "ssh",
|
|
Host: "github.com",
|
|
Path: "_007",
|
|
},
|
|
},
|
|
{
|
|
name: "repo path ending with .git and starting with _",
|
|
url: "git@github.com:_james.git",
|
|
wantString: "git@github.com:_james.git",
|
|
want: URL{
|
|
Protocol: "ssh",
|
|
Host: "github.com",
|
|
Path: "_james",
|
|
},
|
|
},
|
|
{
|
|
name: "repo path with .git and starting with _",
|
|
url: "git@github.com:_james/bond.git",
|
|
wantString: "git@github.com:_james/bond.git",
|
|
want: URL{
|
|
Protocol: "ssh",
|
|
Host: "github.com",
|
|
Path: "_james/bond",
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := New(tt.url)
|
|
if tt.err != nil {
|
|
require.Error(t, err)
|
|
require.Equal(t, tt.err.Error(), err.Error())
|
|
}
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, tt.want, got)
|
|
require.EqualValues(t, tt.wantString, got.String())
|
|
})
|
|
}
|
|
}
|