zenflow 0.8.11 → 0.8.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,88 +19,6 @@ describe Zenflow::CLI do
19
19
  end
20
20
  end
21
21
 
22
- describe "#set_up_github" do
23
- context "when a github user is already saved" do
24
- before do
25
- Zenflow::Github.should_receive(:user).and_return('user')
26
- end
27
-
28
- context "and the user decides to set a new one" do
29
- before do
30
- Zenflow.should_receive(:Ask).and_return('n')
31
- end
32
-
33
- it "authorizes with Github" do
34
- Zenflow::Github.should_receive(:set_user)
35
- subject.set_up_github
36
- end
37
- end
38
-
39
- context "and the user decides not to set a new one" do
40
- before do
41
- Zenflow.should_receive(:Ask).and_return('y')
42
- end
43
-
44
- it "does not authorize with Github" do
45
- Zenflow::Github.should_not_receive(:set_user)
46
- subject.set_up_github
47
- end
48
- end
49
- end
50
-
51
- context "when a zenflow_token is not already saved" do
52
- before do
53
- Zenflow::Github.should_receive(:user).and_return(nil)
54
- end
55
-
56
- it "authorizes with Github" do
57
- Zenflow::Github.should_receive(:set_user)
58
- subject.set_up_github
59
- end
60
- end
61
- end
62
-
63
- describe "#authorize_github" do
64
- context "when a zenflow_token is already saved" do
65
- before do
66
- Zenflow::Github.should_receive(:zenflow_token).and_return('super secret token')
67
- end
68
-
69
- context "and the user decides to set a new one" do
70
- before do
71
- Zenflow.should_receive(:Ask).and_return('y')
72
- end
73
-
74
- it "authorizes with Github" do
75
- Zenflow::Github.should_receive(:authorize)
76
- subject.authorize_github
77
- end
78
- end
79
-
80
- context "and the user decides not to set a new one" do
81
- before do
82
- Zenflow.should_receive(:Ask).and_return('n')
83
- end
84
-
85
- it "does not authorize with Github" do
86
- Zenflow::Github.should_not_receive(:authorize)
87
- subject.authorize_github
88
- end
89
- end
90
- end
91
-
92
- context "when a zenflow_token is not already saved" do
93
- before do
94
- Zenflow::Github.should_receive(:zenflow_token).and_return(nil)
95
- end
96
-
97
- it "authorizes with Github" do
98
- Zenflow::Github.should_receive(:authorize)
99
- subject.authorize_github
100
- end
101
- end
102
- end
103
-
104
22
  describe "#already_configured" do
105
23
  let(:question) {['There is an existing config file. Overwrite it?', {:options => ["y", "N"], :default => "n"}]}
106
24
  before do
@@ -272,17 +190,26 @@ describe Zenflow::CLI do
272
190
  end
273
191
 
274
192
  describe "#init" do
193
+ let(:current){Zenflow::Github.new('current')}
194
+
195
+ before do
196
+ stub_const("Zenflow::Github::CURRENT", current)
197
+ end
198
+
275
199
  context "when in a project that doesn't belong to the default hub" do
200
+ before do
201
+ current.should_receive(:is_default_hub?).and_return(false)
202
+ end
203
+
276
204
  context "when zenflow has not been configured" do
277
205
  before do
278
206
  Zenflow::Config.should_receive(:configured?).and_return(false)
279
- Zenflow::Repo.should_receive(:is_default_hub?).and_return(false)
280
207
  end
281
208
 
282
209
  it 'configures zenflow' do
283
210
  subject.should_not_receive(:already_configured)
284
- Zenflow::Hubs.should_receive(:config)
285
- Zenflow::Hubs.should_receive(:authorize)
211
+ current.should_receive(:config)
212
+ current.should_receive(:authorize)
286
213
  subject.should_receive(:configure_project)
287
214
  subject.should_receive(:configure_branches)
288
215
  subject.should_receive(:configure_merge_strategy)
@@ -298,13 +225,13 @@ describe Zenflow::CLI do
298
225
  context "when zenflow has not been configured" do
299
226
  before do
300
227
  Zenflow::Config.should_receive(:configured?).and_return(false)
301
- Zenflow::Repo.should_receive(:is_default_hub?).and_return(true)
228
+ current.should_receive(:is_default_hub?).and_return(true)
302
229
  end
303
230
 
304
231
  it 'configures zenflow' do
305
232
  subject.should_not_receive(:already_configured)
306
- subject.should_receive(:set_up_github)
307
- subject.should_receive(:authorize_github)
233
+ current.should_receive(:set_user)
234
+ current.should_receive(:authorize)
308
235
  subject.should_receive(:configure_project)
309
236
  subject.should_receive(:configure_branches)
310
237
  subject.should_receive(:configure_merge_strategy)
@@ -323,13 +250,13 @@ describe Zenflow::CLI do
323
250
 
324
251
  context 'and it is forced to initialize' do
325
252
  before do
326
- Zenflow::Repo.should_receive(:is_default_hub?).and_return(true)
253
+ current.should_receive(:is_default_hub?).and_return(true)
327
254
  end
328
255
 
329
256
  it 'configures zenflow' do
330
257
  subject.should_not_receive(:already_configured)
331
- subject.should_receive(:set_up_github)
332
- subject.should_receive(:authorize_github)
258
+ current.should_receive(:set_user)
259
+ current.should_receive(:authorize)
333
260
  subject.should_receive(:configure_project)
334
261
  subject.should_receive(:configure_branches)
335
262
  subject.should_receive(:configure_merge_strategy)
@@ -350,8 +277,8 @@ describe Zenflow::CLI do
350
277
 
351
278
  it 'calls already_configured' do
352
279
  subject.should_receive(:already_configured).and_call_original
353
- subject.should_not_receive(:authorize_github)
354
- subject.should_not_receive(:configure_project)
280
+ current.should_not_receive(:set_user)
281
+ current.should_not_receive(:authorize)
355
282
  subject.should_not_receive(:configure_branches)
