copycopter_client 1.1.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,7 +18,7 @@ describe CopycopterClient do
18
18
  build_client(config)
19
19
  end
20
20
 
21
- describe "opening a connection" do
21
+ describe 'opening a connection' do
22
22
  let(:config) { CopycopterClient::Configuration.new }
23
23
  let(:http) { Net::HTTP.new(config.host, config.port) }
24
24
 
@@ -26,37 +26,36 @@ describe CopycopterClient do
26
26
  Net::HTTP.stubs(:new => http)
27
27
  end
28
28
 
29
- it "should timeout when connecting" do
29
+ it 'should timeout when connecting' do
30
30
  project = add_project
31
31
  client = build_client(:api_key => project.api_key, :http_open_timeout => 4)
32
32
  client.download { |ignore| }
33
33
  http.open_timeout.should == 4
34
34
  end
35
35
 
36
- it "should timeout when reading" do
36
+ it 'should timeout when reading' do
37
37
  project = add_project
38
38
  client = build_client(:api_key => project.api_key, :http_read_timeout => 4)
39
39
  client.download { |ignore| }
40
40
  http.read_timeout.should == 4
41
41
  end
42
42
 
43
- it "uses verified ssl when secure" do
43
+ it 'uses verified ssl when secure' do
44
44
  project = add_project
45
45
  client = build_client(:api_key => project.api_key, :secure => true)
46
46
  client.download { |ignore| }
47
47
  http.use_ssl?.should == true
48
48
  http.verify_mode.should == OpenSSL::SSL::VERIFY_PEER
49
- http.ca_file.should == CopycopterClient::Configuration::CA_FILE
50
49
  end
51
50
 
52
- it "doesn't use ssl when insecure" do
51
+ it 'does not use ssl when insecure' do
53
52
  project = add_project
54
53
  client = build_client(:api_key => project.api_key, :secure => false)
55
54
  client.download { |ignore| }
56
55
  http.use_ssl?.should == false
57
56
  end
58
57
 
59
- it "wraps HTTP errors with ConnectionError" do
58
+ it 'wraps HTTP errors with ConnectionError' do
60
59
  errors = [
61
60
  Timeout::Error.new,
62
61
  Errno::EINVAL.new,
@@ -81,39 +80,39 @@ describe CopycopterClient do
81
80
  end
82
81
  end
83
82
 
84
- it "handles 500 errors from downloads with ConnectionError" do
83
+ it 'handles 500 errors from downloads with ConnectionError' do
85
84
  client = build_client(:api_key => 'raise_error')
86
85
  expect { client.download { |ignore| } }.
87
86
  to raise_error(CopycopterClient::ConnectionError)
88
87
  end
89
88
 
90
- it "handles 500 errors from uploads with ConnectionError" do
89
+ it 'handles 500 errors from uploads with ConnectionError' do
91
90
  client = build_client(:api_key => 'raise_error')
92
91
  expect { client.upload({}) }.to raise_error(CopycopterClient::ConnectionError)
93
92
  end
94
93
 
95
- it "handles 404 errors from downloads with ConnectionError" do
94
+ it 'handles 404 errors from downloads with ConnectionError' do
96
95
  client = build_client(:api_key => 'bogus')
97
96
  expect { client.download { |ignore| } }.
98
97
  to raise_error(CopycopterClient::InvalidApiKey)
99
98
  end
100
99
 
101
- it "handles 404 errors from uploads with ConnectionError" do
100
+ it 'handles 404 errors from uploads with ConnectionError' do
102
101
  client = build_client(:api_key => 'bogus')
103
102
  expect { client.upload({}) }.to raise_error(CopycopterClient::InvalidApiKey)
104
103
  end
105
104
  end
106
105
 
107
- it "downloads published blurbs for an existing project" do
106
+ it 'downloads published blurbs for an existing project' do
108
107
  project = add_project
109
108
  project.update({
110
109
  'draft' => {
111
- 'key.one' => "unexpected one",
112
- 'key.three' => "unexpected three"
110
+ 'key.one' => 'unexpected one',
111
+ 'key.three' => 'unexpected three'
113
112
  },
114
113
  'published' => {
115
- 'key.one' => "expected one",
116
- 'key.two' => "expected two"
114
+ 'key.one' => 'expected one',
115
+ 'key.two' => 'expected two'
117
116
  }
118
117
  })
119
118
  client = build_client(:api_key => project.api_key, :public => true)
@@ -127,23 +126,23 @@ describe CopycopterClient do
127
126
  }
