git_hub 0.2.10 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. data/README.rdoc +43 -7
  2. data/Rakefile +1 -0
  3. data/VERSION +1 -1
  4. data/bin/git_hub +1 -0
  5. data/git_hub.gemspec +36 -32
  6. data/lib/git_hub.rb +3 -5
  7. data/lib/git_hub/api.rb +8 -13
  8. data/lib/git_hub/base.rb +44 -42
  9. data/lib/git_hub/commit.rb +6 -4
  10. data/lib/git_hub/extensions.rb +25 -0
  11. data/lib/git_hub/repo.rb +21 -24
  12. data/lib/git_hub/user.rb +8 -6
  13. data/spec/git_hub/api_spec.rb +21 -0
  14. data/spec/git_hub/base_spec.rb +5 -5
  15. data/spec/git_hub/commit_spec.rb +2 -2
  16. data/spec/git_hub/extensions_spec.rb +55 -0
  17. data/spec/git_hub/repo_spec.rb +51 -40
  18. data/spec/git_hub/user_spec.rb +26 -20
  19. data/spec/spec_helper.rb +31 -46
  20. data/spec/stubs/{api_route_error.res → yaml/api_route_error.res} +0 -0
  21. data/spec/stubs/{commits → yaml/commits}/list/joe007/fine_repo/master.res +0 -0
  22. data/spec/stubs/{commits → yaml/commits}/list/joe007/fine_repo/master/README.res +0 -0
  23. data/spec/stubs/{commits → yaml/commits}/show/joe007/fine_repo/3a70f86293b719f193f778a8710b1f83f2f7bf38.res +0 -0
  24. data/spec/stubs/{commits → yaml/commits}/show/joe007/fine_repo/5e61f0687c40ca48214d09dc7ae2d0d0d8fbfeb8.res +0 -0
  25. data/spec/stubs/{commits → yaml/commits}/show/joe007/fine_repo/f7f5dddaa37deacc83f1f56876e2b135389d03ab.res +0 -0
  26. data/spec/stubs/{repos → yaml/repos}/create.1.res +0 -0
  27. data/spec/stubs/{repos → yaml/repos}/create.2.res +0 -0
  28. data/spec/stubs/{repos → yaml/repos}/create.3.res +0 -0
  29. data/spec/stubs/{repos → yaml/repos}/create.4.res +0 -0
  30. data/spec/stubs/{repos → yaml/repos}/delete/new_repo.1.res +0 -0
  31. data/spec/stubs/{repos → yaml/repos}/delete/new_repo.2.res +0 -0
  32. data/spec/stubs/{repos → yaml/repos}/delete/new_repo.res +0 -0
  33. data/spec/stubs/{repos → yaml/repos}/search/fine+repo.res +0 -0
  34. data/spec/stubs/{repos → yaml/repos}/search/joe+repo.res +0 -0
  35. data/spec/stubs/yaml/repos/show/invalid_github_user/err_repo.res +14 -0
  36. data/spec/stubs/{repos → yaml/repos}/show/joe007.res +0 -0
  37. data/spec/stubs/{repos → yaml/repos}/show/joe007/err_repo.res +0 -0
  38. data/spec/stubs/{repos → yaml/repos}/show/joe007/fine_repo.res +0 -0
  39. data/spec/stubs/{repos → yaml/repos}/show/joe007/fine_repo/branches.res +0 -0
  40. data/spec/stubs/{repos → yaml/repos}/show/joe007/fine_repo/tags.res +0 -0
  41. data/spec/stubs/{repos → yaml/repos}/show/joe007/new_repo.res +0 -0
  42. data/spec/stubs/{user → yaml/user}/follow/arvicco.res +0 -0
  43. data/spec/stubs/{user → yaml/user}/search/joe+007.res +0 -0
  44. data/spec/stubs/{user → yaml/user}/show/arvicco.res +0 -0
  45. data/spec/stubs/{user/show/joe_is_not_github_user.res → yaml/user/show/invalid_github_user.res} +7 -3
  46. data/spec/stubs/{user → yaml/user}/show/joe007.auth.res +0 -0
  47. data/spec/stubs/{user → yaml/user}/show/joe007.res +0 -0
  48. data/spec/stubs/{user → yaml/user}/show/joe007/followers.res +0 -0
  49. data/spec/stubs/{user → yaml/user}/show/joe007/following.empty.res +0 -0
  50. data/spec/stubs/{user → yaml/user}/show/joe007/following.res +0 -0
  51. metadata +36 -32