356
283
  subject.should_not_receive(:configure_merge_strategy)
357
284
  subject.should_not_receive(:configure_remotes)
@@ -0,0 +1,202 @@
1
+ require 'spec_helper'
2
+
3
+ describe Zenflow::Admin do
4
+ let(:admin) { Zenflow::Admin.new }
5
+
6
+ describe '.list' do
7
+ it 'lists recognized hubs in git config' do
8
+ Zenflow::Shell.should_receive(:run).with("git config --get-regexp zenflow\.hub\..*", silent: true).and_return(
9
+ <<EOS
10
+ zenflow.hub.hub.1.api.base.url api_base_url
11
+ zenflow.hub.yet.another.hub.github.user github_user
12
+ zenflow.hub.hub.1.token token
13
+ zenflow.hub.my-hub.token token
14
+ zenflow.hub.one.more.hub.user.agent.base user_agent_base
15
+ zenflow.hub.bad.token.hub.goobers user_agent_base
16
+ EOS
17
+ )
18
+ Zenflow.should_receive(:Log).with("Recogized hubs")
19
+ Terminal::Table.should_receive(:new).with(
20
+ headings: ["Hub"],
21
+ rows: [
22
+ ["github.com [default] [current]"],
23
+ ["hub.1"],
24
+ ["my-hub"],
25
+ ["one.more.hub"],
26
+ ["yet.another.hub"]
27
+ ]
28
+ ).and_return("log-data")
29
+ Zenflow.should_receive(:Log).with("log-data", indent: false, arrows: false, color: false)
30
+ admin.list
31
+ end
32
+ end
33
+
34
+ describe '.current' do
35
+ it 'logs the hubs of the current project' do
36
+ Zenflow.should_receive(:Log).with("This project's hub is github.com [default] [current]")
37
+ admin.current
38
+ end
39
+ end
40
+
41
+ describe '.describe' do
42
+ it 'displays config parameters for the hub' do
43
+ hub = Zenflow::Github.new('my-hub')
44
+ admin.should_receive(:resolve_hub).with('my-hub').and_return(hub)
45
+ admin.should_receive(:hub_label).with('my-hub').and_return('my-hub')
46
+ Zenflow.should_receive(:Log).with("Configuration details for hub my-hub")
47
+ hub.should_receive(:describe).and_return([
48
+ ["Parameter 1", "Github Config Key 1", "Github Conifg Value 1", "Value 1"],
49
+ ["Parameter 2", "Github Config Key 2", "Github Conifg Value 2", "Value 2"],
50
+ ["Parameter 3", "Github Config Key 3", "Github Conifg Value 3", "Value 3"]
51
+ ])
52
+ Terminal::Table.should_receive(:new).with(
53
+ headings: ["Parameter", "Github Config Key", "Github Config Value", "Value (with system defaults)"],
54
+ rows: [
55
+ ["Parameter 1", "Github Config Key 1", "Github Conifg Value 1", "Value 1"],
56
+ ["Parameter 2", "Github Config Key 2", "Github Conifg Value 2", "Value 2"],
57
+ ["Parameter 3", "Github Config Key 3", "Github Conifg Value 3", "Value 3"]
58
+ ]
59
+ ).and_return("log-data")
60
+ Zenflow.should_receive(:Log).with("log-data", {:indent=>false, :arrows=>false, :color=>false})
61
+ admin.describe('my-hub')
62
+ end
63
+ end
64
+
65
+ describe '.config' do
66
+ context 'when called with a hub parameter' do
67
+ it 'calls the individual parameter config methods' do
68
+ myhub = Zenflow::Github.new('my-hub')
69
+ Zenflow::Github.should_receive(:new).with('my-hub').and_return(myhub)
70
+ admin.should_receive(:hub_label).with('my-hub').and_return('my-hub')
71
+ Zenflow.should_receive(:Log).with("Configuring my-hub")
72
+ myhub.should_receive(:config)
73
+ admin.config('my-hub')
74
+ end
75
+ end
76
+
77
+ context 'when called with no hub parameter' do
78
+ it 'calls the individual parameter config methods' do
79
+ admin.should_receive(:hub_label).with('github.com').and_return('github.com')
80
+ Zenflow.should_receive(:Log).with("Configuring github.com")
81
+ Zenflow::Github::CURRENT.should_receive(:config)
82
+ admin.config
83
+ end
84
+ end
85
+ end
86
+
87
+ describe '.authorize' do
88
+ context 'when called with a hub parameter' do
89
+ it 'call the hubs authorize method' do
90
+ myhub = Zenflow::Github.new('my-hub')
91
+ Zenflow::Github.should_receive(:new).with('my-hub').and_return(myhub)
92
+ admin.should_receive(:hub_label).with('my-hub').and_return('my-hub')
93
+ Zenflow.should_receive(:Log).with("Authorizing my-hub")
94
+ myhub.should_receive(:authorize)
95
+ admin.authorize('my-hub')
96
+ end
97
+ end
98
+
99
+ context 'when called with no hub parameter' do
100
+ it 'call the current hubs authorize method' do
101
+ admin.should_receive(:hub_label).with('github.com').and_return('github.com')
102
+ Zenflow.should_receive(:Log).with("Authorizing github.com")
103
+ Zenflow::Github::CURRENT.should_receive(:authorize)
104
+ admin.authorize
105
+ end
106
+ end
107
+ end
108
+
109
+ describe '.resolve_hub' do
110
+ context 'hub is not nil' do
111
+ it 'resolves to the supplied hub' do
112
+ expect(admin.resolve_hub('my-hub').hub).to eq('my-hub')
113
+ end
114
+ end
115
+
116
+ context 'hub is nil' do
117
+ it 'resolves to the CURRENT hub' do
118
+ expect(admin.resolve_hub).to eq(Zenflow::Github::CURRENT)
119
+ end
120
+ end
121
+ end
122
+
123
+ describe '.hub_label' do
124
+ context 'hub is default hub' do
125
+ context 'hub is current hub' do
126
+ before(:each){
127
+ stub_const("Zenflow::Github::CURRENT", Zenflow::Github.new(Zenflow::Github::DEFAULT_HUB))
128
+ }
129
+
130
+ it 'returns the expected label' do
131
+ expect(admin.hub_label(Zenflow::Github::DEFAULT_HUB)).to eq("#{Zenflow::Github::DEFAULT_HUB} [default] [current]")
132
+ end
133
+ end
134
+
135
+ context 'hub is not current hub' do
136
+ before(:each){
137
+ stub_const("Zenflow::Github::CURRENT", Zenflow::Github.new('current-hub'))
138
+ }
139
+
140
+ it 'returns the expected label' do
141
+ expect(admin.hub_label(Zenflow::Github::DEFAULT_HUB)).to eq("#{Zenflow::Github::DEFAULT_HUB} [default]")
142
+ end
143
+ end
144
+ end
145
+
146
+ context 'hub is not default hub' do
147
+ before(:each){
148
+ stub_const("Zenflow::Github::CURRENT", Zenflow::Github.new('current-hub'))
149
+ }
150
+
151
+ context 'hub is current hub' do
152
+ it 'returns the expected label' do
153
+ expect(admin.hub_label('current-hub')).to eq('current-hub [current]')
154
+ end
155
+ end
156
+
157
+ context 'hub is not current hub' do
158
+ it 'returns the expected label' do
159
+ expect(admin.hub_label('not-current-hub')).to eq('not-current-hub')
160
+ end
161
+ end
162
+ end
163
+ end
164
+
165
+ describe '.default_hub_tag' do
166
+ context 'hub is default hub' do
167
+ it 'returns the expected tag' do
168
+ expect(admin.default_hub_tag(Zenflow::Github::DEFAULT_HUB)).to eq(' [default]')
169
+ end
170
+ end
171
+
172
+ context 'hub is not default hub' do
173
+ it 'returns the expected tag' do
174
+ expect(admin.default_hub_tag('not-default-hub')).to eq('')
175
+ end
176
+ end
177
+ end
178
+
179
+ describe '.current_hub_tag' do
180
+ before(:each){
181
+ stub_const("Zenflow::Github::CURRENT", Zenflow::Github.new('current-hub'))
182
+ }
183
+
184
+ context 'hub is current hub' do
185
+ it 'returns the expected tag' do
186
+ expect(admin.current_hub_tag('current-hub')).to eq(' [current]')
187
+ end
188
+ end
189
+
190
+ context 'hub is not current hub' do
191
+ it 'returns the expected tag' do
192
+ expect(admin.current_hub_tag('not-current-hub')).to eq('')
193
+ end
194
+ end
195
+ end
196
+
197
+ describe '.config_key_regex' do
198
+ it 'returns the expected regex' do
199
+ expect(admin.config_keys_regex).to eq('(?:api\\.base\\.url|github\\.user|token|user\\.agent\\.base)')
200
+ end
201
+ end
202
+ end
@@ -3,260 +3,469 @@ require 'spec_helper'
3
3
  describe Zenflow::Github do
