ghee 0.7.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.
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ghee::API::Repos::Hooks do
4
+ subject { Ghee.new(GH_AUTH) }
5
+
6
+ def should_be_a_hook(hook)
7
+ hook['url'].should include('hooks')
8
+ hook['active'].should be_true
9
+ hook['events'].size.should > 0
10
+ end
11
+
12
+ describe "#repos(login,name)#hooks" do
13
+ context "with a test web hook" do
14
+ before :all do
15
+ VCR.use_cassette "repos(login,name).hook.create.test" do
16
+ @test_hook = subject.repos(GH_USER,GH_REPO).hooks.create({
17
+ :name => "web",
18
+ :config => {:url => "http://google.com"}
19
+ })
20
+ @test_hook.should_not be_nil
21
+ end
22
+ end
23
+ let(:test_hook) {@test_hook}
24
+
25
+ it "should return a hook" do
26
+ VCR.use_cassette "repos(login,name).hooks" do
27
+ hooks = subject.repos(GH_USER,GH_REPO).hooks
28
+ should_be_a_hook hooks.first
29
+ end
30
+ end
31
+
32
+ it "should patch the hook" do
33
+ VCR.use_cassette "repos(login,name).hooks.patch" do
34
+ hook = subject.repos(GH_USER,GH_REPO).hooks(test_hook['id']).patch({
35
+ :config => {:url => "http://herpderp.com"}
36
+ })
37
+ should_be_a_hook hook
38
+ hook["config"]["url"].should == "http://herpderp.com"
39
+ end
40
+
41
+ end
42
+
43
+ it "should destroy the hook" do
44
+ VCR.use_cassette "repos(login,name).hooks.destroy" do
45
+ hook = subject.repos(GH_USER,GH_REPO).hooks(test_hook['id']).destroy.should be_true
46
+ end
47
+ end
48
+ end
49
+
50
+ end
51
+ end
52
+
@@ -0,0 +1,122 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ghee::API::Issues do
4
+ subject { Ghee.new(GH_AUTH) }
5
+
6
+ def should_be_an_issue(issue)
7
+ issue["user"]["login"].should_not be_nil
8
+ issue["comments"].should_not be_nil
9
+ end
10
+
11
+ describe "#repos(login,name)#issues" do
12
+ it "should return repos issues" do
13
+ VCR.use_cassette("repos(#{GH_USER},#{GH_REPO}).issues") do
14
+ issues = subject.repos(GH_USER, GH_REPO).issues
15
+ issues.size.should > 0
16
+ should_be_an_issue(issues.first)
17
+ end
18
+ end
19
+
20
+ describe "#repos(login,name)#issues#closed" do
21
+ it "should return repos closed issues" do
22
+ VCR.use_cassette("repos(#{GH_USER},#{GH_REPO}).issues.closed") do
23
+ issues = subject.repos(GH_USER, GH_REPO).issues.closed
24
+ issues.size.should > 0
25
+ should_be_an_issue(issues.first)
26
+ issues.each do |i|
27
+ i["state"].should == "closed"
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ describe "#repos(login,name)#issues(1)" do
34
+ it "should return an issue by id" do
35
+ VCR.use_cassette("repos(#{GH_USER},#{GH_REPO}).issues(1)") do
36
+ issue = subject.repos(GH_USER, GH_REPO).issues(1)
37
+ should_be_an_issue(issue)
38
+ end
39
+ end
40
+
41
+ # Testing issue proxy
42
+ context "with issue number" do
43
+ before(:all) do
44
+ VCR.use_cassette "issues.test" do
45
+ @repo = subject.repos(GH_USER, GH_REPO)
46
+ @test_issue = @repo.issues.create({
47
+ :title => "Test issue"
48
+ })
49
+ end
50
+ end
51
+ let(:test_issue) { @test_issue }
52
+ let(:test_repo) { @repo }
53
+
54
+ describe "#patch" do
55
+ it "should patch the issue" do
56
+ VCR.use_cassette "issues(id).patch" do
57
+ issue = test_repo.issues(test_issue["number"]).patch({
58
+ :body => "awesome description"
59
+ })
60
+ should_be_an_issue(issue)
61
+ issue["body"].should == "awesome description"
62
+ end
63
+ end
64
+ end
65
+
66
+ describe "#close" do
67
+ it "should close the issue" do
68
+ VCR.use_cassette "issues(id).close" do
69
+ closed = test_repo.issues(test_issue["number"]).close
70
+ closed.should be_true
71
+ end
72
+ end
73
+ end
74
+
75
+ describe "#comments" do
76
+ context "issue with comments " do
77
+ before :all do
78
+ VCR.use_cassette "issues(id).comments.create.test" do
79
+ @comment = test_repo.issues(test_issue["number"]).comments.create :body => "test comment"
80
+ @comment.should_not be_nil
81
+ end
82
+ end
83
+ let(:test_comment) { @comment }
84
+
85
+ it "should create comment" do
86
+ VCR.use_cassette "issues(id).comments.create" do
87
+ comment = test_repo.issues(test_issue["number"]).comments.create :body => "test comment"
88
+ comment.should_not be_nil
89
+ end
90
+ end
91
+
92
+ it "should return comment by id" do
93
+ VCR.use_cassette "issues.comments(id)" do
94
+ comment = test_repo.issues.comments(test_comment["id"])
95
+ comment.should_not be_nil
96
+ comment["body"].should == "test comment"
97
+ end
98
+ end
99
+
100
+ it "should patch comment" do
101
+ VCR.use_cassette "issues.comments(id).patch" do
102
+ body = "some other description"
103
+ comment = test_repo.issues.comments(test_comment["id"]).patch(:body => body)
104
+ comment.should_not be_nil
105
+ comment["body"].should == body
106
+ end
107
+ end
108
+
109
+ it "should destroy comment" do
110
+ VCR.use_cassette "issues.comments(id).destroy" do
111
+ comment = test_repo.issues(test_issue["number"]).comments.create :body => "test comment"
112
+ comment.should_not be_nil
113
+ comment["body"].should == "test comment"
114
+ test_repo.issues.comments(comment["id"]).destroy.should be_true
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ghee::API::Milestones do
4
+ subject { Ghee.new(GH_AUTH) }
5
+
6
+ def should_be_an_milestone(milestone)
7
+ milestone["creator"]["login"].should_not be_nil
8
+ milestone["title"].should_not be_nil
9
+ end
10
+
11
+ describe "#repos(login,name)#milestones" do
12
+ it "should return repos milestones" do
13
+ VCR.use_cassette("repos(#{GH_USER},#{GH_REPO}).milestones") do
14
+ temp_milestone = subject.repos(GH_USER, GH_REPO).milestones.create({ :title => "Destroy test milestone" })
15
+
16
+ milestones = subject.repos(GH_USER, GH_REPO).milestones
17
+ milestones.size.should > 0
18
+ should_be_an_milestone(milestones.first)
19
+
20
+ subject.repos(GH_USER, GH_REPO).milestones(temp_milestone["number"]).destroy
21
+ end
22
+ end
23
+
24
+ describe "#repos(login,name)#milestones#closed" do
25
+ it "should return repos closed milestones" do
26
+ VCR.use_cassette("repos(#{GH_USER},#{GH_REPO}).milestones.closed") do
27
+ temp_milestone = subject.repos(GH_USER, GH_REPO).milestones.create({ :title => "Destroy test milestone" })
28
+ subject.repos(GH_USER, GH_REPO).milestones(temp_milestone["number"]).close
29
+
30
+ milestones = subject.repos(GH_USER, GH_REPO).milestones.closed
31
+ milestones.size.should > 0
32
+ should_be_an_milestone(milestones.first)
33
+ milestones.each do |i|
34
+ i["state"].should == "closed"
35
+ end
36
+
37
+ subject.repos(GH_USER, GH_REPO).milestones(temp_milestone["number"]).destroy
38
+ end
39
+ end
40
+ end
41
+
42
+ describe "#repos(login,name)#milestones(1)" do
43
+ it "should return an milestone by id" do
44
+ VCR.use_cassette("repos(#{GH_USER},#{GH_REPO}).milestones(1)") do
45
+ temp_milestone = subject.repos(GH_USER, GH_REPO).milestones.create({ :title => "Destroy test milestone" })
46
+
47
+ milestone = subject.repos(GH_USER, GH_REPO).milestones(1)
48
+ should_be_an_milestone(milestone)
49
+
50
+ subject.repos(GH_USER, GH_REPO).milestones(temp_milestone["number"]).destroy
51
+ end
52
+ end
53
+
54
+ describe "#destroy" do
55
+ it "should delete milestone" do
56
+ VCR.use_cassette "milestones(id).destroy" do
57
+ repo = subject.repos(GH_USER, GH_REPO)
58
+ test_milestone = repo.milestones.create({
59
+ :title => "Destroy test milestone"
60
+ })
61
+ should_be_an_milestone(test_milestone)
62
+ subject.repos(GH_USER, GH_REPO).milestones(test_milestone["number"]).destroy.should be_true
63
+ end
64
+ end
65
+ end
66
+
67
+ # Testing milestone proxy
68
+ context "with milestone number" do
69
+ before(:all) do
70
+ VCR.use_cassette "milestones.test" do
71
+ @repo = subject.repos(GH_USER, GH_REPO)
72
+ @test_milestone = @repo.milestones.create({
73
+ :title => "Test milestone #{rand(100)}"
74
+ })
75
+ end
76
+ end
77
+ let(:test_milestone) { @test_milestone }
78
+ let(:test_repo) { @repo }
79
+
80
+ describe "#patch" do
81
+ it "should patch the milestone" do
82
+ VCR.use_cassette "milestones(id).patch" do
83
+ milestone = test_repo.milestones(test_milestone["number"]).patch({
84
+ :description => "awesome description"
85
+ })
86
+ should_be_an_milestone(milestone)
87
+ milestone["description"].should == "awesome description"
88
+ end
89
+ end
90
+ end
91
+
92
+ describe "#close" do
93
+ it "should close the milestone" do
94
+ VCR.use_cassette "milestones(id).close" do
95
+ closed = test_repo.milestones(test_milestone["number"]).close
96
+ closed.should be_true
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ghee::API::Orgs do
4
+ subject { Ghee.new(GH_AUTH) }
5
+
6
+ describe "#orgs" do
7
+
8
+ it "should return list of authenticated users organizations" do
9
+ VCR.use_cassette "orgs" do
10
+ orgs = subject.orgs
11
+ orgs.size.should > 0
12
+ orgs.first["url"].should include("https://api.github.com/orgs")
13
+ end
14
+ end
15
+
16
+ it "should return specific organization" do
17
+ VCR.use_cassette "orgs(name)" do
18
+ org = subject.orgs(GH_ORG)
19
+ org["url"].should include("https://api.github.com/orgs/#{GH_ORG}")
20
+ org["type"].should == "Organization"
21
+ end
22
+ end
23
+
24
+ # not sure how to test this. there isn't a good way to actually
25
+ # patch an organization
26
+ describe "#patch" do
27
+ it "should patch the org" do
28
+ true.should be_true
29
+ end
30
+ end
31
+
32
+ describe "#repos" do
33
+ it "should return a list of repos" do
34
+ VCR.use_cassette "orgs(login).repos" do
35
+ repos = subject.orgs(GH_ORG).repos
36
+ repos.size.should > 0
37
+ repo = repos.first
38
+ repo['url'].should include('https://api.github.com/repos/')
39
+ repo['ssh_url'].should include('git@github.com:')
40
+ repo['owner']['login'].should_not be_nil
41
+ end
42
+ end
43
+
44
+ it "should return a repo" do
45
+ VCR.use_cassette "orgs(login).repos(name)" do
46
+ repos = subject.orgs(GH_ORG).repos
47
+
48
+ repo = subject.orgs(GH_ORG).repos(repos.first['name'])
49
+ repo['url'].should include('https://api.github.com/repos/')
50
+ repo['ssh_url'].should include('git@github.com:')
51
+ repo['owner']['login'].should_not be_nil
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,126 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ghee::API::Repos do
4
+ subject { Ghee.new(GH_AUTH) }
5
+
6
+ def should_be_a_repo(repo)
7
+ repo['url'].should include('https://api.github.com/repos/')
8
+ repo['ssh_url'].should include('git@github.com:')
9
+ repo['owner']['login'].should_not be_nil
10
+ end
11
+
12
+
13
+ describe "#repos(login,name)" do
14
+ it "should be a repo" do
15
+ VCR.use_cassette("repos(#{GH_USER},#{GH_REPO})") do
16
+ repo = subject.repos(GH_USER, GH_REPO)
17
+ should_be_a_repo(repo)
18
+ end
19
+ end
20
+
21
+ describe "#issues" do
22
+ it "should return issues for repo" do
23
+ VCR.use_cassette("repo(#{GH_USER},#{GH_REPO}).issues") do
24
+ issues = subject.repos(GH_USER, GH_REPO).issues
25
+ puts issues.sort_by! { |r| r["title"]}.reverse
26
+ issues.is_a?(Array).should be_true
27
+ issues.size.should > 0
28
+ issues.first["title"].should_not be_nil
29
+ end
30
+ end
31
+ end
32
+
33
+ describe "#labels" do
34
+ it "should return all the labels" do
35
+ VCR.use_cassette("repo(#{GH_USER},#{GH_REPO}).labels") do
36
+ temp_label = subject.repos(GH_USER, GH_REPO).labels.create(:color => "efefef", :name => "temp label")
37
+
38
+ labels = subject.repos(GH_USER, GH_REPO).labels
39
+ labels.size.should > 0
40
+ labels.first["color"].should_not be_nil
41
+
42
+ subject.repos(GH_USER, GH_REPO).labels(temp_label['name']).destroy
43
+ end
44
+ end
45
+
46
+ it "should get a single label" do
47
+ VCR.use_cassette("repo(#{GH_USER},#{GH_REPO}).labels(id)") do
48
+ temp_label = subject.repos(GH_USER, GH_REPO).labels.create(:color => "efefef", :name => "temp label")
49
+
50
+ label = subject.repos(GH_USER,GH_REPO).labels(temp_label["name"])
51
+ label["color"].should == 'efefef'
52
+ label["name"].should == 'temp label'
53
+
54
+ subject.repos(GH_USER, GH_REPO).labels(temp_label['name']).destroy
55
+ end
56
+ end
57
+
58
+ it "should patch a label" do
59
+ VCR.use_cassette("repo(#{GH_USER},#{GH_REPO}).labels.patched") do
60
+ label = subject.repos(GH_USER, GH_REPO).labels.create(:color => "efefef", :name => "patch label")
61
+ label["color"].should == "efefef"
62
+ label["url"].should include "labels/patch"
63
+ label["name"].should == "patch label"
64
+
65
+ patched = subject.repos(GH_USER, GH_REPO).labels(label["name"]).patch(:color => "000000", :name => "patched label")
66
+ patched["color"].should == "000000"
67
+ patched["url"].should include "labels/patched"
68
+ patched["name"].should == "patched label"
69
+
70
+ subject.repos(GH_USER, GH_REPO).labels(patched["name"]).destroy.should be_true
71
+ end
72
+ end
73
+
74
+ it "should create a label" do
75
+ VCR.use_cassette("repo(#{GH_USER},#{GH_REPO}).labels.create") do
76
+ label = subject.repos(GH_USER, GH_REPO).labels.create(:color => "efefef", :name => "created label")
77
+ label["color"].should == "efefef"
78
+ label["url"].should include "labels/created"
79
+ label["name"].should == "created label"
80
+ subject.repos(GH_USER, GH_REPO).labels(label["name"]).destroy.should be_true
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ describe "#user" do
87
+ describe "#repos" do
88
+ it "should return users repos" do
89
+ VCR.use_cassette('users(login).repos') do
90
+ repos = subject.users(GH_USER).repos
91
+ repos.size.should > 0
92
+ should_be_a_repo(repos.first)
93
+ end
94
+ end
95
+ end
96
+
97
+ describe "#repo" do
98
+ it "should return a repo" do
99
+ VCR.use_cassette("user.repos(#{GH_REPO})") do
100
+ repo = subject.user.repos(GH_REPO)
101
+ repo.connection.should_not be_nil
102
+ repo.path_prefix.should == "/repos/#{GH_USER}/#{GH_REPO}"
103
+ should_be_a_repo(repo)
104
+ end
105
+ end
106
+
107
+ describe "#milestones" do
108
+ it "should return milestones for repo" do
109
+ VCR.use_cassette("user.repos(#{GH_REPO}).milestones") do
110
+ milestones = subject.user.repos(GH_REPO).milestones
111
+ milestones.should be_instance_of(Array)
112
+ end
113
+ end
114
+ end
115
+
116
+ describe "#issues" do
117
+ it "should return issues for repo" do
118
+ VCR.use_cassette("user.repos(#{GH_REPO}).issues") do
119
+ issues = subject.user.repos(GH_REPO).issues
120
+ issues.should be_instance_of(Array)
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end