128
127
  end
129
128
 
130
- it "logs that it performed a download" do
129
+ it 'logs that it performed a download' do
131
130
  logger = FakeLogger.new
132
131
  client = build_client_with_project(:logger => logger)
133
132
  client.download { |ignore| }
134
- logger.should have_entry(:info, "Downloaded translations")
133
+ logger.should have_entry(:info, 'Downloaded translations')
135
134
  end
136
135
 
137
- it "downloads draft blurbs for an existing project" do
136
+ it 'downloads draft blurbs for an existing project' do
138
137
  project = add_project
139
138
  project.update({
140
139
  'draft' => {
141
- 'key.one' => "expected one",
142
- 'key.two' => "expected two"
140
+ 'key.one' => 'expected one',
141
+ 'key.two' => 'expected two'
143
142
  },
144
143
  'published' => {
145
- 'key.one' => "unexpected one",
146
- 'key.three' => "unexpected three"
144
+ 'key.one' => 'unexpected one',
145
+ 'key.three' => 'unexpected three'
147
146
  }
148
147
  })
149
148
  client = build_client(:api_key => project.api_key, :public => false)
@@ -25,48 +25,42 @@ describe CopycopterClient::Configuration do
25
25
  end
26
26
  end
27
27
 
28
- it { should have_config_option(:proxy_host). overridable.default(nil) }
29
- it { should have_config_option(:proxy_port). overridable.default(nil) }
30
- it { should have_config_option(:proxy_user). overridable.default(nil) }
31
- it { should have_config_option(:proxy_pass). overridable.default(nil) }
32
- it { should have_config_option(:environment_name). overridable.default(nil) }
33
- it { should have_config_option(:client_version). overridable.default(CopycopterClient::VERSION) }
34
- it { should have_config_option(:client_name). overridable.default('Copycopter Client') }
35
- it { should have_config_option(:client_url). overridable.default('http://copycopter.com') }
36
- it { should have_config_option(:secure). overridable.default(true) }
37
- it { should have_config_option(:host). overridable.default('copycopter.com') }
38
- it { should have_config_option(:http_open_timeout). overridable.default(2) }
39
- it { should have_config_option(:http_read_timeout). overridable.default(5) }
40
- it { should have_config_option(:port). overridable }
28
+ it { should have_config_option(:proxy_host).overridable.default(nil) }
29
+ it { should have_config_option(:proxy_port).overridable.default(nil) }
30
+ it { should have_config_option(:proxy_user).overridable.default(nil) }
31
+ it { should have_config_option(:proxy_pass).overridable.default(nil) }
32
+ it { should have_config_option(:environment_name).overridable.default(nil) }
33
+ it { should have_config_option(:client_version).overridable.default(CopycopterClient::VERSION) }
34
+ it { should have_config_option(:client_name).overridable.default('Copycopter Client') }
35
+ it { should have_config_option(:client_url).overridable.default('http://copycopter.com') }
36
+ it { should have_config_option(:secure).overridable.default(true) }
37
+ it { should have_config_option(:host).overridable.default('copycopter.com') }
38
+ it { should have_config_option(:http_open_timeout).overridable.default(2) }
39
+ it { should have_config_option(:http_read_timeout).overridable.default(5) }
40
+ it { should have_config_option(:port).overridable }
41
41
  it { should have_config_option(:development_environments).overridable }
42
- it { should have_config_option(:api_key). overridable }
43
- it { should have_config_option(:polling_delay). overridable.default(300) }
44
- it { should have_config_option(:framework). overridable }
45
- it { should have_config_option(:middleware). overridable }
46
- it { should have_config_option(:client). overridable }
47
- it { should have_config_option(:cache). overridable }
48
-
49
- it "provides the root ssl certificate" do
50
- should have_config_option(:ca_file).
51
- overridable.
52
- default(File.join(PROJECT_ROOT, "AddTrustExternalCARoot.crt"))
53
- end
54
-
55
- it "should provide default values for secure connections" do
42
+ it { should have_config_option(:api_key).overridable }
43
+ it { should have_config_option(:polling_delay).overridable.default(300) }
44
+ it { should have_config_option(:framework).overridable }
45
+ it { should have_config_option(:middleware).overridable }
46
+ it { should have_config_option(:client).overridable }
47
+ it { should have_config_option(:cache).overridable }
48
+
49
+ it 'should provide default values for secure connections' do
56
50
  config = CopycopterClient::Configuration.new
