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