chemistrykit 3.9.0.rc2 → 3.9.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +8 -1
- data/Gemfile +2 -1
- data/README.md +3 -3
- data/TODO.md +2 -0
- data/chemistrykit.gemspec +2 -3
- data/features/basic_auth.feature +0 -1
- data/features/chemists.feature +13 -5
- data/features/exit_status.feature +0 -1
- data/features/reporting.feature +0 -3
- data/features/split_testing.feature +29 -0
- data/features/step_definitions/steps.rb +1 -1
- data/features/tags.feature +0 -1
- data/lib/chemistrykit/cli/cli.rb +10 -15
- data/lib/chemistrykit/config/basic_auth.rb +37 -0
- data/lib/chemistrykit/config/split_testing.rb +26 -0
- data/lib/chemistrykit/configuration.rb +15 -4
- data/lib/chemistrykit/reporting/html_report_assembler.rb +40 -2
- data/lib/chemistrykit/rspec/html_formatter.rb +5 -0
- data/lib/chemistrykit/split_testing/optimizely_provider.rb +21 -0
- data/lib/chemistrykit/split_testing/provider_factory.rb +18 -0
- data/report/index.html +81 -1
- data/report/sass/app.scss +54 -2
- data/report/stylesheets/app.css +820 -116
- data/spec/integration/lib/chemistrykit/split_testing/provider_factory_spec.rb +15 -0
- data/spec/spec_helper.rb +0 -6
- data/spec/support/config.yaml +8 -0
- data/spec/unit/lib/chemistrykit/catalyst_spec.rb +1 -0
- data/spec/unit/lib/chemistrykit/cli/helpers/formula_loader_spec.rb +1 -0
- data/spec/unit/lib/chemistrykit/config/basic_auth_spec.rb +76 -0
- data/spec/unit/lib/chemistrykit/config/split_testing_spec.rb +31 -0
- data/spec/unit/lib/chemistrykit/configuration_spec.rb +30 -0
- data/spec/unit/lib/chemistrykit/formula/base_spec.rb +1 -0
- data/spec/unit/lib/chemistrykit/split_testing/optimizely_provider_spec.rb +42 -0
- data/spec/unit/lib/chemistrykit/split_testing/provider_factory_spec.rb +22 -0
- metadata +21 -5
@@ -0,0 +1,15 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'chemistrykit/split_testing/provider_factory'
|
5
|
+
require 'chemistrykit/config/split_testing'
|
6
|
+
|
7
|
+
describe ChemistryKit::SplitTesting::ProviderFactory do
|
8
|
+
|
9
|
+
it 'should return the correctly configured provider based on configuration' do
|
10
|
+
config = ChemistryKit::Config::SplitTesting.new(provider: 'optimizely', opt_out: true)
|
11
|
+
provider = ChemistryKit::SplitTesting::ProviderFactory.build(config)
|
12
|
+
provider.should be_an_instance_of ChemistryKit::SplitTesting::OptimizelyProvider
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -13,12 +13,6 @@ require 'rubygems'
|
|
13
13
|
require 'bundler/setup'
|
14
14
|
require 'fileutils'
|
15
15
|
|
16
|
-
# not sure it this is the right way to include all the files under test.
|
17
|
-
require_relative '../lib/chemistrykit/cli/helpers/formula_loader'
|
18
|
-
require_relative '../lib/chemistrykit/formula/base'
|
19
|
-
require_relative '../lib/chemistrykit/catalyst'
|
20
|
-
require_relative '../lib/chemistrykit/configuration'
|
21
|
-
|
22
16
|
require_relative '../spec/support/formulas/sub_module/basic_formula'
|
23
17
|
require_relative '../spec/support/formulas/sub_module/chemist_formula'
|
24
18
|
require_relative '../spec/support/formulas/sub_module/alt_chemist_formula'
|
data/spec/support/config.yaml
CHANGED
@@ -0,0 +1,76 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'chemistrykit/config/basic_auth'
|
5
|
+
|
6
|
+
describe ChemistryKit::Config::BasicAuth do
|
7
|
+
|
8
|
+
VALID_USERNAME = 'user'
|
9
|
+
VALID_PASSWORD = 'pass'
|
10
|
+
VALID_URL = 'http://testsite.com'
|
11
|
+
VALID_HTTP_PATH = '/'
|
12
|
+
VALID_HTTPS_PATH = '/secure'
|
13
|
+
|
14
|
+
before(:each) do
|
15
|
+
@opts = { username: VALID_USERNAME,
|
16
|
+
password: VALID_PASSWORD,
|
17
|
+
base_url: VALID_URL,
|
18
|
+
http_path: VALID_HTTP_PATH,
|
19
|
+
https_path: VALID_HTTPS_PATH
|
20
|
+
}
|
21
|
+
@basic_auth = ChemistryKit::Config::BasicAuth.new(@opts)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should be initialized with an hash of options' do
|
25
|
+
@basic_auth.should be_an_instance_of ChemistryKit::Config::BasicAuth
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should get the basic configuration values' do
|
29
|
+
@basic_auth.username.should eq VALID_USERNAME
|
30
|
+
@basic_auth.password.should eq VALID_PASSWORD
|
31
|
+
@basic_auth.base_url.should eq VALID_URL
|
32
|
+
@basic_auth.http_path.should eq VALID_HTTP_PATH
|
33
|
+
@basic_auth.https_path.should eq VALID_HTTPS_PATH
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should raise an error for invalid config parameters' do
|
37
|
+
expect do
|
38
|
+
ChemistryKit::Config::BasicAuth.new(@opts.merge(bad: 'value'))
|
39
|
+
end.to raise_error(ArgumentError, 'The config key: "bad" is unknown!')
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should report on the availability of http path' do
|
43
|
+
@basic_auth.http?.should be_true
|
44
|
+
basic_auth = ChemistryKit::Config::BasicAuth.new(@opts.merge(http_path: nil))
|
45
|
+
basic_auth.http?.should be_false
|
46
|
+
basic_auth = ChemistryKit::Config::BasicAuth.new({})
|
47
|
+
basic_auth.http?.should be_false
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should report on the availability of https path' do
|
51
|
+
@basic_auth.https?.should be_true
|
52
|
+
basic_auth = ChemistryKit::Config::BasicAuth.new(@opts.merge(https_path: nil))
|
53
|
+
basic_auth.https?.should be_false
|
54
|
+
basic_auth = ChemistryKit::Config::BasicAuth.new({})
|
55
|
+
basic_auth.https?.should be_false
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should return the http url' do
|
59
|
+
@basic_auth.http_url.should eq "http://#{VALID_USERNAME}:#{VALID_PASSWORD}@testsite.com/"
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should return the http url by default' do
|
63
|
+
basic_auth = ChemistryKit::Config::BasicAuth.new(@opts.merge(http_path: nil))
|
64
|
+
basic_auth.http_url.should eq "http://#{VALID_USERNAME}:#{VALID_PASSWORD}@testsite.com"
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should return the https url' do
|
68
|
+
@basic_auth.https_url.should eq "https://#{VALID_USERNAME}:#{VALID_PASSWORD}@testsite.com/secure"
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should return the https url by default' do
|
72
|
+
basic_auth = ChemistryKit::Config::BasicAuth.new(@opts.merge(https_path: nil))
|
73
|
+
basic_auth.https_url.should eq "https://#{VALID_USERNAME}:#{VALID_PASSWORD}@testsite.com"
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'chemistrykit/config/split_testing'
|
5
|
+
|
6
|
+
describe ChemistryKit::Config::SplitTesting do
|
7
|
+
|
8
|
+
VALID_PROVIDER = 'optimizely'
|
9
|
+
|
10
|
+
before(:each) do
|
11
|
+
@opts = { provider: VALID_PROVIDER, opt_out: true, base_url: 'http://google.com'
|
12
|
+
}
|
13
|
+
@split_testing = ChemistryKit::Config::SplitTesting.new(@opts)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should be initialized with an hash of options' do
|
17
|
+
@split_testing.should be_an_instance_of ChemistryKit::Config::SplitTesting
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should get the basic configuration values' do
|
21
|
+
@split_testing.provider.should eq VALID_PROVIDER
|
22
|
+
@split_testing.base_url.should eq 'http://google.com'
|
23
|
+
@split_testing.opt_out?.should be_true
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should raise an error for invalid config parameters' do
|
27
|
+
expect do
|
28
|
+
ChemistryKit::Config::SplitTesting.new(@opts.merge(bad: 'value'))
|
29
|
+
end.to raise_error(ArgumentError, 'The config key: "bad" is unknown!')
|
30
|
+
end
|
31
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# Encoding: utf-8
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
+
require 'chemistrykit/configuration'
|
4
5
|
|
5
6
|
describe ChemistryKit::Configuration do
|
6
7
|
|
@@ -30,10 +31,18 @@ describe ChemistryKit::Configuration do
|
|
30
31
|
config.concurrency.should eq VALID_CONCURRENCY
|
31
32
|
config.retries_on_failure.should eq VALID_RETRIES_ON_FAILURE
|
32
33
|
config.base_url.should eq VALID_BASE_URL
|
34
|
+
|
35
|
+
# log configurations
|
33
36
|
config.log.path.should eq VALID_LOG_PATH
|
34
37
|
config.log.results_file.should eq VALID_JUNIT
|
35
38
|
config.log.format.should eq VALID_JUNIT_FORMAT_OUT
|
39
|
+
|
40
|
+
# selenium connect configurations
|
36
41
|
config.selenium_connect.should eq @valid_selenium_connect_hash
|
42
|
+
|
43
|
+
# basic auth configurations
|
44
|
+
|
45
|
+
# a/b testing configurations
|
37
46
|
end
|
38
47
|
|
39
48
|
it 'should initialize with sane defaults' do
|
@@ -44,6 +53,8 @@ describe ChemistryKit::Configuration do
|
|
44
53
|
config.log.results_file.should eq VALID_JUNIT
|
45
54
|
config.log.format.should eq VALID_JUNIT_FORMAT_OUT
|
46
55
|
config.selenium_connect.should eq({ log: VALID_LOG_PATH })
|
56
|
+
config.basic_auth.should be_nil
|
57
|
+
config.split_testing.should be_nil
|
47
58
|
end
|
48
59
|
|
49
60
|
it 'should initialize with a hash of configurations' do
|
@@ -80,4 +91,23 @@ describe ChemistryKit::Configuration do
|
|
80
91
|
config = ChemistryKit::Configuration.new selenium_connect: { log: 'sc-log', sauce_opts: { job_name: 'test' } }
|
81
92
|
config.selenium_connect.should eq log: 'sc-log', sauce_opts: { job_name: 'test' }
|
82
93
|
end
|
94
|
+
|
95
|
+
it 'should return the basic auth object if it is set' do
|
96
|
+
config = ChemistryKit::Configuration.new basic_auth: { username: 'user' }
|
97
|
+
config.basic_auth.should be_an_instance_of ChemistryKit::Config::BasicAuth
|
98
|
+
config.basic_auth.username.should eq 'user'
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'should pass the base url to the auth object' do
|
102
|
+
yaml_file = File.join(Dir.pwd, 'spec', 'support', VALID_CONFIG_FILE)
|
103
|
+
config = ChemistryKit::Configuration.initialize_with_yaml yaml_file
|
104
|
+
config.basic_auth.http_url.should eq 'http://user:pass@google.com/basic'
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should return the split testing object if it is set' do
|
108
|
+
yaml_file = File.join(Dir.pwd, 'spec', 'support', VALID_CONFIG_FILE)
|
109
|
+
config = ChemistryKit::Configuration.initialize_with_yaml yaml_file
|
110
|
+
config.split_testing.should be_an_instance_of ChemistryKit::Config::SplitTesting
|
111
|
+
config.split_testing.base_url.should eq VALID_BASE_URL
|
112
|
+
end
|
83
113
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'chemistrykit/split_testing/optimizely_provider'
|
5
|
+
|
6
|
+
describe ChemistryKit::SplitTesting::OptimizelyProvider do
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
@config = double 'ChemistryKit::Config::SplitTesting'
|
10
|
+
@provider = ChemistryKit::SplitTesting::OptimizelyProvider.new(@config)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should be initialized with the split testing config object' do
|
14
|
+
@provider.should be_an_instance_of ChemistryKit::SplitTesting::OptimizelyProvider
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should respond to config' do
|
18
|
+
@config.should_receive :provider
|
19
|
+
@provider.should respond_to :config
|
20
|
+
@provider.config.provider
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should set the cookie correctly on split' do
|
24
|
+
|
25
|
+
@config.should_receive :base_url
|
26
|
+
@config.should_receive(:opt_out?).and_return(true)
|
27
|
+
|
28
|
+
driver = double 'Selenium::WebDriver::Driver'
|
29
|
+
driver.should_receive(:get)
|
30
|
+
|
31
|
+
manage = double 'manage'
|
32
|
+
manage.should_receive(:add_cookie)
|
33
|
+
driver.should_receive(:manage).and_return(manage)
|
34
|
+
|
35
|
+
navigate = double 'navigate'
|
36
|
+
navigate.should_receive(:refresh)
|
37
|
+
driver.should_receive(:navigate).and_return(navigate)
|
38
|
+
|
39
|
+
@provider.split(driver)
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'chemistrykit/split_testing/provider_factory'
|
5
|
+
|
6
|
+
describe ChemistryKit::SplitTesting::ProviderFactory do
|
7
|
+
|
8
|
+
let(:config) { double 'ChemistryKit::Config::SplitTesting' }
|
9
|
+
|
10
|
+
it 'should determine what kind of provider to build' do
|
11
|
+
config.should_receive(:provider).and_return('optimizely')
|
12
|
+
ChemistryKit::SplitTesting::ProviderFactory.build(config)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should raise an error for an un known provider' do
|
16
|
+
config.should_receive(:provider).twice.and_return('bad')
|
17
|
+
expect do
|
18
|
+
ChemistryKit::SplitTesting::ProviderFactory.build(config)
|
19
|
+
end.to raise_error(ArgumentError, 'The provider: "bad" is unknown!')
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chemistrykit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.9.0.
|
4
|
+
version: 3.9.0.rc3
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-08-
|
13
|
+
date: 2013-08-19 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: thor
|
@@ -99,7 +99,7 @@ dependencies:
|
|
99
99
|
requirements:
|
100
100
|
- - ~>
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: 3.
|
102
|
+
version: 3.6.0
|
103
103
|
type: :runtime
|
104
104
|
prerelease: false
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -107,7 +107,7 @@ dependencies:
|
|
107
107
|
requirements:
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 3.
|
110
|
+
version: 3.6.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: parallel_tests
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -243,6 +243,7 @@ files:
|
|
243
243
|
- features/multi-config.feature
|
244
244
|
- features/new.feature
|
245
245
|
- features/reporting.feature
|
246
|
+
- features/split_testing.feature
|
246
247
|
- features/step_definitions/steps.rb
|
247
248
|
- features/support/env.rb
|
248
249
|
- features/tags.feature
|
@@ -255,6 +256,8 @@ files:
|
|
255
256
|
- lib/chemistrykit/cli/formula.rb
|
256
257
|
- lib/chemistrykit/cli/helpers/formula_loader.rb
|
257
258
|
- lib/chemistrykit/cli/new.rb
|
259
|
+
- lib/chemistrykit/config/basic_auth.rb
|
260
|
+
- lib/chemistrykit/config/split_testing.rb
|
258
261
|
- lib/chemistrykit/configuration.rb
|
259
262
|
- lib/chemistrykit/formula/base.rb
|
260
263
|
- lib/chemistrykit/formula/chemist_aware.rb
|
@@ -263,6 +266,8 @@ files:
|
|
263
266
|
- lib/chemistrykit/reporting/html_report_assembler.rb
|
264
267
|
- lib/chemistrykit/rspec/html_formatter.rb
|
265
268
|
- lib/chemistrykit/rspec/j_unit_formatter.rb
|
269
|
+
- lib/chemistrykit/split_testing/optimizely_provider.rb
|
270
|
+
- lib/chemistrykit/split_testing/provider_factory.rb
|
266
271
|
- lib/templates/beaker.tt
|
267
272
|
- lib/templates/beaker_with_formula.tt
|
268
273
|
- lib/templates/chemistrykit/beakers/.gitkeep
|
@@ -300,6 +305,7 @@ files:
|
|
300
305
|
- spec/integration/lib/chemistrykit/.gitkeep
|
301
306
|
- spec/integration/lib/chemistrykit/formula/formula_lab_spec.rb
|
302
307
|
- spec/integration/lib/chemistrykit/reporting/html_reporting_assembler_spec.rb
|
308
|
+
- spec/integration/lib/chemistrykit/split_testing/provider_factory_spec.rb
|
303
309
|
- spec/spec_helper.rb
|
304
310
|
- spec/support/bad_chemists.csv
|
305
311
|
- spec/support/chemists.csv
|
@@ -316,11 +322,15 @@ files:
|
|
316
322
|
- spec/unit/lib/chemistrykit/chemist/repository/csv_chemist_repository_spec.rb
|
317
323
|
- spec/unit/lib/chemistrykit/chemist_spec.rb
|
318
324
|
- spec/unit/lib/chemistrykit/cli/helpers/formula_loader_spec.rb
|
325
|
+
- spec/unit/lib/chemistrykit/config/basic_auth_spec.rb
|
326
|
+
- spec/unit/lib/chemistrykit/config/split_testing_spec.rb
|
319
327
|
- spec/unit/lib/chemistrykit/configuration_spec.rb
|
320
328
|
- spec/unit/lib/chemistrykit/formula/base_spec.rb
|
321
329
|
- spec/unit/lib/chemistrykit/formula/chemist_aware_spec.rb
|
322
330
|
- spec/unit/lib/chemistrykit/formula/formula_lab_spec.rb
|
323
331
|
- spec/unit/lib/chemistrykit/reporting/html_reporting_assembler_spec.rb
|
332
|
+
- spec/unit/lib/chemistrykit/split_testing/optimizely_provider_spec.rb
|
333
|
+
- spec/unit/lib/chemistrykit/split_testing/provider_factory_spec.rb
|
324
334
|
homepage: https://github.com/arrgyle/chemistrykit
|
325
335
|
licenses:
|
326
336
|
- MIT
|
@@ -342,7 +352,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
342
352
|
version: 1.3.1
|
343
353
|
requirements: []
|
344
354
|
rubyforge_project:
|
345
|
-
rubygems_version: 1.8.
|
355
|
+
rubygems_version: 1.8.25
|
346
356
|
signing_key:
|
347
357
|
specification_version: 3
|
348
358
|
summary: A simple and opinionated web testing framework for Selenium that follows
|
@@ -360,12 +370,14 @@ test_files:
|
|
360
370
|
- features/multi-config.feature
|
361
371
|
- features/new.feature
|
362
372
|
- features/reporting.feature
|
373
|
+
- features/split_testing.feature
|
363
374
|
- features/step_definitions/steps.rb
|
364
375
|
- features/support/env.rb
|
365
376
|
- features/tags.feature
|
366
377
|
- spec/integration/lib/chemistrykit/.gitkeep
|
367
378
|
- spec/integration/lib/chemistrykit/formula/formula_lab_spec.rb
|
368
379
|
- spec/integration/lib/chemistrykit/reporting/html_reporting_assembler_spec.rb
|
380
|
+
- spec/integration/lib/chemistrykit/split_testing/provider_factory_spec.rb
|
369
381
|
- spec/spec_helper.rb
|
370
382
|
- spec/support/bad_chemists.csv
|
371
383
|
- spec/support/chemists.csv
|
@@ -382,8 +394,12 @@ test_files:
|
|
382
394
|
- spec/unit/lib/chemistrykit/chemist/repository/csv_chemist_repository_spec.rb
|
383
395
|
- spec/unit/lib/chemistrykit/chemist_spec.rb
|
384
396
|
- spec/unit/lib/chemistrykit/cli/helpers/formula_loader_spec.rb
|
397
|
+
- spec/unit/lib/chemistrykit/config/basic_auth_spec.rb
|
398
|
+
- spec/unit/lib/chemistrykit/config/split_testing_spec.rb
|
385
399
|
- spec/unit/lib/chemistrykit/configuration_spec.rb
|
386
400
|
- spec/unit/lib/chemistrykit/formula/base_spec.rb
|
387
401
|
- spec/unit/lib/chemistrykit/formula/chemist_aware_spec.rb
|
388
402
|
- spec/unit/lib/chemistrykit/formula/formula_lab_spec.rb
|
389
403
|
- spec/unit/lib/chemistrykit/reporting/html_reporting_assembler_spec.rb
|
404
|
+
- spec/unit/lib/chemistrykit/split_testing/optimizely_provider_spec.rb
|
405
|
+
- spec/unit/lib/chemistrykit/split_testing/provider_factory_spec.rb
|