@@ -50,7 +50,7 @@ module GitHub
50
50
  end
51
51
 
52
52
  def clone_url
53
- url = private? || api.auth['login'] == user ? "git@github.com:" : "git://github.com/"
53
+ url = private? || API.auth['login'] == user ? "git@github.com:" : "git://github.com/"
54
54
  url += "#{@user}/#{@name}.git"
55
55
  end
56
56
 
@@ -67,7 +67,7 @@ module GitHub
67
67
  # :path:: Only commits for specific path
68
68
  # :sha/:id:: Only one commit with specific id (sha)
69
69
  def commits opts = {}
70
- Commit.find opts.merge(:user => @user, :repo => @name)
70
+ Commit.find opts.merge(:user => @user, :repo => @name)
71
71
  end
72
72
 
73
73
  class << self # Repo class methods
@@ -76,8 +76,8 @@ module GitHub
76
76
  # :owner/:user/:username:: Github user name
77
77
  # :repo/:repository/:project/:name:: Repo name
78
78
  # :query/:search:: Array of search terms as Strings or Symbols
79
- def find(opts)
80
- user, repo, query = extract opts, :user, :repo, :query
79
+ def find( *args )
80
+ user, repo, query = extract args, :user, :repo, :query
81
81
  path = if query
82
82
  "/search/#{query.map(&:to_s).join('+')}"
83
83
  elsif user && repo
@@ -94,24 +94,22 @@ module GitHub
94
94
  alias search find
95
95
 
96
96
  # Create new github repo, accepts Hash with :repo, :description, :homepage, :public/:private
97
- def create(opts)
98
- repo, desc, homepage, public = extract opts, :repo, :desc, :homepage, :public
99
- api.ensure_auth opts
97
+ def create!(*args)
98
+ repo, desc, homepage, public = extract args, :repo, :desc, :homepage, :public
99
+ API.ensure_auth
100
100
  instantiate post("/create", 'name' => repo, 'description' => desc,
101
- 'homepage' => homepage, 'public' => (public ? 1 : 0))
101
+ 'homepage' => homepage, 'public' => (public ? 1 : 0))
102
102
  end
103
- end
103
+ end
104
104
 
105
105
  # Delete github repo, accepts optional Hash with authentication
106
- def delete(opts = {})
107
- api.ensure_auth opts
106
+ def delete!
107
+ API.ensure_auth
108
108
  result = post("/delete/#{@name}")
109
- if token = result['delete_token']
110
- post("/delete/#{@name}", 'delete_token' => token)
111
- else
112
- result
113
- end
114
- end
109
+ token = result['delete_token']
110
+ return result unless token
111
+ post("/delete/#{@name}", 'delete_token' => token)
112
+ end
115
113
 
116
114
  def add_service
117
115
  end
@@ -133,14 +131,13 @@ module GitHub
133
131
 
134
132
  def hash_of_commits(resource)
135
133
  result = get "/show/#{@user}/#{@name}/#{resource}"
136
- if tagged_shas = result[resource.to_s]
137
- tagged_commits = tagged_shas.map do |tag,sha|
138
- [tag, Commit.find(:user=>@user, :repo=>@name, :sha=>sha)]
139
- end
140
- Hash[*tagged_commits.flatten]
141
- else
142
- result
134
+ tagged_shas = result[resource.to_s]
135
+ return result unless tagged_shas
136
+
137
+ tagged_commits = tagged_shas.map do |tag, sha|
138
+ [tag, Commit.find(:user=>@user, :repo=>@name, :sha=>sha)]
143
139
  end
140
+ Hash[*tagged_commits.flatten]
144
141
  end
145
142
 
146
143
  # repos/show/:user/:repo/languages
@@ -15,7 +15,7 @@ module GitHub
15
15
 
16
16
  aliases_for :homepage => :blog, :name => [:user, :username], :created => :created_at
17
17
 
18
- def initialize(opts)
18
+ def initialize( opts )
19
19
  @public_repo_count = opts.delete('repos') # TODO: find better way without modifying opts?