4
4
  describe '.api_base_url' do
5
5
  context 'when the value is present' do
6
+ let(:hub) { Zenflow::Github.new('test-hub') }
7
+
6
8
  before(:each){
7
- Zenflow::Github.should_receive(:get_config_for_hub).with('test-hub', 'api.base.url').and_return("api-base-url")
9
+ hub.should_receive(:get_config).with('api.base.url').and_return("api-base-url")
8
10
  }
9
11
 
10
- context 'and default is true' do
12
+ context 'and use_default_when_value_is_nil is not specified' do
13
+ it 'returns the expected value' do
14
+ expect(hub.api_base_url).to eq("api-base-url")
15
+ end
16
+ end
17
+
18
+ context 'and use_default_when_value_is_nil is true' do
11
19
  it 'returns the expected value' do
12
- expect(Zenflow::Github.api_base_url('test-hub', true)).to eq("api-base-url")
20
+ expect(hub.api_base_url(true)).to eq("api-base-url")
13
21
  end
14
22
  end
15
23
 
16
- context 'and default is false' do
24
+ context 'and use_default_when_value_is_nil is false' do
17
25
  it 'returns the expected value' do
18
- expect(Zenflow::Github.api_base_url('test-hub', false)).to eq("api-base-url")
26
+ expect(hub.api_base_url(false)).to eq("api-base-url")
19
27
  end
20
28
  end
21
29
  end
22
30
 
23
31
  context 'when the value is absent' do
32
+ let(:hub) { Zenflow::Github.new('test-hub') }
33
+
24
34
  before(:each){
25
- Zenflow::Github.should_receive(:get_config_for_hub).with('test-hub', 'api.base.url').and_return(nil)
35
+ hub.should_receive(:get_config).with('api.base.url').and_return(nil)
26
36
  }
27
37
 
28
- context 'and default is true' do
38
+ context 'and use_default_when_value_is_nil is not specified' do
39
+ it 'returns the expected value' do
40
+ expect(hub.api_base_url).to eq("https://api.github.com")
41
+ end
42
+ end
43
+
44
+ context 'and use_default_when_value_is_nil is true' do
29
45
  it 'returns the expected value' do
30
- expect(Zenflow::Github.api_base_url('test-hub', true)).to eq("https://api.github.com")
46
+ expect(hub.api_base_url(true)).to eq("https://api.github.com")
31
47
  end
32
48
  end
33
49
 
34
- context 'and default is false' do
50
+ context 'and use_default_when_value_is_nil is false' do
35
51
  it 'returns the expected value' do
36
- expect(Zenflow::Github.api_base_url('test-hub', false)).to eq(nil)
52
+ expect(hub.api_base_url(false)).to eq(nil)
37
53
  end
