all repos

mugit @ 8b21794aff807d042fd5ec1b3cb580175036ff97

🐮 git server that your cow will love

mugit/internal/mirror/mirror_test.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
test: add missing tests (#5)..., 2 months ago
1
package mirror
2
3
import (
4
	"testing"
5
6
	"olexsmir.xyz/x/is"
7
)
8
9
func TestIsRemoteSupported(t *testing.T) {
10
	tests := []struct {
11
		name    string
12
		remote  string
13
		wantErr bool
14
	}{
15
		// supported
16
		{name: "https url", remote: "https://github.com/user/repo.git"},
17
		{name: "http url", remote: "http://example.com/repo.git"},
18
		{name: "https without .git", remote: "https://github.com/user/repo"},
19
20
		// unsupported
21
		{name: "ssh url", remote: "git@github.com:user/repo.git", wantErr: true},
22
		{name: "git protocol", remote: "git://github.com/user/repo.git", wantErr: true},
23
		{name: "local path", remote: "/path/to/repo", wantErr: true},
24
		{name: "relative path", remote: "../other-repo", wantErr: true},
25
		{name: "file protocol", remote: "file:///path/to/repo", wantErr: true},
26
		{name: "empty string", remote: "", wantErr: true},
27
	}
28
29
	for _, tt := range tests {
30
		t.Run(tt.name, func(t *testing.T) {
31
			err := IsRemoteSupported(tt.remote)
32
			if tt.wantErr {
33
				is.Err(t, err, "only http and https")
34
			} else {
35
				is.Err(t, err, nil)
36
			}
37
		})
38
	}
39
}
40
41
func TestIsGithubRemote(t *testing.T) {
42
	tests := []struct {
43
		name   string
44
		remote string
45
		want   bool
46
	}{
47
		{name: "github https", remote: "https://github.com/user/repo.git", want: true},
48
		{name: "github http", remote: "http://github.com/user/repo", want: true},
49
		{name: "github enterprise", remote: "https://github.mycompany.com/user/repo", want: false},
50
		{name: "raw github", remote: "https://raw.github.com/user/repo/file", want: true},
51
52
		{name: "gitlab", remote: "https://gitlab.com/user/repo.git", want: false},
53
		{name: "bitbucket", remote: "https://bitbucket.org/user/repo.git", want: false},
54
		{name: "generic git server", remote: "https://git.example.com/repo.git", want: false},
55
		{name: "empty url", remote: "", want: false},
56
	}
57
58
	for _, tt := range tests {
59
		t.Run(tt.name, func(t *testing.T) {
60
			is.Equal(t, IsGithubRemote(tt.remote), tt.want)
61
		})
62
	}
63
}