1 package git
2
3 import (
4 "os"
5 "path/filepath"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9 )
10
11 func TestRemotes(t *testing.T) {
12 tempDir := t.TempDir()
13 oldWd, _ := os.Getwd()
14 assert.NoError(t, os.Chdir(tempDir))
15 t.Cleanup(func() { _ = os.Chdir(oldWd) })
16 _, _, err := Exec("init", "--quiet")
17 assert.NoError(t, err)
18 gitDir := filepath.Join(tempDir, ".git")
19 remoteFile := filepath.Join(gitDir, "config")
20 remotes := `
21 [remote "origin"]
22 url = git@example.com:monalisa/origin.git
23 [remote "test"]
24 url = git://github.com/hubot/test.git
25 gh-resolved = other
26 [remote "upstream"]
27 url = https://github.com/monalisa/upstream.git
28 gh-resolved = base
29 [remote "github"]
30 url = git@github.com:hubot/github.git
31 `
32 f, err := os.OpenFile(remoteFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0755)
33 assert.NoError(t, err)
34 _, err = f.Write([]byte(remotes))
35 assert.NoError(t, err)
36 err = f.Close()
37 assert.NoError(t, err)
38 rs, err := Remotes()
39 assert.NoError(t, err)
40 assert.Equal(t, 4, len(rs))
41 assert.Equal(t, "upstream", rs[0].Name)
42 assert.Equal(t, "base", rs[0].Resolved)
43 assert.Equal(t, "github", rs[1].Name)
44 assert.Equal(t, "", rs[1].Resolved)
45 assert.Equal(t, "origin", rs[2].Name)
46 assert.Equal(t, "", rs[2].Resolved)
47 assert.Equal(t, "test", rs[3].Name)
48 assert.Equal(t, "other", rs[3].Resolved)
49 }
50
51 func TestParseRemotes(t *testing.T) {
52 remoteList := []string{
53 "mona\tgit@github.com:monalisa/myfork.git (fetch)",
54 "origin\thttps://github.com/monalisa/octo-cat.git (fetch)",
55 "origin\thttps://github.com/monalisa/octo-cat-push.git (push)",
56 "upstream\thttps://example.com/nowhere.git (fetch)",
57 "upstream\thttps://github.com/hubot/tools (push)",
58 "zardoz\thttps://example.com/zed.git (push)",
59 "koke\tgit://github.com/koke/grit.git (fetch)",
60 "koke\tgit://github.com/koke/grit.git (push)",
61 }
62
63 r := parseRemotes(remoteList)
64 assert.Equal(t, 5, len(r))
65
66 assert.Equal(t, "mona", r[0].Name)
67 assert.Equal(t, "ssh://git@github.com/monalisa/myfork.git", r[0].FetchURL.String())
68 assert.Nil(t, r[0].PushURL)
69 assert.Equal(t, "github.com", r[0].Host)
70 assert.Equal(t, "monalisa", r[0].Owner)
71 assert.Equal(t, "myfork", r[0].Repo)
72
73 assert.Equal(t, "origin", r[1].Name)
74 assert.Equal(t, "/monalisa/octo-cat.git", r[1].FetchURL.Path)
75 assert.Equal(t, "/monalisa/octo-cat-push.git", r[1].PushURL.Path)
76 assert.Equal(t, "github.com", r[1].Host)
77 assert.Equal(t, "monalisa", r[1].Owner)
78 assert.Equal(t, "octo-cat", r[1].Repo)
79
80 assert.Equal(t, "upstream", r[2].Name)
81 assert.Equal(t, "example.com", r[2].FetchURL.Host)
82 assert.Equal(t, "github.com", r[2].PushURL.Host)
83 assert.Equal(t, "github.com", r[2].Host)
84 assert.Equal(t, "hubot", r[2].Owner)
85 assert.Equal(t, "tools", r[2].Repo)
86
87 assert.Equal(t, "zardoz", r[3].Name)
88 assert.Nil(t, r[3].FetchURL)
89 assert.Equal(t, "https://example.com/zed.git", r[3].PushURL.String())
90 assert.Equal(t, "", r[3].Host)
91 assert.Equal(t, "", r[3].Owner)
92 assert.Equal(t, "", r[3].Repo)
93
94 assert.Equal(t, "koke", r[4].Name)
95 assert.Equal(t, "/koke/grit.git", r[4].FetchURL.Path)
96 assert.Equal(t, "/koke/grit.git", r[4].PushURL.Path)
97 assert.Equal(t, "github.com", r[4].Host)
98 assert.Equal(t, "koke", r[4].Owner)
99 assert.Equal(t, "grit", r[4].Repo)
100 }
101
View as plain text