20
20
  @followers_count = opts.delete('followers')
21
21
  super
@@ -29,7 +29,7 @@ module GitHub
29
29
  @type ||= "user"
30
30
  end
31
31
 
32
- def url() "http://github.com/#{@name}" end
32
+ def url; "http://github.com/#{@name}" end
33
33
 
34
34
  class << self
35
35
 
@@ -37,8 +37,8 @@ module GitHub
37
37
  # :user/:username:: Github user name
38
38
  # :repo/:repository/:project/:name:: Repo name
39
39
  # :query/:search:: Array of search terms as Strings or Symbols
40
- def find(opts)
41
- user, query = extract opts, :user, :query
40
+ def find( *args )
41
+ user, query = extract args, :user, :query
42
42
  path = if query
43
43
  "/search/#{query.map(&:to_s).join('+')}"
44
44
  elsif user
@@ -59,11 +59,13 @@ module GitHub
59
59
  get("/show/#{@name}/following")['users'].map {|user| User.find(:user => user )}
60
60
  end
61
61
 
62
- def follow user
62
+ def follow!( user )
63
+ API.ensure_auth
63
64
  post("/follow/#{user}")['users'].map {|user| User.find(:user => user )}
64
65
  end
65
66
 
66
- def unfollow user # api /user/unfollow/:user is not working properly atm, using http
67
+ def unfollow!( user )# api /user/unfollow/:user is not working properly atm, using http
68
+ API.ensure_auth
67
69
  res = get 'http://github.com/users/follow', 'target' => user
68
70
  raise "User Not Found #{user}" unless res.code == 302.to_s
69
71
  following
@@ -2,6 +2,27 @@ require File.expand_path(
2
2
  File.join(File.dirname(__FILE__), '..', 'spec_helper'))
3
3
 
4
4
  module GitHubTest
5
+ # Stubs github server, with options:
6
+ # :host:: Host name - default 'github.com'
7
+ # :port:: Port - default 80
8
+ def stub_server(options={})
9
+ server = Net::HTTP.new(options[:host] ||'github.com', options[:port] || 80)
10
+ Net::HTTP.stub!(:new).and_return(server)
11
+ server
12
+ end
13
+
14
+ # Stubs http request, with options:
15
+ # :path:: Request path - default '/api/v2/yaml/repos/create'
16
+ # :get:: Indicates that request is get, otherwise post
17
+ def stub_req(options={})
18
+ path = options[:path] || '/api/v2/yaml/repos/create'
19
+ options[:get] ? Net::HTTP::Get.new(path) : Net::HTTP::Post.new(path)
20
+ end
21
+
22
+ def stub_server_and_req(options = {})
23
+ [stub_server(options), stub_req(options)]
24
+ end
25
+
5
26
  describe GitHub::Api do
6
27
  after(:each) do
7
28
  GitHub::Api.instance.auth.clear
