semaphoreapp 0.1.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,153 @@
1
+ require 'spec_helper'
2
+
3
+ describe Semaphoreapp::Api do
4
+ subject{ Semaphoreapp::Api }
5
+
6
+ describe ".url_with_auth_token" do
7
+ before{ Semaphoreapp.stub(:auth_token).and_return('test_token') }
8
+
9
+ it "should append auth_token to the given URL" do
10
+ subject.url_with_auth_token('test_url').should == '/test_url?auth_token=test_token'
11
+ end
12
+
13
+ context "with a page" do
14
+ it "should append page to the given URL" do
15
+ subject.url_with_auth_token('test_url', :page => ':page').should == '/test_url?auth_token=test_token&page=:page'
16
+ end
17
+ end
18
+ end
19
+
20
+ describe "URL generators" do
21
+ before{ Semaphoreapp.stub(:auth_token).and_return('test_token') }
22
+ before{ stub_const('Semaphoreapp::Api::API_URL', 'api_url') }
23
+
24
+ describe ".projects_url" do
25
+ subject{ Semaphoreapp::Api.projects_url }
26
+ it{ should start_with '/api_url/projects' }
27
+ it{ should end_with '?auth_token=test_token' }
28
+ end
29
+
30
+ describe ".branches_url" do
31
+ subject{ Semaphoreapp::Api.branches_url(':hash_id') }
32
+ it{ should start_with '/api_url/projects/:hash_id/branches' }
33
+ it{ should end_with '?auth_token=test_token' }
34
+ end
35
+
36
+ describe ".branch_history_url" do
37
+ subject{ Semaphoreapp::Api.branch_history_url(':hash_id', ':id') }
38
+ it{ should start_with '/api_url/projects/:hash_id/:id' }
39
+ it{ should end_with '?auth_token=test_token' }
40
+
41
+ context "with a page" do
42
+ subject{ Semaphoreapp::Api.branch_history_url(':hash_id', ':id', :page => ':page') }
43
+ it{ should include 'page=:page' }
44
+ end
45
+ end
46
+
47
+ describe ".branch_status_url" do
48
+ subject{ Semaphoreapp::Api.branch_status_url(':hash_id', ':id') }
49
+ it{ should start_with '/api_url/projects/:hash_id/:id/status' }
50
+ it{ should end_with '?auth_token=test_token' }
51
+ end
52
+
53
+ end
54
+
55
+ describe "getters" do
56
+ let(:response){ mock(:response, :body => '') }
57
+ before{ Semaphoreapp::Api.stub(:send_request).and_return(response) }
58
+ before{ Semaphoreapp.stub(:auth_token).and_return('test_token') }
59
+
60
+ describe ".get_projects" do
61
+ it "should send a request to projects_url" do
62
+ Semaphoreapp::Api.should_receive(:projects_url).and_return('projects_url')
63
+ Semaphoreapp::Api.should_receive(:send_request).with('projects_url').and_return(response)
64
+
65
+ Semaphoreapp::Api.get_projects
66
+ end
67
+
68
+ it "should not overwrite the auth_token" do
69
+ Semaphoreapp::Api.should_receive(:set_auth_token).with({})
70
+ Semaphoreapp::Api.get_projects
71
+ end
72
+
73
+ context "with auth_token" do
74
+ it "should set the auth_token" do
75
+ Semaphoreapp::Api.should_receive(:set_auth_token).with(hash_including(:auth_token => 'test_token'))
76
+ Semaphoreapp::Api.get_projects(:auth_token => 'test_token')
77
+ end
78
+ end
79
+ end
80
+
81
+ describe ".get_branches" do
82
+ it "should send a request to branches_url" do
83
+ Semaphoreapp::Api.should_receive(:branches_url).with(':hash_id').and_return('branches_url')
84
+ Semaphoreapp::Api.should_receive(:send_request).with('branches_url').and_return(response)
85
+
86
+ Semaphoreapp::Api.get_branches(':hash_id')
87
+ end
88
+
89
+ it "should not overwrite the auth_token" do
90
+ Semaphoreapp::Api.should_receive(:set_auth_token).with({})
91
+ Semaphoreapp::Api.get_branches(':hash_id')
92
+ end
93
+
94
+ context "with auth_token" do
95
+ it "should set the auth_token" do
96
+ Semaphoreapp::Api.should_receive(:set_auth_token).with(hash_including(:auth_token => 'test_token'))
97
+ Semaphoreapp::Api.get_branches(':hash_id', :auth_token => 'test_token')
98
+ end
99
+ end
100
+ end
101
+
102
+ describe ".get_branch_history" do
103
+ it "should send a request to branch_history_url" do
104
+ Semaphoreapp::Api.should_receive(:branch_history_url).with(':hash_id', ':id', {}).and_return('branch_history_url')
105
+ Semaphoreapp::Api.should_receive(:send_request).with('branch_history_url').and_return(response)
106
+
107
+ Semaphoreapp::Api.get_branch_history(':hash_id', ':id')
108
+ end
109
+
110
+ it "should not overwrite the auth_token" do
111
+ Semaphoreapp::Api.should_receive(:set_auth_token).with({})
112
+ Semaphoreapp::Api.get_branch_history(':hash_id', ':id')
113
+ end
114
+
115
+ context "with auth_token" do
116
+ it "should set the auth_token" do
117
+ Semaphoreapp::Api.should_receive(:set_auth_token).with(hash_including(:auth_token => 'test_token'))
118
+ Semaphoreapp::Api.get_branch_history(':hash_id', ':id', :auth_token => 'test_token')
119
+ end
120
+ end
121
+
122
+ context "with page" do
123
+ it "should request the specified page" do
124
+ Semaphoreapp::Api.should_receive(:branch_history_url).with(':hash_id', ':id', :page => ':page').and_return('branch_history_url')
125
+ Semaphoreapp::Api.get_branch_history(':hash_id', ':id', :page => ':page')
126
+ end
127
+ end
128
+ end
129
+
130
+ describe ".get_branch_status" do
131
+ it "should send a request to branch_status_url" do
132
+ Semaphoreapp::Api.should_receive(:branch_status_url).with(':hash_id', ':id').and_return('branch_status_url')
133
+ Semaphoreapp::Api.should_receive(:send_request).with('branch_status_url').and_return(response)
134
+
135
+ Semaphoreapp::Api.get_branch_status(':hash_id', ':id')
136
+ end
137
+
138
+ it "should not overwrite the auth_token" do
139
+ Semaphoreapp::Api.should_receive(:set_auth_token).with({})
140
+ Semaphoreapp::Api.get_branch_status(':hash_id', ':id')
141
+ end
142
+
143
+ context "with auth_token" do
144
+ it "should set the auth_token" do
145
+ Semaphoreapp::Api.should_receive(:set_auth_token).with(hash_including(:auth_token => 'test_token'))
146
+ Semaphoreapp::Api.get_branch_status(':hash_id', ':id', :auth_token => 'test_token')
147
+ end
148
+ end
149
+ end
150
+
151
+ end
152
+
153
+ end
@@ -0,0 +1,135 @@
1
+ require 'spec_helper'
2
+
3
+ describe Semaphoreapp::Branch do
4
+ let(:project_hash_id) { ':hash_id' }
5
+
6
+ describe ".build" do
7
+
8
+ context "with a hash" do
9
+
10
+ let(:test_hash){ fixture(:branches).first }
11
+
12
+ subject{ Semaphoreapp::Branch.build(test_hash, project_hash_id) }
13
+
14
+ it "should call build_from_hash" do
15
+ Semaphoreapp::Branch.should_receive(:build_from_hash).with(test_hash, project_hash_id)
16
+ subject
17
+ end
18
+
19
+ end
20
+
21
+ context "with an array" do
22
+
23
+ let(:test_array){ fixture(:branches) }
24
+ subject{ Semaphoreapp::Branch.build(test_array, project_hash_id) }
25
+
26
+ it "should call build_from_array" do
27
+ Semaphoreapp::Branch.should_receive(:build_from_array).with(test_array, project_hash_id)
28
+ subject
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
35
+ describe ".build_from_hash" do
36
+
37
+ let(:test_hash){ fixture(:branches).first }
38
+ subject{ Semaphoreapp::Branch.build_from_hash(test_hash, project_hash_id) }
39
+
40
+ it{ should be_an_instance_of Semaphoreapp::Branch }
41
+
42
+ fixture(:branches).first.each do |key, value|
43
+ it "should have attribute #{key}" do
44
+ subject.send(key).should == value
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+ describe ".build_from_array" do
51
+
52
+ let(:test_array){ fixture(:branches) }
53
+ subject{ Semaphoreapp::Branch.build_from_array(test_array, project_hash_id) }
54
+
55
+ it{ should be_an_instance_of Array }
56
+
57
+ it "should call build_from_hash for all the hashes in the array" do
58
+ test_array.each do |test_hash|
59
+ Semaphoreapp::Branch.should_receive(:build_from_hash).with(test_hash, project_hash_id)
60
+ end
61
+
62
+ subject
63
+ end
64
+
65
+ end
66
+
67
+ describe ".all_by_project_hash_id" do
68
+
69
+ let(:hash_id) { ':hash_id' }
70
+ let(:branches) { fixture(:branches) }
71
+ before{ Semaphoreapp::JsonApi.stub(:get_branches).and_return(branches) }
72
+ subject{ Semaphoreapp::Branch.all_by_project_hash_id(hash_id) }
73
+
74
+ it{ should be_an_instance_of Array }
75
+
76
+ it "should get branches JSON from the API" do
77
+ Semaphoreapp::JsonApi.should_receive(:get_branches).with(hash_id)
78
+ subject
79
+ end
80
+
81
+ it "should call Branch.build with an array of branches" do
82
+ Semaphoreapp::Branch.should_receive(:build).with(branches, hash_id)
83
+ subject
84
+ end
85
+
86
+ end
87
+
88
+ describe ".find" do
89
+
90
+ let(:branches){ Semaphoreapp::Branch.build(fixture(:branches), ':hash_id') }
91
+ let(:expected_branch) { branches.first }
92
+ before{ Semaphoreapp::Branch.stub(:all_by_project_hash_id).with(':hash_id').and_return(branches) }
93
+ subject{ Semaphoreapp::Branch.find(':hash_id', expected_branch.id) }
94
+
95
+ it{ should be_an_instance_of Semaphoreapp::Branch }
96
+ it "should return the Branch object with the specified branch_id" do
97
+ subject.should == expected_branch
98
+ end
99
+
100
+ context "with the wrong branch_id" do
101
+ subject{ Semaphoreapp::Branch.find(':hash_id', ':wrong_id') }
102
+ it{ should be_nil }
103
+ end
104
+
105
+ end
106
+
107
+ describe ".find_by_name" do
108
+
109
+ let(:branches){ Semaphoreapp::Branch.build(fixture(:branches), ':hash_id') }
110
+ let(:expected_branch) { branches.first }
111
+ before{ Semaphoreapp::Branch.stub(:all_by_project_hash_id).with(':hash_id').and_return(branches) }
112
+ subject{ Semaphoreapp::Branch.find_by_name(':hash_id', expected_branch.name) }
113
+
114
+ it{ should be_an_instance_of Semaphoreapp::Branch }
115
+ it "should return the Branch object with the specified name" do
116
+ subject.should == expected_branch
117
+ end
118
+
119
+ context "with the wrong name" do
120
+ subject{ Semaphoreapp::Branch.find_by_name(':hash_id', ':wrong_name') }
121
+ it{ should be_nil }
122
+ end
123
+
124
+ end
125
+
126
+ describe ".find_master" do
127
+ subject{ Semaphoreapp::Branch.find_master(':hash_id') }
128
+
129
+ it "should find the branch named 'master'" do
130
+ Semaphoreapp::Branch.should_receive(:find_by_name).with(anything(), 'master')
131
+ subject
132
+ end
133
+ end
134
+
135
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe Semaphoreapp::BranchStatus do
4
+
5
+ describe ".build" do
6
+
7
+ context "with a hash" do
8
+
9
+ let(:test_hash){ fixture(:branch_statuses).first }
10
+ subject{ Semaphoreapp::BranchStatus.build(test_hash) }
11
+
12
+ it "should call build_from_hash" do
13
+ Semaphoreapp::BranchStatus.should_receive(:build_from_hash).with(test_hash)
14
+ subject
15
+ end
16
+
17
+ end
18
+
19
+ context "with an array" do
20
+
21
+ let(:test_array){ fixture(:branch_statuses) }
22
+ subject{ Semaphoreapp::BranchStatus.build(test_array) }
23
+
24
+ it "should call build_from_array" do
25
+ Semaphoreapp::BranchStatus.should_receive(:build_from_array).with(test_array)
26
+ subject
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+
33
+ describe ".build_from_hash" do
34
+
35
+ let(:test_hash){ fixture(:branch_statuses).first }
36
+ subject{ Semaphoreapp::BranchStatus.build_from_hash(test_hash) }
37
+
38
+ it{ should be_an_instance_of Semaphoreapp::BranchStatus }
39
+
40
+ fixture(:branch_statuses).first.reject{ |key| key == 'commit' }.each do |key, value|
41
+ it "should have attribute #{key}" do
42
+ subject.send(key).should == value
43
+ end
44
+ end
45
+
46
+ context "with a commit" do
47
+ it "should have a Commit object as the commit attribute" do
48
+ subject.commit.should be_an_instance_of Semaphoreapp::Commit
49
+ end
50
+ end
51
+
52
+ context "without a commit" do
53
+ before{ test_hash.delete('commit') }
54
+ it "should set the commit attribute to nil" do
55
+ subject.commit.should be_nil
56
+ end
57
+ end
58
+
59
+ end
60
+
61
+ describe ".build_from_array" do
62
+
63
+ let(:test_array){ fixture(:branch_statuses) }
64
+ subject{ Semaphoreapp::BranchStatus.build_from_array(test_array) }
65
+
66
+ it{ should be_an_instance_of Array }
67
+
68
+ it "should call build_from_hash for all the hashes in the array" do
69
+ test_array.each do |test_hash|
70
+ Semaphoreapp::BranchStatus.should_receive(:build_from_hash).with(test_hash)
71
+ end
72
+
73
+ subject
74
+ end
75
+
76
+ end
77
+
78
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe Semaphoreapp::Build do
4
+
5
+ describe ".build" do
6
+
7
+ context "with a hash" do
8
+
9
+ let(:test_hash){ fixture(:builds).first }
10
+ subject{ Semaphoreapp::Build.build(test_hash) }
11
+
12
+ it "should call build_from_hash" do
13
+ Semaphoreapp::Build.should_receive(:build_from_hash).with(test_hash)
14
+ subject
15
+ end
16
+
17
+ end
18
+
19
+ context "with an array" do
20
+
21
+ let(:test_array){ fixture(:builds) }
22
+ subject{ Semaphoreapp::Build.build(test_array) }
23
+
24
+ it "should call build_from_array" do
25
+ Semaphoreapp::Build.should_receive(:build_from_array).with(test_array)
26
+ subject
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+
33
+ describe ".build_from_hash" do
34
+
35
+ let(:test_hash){ fixture(:builds).first }
36
+ subject{ Semaphoreapp::Build.build_from_hash(test_hash) }
37
+
38
+ it{ should be_an_instance_of Semaphoreapp::Build }
39
+
40
+ fixture(:builds).first.reject{ |key| key == 'commit' }.each do |key, value|
41
+ it "should have attribute #{key}" do
42
+ subject.send(key).should == value
43
+ end
44
+ end
45
+
46
+ context "with a commit" do
47
+ it "should have a Commit object as the commit attribute" do
48
+ subject.commit.should be_an_instance_of Semaphoreapp::Commit
49
+ end
50
+ end
51
+
52
+ context "without a commit" do
53
+ before{ test_hash.delete('commit') }
54
+ it "should set the commit attribute to nil" do
55
+ subject.commit.should be_nil
56
+ end
57
+ end
58
+
59
+ end
60
+
61
+ describe ".build_from_array" do
62
+
63
+ let(:test_array){ fixture(:builds) }
64
+ subject{ Semaphoreapp::Build.build_from_array(test_array) }
65
+
66
+ it{ should be_an_instance_of Array }
67
+
68
+ it "should call build_from_hash for all the hashes in the array" do
69
+ test_array.each do |test_hash|
70
+ Semaphoreapp::Build.should_receive(:build_from_hash).with(test_hash)
71
+ end
72
+
73
+ subject
74
+ end
75
+
76
+ end
77
+
78
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Semaphoreapp::Commit do
4
+
5
+ describe ".build" do
6
+
7
+ let(:test_hash){ fixture(:commit) }
8
+ subject{ Semaphoreapp::Commit.build(test_hash) }
9
+
10
+ it{ should be_an_instance_of Semaphoreapp::Commit }
11
+
12
+ fixture(:commit).each do |key, value|
13
+ it "should have attribute #{key}" do
14
+ subject.send(key).should == value
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Semaphoreapp::JsonApi do
4
+
5
+ describe ".raise_if_error" do
6
+ context "with an error" do
7
+ let(:error){ {'error' => 'error message'} }
8
+ subject{ Semaphoreapp::JsonApi.raise_if_error(error) }
9
+
10
+ it{ expect{ subject }.to raise_error Semaphoreapp::Api::Error }
11
+ end
12
+
13
+ context "with no error" do
14
+ let(:obj){ Object.new }
15
+ subject{ Semaphoreapp::JsonApi.raise_if_error(obj) }
16
+
17
+ it{ expect{ subject }.not_to raise_error Semaphoreapp::Api::Error }
18
+
19
+ it "should return its parameter without changes" do
20
+ subject.should == obj
21
+ end
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe Semaphoreapp::Project do
4
+
5
+ describe ".build" do
6
+
7
+ context "with a hash" do
8
+
9
+ let(:test_hash){ fixture(:projects).first }
10
+
11
+ subject{ Semaphoreapp::Project.build(test_hash) }
12
+
13
+ it "should call build_from_hash" do
14
+ Semaphoreapp::Project.should_receive(:build_from_hash).with(test_hash)
15
+ subject
16
+ end
17
+
18
+ end
19
+
20
+ context "with an array" do
21
+
22
+ let(:test_array){ fixture(:projects) }
23
+ subject{ Semaphoreapp::Project.build(test_array) }
24
+
25
+ it "should call build_from_array" do
26
+ Semaphoreapp::Project.should_receive(:build_from_array).with(test_array)
27
+ subject
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ describe ".build_from_hash" do
35
+
36
+ let(:test_hash){ fixture(:projects).first }
37
+ subject{ Semaphoreapp::Project.build_from_hash(test_hash) }
38
+
39
+ it{ should be_an_instance_of Semaphoreapp::Project }
40
+
41
+ fixture(:projects).first.reject{ |key| key == 'branches' }.each do |key, value|
42
+ it "should have attribute #{key}" do
43
+ subject.send(key).should == value
44
+ end
45
+ end
46
+
47
+ context "with branch statuses" do
48
+ it "should have an array of BranchStatus object as the 'branches' attribute" do
49
+ subject.branches.should be_an_instance_of Array
50
+ subject.branches.each{ |branch| branch.should be_an_instance_of Semaphoreapp::BranchStatus }
51
+ end
52
+ end
53
+
54
+ context "without branch statuses" do
55
+ before{ test_hash.delete('branches') }
56
+ it "should set the 'branches' attribute to nil" do
57
+ subject.branches.should be_nil
58
+ end
59
+ end
60
+
61
+ end
62
+
63
+ describe ".build_from_array" do
64
+
65
+ let(:test_array){ fixture(:projects) }
66
+ subject{ Semaphoreapp::Project.build_from_array(test_array) }
67
+
68
+ it{ should be_an_instance_of Array }
69
+
70
+ it "should call build_from_hash for all the hashes in the array" do
71
+ test_array.each do |test_hash|
72
+ Semaphoreapp::Project.should_receive(:build_from_hash).with(test_hash)
73
+ end
74
+
75
+ subject
76
+ end
77
+
78
+ end
79
+
80
+ end
@@ -0,0 +1,23 @@
1
+ $:.unshift File.realpath File.join(File.dirname(__FILE__), '..', 'lib')
2
+
3
+ require 'semaphoreapp'
4
+
5
+ def json_fixture(name)
6
+ File.read File.join(File.dirname(__FILE__), 'fixtures', "#{name.to_s}.json")
7
+ end
8
+
9
+ def fixture(name)
10
+ JSON.parse(json_fixture(name))
11
+ end
12
+
13
+ # See: http://stackoverflow.com/a/7364289/551557
14
+ RSpec.configure do |config|
15
+ # Use color in STDOUT
16
+ config.color_enabled = true
17
+
18
+ # Use color not only in STDOUT but also in pagers and files
19
+ config.tty = true
20
+
21
+ # Use the specified formatter
22
+ config.formatter = :documentation # :progress, :html, :textmate
23
+ end