57
51
  config.secure = true
58
52
  config.port.should == 443
59
53
  config.protocol.should == 'https'
60
54
  end
61
55
 
62
- it "should provide default values for insecure connections" do
56
+ it 'should provide default values for insecure connections' do
63
57
  config = CopycopterClient::Configuration.new
64
58
  config.secure = false
65
59
  config.port.should == 80
66
60
  config.protocol.should == 'http'
67
61
  end
68
62
 
69
- it "should not cache inferred ports" do
63
+ it 'should not cache inferred ports' do
70
64
  config = CopycopterClient::Configuration.new
71
65
  config.secure = false
72
66
  config.port
@@ -74,42 +68,44 @@ describe CopycopterClient::Configuration do
74
68
  config.port.should == 443
75
69
  end
76
70
 
77
- it "should act like a hash" do
71
+ it 'should act like a hash' do
78
72
  config = CopycopterClient::Configuration.new
79
73
  hash = config.to_hash
74
+
80
75
  [:api_key, :environment_name, :host, :http_open_timeout,
81
76
  :http_read_timeout, :client_name, :client_url, :client_version, :port,
82
77
  :protocol, :proxy_host, :proxy_pass, :proxy_port, :proxy_user, :secure,
83
78
  :development_environments, :logger, :framework, :ca_file].each do |option|
84
79
  hash[option].should == config[option]
85
80
  end
81
+
86
82
  hash[:public].should == config.public?
87
83
  end
88
84
 
89
- it "should be mergable" do
85
+ it 'should be mergable' do
90
86
  config = CopycopterClient::Configuration.new
91
87
  hash = config.to_hash
92
88
  config.merge(:key => 'value').should == hash.merge(:key => 'value')
93
89
  end
94
90
 
95
- it "should use development and staging as development environments by default" do
91
+ it 'should use development and staging as development environments by default' do
96
92
  config = CopycopterClient::Configuration.new
97
93
  config.development_environments.should =~ %w(development staging)
98
94
  end
99
95
 
100
- it "should use test and cucumber as test environments by default" do
96
+ it 'should use test and cucumber as test environments by default' do
101
97
  config = CopycopterClient::Configuration.new
102
98
  config.test_environments.should =~ %w(test cucumber)
103
99
  end
104
100
 
105
- it "should be test in a test environment" do
101
+ it 'should be test in a test environment' do
106
102
  config = CopycopterClient::Configuration.new
107
103
  config.test_environments = %w(test)
108
104
  config.environment_name = 'test'
109
105
  config.should be_test
110
106
  end
111
107
 
112
- it "should be public in a public environment" do
108
+ it 'should be public in a public environment' do
113
109
  config = CopycopterClient::Configuration.new
114
110
  config.development_environments = %w(development)
115
111
  config.environment_name = 'production'
@@ -117,7 +113,7 @@ describe CopycopterClient::Configuration do
117
113
  config.should_not be_development
118
114
  end
119
115
 
120
- it "should be development in a development environment" do
116
+ it 'should be development in a development environment' do
121
117
  config = CopycopterClient::Configuration.new
122
118
  config.development_environments = %w(staging)
123
119
  config.environment_name = 'staging'
@@ -125,13 +121,14 @@ describe CopycopterClient::Configuration do
125
121
  config.should_not be_public
126
122
  end
127
123
 
128
- it "should be public without an environment name" do
124
+ it 'should be public without an environment name' do
129
125
  config = CopycopterClient::Configuration.new
130
126
  config.should be_public
131
127
  end
132
128
 
133
- it "should yield and save a configuration when configuring" do
129
+ it 'should yield and save a configuration when configuring' do
134
130
  yielded_configuration = nil