@@ -4,17 +4,17 @@ require File.expand_path(
4
4
  module GitHubTest
5
5
  describe GitHub::Base do
6
6
  after(:each) do
7
- api.auth.clear
7
+ clear_auth
8
8
  end
9
9
 
10
10
  context 'requests' do
11
11
  it 'submits appropriate requests to api as get/post methods (both class and instance)' do
12
12
  base = described_class.new
13
- api.should_receive(:request).with(:get, '/blah', anything()).twice
13
+ API.should_receive(:request).with(:get, '/blah', anything()).twice
14
14
  base.get ('/blah')
15
15
  described_class.get ('/blah')
16
16
 
17
- api.should_receive(:request).with(:post, '/blah', anything()).twice
17
+ API.should_receive(:request).with(:post, '/blah', anything()).twice
18
18
  base.post ('/blah')
19
19
  described_class.post ('/blah')
20
20
  end
@@ -22,11 +22,11 @@ module GitHubTest
22
22
  it 'prepends get/post calls by content of @base_uri variable' do
23
23
  base = described_class.new
24
24
  described_class.class_eval { @base_uri = 'http://base1.com' }
25
- api.should_receive(:request).with(:get, 'http://base1.com/blah', anything()).twice
25
+ API.should_receive(:request).with(:get, 'http://base1.com/blah', anything()).twice
26
26
  base.get ('/blah')
27
27
  described_class.get ('/blah')
28
28
 
29
- api.should_receive(:request).with(:post, 'http://base1.com/blah', anything()).twice
29
+ API.should_receive(:request).with(:post, 'http://base1.com/blah', anything()).twice
30
30
  base.post ('/blah')
31
31
  described_class.post ('/blah')
32
32
  end
@@ -7,8 +7,8 @@ module GitHubTest
7
7
  FakeWeb.allow_net_connect = false if TEST_FAKE_WEB
8
8
  end
9
9
  after(:each) do
10
- FakeWeb.clean_registry
11
- api.auth.clear
10
+ FakeWeb.clean_registry if TEST_FAKE_WEB
11
+ clear_auth
12
12
  end
13
13
 
14
14
  context '.find' do
@@ -0,0 +1,55 @@
1
+ require File.expand_path(
2
+ File.join(File.dirname(__FILE__), '..', 'spec_helper'))
3
+
4
+ module GitHubTest
5
+ module A
6
+ class B
7
+ class C
8
+ end
9
+ end
10
+ end
11
+
12
+ describe String do
13
+ context '#to_class' do
14
+ it 'converts string into appropriate Class constant' do
15
+ "Fixnum".to_class.should == Fixnum
16
+ "GitHubTest::A::B::C".to_class.should == GitHubTest::A::B::C
17
+ end
18
+
19
+ it 'returns nil if string is not convertible into class' do
20
+ "Math".to_class.should == nil
21
+ "Math::PI".to_class.should == nil
22
+ "Something".to_class.should == nil
23
+ end
24
+
25
+ it 'deals with leading colons' do
26
+ "::GitHubTest::A::B::C".to_class.should == GitHubTest::A::B::C
27
+ end
28
+ end
29
+ end
30
+
31
+ describe Array do
32
+ context '#args_and_opts' do
33
+ it 'splits array into two components: enum with args and options hash' do
34
+ args, opts = [1, 2, {3=>4}].args_and_opts
35
+ args.should be_an Enumerator
36
+ args.to_a.should == [1, 2]
37
+ opts.should == {3=>4}
38
+ end
39
+
40
+ it 'correctly splits options if 2 Hashes are last' do
41
+ args, opts = [1, 2, {3=>4}, {5=>6}].args_and_opts
42
+ args.should be_an Enumerator
43
+ args.to_a.should == [1, 2, {3=>4}]
44
+ opts.should == {5=>6}
45
+ end
46
+
47
+ it 'returns empty options if last component is not a Hash' do
48
+ args, opts = [1, 2, {3=>4}, 5].args_and_opts
49
+ args.should be_an Enumerator
50
+ args.to_a.should == [1, 2, {3=>4}, 5]
51
+ opts.should == {}
52
+ end
53
+ end
54
+ end
55
+ end
@@ -12,7 +12,7 @@ module GitHubTest
12
12
  repo.type.should == 'repo'
13
13
  repo.name.should == name.to_s
14
14
  repo.url.should == "http://github.com/joe007/#{name.to_s}"
15
- repo.clone_url.should == if api.authenticated?
15
+ repo.clone_url.should == if API.authenticated?
16
16
  "git@github.com:joe007/#{name.to_s}.git"
17
17
  else
18
18
  "git://github.com/joe007/#{name.to_s}.git"
@@ -46,7 +46,7 @@ module GitHubTest
46
46
  repo.homepage.should == nil
47
47
  repo.open_issues.should == nil
48
48
  end
49
- when 'new_repo'
49
+ when "#{new_repo}"
50
50
  repo.watchers.should == 1
51
51
  repo.followers.should == 1
52
52
  repo.open_issues.should == 0
@@ -57,7 +57,7 @@ module GitHubTest
57
57
  repo.homepage.should == nil
58
58
  when 'with_attributes'
59
59
  repo.description.should == 'New repo'
60
- repo.homepage.should == 'http://joe.org/new_repo'
60
+ repo.homepage.should == "http://joe.org/new_repo"
61
61
  end
62
62
  end
63
63
  end
@@ -67,18 +67,25 @@ module GitHubTest
67
67
  FakeWeb.allow_net_connect = false if TEST_FAKE_WEB
68
68
  end
69
69
  after(:each) do
70
- FakeWeb.clean_registry
71
- api.auth.clear
70
+ FakeWeb.clean_registry if TEST_FAKE_WEB
71
+ clear_auth
72
72
  end
73
73
 
74
74
  context '.find as /show/:user/:repo' do
75
- it 'finds repo of a (valid) github user' do
75
+ it 'finds repo of a (valid) github user given options Hash' do
76
76
  expect(:get, "#{github_yaml}/repos/show/joe007/fine_repo") do
77
77
  repo = GitHub::Repo.find(:user=>'joe007', :repo=>'fine_repo')
78
78
  should_be_repo repo
79
79
  end
80
80
  end
81
81
 
82
+ it 'finds repo of a (valid) github user given simple arguments' do
83
+ expect(:get, "#{github_yaml}/repos/show/joe007/fine_repo") do
84
+ repo = GitHub::Repo.find('joe007', 'fine_repo')
85
+ should_be_repo repo
86
+ end
87
+ end
88
+
82
89
  it 'finds repo if user object is given instead of username' do
83
90
  expect(:get, "#{github_yaml}/repos/show/joe007/fine_repo") do
84
91
  repo = GitHub::Repo.find(:user=>joe, :repo=>'fine_repo')
@@ -94,6 +101,15 @@ module GitHubTest
94
101
  res['error'].first.should have_key 'error'
95
102
  end
96
103
  end
104
+
105
+ it 'fails returning error object if user is invalid' do
106
+ expect(:get, "#{github_yaml}/repos/show/invalid_github_user/err_repo") do
107
+ res = GitHub::Repo.find('invalid_github_user', 'err_repo')
108
+ res.should have_key 'error' # res = {"error"=>[{"error"=>"repository not found"}]}
109
+ res['error'].should be_kind_of Array
110
+ res['error'].first.should have_key 'error'
111
+ end
112
+ end
97
113
  end
98
114
 
99
115
  context '.find as /show/:user)' do
@@ -122,38 +138,46 @@ module GitHubTest
122
138
  end
123
139
  end
124
140
 
125
- context '.create' do
141
+ context '.create!' do
142
+ before(:each) {wait}
126
143
  after(:each) do
127
- expect(:post, "http://github.com/api/v2/yaml/repos/delete/new_repo", 1)
128
- @repo.delete if @repo.is_a? GitHub::Repo
144
+ authenticate_as_joe
145
+ expect(:post, "http://github.com/api/v2/yaml/repos/delete/#{new_repo}", 1)
146
+ @repo.delete! if @repo.is_a? GitHub::Repo
129
147
  wait
130
148
  end
131
149
 
132
150
  it 'creates new repo for authenticated github user' do
133
151
  authenticate_as_joe
134
- # keys = {:name => 'new_repo', :public => 1}.merge joe_auth # Fake_Web doesn't support key expectations yet
152
+ # keys = {:name => "#{new_repo}", :public => 1}.merge joe_auth # Fake_Web doesn't support key expectations yet
135
153
  expect(:post, "#{github_yaml}/repos/create", 1) do
136
- @repo = GitHub::Repo.create(:repo=>'new_repo')
137
- should_be_repo @repo, 'new_repo', :simple
154
+ @repo = GitHub::Repo.create!(:repo=>"#{new_repo}")
155
+ should_be_repo @repo, "#{new_repo}", :simple
138
156
  end
139
157
  end
140
158
 
141
159
  it 'creates new repo with extended attributes' do
142
- wait
143
160
  authenticate_as_joe
144
- # keys = {:name => 'new_repo', :description => 'New repo', # Fake_Web doesn't support key expectations yet
145
- # :homepage => 'http://joe.org/new_repo', :public => 1}.merge joe_auth
161
+ # keys = {:name => "#{new_repo}", :description => 'New repo', # Fake_Web doesn't support key expectations yet
162
+ # :homepage => "http://joe.org/#{new_repo}", :public => 1}.merge joe_auth
146
163
  expect(:post, "#{github_yaml}/repos/create", 2)
147
- @repo = GitHub::Repo.create(:name=>'new_repo', :description => 'New repo',
164
+ @repo = GitHub::Repo.create!(:name=>"#{new_repo}", :description => 'New repo',
148
165
  :homepage => 'http://joe.org/new_repo', :private => false)
149
- should_be_repo @repo, 'new_repo', :with_attributes
166
+ should_be_repo @repo, "#{new_repo}", :with_attributes
167
+ end
168
+
169
+ it 'creates new repo without options' do
170
+ authenticate_as_joe
171
+ expect(:post, "#{github_yaml}/repos/create", 2)
172
+ @repo = GitHub::Repo.create!("#{new_repo}", 'New repo', 'http://joe.org/new_repo', false)
173
+ should_be_repo @repo, "#{new_repo}", :with_attributes
150
174
  end
151
175
 
152
176
  it 'fails if repo with the same name already exists' do
153
177
  authenticate_as_joe
154
178
  # keys = {:name => 'fine_repo', :public => 1}.merge joe_auth # Fake_Web doesn't support key expectations yet
155
179
  expect(:post, "#{github_yaml}/repos/create", 4)
156
- res = GitHub::Repo.create(:name=>'fine_repo')
180
+ res = GitHub::Repo.create!(:name=>'fine_repo')
157
181
  res.should have_key 'error' # res = {"error"=>[{"error"=>"repository not found"}]}
158
182
  res['error'].should be_kind_of Array
159
183
  res['error'].first.should have_key 'error'
@@ -161,21 +185,23 @@ module GitHubTest
161
185
  end
162
186
  end
163
187
 
164
- context '#delete' do
188
+ context '#delete!' do
165
189
  before(:each) do
166
190
  authenticate_as_joe
167
191
  expect(:post, "#{github_yaml}/repos/create", 1)
168
- @repo = GitHub::Repo.create(:user=>'joe007', :repo=>'new_repo')
169
- wait
192
+ @repo = GitHub::Repo.create!(:user=>'joe007', :repo=>"#{new_repo}")
193
+ raise 'Repo creation failed' unless @repo.is_a?(GitHub::Repo)
194
+ clear_auth
170
195
  end
171
196
 
172
197
  it 'deletes new repo for authenticated github user' do
173
198
  # post1 = { :expected_keys => joe_auth, # Fake_Web doesn't support key expectations yet
174
- # :body => body_from_file('/repos/delete/new_repo.1') }
199
+ # :body => body_from_file('/repos/delete/"#{new_repo}".1') }
175
200
  # post2 = { :expected_keys => {:delete_token => :any}.merge(joe_auth),
176
- # :body => body_from_file('/repos/delete/new_repo.2') }
177
- expect(:post, "#{github_yaml}/repos/delete/new_repo", [1, 2])
178
- res = @repo.delete
201
+ # :body => body_from_file('/repos/delete/"#{new_repo}".2') }
202
+ authenticate_as_joe
203
+ expect(:post, "#{github_yaml}/repos/delete/#{new_repo}", [1, 2])
204
+ res = @repo.delete!
179
205
  res['status'].should == 'deleted'
180
206
  end
181
207
  end
@@ -245,21 +271,6 @@ module GitHubTest
245
271
  end
246
272
  end
247
273
 
248
- it 'tests' do
249
- pending
250
- authenticate_as_joe
251
- expect(:get, "#{github_yaml}/repos/showp/joe007/new_repo")
252
- repos = GitHub::Repo.show('arvicco')
253
- p repos
254
- p repos.map(&:url)
255
- repos.should be_an Array
256
- repos.should_not be_empty
257
- if repos.last.name == 'new_repo'
258
- repos.last.delete
259
- end
260
- true.should == false
261
- end
262
-
263
274
  end # describe GitHub::Repo
264
275
  end # module GithubTest
265
276
 
@@ -24,7 +24,7 @@ module GitHubTest
24
24
  user.language.should == ''
25
25
  user.pushed.should == Time.parse('2009-12-30T14:15:16.972Z')
26
26
  user.score.should be_close 4.18, 0.2
27
- when :show, :show_auth
27
+ when :show
28
28
  # attributes differs between /show and /search
29
29
  user.public_repo_count.should == 3
30
30
  user.followers_count.should == 1
@@ -37,15 +37,6 @@ module GitHubTest
37
37
  user.following_count.should == 1
38
38
  user.public_gist_count.should == 0
39
39
  user.blog.should == 'http://www.joe007.org'
40
- if type == :show_auth
41
- # additional attributes for athenticated user
42
- user.plan.should == {'name' => 'free', 'collaborators' => 0, 'space' => 307200, 'private_repos' => 0}
43
- user.collaborators.should == 0
44
- user.disk_usage.should == 76
45
- user.private_gist_count.should == 0
46
- user.owned_private_repo_count.should == 0
47
- user.total_private_repo_count.should == 0
48
- end
49
40
  end
50
41
  when :arvicco
51
42
  user.id.should == 'user-39557'
@@ -61,8 +52,8 @@ module GitHubTest
61
52
  FakeWeb.allow_net_connect = false if TEST_FAKE_WEB
62
53
  end
63
54
  after(:each) do
64
- FakeWeb.clean_registry
65
- api.auth.clear
55
+ FakeWeb.clean_registry if TEST_FAKE_WEB
56
+ clear_auth
66
57
  wait
67
58
  end
68
59
 
@@ -74,17 +65,31 @@ module GitHubTest
74
65
  end
75
66
  end
76
67
 
68
+ it 'finds valid github user by name' do
69
+ expect(:get, "#{github_yaml}/user/show/joe007") do
70
+ user = GitHub::User.find('joe007')
71
+ should_be_user user, :joe007
72
+ end
73
+ end
74
+
77
75
  it 'finds authenticated github user with additional attributes set' do
78
76
  expect(:get, "#{github_yaml}/user/show/joe007", :auth) do
79
- api.auth = joe_auth
77
+ authenticate_as_joe
80
78
  user = GitHub::User.find(:user=>'joe007')
81
- should_be_user user, :joe007, :show_auth
79
+ should_be_user user, :joe007
80
+ # additional attributes for athenticated user
81
+ user.plan.should == {'name' => 'free', 'collaborators' => 0, 'space' => 307200, 'private_repos' => 0}
82
+ user.collaborators.should == 0
83
+ user.disk_usage.should == 76
84
+ user.private_gist_count.should == 0
85
+ user.owned_private_repo_count.should == 0
86
+ user.total_private_repo_count.should == 0
82
87
  end
83
88
  end
84
89
 
85
90
  it 'fails to find invalid github user' do
86
- expect(:get, "#{github_yaml}/user/show/joe_is_not_github_user") do
87
- res = GitHub::User.find(:user=>'joe_is_not_github_user')
91
+ expect(:get, "#{github_yaml}/user/show/invalid_github_user") do
92
+ res = GitHub::User.find(:user=>'invalid_github_user')
88
93
  res.code.should == 404.to_s
89
94
  res.message.should == 'Not Found'
90
95
  end
@@ -126,6 +131,7 @@ module GitHubTest
126
131
  end
127
132
  end
128
133
  end
134
+
129
135
  context 'actions' do
130
136
  before(:each) do
131
137
  expect(:get, "http://github.com/users/follow")
@@ -136,14 +142,14 @@ module GitHubTest
136
142
  # after - normal state is for joe to follow arvicco
137
143
  authenticate_as_joe
138
144
  expect(:post, "#{github_yaml}/user/follow/arvicco")
139
- joe.follow :arvicco
145
+ joe.follow! :arvicco
140
146
  wait
141
147
  end
142
148
 
143
149
  it 'stops following previously followed user (if authenticated)' do
144
150
  expect(:get, "http://github.com/users/follow") do
145
151
  expect(:get, "#{github_yaml}/user/show/joe007/following", :empty)
146
- following = joe.unfollow :arvicco
152
+ following = joe.unfollow! :arvicco
147
153
  following.should be_kind_of Array
148
154
  following.should be_empty
149
155
  end
@@ -152,11 +158,11 @@ module GitHubTest
152
158
  it 'starts following new user (if authenticated)' do
153
159
  # before - normal state is for joe to follow arvicco
154
160
  expect(:get, "#{github_yaml}/user/show/joe007/following")
155
- joe.unfollow :arvicco
161
+ joe.unfollow! :arvicco
156
162
  wait
157
163
 
158
164
  expect(:post, "#{github_yaml}/user/follow/arvicco") do
159
- following = joe.follow :arvicco
165
+ following = joe.follow! :arvicco
160
166
  following.should be_kind_of Array
161
167
  following.should have(1).user
162
168
  following.each {|user| user.should be_a GitHub::User}