38
54
  end
39
55
  end
40
56
  end
41
57
 
42
58
  describe '.set_api_base_url' do
43
- let(:api_base_url){'api-base-url'}
44
59
 
45
60
  it 'asks for the API base URL and sets it to zenflow.api.base.url' do
46
- Zenflow.should_receive(:Ask).and_return(api_base_url)
47
- Zenflow::Github.should_receive(:set_config_for_hub).with(nil, 'api.base.url', api_base_url)
48
- Zenflow::Github.set_api_base_url
61
+ end
62
+ end
63
+
64
+ describe '.set_api_base_url' do
65
+ let(:hub){Zenflow::Github.new('test-hub')}
66
+ let(:api_base_url){'api-base-url'}
67
+
68
+ context 'when a github api base url is already saved' do
69
+ before do
70
+ hub.should_receive(:api_base_url).twice.and_return(api_base_url)
71
+ end
72
+
73
+ context 'and the user decides to set a new one' do
74
+ before do
75
+ Zenflow.should_receive(:Ask).and_return('n')
76
+ end
77
+
78
+ it 'asks for an api base url' do
79
+ Zenflow.should_receive(:Ask).and_return(api_base_url)
80
+ hub.should_receive(:set_config).with('api.base.url', api_base_url)
81
+ hub.set_api_base_url
82
+ end
83
+ end
84
+
85
+ context 'and the user decides not to set a new one' do
86
+ before do
87
+ Zenflow.should_receive(:Ask).and_return('y')
88
+ end
89
+
90
+ it 'does not ask for an api base url' do
91
+ Zenflow.should_not_receive(:Ask)
92
+ hub.should_not_receive(:set_config)
93
+ hub.set_api_base_url
94
+ end
95
+ end
96
+ end
97
+
98
+ context 'when an api base url is not already saved' do
99
+ before do
100
+ hub.should_receive(:api_base_url).and_return(nil)
101
+ end
102
+
103
+ it 'asks for an api base url' do
104
+ Zenflow.should_receive(:Ask).and_return(api_base_url)
105
+ hub.should_receive(:set_config).with('api.base.url', api_base_url)
106
+ hub.set_api_base_url
107
+ end
49
108
  end
50
109
  end
51
110
 
52
111
  describe '.user' do
112
+ let(:hub){Zenflow::Github.new('hub')}
53
113
  let(:user){'github-user'}
54
114
 
55
115
  before(:each){
56
- Zenflow::Github.should_receive(:get_config_for_hub).with('test-hub', 'github.user').and_return(user)
116
+ hub.should_receive(:get_config).with('github.user').and_return(user)
57
117
  }
58
118
 
59
119
  it "returns the user" do
60
- expect(Zenflow::Github.user('test-hub')).to eq(user)
120
+ expect(hub.user).to eq(user)
61
121
  end
62
122
  end
63
123
 
64
124
  describe '.set_user' do
125
+ let(:hub){Zenflow::Github.new('test-hub')}
65
126
  let(:user){'github-user'}
66
127
 
67
- it 'asks for the user name and sets it to github.user' do
68
- Zenflow.should_receive(:Ask).and_return(user)
69
- Zenflow::Github.should_receive(:set_config_for_hub).with(nil, 'github.user', user)
70
- Zenflow::Github.set_user
128
+ context 'when a github user is already saved' do
129
+ before do
130
+ hub.should_receive(:user).twice.and_return(user)
131
+ end
132
+
133
+ context 'and the user decides to set a new one' do
134
+ before do
135
+ Zenflow.should_receive(:Ask).and_return('n')
136
+ end
137
+
138
+ it 'asks for a user' do
139
+ Zenflow.should_receive(:Ask).and_return(user)
140
+ hub.should_receive(:set_config).with('github.user', user)
141
+ hub.set_user
142
+ end
143
+ end
144
+
145
+ context 'and the user decides not to set a new one' do
146
+ before do
147
+ Zenflow.should_receive(:Ask).and_return('y')
148
+ end
149
+
150
+ it 'does not ask for a user' do
151
+ Zenflow.should_not_receive(:Ask)
152
+ hub.should_not_receive(:set_config)
153
+ hub.set_user
154
+ end
155
+ end
156
+ end
157
+
158
+ context 'when a user is not already saved' do
159
+ before do
160
+ hub.should_receive(:user).and_return(nil)
161
+ end
162
+
163
+ it 'asks for a user' do
164
+ Zenflow.should_receive(:Ask).and_return(user)
165
+ hub.should_receive(:set_config).with('github.user', user)
166
+ hub.set_user
167
+ end
71
168
  end
72
169
  end
73
170
 
74
171
  describe '.authorize' do
75
- context "when authorization fails" do
172
+ let(:hub){Zenflow::Github.new('my-hub')}
173
+
174
+ context 'when a zenflow_token is already saved' do
76
175
  before do
