rightsignature-railstyle 1.1.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ module RightSignature
2
+ VERSION = "1.1.9"
3
+ end
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rightsignature/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rightsignature-railstyle"
7
+ s.version = RightSignature::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Nick Barone"]
10
+ s.email = [""]
11
+ s.homepage = "http://github.com/narfanator/rightsignature-api"
12
+ s.summary = "API wrapper for RightSignature"
13
+ s.description = "Provides a wrapper for the RightSignature API."
14
+ s.license = 'MIT'
15
+
16
+ s.add_development_dependency "bundler", ">= 1.0.0"
17
+ s.add_development_dependency "rspec", ">= 2.11.0"
18
+
19
+ s.add_dependency "oauth", ">= 0.4.0"
20
+ s.add_dependency "httparty", ">= 0.9.0"
21
+ s.add_dependency 'xml-fu', '>= 0.2.0'
22
+
23
+ s.files = `git ls-files`.split("\n")
24
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
25
+ s.require_path = 'lib'
26
+ end
@@ -0,0 +1,54 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe RightSignature::Account do
4
+ describe "user_details" do
5
+ it "should GET /api/users/user_details.xml" do
6
+ @rs.should_receive(:get).with('/api/users/user_details.xml')
7
+ @rs.user_details
8
+ end
9
+ end
10
+
11
+ describe "add_user" do
12
+ it "should POST /api/users.xml with user email and name in hash" do
13
+ @rs.should_receive(:post).with('/api/users.xml', {:user => {:name => "Jimmy Cricket", :email => "jimmy@example.com"}})
14
+ @rs.add_user("Jimmy Cricket", "jimmy@example.com")
15
+ end
16
+ end
17
+
18
+ describe "usage_report" do
19
+ it "should GET /api/account/usage_report.xml" do
20
+ @rs.should_receive(:get).with('/api/account/usage_report.xml', {})
21
+ @rs.usage_report
22
+ end
23
+
24
+ it "should GET /api/account/usage_report.xml with acceptable param for :since" do
25
+ @rs.should_receive(:get).with('/api/account/usage_report.xml', {:since => "week"})
26
+ @rs.usage_report("week")
27
+
28
+ @rs.should_receive(:get).with('/api/account/usage_report.xml', {:since => "month"})
29
+ @rs.usage_report("month")
30
+
31
+ @rs.should_receive(:get).with('/api/account/usage_report.xml', {:since => "day"})
32
+ @rs.usage_report("day")
33
+
34
+ @rs.should_receive(:get).with('/api/account/usage_report.xml', {})
35
+ @rs.usage_report("1/4/90")
36
+ end
37
+
38
+ it "should GET /api/account/usage_report.xml with param :signed" do
39
+ @rs.should_receive(:get).with('/api/account/usage_report.xml', {:signed => "true"})
40
+ @rs.usage_report(nil, true)
41
+
42
+ @rs.should_receive(:get).with('/api/account/usage_report.xml', {:signed => "false"})
43
+ @rs.usage_report(nil, false)
44
+ end
45
+
46
+ it "should GET /api/account/usage_report.xml with params :since and :signed" do
47
+ @rs.should_receive(:get).with('/api/account/usage_report.xml', {:signed => "true"})
48
+ @rs.usage_report(nil, true)
49
+
50
+ @rs.should_receive(:get).with('/api/account/usage_report.xml', {:signed => "false"})
51
+ @rs.usage_report(nil, false)
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe RightSignature::TokenConnection do
4
+ it "should raise error if no configuration is set" do
5
+ token_connection = RightSignature::TokenConnection.new('')
6
+ lambda{token_connection.request(:get, "path", {:query => {:search => 'hey there'}})}.should raise_error(Exception, "Please set api_token")
7
+ end
8
+
9
+ it "should create 'api-token' in headers with :api_token credentials, accept of '*/*', and content-type of xml with given method" do
10
+ token_connection = RightSignature::TokenConnection.new('APITOKEN')
11
+ token_connection.class.should_receive(:get).with("path", {:query => {:search => 'hey there'}, :headers => {"api-token" => "APITOKEN", "Accept" => "*/*", "content-type" => "application/xml"}}).and_return(stub("HTTPartyResponse", :parsed_response => nil))
12
+ token_connection.request(:get, "path", {:query => {:search => 'hey there'}})
13
+ end
14
+
15
+ it "should add 'api-token' to headers with :api_token credentials, accept of '*/*', and content-type of xml with given method" do
16
+ token_connection = RightSignature::TokenConnection.new('APITOKEN')
17
+ token_connection.class.should_receive(:get).with("path", {:query => {:search => 'hey there'}, :headers => {"api-token" => "APITOKEN", "Accept" => "*/*", "content-type" => "application/xml", :my_header => "someHeader"}}).and_return(stub("HTTPartyResponse", :parsed_response => nil))
18
+ token_connection.request(:get, "path", {:query => {:search => 'hey there'}, :headers => {:my_header => "someHeader"}})
19
+ end
20
+
21
+ it "should create 'api-token' in headers with :api_token credentials, accept of '*/*', and content-type of xml to POST method" do
22
+ token_connection = RightSignature::TokenConnection.new('APITOKEN')
23
+ token_connection.class.should_receive(:post).with("path", {:body => {:document => {:roles => []}}, :headers => {"api-token" => "APITOKEN", "Accept" => "*/*", "content-type" => "application/xml"}}).and_return(stub("HTTPartyResponse", :parsed_response => nil))
24
+ token_connection.request(:post, "path", {:body => {:document => {:roles => []}}})
25
+ end
26
+
27
+ end
@@ -0,0 +1,98 @@
1
+ require File.dirname(__FILE__) + '/../lib/rightsignature'
2
+
3
+ describe RightSignature do
4
+ describe "load_configuration" do
5
+ it "should load api_token into configurations[:api_token]" do
6
+ rs = RightSignature::Connection.new(:api_token => "MyToken")
7
+ rs.configuration[:api_token].should == "MyToken"
8
+ end
9
+
10
+ it "should load OAuth consumer key, consumer secret, access token and access secret" do
11
+ rs = RightSignature::Connection.new(:consumer_key => "key", :consumer_secret => "secret", :access_token => "atoken", :access_secret => "asecret")
12
+ rs.configuration[:consumer_key].should == "key"
13
+ rs.configuration[:consumer_secret].should == "secret"
14
+ rs.configuration[:access_token].should == "atoken"
15
+ rs.configuration[:access_secret].should == "asecret"
16
+ end
17
+ end
18
+
19
+ describe "check_credentials" do
20
+ it "should raise error if configuration is not set" do
21
+ rs = RightSignature::Connection.new()
22
+ lambda {rs.check_credentials}.should raise_error
23
+ end
24
+
25
+ it "should raise error if api_token is blank and oauth credentials are not set" do
26
+ rs = RightSignature::Connection.new(:api_token => " ")
27
+ lambda {rs.check_credentials}.should raise_error
28
+ end
29
+
30
+ it "should raise error if consumer_key, consumer_secret, access_token, or access_secret is not set" do
31
+ rs = RightSignature::Connection.new(:consumer_secret => "secret", :access_token => "atoken", :access_secret => "asecret")
32
+ lambda {rs.check_credentials}.should raise_error
33
+
34
+ rs = RightSignature::Connection.new(:consumer_key => "key", :access_token => "atoken", :access_secret => "asecret")
35
+ lambda {rs.check_credentials}.should raise_error
36
+
37
+ rs = RightSignature::Connection.new(:consumer_key => "key", :consumer_secret => "secret", :access_secret => "asecret")
38
+ lambda {rs.check_credentials}.should raise_error
39
+
40
+ rs = RightSignature::Connection.new(:consumer_key => "key", :consumer_secret => "secret", :access_token => "atoken")
41
+ lambda {rs.check_credentials}.should raise_error
42
+ end
43
+
44
+ it "should not raise error if consumer_key, consumer_secret, access_token, and access_secret is set" do
45
+ rs = RightSignature::Connection.new(:consumer_key => "key", :consumer_secret => "secret", :access_token => "atoken", :access_secret => "asecret")
46
+ rs.check_credentials
47
+ end
48
+
49
+ it "should not raise error if api_token is set" do
50
+ rs = RightSignature::Connection.new(:api_token => "asdf")
51
+ rs.check_credentials
52
+ end
53
+ end
54
+
55
+ describe "has_api_token?" do
56
+ it "should be false if configuration is not set" do
57
+ rs = RightSignature::Connection.new()
58
+ rs.has_api_token?.should be false
59
+ end
60
+
61
+ it "should be false if api_token is blank" do
62
+ rs = RightSignature::Connection.new(:api_token => " ")
63
+ rs.has_api_token?.should be false
64
+ end
65
+
66
+ it "should be true if api_token is set" do
67
+ rs = RightSignature::Connection.new(:api_token => "abc")
68
+ rs.has_api_token?.should be true
69
+ end
70
+
71
+ end
72
+
73
+ describe "has_oauth_credentials?" do
74
+ it "should be false if configuration is not set" do
75
+ rs = RightSignature::Connection.new()
76
+ rs.has_oauth_credentials?.should be false
77
+ end
78
+
79
+ it "should be false if consumer_key, consumer_secret, access_token, or access_secret is not set" do
80
+ rs = RightSignature::Connection.new(:consumer_secret => "secret", :access_token => "atoken", :access_secret => "asecret")
81
+ rs.has_oauth_credentials?.should be false
82
+
83
+ rs = RightSignature::Connection.new(:consumer_key => "key", :access_token => "atoken", :access_secret => "asecret")
84
+ rs.has_oauth_credentials?.should be false
85
+
86
+ rs = RightSignature::Connection.new(:consumer_key => "key", :consumer_secret => "secret", :access_secret => "asecret")
87
+ rs.has_oauth_credentials?.should be false
88
+
89
+ rs = RightSignature::Connection.new(:consumer_key => "key", :consumer_secret => "secret", :access_token => "atoken")
90
+ rs.has_oauth_credentials?.should be false
91
+ end
92
+
93
+ it "should be true if consumer_key, consumer_secret, access_token, and access_secret is set" do
94
+ rs = RightSignature::Connection.new(:consumer_key => "key", :consumer_secret => "secret", :access_token => "atoken", :access_secret => "asecret")
95
+ rs.has_oauth_credentials?.should be true
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,224 @@
1
+ require File.dirname(__FILE__) + '/../lib/rightsignature'
2
+
3
+ describe RightSignature::Connection do
4
+ before do
5
+ @net_http_response = Net::HTTPOK.new('1.1', 200, 'OK')
6
+ @net_http_response.stub(:body => '')
7
+
8
+ @httparty_response = stub("HTTPartyResponse", :body => '')
9
+ @httparty_response.stub(:parsed_response) {nil}
10
+ @httparty_response.stub(:success?) {true}
11
+ end
12
+
13
+ describe "GET" do
14
+ describe "connection method" do
15
+ it "should default to RightSignature::57 if no api_token was specified" do
16
+ @rs = RightSignature::Connection.new({:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
17
+ @rs.oauth_connection.should_receive(:request).and_return(@net_http_response)
18
+ @rs.get("/path")
19
+ end
20
+
21
+ it "should use Token Connection if api_token was specified" do
22
+ @rs = RightSignature::Connection.new({:api_token => "APITOKEN", :consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
23
+ @rs.token_connection.should_receive(:request).and_return(@httparty_response)
24
+ @rs.get("/path")
25
+ end
26
+
27
+ it "should use Token Connection if only api_token was specified" do
28
+ @rs = RightSignature::Connection.new({:api_token => "APITOKEN"})
29
+ @rs.token_connection.should_receive(:request).and_return(@httparty_response)
30
+ @rs.get("/path")
31
+ end
32
+ end
33
+
34
+ it "should raise error if no configuration is set" do
35
+ @rs = RightSignature::Connection.new({})
36
+ lambda{@rs.get("/path")}.should raise_error
37
+ end
38
+
39
+ describe "using OauthConnection" do
40
+ it "should append params into path alphabetically and URI escaped" do
41
+ @rs = RightSignature::Connection.new({:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
42
+ @net_http_response.stub(:body).and_return('<document><subject>My Subject</subject></document>')
43
+ @rs.oauth_connection.should_receive(:request).with(:get, "/path?page=1&q=search%20me", {}).and_return(@net_http_response)
44
+ @rs.get("/path", {:q => 'search me', :page => 1})
45
+ end
46
+
47
+ it "should return converted response body from XML to hash" do
48
+ @rs = RightSignature::Connection.new({:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
49
+ response = Net::HTTPSuccess.new('1.1', 200, 'OK')
50
+ response.stub(:body).and_return('<document><subject>My Subject</subject></document>')
51
+ @rs.oauth_connection.should_receive(:request).with(:get, "/path?page=1&q=search%20me", {}).and_return(response)
52
+ @rs.get("/path", {:q => 'search me', :page => 1}).should == {'document' => {'subject' => "My Subject"}}
53
+ end
54
+ end
55
+
56
+ describe "using TokenConnection" do
57
+ it "should append params and header into query option and header option" do
58
+ @rs = RightSignature::Connection.new({:api_token => 'token'})
59
+ @rs.token_connection.should_receive(:request).with(:get, "/path", {:query => {:q => 'search me', :page => 1}, :headers => {"User-Agent" => "me"}}).and_return(@httparty_response)
60
+ @rs.get("/path", {:q => 'search me', :page => 1}, {"User-Agent" => "me"})
61
+ end
62
+
63
+ it "should return converted parsed_response from response" do
64
+ @rs = RightSignature::Connection.new({:api_token => 'token'})
65
+ @httparty_response.should_receive(:parsed_response).and_return({'document' => {'subject' => "My Subject"}})
66
+ @rs.token_connection.stub(:request).and_return(@httparty_response)
67
+ @rs.get("/path", {:q => 'search me', :page => 1}).should == {'document' => {'subject' => "My Subject"}}
68
+ end
69
+ end
70
+ end
71
+
72
+ describe "POST" do
73
+ describe "connection method" do
74
+ before do
75
+ @rs = RightSignature::Connection.new({:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
76
+ @rs.token_connection.stub(:request => @net_http_response)
77
+ @rs.oauth_connection.stub(:request => @httparty_response)
78
+ end
79
+
80
+ it "should default to Oauth Connection if no api_token was specified" do
81
+ @rs.oauth_connection.should_receive(:request).and_return(@net_http_response)
82
+ @rs.post("/path")
83
+ end
84
+
85
+ it "should default to Token Connection if api_token was specified" do
86
+ @rs = RightSignature::Connection.new({:api_token => "APITOKEN", :consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
87
+ @rs.token_connection.should_receive(:request).and_return(@httparty_response)
88
+ @rs.post("/path")
89
+ end
90
+
91
+ it "should default to Token Connection if only api_token was specified" do
92
+ @rs = RightSignature::Connection.new({:api_token => "APITOKEN"})
93
+ @rs.token_connection.should_receive(:request).and_return(@httparty_response)
94
+ @rs.post("/path")
95
+ end
96
+
97
+ it "should raise error if no configuration is set" do
98
+ @rs = RightSignature::Connection.new({})
99
+ lambda{@rs.post("/path")}.should raise_error
100
+ end
101
+ end
102
+
103
+
104
+ describe "DELETE" do
105
+ describe "connection method" do
106
+ it "should default to RightSignature::57 if no api_token was specified" do
107
+ @rs = RightSignature::Connection.new({:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
108
+ @rs.oauth_connection.should_receive(:request).and_return(@net_http_response)
109
+ @rs.delete("/path")
110
+ end
111
+
112
+ it "should use Token Connection if api_token was specified" do
113
+ @rs = RightSignature::Connection.new({:api_token => "APITOKEN", :consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
114
+ @rs.token_connection.should_receive(:request).and_return(@httparty_response)
115
+ @rs.delete("/path")
116
+ end
117
+
118
+ it "should use Token Connection if only api_token was specified" do
119
+ @rs = RightSignature::Connection.new({:api_token => "APITOKEN"})
120
+ @rs.token_connection.should_receive(:request).and_return(@httparty_response)
121
+ @rs.delete("/path")
122
+ end
123
+ end
124
+
125
+ it "should raise error if no configuration is set" do
126
+ @rs = RightSignature::Connection.new({})
127
+ lambda{@rs.delete("/path")}.should raise_error
128
+ end
129
+
130
+ describe "using OauthConnection" do
131
+ it "should return converted response body from XML to hash" do
132
+ @rs = RightSignature::Connection.new({:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
133
+ response = Net::HTTPSuccess.new('1.1', 200, 'OK')
134
+ response.stub(:body).and_return('<document><subject>My Subject</subject></document>')
135
+ @rs.oauth_connection.should_receive(:request).with(:delete, "/path", {}).and_return(response)
136
+ @rs.delete("/path").should == {'document' => {'subject' => "My Subject"}}
137
+ end
138
+
139
+ it "should pass headers" do
140
+ @rs = RightSignature::Connection.new({:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
141
+ response = Net::HTTPSuccess.new('1.1', 200, 'OK')
142
+ response.stub(:body).and_return('<document><subject>My Subject</subject></document>')
143
+ @rs.oauth_connection.should_receive(:request).with(:delete, "/path", {"User-Agent" => "custom"}).and_return(response)
144
+ @rs.delete("/path", {"User-Agent" => "custom"}).should == {'document' => {'subject' => "My Subject"}}
145
+ end
146
+ end
147
+
148
+ describe "using TokenConnection" do
149
+ it "should append headers into headers option" do
150
+ @rs = RightSignature::Connection.new({:api_token => 'token'})
151
+ @rs.token_connection.should_receive(:request).with(:delete, "/path", {:headers => {"User-Agent" => "me"}}).and_return(@httparty_response)
152
+ @rs.delete("/path", {"User-Agent" => "me"})
153
+ end
154
+
155
+ it "should return converted parsed_response from response" do
156
+ @rs = RightSignature::Connection.new({:api_token => 'token'})
157
+ @httparty_response.should_receive(:parsed_response).and_return({'document' => {'subject' => "My Subject"}})
158
+ @rs.token_connection.stub(:request).and_return(@httparty_response)
159
+ @rs.delete("/path").should == {'document' => {'subject' => "My Subject"}}
160
+ end
161
+ end
162
+ end
163
+
164
+ describe "PUT" do
165
+ describe "connection method" do
166
+ it "should default to RightSignature::57 if no api_token was specified" do
167
+ @rs = RightSignature::Connection.new({:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
168
+ @rs.oauth_connection.should_receive(:request).and_return(@net_http_response)
169
+ @rs.get("/path")
170
+ end
171
+
172
+ it "should use Token Connection if api_token was specified" do
173
+ @rs = RightSignature::Connection.new({:api_token => "APITOKEN", :consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
174
+ @rs.token_connection.should_receive(:request).and_return(@httparty_response)
175
+ @rs.put("/path")
176
+ end
177
+
178
+ it "should use Token Connection if only api_token was specified" do
179
+ @rs = RightSignature::Connection.new({:api_token => "APITOKEN"})
180
+ @rs.token_connection.should_receive(:request).and_return(@httparty_response)
181
+ @rs.put("/path")
182
+ end
183
+ end
184
+
185
+ it "should raise error if no configuration is set" do
186
+ @rs = RightSignature::Connection.new({})
187
+ lambda{@rs.put("/path")}.should raise_error
188
+ end
189
+
190
+ describe "using OauthConnection" do
191
+ it "should convert body into XML" do
192
+ @rs = RightSignature::Connection.new({:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
193
+ @net_http_response.stub(:body).and_return('<document><subject>My Subject</subject></document>')
194
+ @rs.oauth_connection.should_receive(:request).with(:put, "/path", "<document><something>else</something><page>1</page></document>", {}).and_return(@net_http_response)
195
+ @rs.put("/path", {:document => {:something => "else", :page => 1}})
196
+ end
197
+
198
+ it "should return converted response body from XML to hash" do
199
+ @rs = RightSignature::Connection.new({:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"})
200
+ response = Net::HTTPSuccess.new('1.1', 200, 'OK')
201
+ response.stub(:body).and_return('<document><subject>My Subject</subject></document>')
202
+ @rs.oauth_connection.should_receive(:request).with(:put, "/path", "<document><something>else</something><page>1</page></document>", {}).and_return(response)
203
+ @rs.put("/path", {:document => {:something => "else", :page => 1}}).should == {'document' => {'subject' => "My Subject"}}
204
+ end
205
+ end
206
+
207
+ describe "using TokenConnection" do
208
+ it "should append params and header into query option and header option" do
209
+ @rs = RightSignature::Connection.new({:api_token => 'token'})
210
+ @rs.token_connection.should_receive(:request).with(:put, "/path", {:body => "<document><something>else</something><page>1</page></document>", :headers => {"User-Agent" => "me"}}).and_return(@httparty_response)
211
+ @rs.put("/path", {:document => {:something => "else", :page => 1}}, {"User-Agent" => "me"})
212
+ end
213
+
214
+ it "should return converted parsed_response from response" do
215
+ @rs = RightSignature::Connection.new({:api_token => 'token'})
216
+ @httparty_response.should_receive(:parsed_response).and_return({'document' => {'subject' => "My Subject"}})
217
+ @rs.token_connection.stub(:request).and_return(@httparty_response)
218
+ @rs.put("/path", {:document => {:something => "else", :page => 1}}).should == {'document' => {'subject' => "My Subject"}}
219
+ end
220
+ end
221
+ end
222
+
223
+ end
224
+ end
@@ -0,0 +1,301 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe RightSignature::Document do
4
+ describe "documents_list" do
5
+ it "should GET /documents.xml" do
6
+ @rs.should_receive(:get).with('/api/documents.xml', {})
7
+ @rs.documents_list
8
+ end
9
+
10
+ it "should pass search options to /api/templates.xml" do
11
+ @rs.should_receive(:get).with('/api/documents.xml', {:search => "search", :page => 2})
12
+ @rs.documents_list(:search => "search", :page => 2)
13
+ end
14
+
15
+ it "should convert array in options :tags into a string" do
16
+ @rs.should_receive(:get).with('/api/documents.xml', {:tags => "hello,what_is:up"})
17
+ @rs.documents_list(:tags => ['hello', {'what_is' => "up"}])
18
+ end
19
+
20
+ it "should convert array of options :state into a string" do
21
+ @rs.should_receive(:get).with('/api/documents.xml', {:state => 'pending,trashed'})
22
+ @rs.documents_list(:state => ['pending', 'trashed'])
23
+ end
24
+ end
25
+
26
+ describe "details" do
27
+ it "should GET /api/documentsMYGUID.xml" do
28
+ @rs.should_receive(:get).with('/api/documents/MYGUID.xml')
29
+ @rs.document_details('MYGUID')
30
+ end
31
+ end
32
+
33
+ describe "details" do
34
+ it "should GET /api/documentsMYGUID.xml" do
35
+ @rs.should_receive(:get).with('/api/documents/MYGUID.xml')
36
+ @rs.document_details('MYGUID')
37
+ end
38
+ end
39
+
40
+ describe "documents_batch_details" do
41
+ it "should GET /api/documentsMYGUID1,MYGUID2.xml" do
42
+ @rs.should_receive(:get).with('/api/documents/MYGUID1,MYGUID2/batch_details.xml')
43
+ @rs.documents_batch_details(['MYGUID1','MYGUID2'])
44
+ end
45
+ end
46
+
47
+ describe "send_reminder" do
48
+ it "should POST /api/documentsMYGUID/send_reminders.xml" do
49
+ @rs.should_receive(:post).with('/api/documents/MYGUID/send_reminders.xml', {})
50
+ @rs.send_reminder('MYGUID')
51
+ end
52
+ end
53
+
54
+ describe "trash" do
55
+ it "should POST /api/documents/MYGUID/trash.xml" do
56
+ @rs.should_receive(:post).with('/api/documents/MYGUID/trash.xml', {})
57
+ @rs.trash_document('MYGUID')
58
+ end
59
+ end
60
+
61
+ describe "extend_document_expiration" do
62
+ it "should POST /api/documents/MYGUID/extend_expiration.xml" do
63
+ @rs.should_receive(:post).with('/api/documents/MYGUID/extend_expiration.xml', {})
64
+ @rs.extend_document_expiration('MYGUID')
65
+ end
66
+ end
67
+
68
+ describe "update_document_tags" do
69
+ it "should POST /api/documents/MYGUID/update_tags.xml" do
70
+ @rs.should_receive(:post).with('/api/documents/MYGUID/update_tags.xml', {:tags => []})
71
+ @rs.update_document_tags('MYGUID', [])
72
+ end
73
+
74
+ it "should normalize tags array into expected hash format" do
75
+ @rs.should_receive(:post).with('/api/documents/MYGUID/update_tags.xml', {
76
+ :tags => [{:tag => {:name => 'myNewOne'}}, {:tag => {:name => 'should_replace', :value => 'the_old_new'}}]
77
+ })
78
+ @rs.update_document_tags('MYGUID', ["myNewOne", {"should_replace" => "the_old_new"}])
79
+ end
80
+
81
+ it "should allow empty tags array" do
82
+ @rs.should_receive(:post).with('/api/documents/MYGUID/update_tags.xml', {
83
+ :tags => []
84
+ })
85
+ @rs.update_document_tags('MYGUID', [])
86
+ end
87
+ end
88
+
89
+ describe "send_document" do
90
+ it "should POST /api/documents.xml with document hash containing given subject, document data, recipients, and action of 'send'" do
91
+ @rs.should_receive(:post).with("/api/documents.xml", {
92
+ :document => {
93
+ :subject => "subby",
94
+ :document_data => {:type => 'base64', :filename => "originalfile.pdf", :value => "mOio90cv"},
95
+ :recipients => [],
96
+ :action => "send"
97
+ }
98
+ })
99
+ document_data = {:type => 'base64', :filename => "originalfile.pdf", :value => "mOio90cv"}
100
+ @rs.send_document("subby", [], document_data)
101
+ end
102
+
103
+ it "should POST /api/documents.xml should convert recipients into normalized format" do
104
+ @rs.should_receive(:post).with("/api/documents.xml", {
105
+ :document => {
106
+ :subject => "subby",
107
+ :document_data => {:type => 'base64', :filename => "originalfile.pdf", :value => "mOio90cv"},
108
+ :recipients => [
109
+ {:recipient => {:name => "Signy Sign", :email => "signy@example.com", :role => "signer"}},
110
+ {:recipient =>{:name => "Cee Cee", :email => "ccme@example.com", :role => "cc"}}
111
+ ],
112
+ :action => "send"
113
+ }
114
+ })
115
+ document_data = {:type => 'base64', :filename => "originalfile.pdf", :value => "mOio90cv"}
116
+ recipients = [{:name => "Signy Sign", :email => "signy@example.com", :role => "signer"}, {:name => "Cee Cee", :email => "ccme@example.com", :role => "cc"}]
117
+
118
+ @rs.send_document("subby", recipients, document_data)
119
+ end
120
+
121
+ it "should POST /api/documents.xml with options" do
122
+ @rs.should_receive(:post).with("/api/documents.xml", {
123
+ :document => {
124
+ :subject => "subby",
125
+ :document_data => {:type => 'base64', :filename => "originalfile.pdf", :value => "mOio90cv"},
126
+ :recipients => [
127
+ {:recipient => {:name => "Signy Sign", :email => "signy@example.com", :role => "signer"}},
128
+ {:recipient =>{:name => "Cee Cee", :email => "ccme@example.com", :role => "cc"}}
129
+ ],
130
+ :action => "send",
131
+ :description => "My descript",
132
+ :callback_url => "http://example.com/call"
133
+ }
134
+ })
135
+ document_data = {:type => 'base64', :filename => "originalfile.pdf", :value => "mOio90cv"}
136
+ recipients = [{:name => "Signy Sign", :email => "signy@example.com", :role => "signer"}, {:name => "Cee Cee", :email => "ccme@example.com", :role => "cc"}]
137
+
138
+ options = {
139
+ :description => "My descript",
140
+ :callback_url => "http://example.com/call"
141
+ }
142
+ @rs.send_document("subby", recipients, document_data, options)
143
+ end
144
+ end
145
+
146
+ describe "send_document_from_data" do
147
+ it "should POST /api/documents.xml with document hash containing given subject, Base64 encoded version of document data, recipients, and action of 'send'" do
148
+ @rs.should_receive(:post).with("/api/documents.xml", {
149
+ :document => {
150
+ :subject => "subby",
151
+ :document_data => {:type => 'base64', :filename => "my fresh upload.pdf", :value => Base64::encode64("THIS IS MY data")},
152
+ :recipients => [],
153
+ :action => "send"
154
+ }
155
+ })
156
+ @rs.send_document_from_data("THIS IS MY data", "my fresh upload.pdf", "subby", [])
157
+ end
158
+
159
+ it "should POST /api/documents.xml with options" do
160
+ @rs.should_receive(:post).with("/api/documents.xml", {
161
+ :document => {
162
+ :subject => "subby",
163
+ :action => "send",
164
+ :document_data => {:type => 'base64', :filename => "uploaded.pdf", :value => Base64::encode64("THIS")},
165
+ :recipients => [
166
+ {:recipient => {:name => "Signy Sign", :email => "signy@example.com", :role => "signer"}},
167
+ {:recipient =>{:name => "Cee Cee", :email => "ccme@example.com", :role => "cc"}}
168
+ ],
169
+ :description => "My descript",
170
+ :callback_url => "http://example.com/call"
171
+ }
172
+ })
173
+
174
+ recipients = [{:name => "Signy Sign", :email => "signy@example.com", :role => "signer"}, {:name => "Cee Cee", :email => "ccme@example.com", :role => "cc"}]
175
+ options = {
176
+ :description => "My descript",
177
+ :callback_url => "http://example.com/call"
178
+ }
179
+ @rs.send_document_from_data("THIS", "uploaded.pdf", "subby", recipients, options)
180
+ end
181
+ end
182
+
183
+ describe "send_document_from_file" do
184
+ it "should open File and base64 encode it" do
185
+ # Probably get a fixture or something here
186
+ file = File.new(File.dirname(__FILE__) + '/spec_helper.rb')
187
+ fake_data = "abc"
188
+ File.should_receive(:read).with(file).and_return(fake_data)
189
+ @rs.should_receive(:post).with("/api/documents.xml", {
190
+ :document => {
191
+ :subject => "subby",
192
+ :action => "send",
193
+ :document_data => {:type => 'base64', :filename => "spec_helper.rb", :value => Base64::encode64(fake_data)},
194
+ :recipients => []
195
+ }
196
+ })
197
+
198
+ @rs.send_document_from_file(file, "subby", [])
199
+ end
200
+
201
+ it "should open path to file and base64 encode it" do
202
+ file_path = '/tmp/temp.pdf'
203
+ fake_data = "abc"
204
+ File.should_receive(:read).with(file_path).and_return(fake_data)
205
+ @rs.should_receive(:post).with("/api/documents.xml", {
206
+ :document => {
207
+ :subject => "subby",
208
+ :action => "send",
209
+ :document_data => {:type => 'base64', :filename => "temp.pdf", :value => Base64::encode64(fake_data)},
210
+ :recipients => []
211
+ }
212
+ })
213
+ @rs.send_document_from_file(file_path, "subby", [])
214
+ end
215
+
216
+ it "should POST /api/documents.xml with options" do
217
+ file_path = '/tmp/temp.pdf'
218
+ fake_data = "abc"
219
+ File.should_receive(:read).with(file_path).and_return(fake_data)
220
+ @rs.should_receive(:post).with("/api/documents.xml", {
221
+ :document => {
222
+ :subject => "subby",
223
+ :action => "send",
224
+ :document_data => {:type => 'base64', :filename => "temp.pdf", :value => Base64::encode64(fake_data)},
225
+ :recipients => [
226
+ {:recipient => {:name => "Signy Sign", :email => "signy@example.com", :role => "signer"}},
227
+ {:recipient =>{:name => "Cee Cee", :email => "ccme@example.com", :role => "cc"}}
228
+ ],
229
+ :description => "My descript",
230
+ :callback_url => "http://example.com/call"
231
+ }
232
+ })
233
+
234
+ recipients = [{:name => "Signy Sign", :email => "signy@example.com", :role => "signer"}, {:name => "Cee Cee", :email => "ccme@example.com", :role => "cc"}]
235
+ options = {
236
+ :description => "My descript",
237
+ :callback_url => "http://example.com/call"
238
+ }
239
+ @rs.send_document_from_file(file_path, "subby", recipients, options)
240
+ end
241
+ end
242
+
243
+ describe "generate_document_url" do
244
+ it "should POST /api/documents.xml with redirect action and return https://rightsignature.com/builder/new?rt=REDIRECT_TOKEN" do
245
+ @rs.should_receive(:post).with("/api/documents.xml", {
246
+ :document => {
247
+ :subject => "subjy",
248
+ :action => "redirect",
249
+ :document_data => {},
250
+ :recipients => [],
251
+ }
252
+ }).and_return({"document"=>{"redirect_token" => "REDIRECT_TOKEN"}})
253
+ @rs.generate_document_redirect_url("subjy", [], {}).should == "#{@rs.site}/builder/new?rt=REDIRECT_TOKEN"
254
+ end
255
+ end
256
+
257
+ describe "get_document_signer_links_for" do
258
+ it "should GET /api/documents/GUID123/signer_links.xml and return urls for signers" do
259
+ @rs.should_receive(:get).with("/api/documents/GUID123/signer_links.xml", {}).and_return({'document' => {'signer_links' => {'signer_link' => [
260
+ {"signer_token" => "avx37", "name" => "John Bellingham"},
261
+ {"signer_token" => "fdh89", "name" => "Righty Jones"}]
262
+ }}})
263
+
264
+ response = @rs.get_document_signer_links_for("GUID123")
265
+ response.size.should == 2
266
+ response.include?({"name" => "John Bellingham", "url" => "#{@rs.site}/signatures/embedded?rt=avx37"}).should be true
267
+ response.include?({"name" => "Righty Jones", "url" => "#{@rs.site}/signatures/embedded?rt=fdh89"}).should be true
268
+ end
269
+
270
+ it "should GET /api/documents/GUID123/signer_links.xml with URI encoded redirect location and return urls for signers" do
271
+ @rs.should_receive(:get).with("/api/documents/GUID123/signer_links.xml", {:redirect_location => "http://google.com/redirected%20location"}
272
+ ).and_return({'document' => {'signer_links' => {'signer_link' => [
273
+ {"signer_token" => "avx37", "name" => "John Bellingham"},
274
+ {"signer_token" => "fdh89", "name" => "Righty Jones"}]
275
+ }}})
276
+
277
+ response = @rs.get_document_signer_links_for("GUID123", "http://google.com/redirected location")
278
+ response.size.should == 2
279
+ response.include?({"name" => "John Bellingham", "url" => "#{@rs.site}/signatures/embedded?rt=avx37"}).should be true
280
+ response.include?({"name" => "Righty Jones", "url" => "#{@rs.site}/signatures/embedded?rt=fdh89"}).should be true
281
+ end
282
+
283
+ it "should GET /api/documents/GUID123/signer_links.xml and return [] for no signers" do
284
+ @rs.should_receive(:get).with("/api/documents/GUID123/signer_links.xml", {}).and_return({'document' => {'signer_links' => nil}})
285
+
286
+ response = @rs.get_document_signer_links_for("GUID123")
287
+ response.should == []
288
+ end
289
+
290
+ it "should GET /api/documents/GUID123/signer_links.xml with URI encoded redirect location and return urls for 1 signer_link" do
291
+ @rs.should_receive(:get).with("/api/documents/GUID123/signer_links.xml", {:redirect_location => "http://google.com/redirected%20location"}
292
+ ).and_return({'document' => {'signer_links' => {'signer_link' =>
293
+ {"signer_token" => "fdh89", "name" => "Righty Jones"}
294
+ }}})
295
+
296
+ response = @rs.get_document_signer_links_for("GUID123", "http://google.com/redirected location")
297
+ response.size.should == 1
298
+ response.include?({"name" => "Righty Jones", "url" => "#{@rs.site}/signatures/embedded?rt=fdh89"}).should be true
299
+ end
300
+ end
301
+ end