131
+
135
132
  CopycopterClient.configure(false) do |config|
136
133
  yielded_configuration = config
137
134
  end
@@ -140,49 +137,50 @@ describe CopycopterClient::Configuration do
140
137
  CopycopterClient.configuration.should == yielded_configuration
141
138
  end
142
139
 
143
- it "doesn't apply the configuration when asked not to" do
140
+ it 'does not apply the configuration when asked not to' do
144
141
  logger = FakeLogger.new
145
142
  CopycopterClient.configure(false) { |config| config.logger = logger }
146
143
  CopycopterClient.configuration.should_not be_applied
147
144
  logger.entries[:info].should be_empty
148
145
  end
149
146
 
150
- it "should not remove existing config options when configuring twice" do
147
+ it 'should not remove existing config options when configuring twice' do
151
148
  first_config = nil
149
+
152
150
  CopycopterClient.configure(false) do |config|
153
151
  first_config = config
154
152
  end
153
+
155
154
  CopycopterClient.configure(false) do |config|
156
155
  config.should == first_config
157
156
  end
158
157
  end
159
158
 
160
- it "starts out unapplied" do
159
+ it 'starts out unapplied' do
161
160
  CopycopterClient::Configuration.new.should_not be_applied
162
161
  end
163
162
 
164
- it "logs to $stdout by default" do
163
+ it 'logs to $stdout by default' do
165
164
  logger = FakeLogger.new
166
- Logger.stubs(:new => logger)
167
-
165
+ Logger.stubs :new => logger
168
166
  config = CopycopterClient::Configuration.new
169
167
  Logger.should have_received(:new).with($stdout)
170
168
  config.logger.original_logger.should == logger
171
169
  end
172
170
 
173
- it "generates environment info without a framework" do
171
+ it 'generates environment info without a framework' do
174
172
  subject.environment_name = 'production'
175
173
  subject.environment_info.should == "[Ruby: #{RUBY_VERSION}] [Env: production]"
176
174
  end
177
175
 
178
- it "generates environment info with a framework" do
176
+ it 'generates environment info with a framework' do
179
177
  subject.environment_name = 'production'
180
178
  subject.framework = 'Sinatra: 1.0.0'
181
179
  subject.environment_info.
182
180
  should == "[Ruby: #{RUBY_VERSION}] [Sinatra: 1.0.0] [Env: production]"
183
181
  end
184
182
 
185
- it "prefixes log entries" do
183
+ it 'prefixes log entries' do
186
184
  logger = FakeLogger.new
187
185
  config = CopycopterClient::Configuration.new
188
186
 
@@ -194,53 +192,53 @@ describe CopycopterClient::Configuration do
194
192
  end
195
193
  end
196
194
 
197
- share_examples_for "applied configuration" do
195
+ share_examples_for 'applied configuration' do
196
+ subject { CopycopterClient::Configuration.new }
198
197
  let(:backend) { stub('i18n-backend') }
199
- let(:cache) { stub('cache') }
200
- let(:client) { stub('client') }
201
- let(:poller) { stub('poller') }
198
+ let(:cache) { stub('cache') }
199
+ let(:client) { stub('client') }
200
+ let(:logger) { FakeLogger.new }
201
+ let(:poller) { stub('poller') }
202
202
  let(:process_guard) { stub('process_guard', :start => nil) }
203
- let(:logger) { FakeLogger.new }
204
- subject { CopycopterClient::Configuration.new }
205
203
 
206
204
  before do
207
- CopycopterClient::I18nBackend.stubs(:new => backend)
208
- CopycopterClient::Client.stubs(:new => client)
209
- CopycopterClient::Cache.stubs(:new => cache)
210
- CopycopterClient::Poller.stubs(:new => poller)
211
- CopycopterClient::ProcessGuard.stubs(:new => process_guard)
205
+ CopycopterClient::I18nBackend.stubs :new => backend
206
+ CopycopterClient::Client.stubs :new => client
207
+ CopycopterClient::Cache.stubs :new => cache
208
+ CopycopterClient::Poller.stubs :new => poller
209
+ CopycopterClient::ProcessGuard.stubs :new => process_guard
212
210
  subject.logger = logger
213
211
  apply