77
- Zenflow.should_receive("Log").with("Authorizing with GitHub (adamkittelson@github.com)... Enter your GitHub password.")
78
- Zenflow::Github.should_receive(:user).twice.and_return('adamkittelson')
79
- Zenflow::Github.should_receive(:api_base_url).and_return('https://api.base.url')
80
- Zenflow::Shell.should_receive(:run).with(%{curl -u "adamkittelson" https://api.base.url/authorizations -d '{"scopes":["repo"], "note":"Zenflow"}' --silent}, :silent => true).and_return('{"message": "failed to authorize, bummer"}')
176
+ hub.should_receive(:zenflow_token).and_return('super secret token')
177
+ end
178
+
179
+ context 'and the user decides to set a new one' do
180
+ before do
181
+ Zenflow.should_receive(:Ask).with("You already have a token from GitHub. Do you want to set a new one?", :options => ["y", "N"], :default => "n").and_return('y')
182
+ end
183
+
184
+ context 'and authorization succeeds' do
185
+ before do
186
+ Zenflow.should_receive("Log").with("Authorizing with GitHub (adamkittelson@my-hub)... Enter your GitHub password.")
187
+ hub.should_receive(:user).twice.and_return('adamkittelson')
188
+ hub.should_receive(:api_base_url).and_return('https://api.base.url')
189
+ Zenflow::Shell.should_receive(:run).with(%{curl -u "adamkittelson" https://api.base.url/authorizations -d '{"scopes":["repo"], "note":"Zenflow"}' --silent}, :silent => true).and_return('{"token": "super secure token"}')
190
+ end
191
+
192
+ it 'authorizes with Github' do
193
+ hub.should_receive(:set_config).with('token', "super secure token")
194
+ Zenflow.should_receive("Log").with("Authorized!")
195
+ hub.authorize
196
+ end
197
+ end
198
+
199
+ context 'and authorization fails' do
200
+ before do
201
+ Zenflow.should_receive("Log").with("Authorizing with GitHub (adamkittelson@my-hub)... Enter your GitHub password.")
202
+ hub.should_receive(:user).twice.and_return('adamkittelson')
203
+ hub.should_receive(:api_base_url).and_return('https://api.base.url')
204
+ Zenflow::Shell.should_receive(:run).with(%{curl -u "adamkittelson" https://api.base.url/authorizations -d '{"scopes":["repo"], "note":"Zenflow"}' --silent}, :silent => true).and_return('{"message": "failed to authorize, bummer"}')
205
+ end
206
+
207
+ it 'authorizes with Github' do
208
+ Zenflow.should_receive("Log").with("Something went wrong. Error from GitHub was: failed to authorize, bummer")
209
+ hub.authorize
210
+ end
211
+ end
81
212
  end
82
213
 
83
- it "logs that something went wrong" do
84
- Zenflow.should_receive("Log").with("Something went wrong. Error from GitHub was: failed to authorize, bummer")
85
- Zenflow::Github.authorize
214
+ context 'and the user decides not to set a new one' do
215
+ before do
216
+ Zenflow.should_receive(:Ask).and_return('n')
217
+ end
218
+
219
+ it 'does not authorize with Github' do
220
+ hub.authorize
221
+ end
86
222
  end
87
223
  end
88
224
 
89
- context "when authorization succeeds" do
225
+ context 'when a zenflow_token is not already saved' do
90
226
  before do
91
- Zenflow.should_receive("Log").with("Authorizing with GitHub (adamkittelson@github.com)... Enter your GitHub password.")
92
- Zenflow::Github.should_receive(:user).twice.and_return('adamkittelson')
93
- Zenflow::Github.should_receive(:api_base_url).and_return('https://api.base.url')
94
- Zenflow::Shell.should_receive(:run).with(%{curl -u "adamkittelson" https://api.base.url/authorizations -d '{"scopes":["repo"], "note":"Zenflow"}' --silent}, :silent => true).and_return('{"token": "super secure token"}')
227
+ hub.should_receive(:zenflow_token).and_return(nil)
95
228
  end
96
229
 
97
- it "adds the token to git config and logs a happy message of success" do
98
- Zenflow::Github.should_receive(:set_config_for_hub).with(nil, 'token', "super secure token")
99
- Zenflow.should_receive("Log").with("Authorized!")
100
- Zenflow::Github.authorize
230
+ context 'and authorization succeeds' do
231
+ before do
232
+ Zenflow.should_receive("Log").with("Authorizing with GitHub (adamkittelson@my-hub)... Enter your GitHub password.")
233
+ hub.should_receive(:user).twice.and_return('adamkittelson')
234
+ hub.should_receive(:api_base_url).and_return('https://api.base.url')
235
+ Zenflow::Shell.should_receive(:run).with(%{curl -u "adamkittelson" https://api.base.url/authorizations -d '{"scopes":["repo"], "note":"Zenflow"}' --silent}, :silent => true).and_return('{"token": "super secure token"}')
236
+ end
237
+
238
+ it 'authorizes with Github' do
239
+ hub.should_receive(:set_config).with('token', "super secure token")
240
+ Zenflow.should_receive("Log").with("Authorized!")
241
+ hub.authorize
242
+ end
101
243
  end
102
- end
103
244
 
245
+ context 'and authorization fails' do
246
+ before do
247
+ Zenflow.should_receive("Log").with("Authorizing with GitHub (adamkittelson@my-hub)... Enter your GitHub password.")
248
+ hub.should_receive(:user).twice.and_return('adamkittelson')
249
+ hub.should_receive(:api_base_url).and_return('https://api.base.url')
250
+ Zenflow::Shell.should_receive(:run).with(%{curl -u "adamkittelson" https://api.base.url/authorizations -d '{"scopes":["repo"], "note":"Zenflow"}' --silent}, :silent => true).and_return('{"message": "failed to authorize, bummer"}')
251
+ end
252
+
253
+ it 'does not authorize with Github' do
254
+ Zenflow.should_receive("Log").with("Something went wrong. Error from GitHub was: failed to authorize, bummer")
255
+ hub.authorize
256
+ end
257
+ end
258
+ end
104
259
  end
105
260
 
106
261
  describe '.user_agent_base' do
262
+ let(:hub){Zenflow::Github.new('hub')}
263
+
107
264
  context 'when the value is present' do
108
265
  before(:each){
109
- Zenflow::Github.should_receive(:get_config_for_hub).with('test-hub', 'user.agent.base').and_return("user-agent-base")
266
+ hub.should_receive(:get_config).with('user.agent.base').and_return("user-agent-base")
110
267
  }
111
268
 
112
- context 'and default is true' do
269
+ context 'and use_default_when_value_is_nil is not specified' do
113
270
  it 'returns the expected value' do
114
- expect(Zenflow::Github.user_agent_base('test-hub', true)).to eq("user-agent-base")
271
+ expect(hub.user_agent_base).to eq("user-agent-base")
115
272
  end
116
273
  end
117
274
 
118
- context 'and default is false' do
275
+ context 'and use_default_when_value_is_nil is true' do
119
276
  it 'returns the expected value' do
120
- expect(Zenflow::Github.user_agent_base('test-hub', false)).to eq("user-agent-base")
277
+ expect(hub.user_agent_base(true)).to eq("user-agent-base")
278
+ end
279
+ end
280
+
281
+ context 'and use_default_when_value_is_nil is false' do
282
+ it 'returns the expected value' do
283
+ expect(hub.user_agent_base(false)).to eq("user-agent-base")
121
284
  end
122
285
  end
123
286
  end
124
287
 
125
288
  context 'when the value is absent' do
126
289
  before(:each){
127
- Zenflow::Github.should_receive(:get_config_for_hub).with('test-hub', 'user.agent.base').and_return(nil)
290
+ hub.should_receive(:get_config).with('user.agent.base').and_return(nil)
128
291
  }
129
292
 
130
- context 'and default is true' do
293
+ context 'and use_default_when_value_is_nil is not specified' do
294
+ it 'returns the expected value' do
295
+ expect(hub.user_agent_base).to eq("Zencoder")
296
+ end
297
+ end
298
+
299
+ context 'and use_default_when_value_is_nil is true' do
131
300
  it 'returns the expected value' do
132
- expect(Zenflow::Github.user_agent_base('test-hub', true)).to eq("Zencoder")
301
+ expect(hub.user_agent_base(true)).to eq("Zencoder")
133
302
  end
134
303
  end
135
304
 
136
- context 'and default is false' do
305
+ context 'and use_default_when_value_is_nil is false' do
137
306
  it 'returns the expected value' do
138
- expect(Zenflow::Github.user_agent_base('test-hub', false)).to eq(nil)
307
+ expect(hub.user_agent_base(false)).to eq(nil)
139
308
  end
140
309
  end
141
310
  end
142
311
  end
143
312
 
144
313
  describe '.set_user_agent_base' do
314
+ let(:hub){Zenflow::Github.new('test-hub')}
145
315
  let(:user_agent_base){'user-agent-base'}
146
316
 
147
- it 'asks for the User-Agent base string and sets it to zenflow.user.agent.base' do
148
- Zenflow.should_receive(:Ask).and_return(user_agent_base)
149
- Zenflow::Github.should_receive(:set_config_for_hub).with(nil, 'user.agent.base', user_agent_base)
150
- Zenflow::Github.set_user_agent_base
151
- end
152
- end
317
+ context 'when a github user agent base is already saved' do
318
+ before do
319
+ hub.should_receive(:user_agent_base).twice.and_return(user_agent_base)
320
+ end
153
321
 
154
- describe '.resolve_hub' do
155
- context 'when supplied as argument' do
156
- it 'returns the hub provided' do
157
- expect(Zenflow::Github.resolve_hub('test-hub')).to eq 'test-hub'
158
- end
159
- end
322
+ context 'and the user decides to set a new one' do
323
+ before do
324
+ Zenflow.should_receive(:Ask).and_return('n')
325
+ end
160
326
 
161
- context 'when argument is nil' do
162
- context 'and there is a repo hub' do
163
- before(:each){
164
- Zenflow::Repo.should_receive(:hub).and_return('repo-hub')
165
- }
327
+ it 'asks for a user agent base' do
328
+ Zenflow.should_receive(:Ask).and_return(user_agent_base)
329
+ hub.should_receive(:set_config).with('user.agent.base', user_agent_base)
330
+ hub.set_user_agent_base
331
+ end
332
+ end
166
333
 
167
- it 'returns the repo hub' do
168
- expect(Zenflow::Github.resolve_hub(nil)).to eq 'repo-hub'
169
- end
334
+ context 'and the user decides not to set a new one' do
335
+ before do
336
+ Zenflow.should_receive(:Ask).and_return('y')
337
+ end
338
+
339
+ it 'does not ask for a user agent base' do
340
+ Zenflow.should_not_receive(:Ask)
341
+ hub.should_not_receive(:set_config)
342
+ hub.set_user_agent_base
343
+ end
170
344
  end
345
+ end
171
346
 
172
- context 'and the repo hub is nil' do
173
- before(:each){
174
- Zenflow::Repo.should_receive(:hub).and_return(nil)
175
- }
347
+ context 'when a user agent base is not already saved' do
348
+ before do
349
+ hub.should_receive(:user_agent_base).and_return(nil)
350
+ end
176
351
 
177
- it 'returns the default hub' do
178
- expect(Zenflow::Github.resolve_hub(nil)).to eq Zenflow::Github::DEFAULT_HUB
179
- end
352
+ it 'asks for a user agent base' do
353
+ Zenflow.should_receive(:Ask).and_return(user_agent_base)
354
+ hub.should_receive(:set_config).with('user.agent.base', user_agent_base)
355
+ hub.set_user_agent_base
180
356
  end
181
357
  end
182
358
  end
183
359
 
184
- describe '.construct_key_for_hub' do
360
+ describe '.current' do
361
+ context 'when the current repo is nil' do
362
+ before(:each){
363
+ Zenflow::Repo.should_receive(:hub).and_return(nil)
364
+ }
365
+
366
+ it 'returns the default hub' do
367
+ expect(Zenflow::Github.current.hub).to eq 'github.com'
368
+ end
369
+ end
370
+
371
+ context 'when the current repo is not nil' do
372
+ before(:each){
373
+ Zenflow::Repo.should_receive(:hub).and_return('current.repo.hub')
374
+ }
375
+
376
+ it 'returns the current repo\'s hub' do
377
+ expect(Zenflow::Github.current.hub).to eq 'current.repo.hub'
378
+ end
379
+ end
380
+ end
381
+
382
+ describe '.parameter_key_for_hub' do
383
+
185
384
  context 'when hub is the default hub' do
385
+ let(:hub){Zenflow::Github.new('github.com')}
386
+
186
387
  context 'and key is the api url base key' do
187
388
  it 'prepends \'zenflow\' as a prefix' do
188
- expect(Zenflow::Github.construct_key_for_hub('github.com', 'api.base.url')).to eq("zenflow.api.base.url")
389
+ expect(hub.parameter_key_for_hub('api.base.url')).to eq("zenflow.api.base.url")
189
390
  end
190
391
  end
191
392
 
192
393
  context 'and key is the user key' do
193
394
  it 'does not prepend a prefix' do
194
- expect(Zenflow::Github.construct_key_for_hub('github.com', 'github.user')).to eq('github.user')
395
+ expect(hub.parameter_key_for_hub('github.user')).to eq('github.user')
195
396
  end
196
397
  end
197
398
 
198
399
  context 'and key is the zenflow token key' do
199
400
  it 'prepends \'zenflow\' as a prefix' do
200
- expect(Zenflow::Github.construct_key_for_hub('github.com', 'token')).to eq("zenflow.token")
401
+ expect(hub.parameter_key_for_hub('token')).to eq("zenflow.token")
201
402
  end
202
403
  end
203
404
 
204
405
  context 'and key is the user agent base key' do
205
406
  it 'prepends \'zenflow\' as a prefix' do
206
- expect(Zenflow::Github.construct_key_for_hub('github.com', 'user.agent.base')).to eq("zenflow.user.agent.base")
407
+ expect(hub.parameter_key_for_hub('user.agent.base')).to eq("zenflow.user.agent.base")
207
408
  end
208
409
  end
209
410
  end
210
411
 
211
412
  context 'hub is not the default hub' do
413
+ let(:hub){Zenflow::Github.new('my-hub')}
414
+
212
415
  context 'and key is the api url base key' do
213
416
  it 'prepends a hub-specific prefix' do
214
- expect(Zenflow::Github.construct_key_for_hub('my-hub', 'api.base.url')).to eq("zenflow.hub.my-hub.api.base.url")
417
+ expect(hub.parameter_key_for_hub('api.base.url')).to eq("zenflow.hub.my-hub.api.base.url")
215
418
  end
216
419
  end
217
420
 
218
421
  context 'and key is the user key' do
219
422
  it 'prepends a hub-specific prefix' do
220
- expect(Zenflow::Github.construct_key_for_hub('my-hub', 'github.user')).to eq("zenflow.hub.my-hub.github.user")
423
+ expect(hub.parameter_key_for_hub('github.user')).to eq("zenflow.hub.my-hub.github.user")
221
424
  end
222
425
  end
223
426
 
224
427
  context 'and key is the zenflow token key' do
225
428
  it 'prepends a hub-specific prefix' do
226
- expect(Zenflow::Github.construct_key_for_hub('my-hub', 'token')).to eq("zenflow.hub.my-hub.token")
429
+ expect(hub.parameter_key_for_hub('token')).to eq("zenflow.hub.my-hub.token")
227
430
  end
228
431
  end
229
432
 
230
433
  context 'and key is the user agent base key' do
231
434
  it 'prepends a hub-specific prefix' do
232
- expect(Zenflow::Github.construct_key_for_hub('my-hub', 'user.agent.base')).to eq("zenflow.hub.my-hub.user.agent.base")
435
+ expect(hub.parameter_key_for_hub('user.agent.base')).to eq("zenflow.hub.my-hub.user.agent.base")
233
436
  end
234
437
  end
235
438
  end
236
439
  end
237
440
 
238
- describe '.get_config_for_hub' do
441
+ describe '.get_config' do
442
+ let(:hub){Zenflow::Github.new('test-hub')}
443
+
239
444
  it 'gets the correct global config parameter' do
240
- Zenflow::Github.should_receive(:get_global_config).with("zenflow.hub.test-hub.test-key")
241
- Zenflow::Github.get_config_for_hub('test-hub', 'test-key')
445
+ hub.should_receive(:get_global_config).with("zenflow.hub.test-hub.test-key")
446
+ hub.get_config('test-key')
242
447
  end
243
448
  end
244
449
 
245
- describe '.set_config_for_hub' do
450
+ describe '.set_config' do
451
+ let(:hub){Zenflow::Github.new('test-hub')}
452
+
246
453
  it 'sets the correct global config parameter' do
247
- Zenflow::Github.should_receive(:set_global_config).with("zenflow.hub.test-hub.test-key", "test-value")
248
- Zenflow::Github.set_config_for_hub('test-hub', 'test-key', 'test-value')
454
+ hub.should_receive(:set_global_config).with("zenflow.hub.test-hub.test-key", "test-value")
455
+ hub.set_config('test-key', 'test-value')
249
456
  end
250
457
  end
251
458
 
252
459
  describe '.get_global_config' do
460
+ let(:hub){Zenflow::Github.new('test-hub')}
461
+
253
462
  context 'when value is present' do
254
463
  before(:each){
255
464
  Zenflow::Shell.should_receive(:run).with('git config --get key', silent: true).and_return('value')
256
465
  }
257
466
 
258
467
  it 'returns the value' do
259
- expect(Zenflow::Github.get_global_config('key')).to eq('value')
468
+ expect(hub.get_global_config('key')).to eq('value')
260
469
  end
261
470
  end
262
471
 
@@ -266,18 +475,20 @@ describe Zenflow::Github do
266
475
  }
267
476
 
268
477
  it 'returns nil' do
269
- expect(Zenflow::Github.get_global_config('key')).to eq(nil)
478
+ expect(hub.get_global_config('key')).to eq(nil)
270
479
  end
271
480
  end
272
481
  end
273
482
 
274
483
  describe '.set_global_config' do
484
+ let(:hub){Zenflow::Github.new('test-hub')}
485
+
275
486
  before(:each){
276
487
  Zenflow::Shell.should_receive(:run).with('git config --global key value', silent: true)
277
488
  }
278
489
 
279
490
  it 'sets the value' do
280
- Zenflow::Github.set_global_config('key', 'value')
491
+ hub.set_global_config('key', 'value')
281
492
  end
282
493
  end
283
494
 
@@ -292,24 +503,29 @@ describe Zenflow::Github do
292
503
  end
293
504
  end
294
505
 
295
- describe '.describe_hub_parameter' do
506
+ describe '.describe_parameter' do
507
+ let(:hub){Zenflow::Github.new('my-hub')}
508
+
296
509
  it 'returns the expected array' do
297
- Zenflow::Github.should_receive(:get_config_for_hub).with('my-hub', 'key').and_return('config-value')
298
- expect(Zenflow::Github.describe_hub_parameter('name', 'my-hub', 'key', 'value')).to eq(
510
+ hub.should_receive(:get_config).with('key').and_return('config-value')
511
+
512
+ expect(hub.describe_parameter('name', 'key', 'value')).to eq(
299
513
  ['name', 'zenflow.hub.my-hub.key', 'config-value', 'value']
300
514
  )
301
515
  end
302
516
  end
303
517
 
304
- describe '.describe_hub' do
518
+ describe '.describe' do
305
519
  context 'all parameters configured' do
520
+ let(:hub){Zenflow::Github.new('my-hub')}
521
+
306
522
  it 'returns the expected data' do
307
- Zenflow::Github.should_receive(:get_config_for_hub).twice.with('my-hub', 'api.base.url').and_return('api-base-url-config-value')
308
- Zenflow::Github.should_receive(:get_config_for_hub).twice.with('my-hub', 'github.user').and_return('github-user-config-value')
309
- Zenflow::Github.should_receive(:get_config_for_hub).twice.with('my-hub', 'token').and_return('token-config-value')
310
- Zenflow::Github.should_receive(:get_config_for_hub).twice.with('my-hub', 'user.agent.base').and_return('user-agent-base-config-value')
523
+ hub.should_receive(:get_config).twice.with('api.base.url').and_return('api-base-url-config-value')
524
+ hub.should_receive(:get_config).twice.with('github.user').and_return('github-user-config-value')
525
+ hub.should_receive(:get_config).twice.with('token').and_return('token-config-value')
526
+ hub.should_receive(:get_config).twice.with('user.agent.base').and_return('user-agent-base-config-value')
311
527
 
312
- expect(Zenflow::Github.describe_hub('my-hub')).to eq([
528
+ expect(hub.describe).to eq([
313
529
  ['API Base URL', 'zenflow.hub.my-hub.api.base.url', 'api-base-url-config-value', 'api-base-url-config-value'],
314
530
  ['User', 'zenflow.hub.my-hub.github.user', 'github-user-config-value', 'github-user-config-value'],
315
531
  ['Token', 'zenflow.hub.my-hub.token', 'token-config-value', 'token-config-value'],
@@ -319,13 +535,15 @@ describe Zenflow::Github do
319
535
  end
320
536
 
321
537
  context 'no parameters configured' do
538
+ let(:hub){Zenflow::Github.new('my-hub')}
539
+
322
540
  it 'returns the expected data' do
323
- Zenflow::Github.should_receive(:get_config_for_hub).twice.with('my-hub', 'api.base.url').and_return(nil)
324
- Zenflow::Github.should_receive(:get_config_for_hub).twice.with('my-hub', 'github.user').and_return(nil)
325
- Zenflow::Github.should_receive(:get_config_for_hub).twice.with('my-hub', 'token').and_return(nil)
326
- Zenflow::Github.should_receive(:get_config_for_hub).twice.with('my-hub', 'user.agent.base').and_return(nil)
541
+ hub.should_receive(:get_config).twice.with('api.base.url').and_return(nil)
542
+ hub.should_receive(:get_config).twice.with('github.user').and_return(nil)
543
+ hub.should_receive(:get_config).twice.with('token').and_return(nil)
544
+ hub.should_receive(:get_config).twice.with('user.agent.base').and_return(nil)
327
545
 
328
- expect(Zenflow::Github.describe_hub('my-hub')).to eq([
546
+ expect(hub.describe).to eq([
329
547
  ['API Base URL', 'zenflow.hub.my-hub.api.base.url', nil, 'https://api.github.com'],
330
548
  ['User', 'zenflow.hub.my-hub.github.user', nil, nil],
331
549
  ['Token', 'zenflow.hub.my-hub.token', nil, nil],
@@ -335,13 +553,15 @@ describe Zenflow::Github do
335
553
  end
336
554
 
337
555
  context 'hub is default' do
556
+ let(:hub){Zenflow::Github.new(Zenflow::Github::DEFAULT_HUB)}
557
+
338
558
  it 'returns the expected data' do
339
- Zenflow::Github.should_receive(:get_config_for_hub).twice.with('github.com', 'api.base.url').and_return(nil)
340
- Zenflow::Github.should_receive(:get_config_for_hub).twice.with('github.com', 'github.user').and_return(nil)
341
- Zenflow::Github.should_receive(:get_config_for_hub).twice.with('github.com', 'token').and_return(nil)
342
- Zenflow::Github.should_receive(:get_config_for_hub).twice.with('github.com', 'user.agent.base').and_return(nil)
559
+ hub.should_receive(:get_config).twice.with('api.base.url').and_return(nil)
560
+ hub.should_receive(:get_config).twice.with('github.user').and_return(nil)
561
+ hub.should_receive(:get_config).twice.with('token').and_return(nil)
562
+ hub.should_receive(:get_config).twice.with('user.agent.base').and_return(nil)
343
563
 
344
- expect(Zenflow::Github.describe_hub('github.com')).to eq([
564
+ expect(hub.describe).to eq([
345
565
  ['API Base URL', 'zenflow.api.base.url', nil, 'https://api.github.com'],
346
566
  ['User', 'github.user', nil, nil],
347
567
  ['Token', 'zenflow.token', nil, nil],