config_test.go

  1package github
  2
  3import (
  4	"os"
  5	"testing"
  6
  7	"github.com/stretchr/testify/assert"
  8
  9	"github.com/MichaelMure/git-bug/bridge/core/auth"
 10	"github.com/MichaelMure/git-bug/entity"
 11)
 12
 13func TestSplitURL(t *testing.T) {
 14	type args struct {
 15		url string
 16	}
 17	type want struct {
 18		owner   string
 19		project string
 20		err     error
 21	}
 22	tests := []struct {
 23		name string
 24		args args
 25		want want
 26	}{
 27		{
 28			name: "default url",
 29			args: args{
 30				url: "https://github.com/MichaelMure/git-bug",
 31			},
 32			want: want{
 33				owner:   "MichaelMure",
 34				project: "git-bug",
 35				err:     nil,
 36			},
 37		},
 38		{
 39			name: "default issues url",
 40			args: args{
 41				url: "https://github.com/MichaelMure/git-bug/issues",
 42			},
 43			want: want{
 44				owner:   "MichaelMure",
 45				project: "git-bug",
 46				err:     nil,
 47			},
 48		},
 49		{
 50			name: "default url with git extension",
 51			args: args{
 52				url: "https://github.com/MichaelMure/git-bug.git",
 53			},
 54			want: want{
 55				owner:   "MichaelMure",
 56				project: "git-bug",
 57				err:     nil,
 58			},
 59		},
 60		{
 61			name: "url with git protocol",
 62			args: args{
 63				url: "git://github.com/MichaelMure/git-bug.git",
 64			},
 65			want: want{
 66				owner:   "MichaelMure",
 67				project: "git-bug",
 68				err:     nil,
 69			},
 70		},
 71		{
 72			name: "ssh url",
 73			args: args{
 74				url: "git@github.com:MichaelMure/git-bug.git",
 75			},
 76			want: want{
 77				owner:   "MichaelMure",
 78				project: "git-bug",
 79				err:     nil,
 80			},
 81		},
 82		{
 83			name: "bad url",
 84			args: args{
 85				url: "https://githb.com/MichaelMure/git-bug.git",
 86			},
 87			want: want{
 88				err: ErrBadProjectURL,
 89			},
 90		},
 91	}
 92
 93	for _, tt := range tests {
 94		t.Run(tt.name, func(t *testing.T) {
 95			owner, project, err := splitURL(tt.args.url)
 96			assert.Equal(t, tt.want.err, err)
 97			assert.Equal(t, tt.want.owner, owner)
 98			assert.Equal(t, tt.want.project, project)
 99		})
100	}
101}
102
103func TestValidateUsername(t *testing.T) {
104	if env := os.Getenv("TRAVIS"); env == "true" {
105		t.Skip("Travis environment: avoiding non authenticated requests")
106	}
107
108	type args struct {
109		username string
110	}
111	tests := []struct {
112		name string
113		args args
114		want bool
115	}{
116		{
117			name: "existing username",
118			args: args{
119				username: "MichaelMure",
120			},
121			want: true,
122		},
123		{
124			name: "existing organisation name",
125			args: args{
126				username: "ipfs",
127			},
128			want: true,
129		},
130		{
131			name: "non existing username",
132			args: args{
133				username: "cant-find-this",
134			},
135			want: false,
136		},
137	}
138
139	for _, tt := range tests {
140		t.Run(tt.name, func(t *testing.T) {
141			ok, _ := validateUsername(tt.args.username)
142			assert.Equal(t, tt.want, ok)
143		})
144	}
145}
146
147func TestValidateProject(t *testing.T) {
148	envPrivate := os.Getenv("GITHUB_TOKEN_PRIVATE")
149	if envPrivate == "" {
150		t.Skip("Env var GITHUB_TOKEN_PRIVATE missing")
151	}
152
153	envPublic := os.Getenv("GITHUB_TOKEN_PUBLIC")
154	if envPublic == "" {
155		t.Skip("Env var GITHUB_TOKEN_PUBLIC missing")
156	}
157
158	tokenPrivate := auth.NewToken(entity.UnsetId, envPrivate, target)
159	tokenPublic := auth.NewToken(entity.UnsetId, envPublic, target)
160
161	type args struct {
162		owner   string
163		project string
164		token   *auth.Token
165	}
166	tests := []struct {
167		name string
168		args args
169		want bool
170	}{
171		{
172			name: "public repository and token with scope 'public_repo'",
173			args: args{
174				project: "git-bug",
175				owner:   "MichaelMure",
176				token:   tokenPublic,
177			},
178			want: true,
179		},
180		{
181			name: "private repository and token with scope 'repo'",
182			args: args{
183				project: "git-bug-test-github-bridge",
184				owner:   "MichaelMure",
185				token:   tokenPrivate,
186			},
187			want: true,
188		},
189		{
190			name: "private repository and token with scope 'public_repo'",
191			args: args{
192				project: "git-bug-test-github-bridge",
193				owner:   "MichaelMure",
194				token:   tokenPublic,
195			},
196			want: false,
197		},
198		{
199			name: "project not existing",
200			args: args{
201				project: "cant-find-this",
202				owner:   "organisation-not-found",
203				token:   tokenPublic,
204			},
205			want: false,
206		},
207	}
208
209	for _, tt := range tests {
210		t.Run(tt.name, func(t *testing.T) {
211			ok, _ := validateProject(tt.args.owner, tt.args.project, tt.args.token)
212			assert.Equal(t, tt.want, ok)
213		})
214	}
215}