214
212
  end
215
213
 
216
214
  it { should be_applied }
217
215
 
218
- it "builds and assigns an I18n backend" do
216
+ it 'builds and assigns an I18n backend' do
219
217
  CopycopterClient::I18nBackend.should have_received(:new).with(cache)
220
218
  I18n.backend.should == backend
221
219
  end
222
220
 
223
- it "builds and assigns a poller" do
221
+ it 'builds and assigns a poller' do
224
222
  CopycopterClient::Poller.should have_received(:new).with(cache, subject.to_hash)
225
223
  end
226
224
 
227
- it "builds a process guard" do
225
+ it 'builds a process guard' do
228
226
  CopycopterClient::ProcessGuard.should have_received(:new).
229
227
  with(cache, poller, subject.to_hash)
230
228
  end
231
229
 
232
- it "logs that it's ready" do
230
+ it 'logs that it is ready' do
233
231
  logger.should have_entry(:info, "Client #{CopycopterClient::VERSION} ready")
234
232
  end
235
233
 
236
- it "logs environment info" do
234
+ it 'logs environment info' do
237
235
  logger.should have_entry(:info, "Environment Info: #{subject.environment_info}")
238
236
  end
239
237
  end
240
238
 
241
- describe CopycopterClient::Configuration, "applied when testing" do
242
- it_should_behave_like "applied configuration" do
243
- it "doesn't start the process guard" do
239
+ describe CopycopterClient::Configuration, 'applied when testing' do
240
+ it_should_behave_like 'applied configuration' do
241
+ it 'does not start the process guard' do
244
242
  process_guard.should have_received(:start).never
245
243
  end
246
244
  end
@@ -251,9 +249,9 @@ describe CopycopterClient::Configuration, "applied when testing" do
251
249
  end
252
250
  end
253
251
 
254
- describe CopycopterClient::Configuration, "applied when not testing" do
255
- it_should_behave_like "applied configuration" do
256
- it "starts the process guard" do
252
+ describe CopycopterClient::Configuration, 'applied when not testing' do
253
+ it_should_behave_like 'applied configuration' do
254
+ it 'starts the process guard' do
257
255
  process_guard.should have_received(:start)
258
256
  end
259
257
  end
@@ -264,9 +262,9 @@ describe CopycopterClient::Configuration, "applied when not testing" do
264
262
  end
265
263
  end
266
264
 
267
- describe CopycopterClient::Configuration, "applied when developing with middleware" do
268
- it_should_behave_like "applied configuration" do
269
- it "adds the sync middleware" do
265
+ describe CopycopterClient::Configuration, 'applied when developing with middleware' do
266
+ it_should_behave_like 'applied configuration' do
267
+ it 'adds the sync middleware' do
270
268
  middleware.should include(CopycopterClient::RequestSync)
271
269
  end
272
270
  end
@@ -280,8 +278,8 @@ describe CopycopterClient::Configuration, "applied when developing with middlewa
280
278
  end
281
279
  end
282
280
 
283
- describe CopycopterClient::Configuration, "applied when developing without middleware" do
284
- it_should_behave_like "applied configuration"
281
+ describe CopycopterClient::Configuration, 'applied when developing without middleware' do
282
+ it_should_behave_like 'applied configuration'
285
283
 
286
284
  def apply
287
285
  subject.middleware = nil
@@ -290,8 +288,8 @@ describe CopycopterClient::Configuration, "applied when developing without middl
290
288
  end
291
289
  end
292
290
 
293
- describe CopycopterClient::Configuration, "applied with middleware when not developing" do
294
- it_should_behave_like "applied configuration"
291
+ describe CopycopterClient::Configuration, 'applied with middleware when not developing' do
292
+ it_should_behave_like 'applied configuration'
295
293
 
296
294
  let(:middleware) { MiddlewareStack.new }
297
295
 
@@ -301,7 +299,7 @@ describe CopycopterClient::Configuration, "applied with middleware when not deve
301
299
  subject.apply
302
300
  end
303
301
 
304
- it "doesn't add the sync middleware" do
302
+ it 'does not add the sync middleware' do
305
303
  middleware.should_not include(CopycopterClient::RequestSync)
306
304
  end
307
305
  end