-
Notifications
You must be signed in to change notification settings - Fork 10
/
deploy_test.go
114 lines (98 loc) · 2.67 KB
/
deploy_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package deploy
import (
"errors"
"net/url"
"testing"
hub "github.com/github/hub/github"
)
var remotes = map[string]*url.URL{
"github+git": parseURL("ssh://[email protected]/remind101/acme-inc.git"),
"github+https": parseURL("https://github.com/remind101/acme-inc.git"),
"heroku+git": parseURL("ssh://[email protected]/acme-inc.git"),
}
func TestGitHubRepo(t *testing.T) {
tests := []struct {
remotes []hub.Remote
out string
}{
{[]hub.Remote{{Name: "origin", URL: remotes["github+git"]}}, "remind101/acme-inc"},
{[]hub.Remote{{Name: "origin", URL: remotes["github+https"]}}, "remind101/acme-inc"},
{[]hub.Remote{{Name: "origin", URL: remotes["heroku+git"]}}, ""},
}
for i, tt := range tests {
repo := GitHubRepo(tt.remotes)
if got, want := repo, tt.out; got != want {
t.Fatalf("#%d: Repo() => %s; want %s", i, got, want)
}
}
}
func TestSplitRepo(t *testing.T) {
tests := []struct {
in string
defaultOrg string
owner, repo string
err error
}{
{"remind101/acme-inc", "", "remind101", "acme-inc", nil},
{"remind101/acme-inc", "foobar", "remind101", "acme-inc", nil},
{"acme-inc", "remind101", "remind101", "acme-inc", nil},
{"acme-inc", "", "", "", errInvalidRepo},
{"", "", "", "", errInvalidRepo},
{"", "remind101", "", "", errInvalidRepo},
}
for _, tt := range tests {
owner, repo, err := SplitRepo(tt.in, tt.defaultOrg)
if err != tt.err {
t.Fatalf("err => %v; want %v", err, tt.err)
}
if got, want := owner, tt.owner; got != want {
t.Fatalf("owner => %s; want %s", got, want)
}
if got, want := repo, tt.repo; got != want {
t.Fatalf("repo => %s; want %s", got, want)
}
}
}
func TestAliasEnvironment(t *testing.T) {
tests := []struct {
env string
out string
}{
{"prod", "production"},
{"stage", "staging"},
{"production", "production"},
{"staging", "staging"},
{"badenvironment", "badenvironment"},
{"", ""},
}
for i, tt := range tests {
out := AliasEnvironment(tt.env)
if got, want := out, tt.out; got != want {
t.Errorf("#%d: AliasEnvironment => %s; want %s", i, got, want)
}
}
}
func TestRef(t *testing.T) {
tests := []struct {
ref string
headFunc func() (string, error)
out string
}{
{"master", nil, "master"},
{"", func() (string, error) { return "", errors.New("no git repo") }, "master"},
{"", func() (string, error) { return "refs/heads/test-deploy", nil }, "test-deploy"},
}
for i, tt := range tests {
out := Ref(tt.ref, tt.headFunc)
if got, want := out, tt.out; got != want {
t.Errorf("#%d: Ref => %s; want %s", i, got, want)
}
}
}
func parseURL(uri string) *url.URL {
u, err := url.Parse(uri)
if err != nil {
panic(err)
}
return u
}