bbc_cucumber_salad 0.0.1

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.
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
@@ -0,0 +1,71 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ cucumber_salad (0.0.1)
5
+ capybara (>= 2.0.2)
6
+ cucumber (>= 1.2.1)
7
+ poltergeist (>= 1.1.0)
8
+ redis (>= 3.0.2)
9
+ rspec (>= 2.1.3)
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ builder (3.2.0)
15
+ capybara (2.0.2)
16
+ mime-types (>= 1.16)
17
+ nokogiri (>= 1.3.3)
18
+ rack (>= 1.0.0)
19
+ rack-test (>= 0.5.4)
20
+ selenium-webdriver (~> 2.0)
21
+ xpath (~> 1.0.0)
22
+ childprocess (0.3.9)
23
+ ffi (~> 1.0, >= 1.0.11)
24
+ cucumber (1.2.2)
25
+ builder (>= 2.1.2)
26
+ diff-lcs (>= 1.1.3)
27
+ gherkin (~> 2.11.6)
28
+ multi_json (~> 1.3)
29
+ diff-lcs (1.2.1)
30
+ eventmachine (1.0.1)
31
+ faye-websocket (0.4.7)
32
+ eventmachine (>= 0.12.0)
33
+ ffi (1.4.0)
34
+ gherkin (2.11.6)
35
+ json (>= 1.7.6)
36
+ http_parser.rb (0.5.3)
37
+ json (1.7.7)
38
+ mime-types (1.21)
39
+ multi_json (1.6.1)
40
+ nokogiri (1.5.6)
41
+ poltergeist (1.1.0)
42
+ capybara (~> 2.0, >= 2.0.1)
43
+ faye-websocket (~> 0.4, >= 0.4.4)
44
+ http_parser.rb (~> 0.5.3)
45
+ rack (1.5.2)
46
+ rack-test (0.6.2)
47
+ rack (>= 1.0)
48
+ redis (3.0.3)
49
+ rspec (2.13.0)
50
+ rspec-core (~> 2.13.0)
51
+ rspec-expectations (~> 2.13.0)
52
+ rspec-mocks (~> 2.13.0)
53
+ rspec-core (2.13.0)
54
+ rspec-expectations (2.13.0)
55
+ diff-lcs (>= 1.1.3, < 2.0)
56
+ rspec-mocks (2.13.0)
57
+ rubyzip (0.9.9)
58
+ selenium-webdriver (2.31.0)
59
+ childprocess (>= 0.2.5)
60
+ multi_json (~> 1.0)
61
+ rubyzip
62
+ websocket (~> 1.0.4)
63
+ websocket (1.0.7)
64
+ xpath (1.0.0)
65
+ nokogiri (~> 1.3)
66
+
67
+ PLATFORMS
68
+ ruby
69
+
70
+ DEPENDENCIES
71
+ cucumber_salad!
@@ -0,0 +1,4 @@
1
+ require 'capybara'
2
+ require 'capybara/poltergeist'
3
+ require 'cucumber_salad/helpers'
4
+ require 'cucumber_salad/drivers'
@@ -0,0 +1,11 @@
1
+ Before do
2
+ Helper::Stub.clear
3
+ end
4
+
5
+ Before "@sleep" do
6
+ @sleep_enabled = true
7
+ end
8
+
9
+ After "@sleep" do
10
+ @sleep_enabled = false
11
+ end
@@ -0,0 +1 @@
1
+ Dir[File.dirname(__FILE__) + "/drivers/*.rb"].each {|driver| require driver }
@@ -0,0 +1,14 @@
1
+ Capybara.register_driver :blackberry do |app|
2
+ driver = Capybara::Poltergeist::Driver.new(app,
3
+ window_size: [220,200],
4
+ phantomjs_options: %w(--load-images=no --local-storage-quota=0 --proxy-type=none),
5
+ inspector: true,
6
+ js_errors: true
7
+ )
8
+ Helper::Driver.register(
9
+ :blackberry,
10
+ :poltergeist,
11
+ "BlackBerry8530/5.0.0.337 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/105"
12
+ )
13
+ driver
14
+ end
@@ -0,0 +1,3 @@
1
+ Capybara.register_driver :firefox do |app|
2
+ Capybara::Selenium::Driver.new(app, browser: :firefox)
3
+ end
@@ -0,0 +1,14 @@
1
+ Capybara.register_driver :phantomjs do |app|
2
+ driver = Capybara::Poltergeist::Driver.new(app,
3
+ phantomjs_options: %w(--load-images=no --local-storage-quota=0 --proxy-type=none),
4
+ inspector: true,
5
+ js_errors: true,
6
+ extensions: Helper::Driver.phantomjs_extensions
7
+ )
8
+ Helper::Driver.register(
9
+ :smartphone,
10
+ :poltergeist,
11
+ "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B141 Safari/8536.25"
12
+ )
13
+ driver
14
+ end
@@ -0,0 +1,10 @@
1
+ Capybara.register_driver :safari do |app|
2
+ driver = Capybara::Selenium::Driver.new(app,
3
+ browser: :safari
4
+ )
5
+ Helper::Driver.register(
6
+ :smartphone,
7
+ :selenium
8
+ )
9
+ driver
10
+ end
@@ -0,0 +1,29 @@
1
+ Capybara.register_driver :smartphone do |app|
2
+ driver = Capybara::Poltergeist::Driver.new(app,
3
+ window_size: [320,480],
4
+ phantomjs_options: %w(--load-images=no --local-storage-quota=0 --proxy-type=none),
5
+ inspector: true,
6
+ js_errors: true
7
+ )
8
+ Helper::Driver.register(
9
+ :smartphone,
10
+ :poltergeist,
11
+ "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B141 Safari/8536.25"
12
+ )
13
+ driver
14
+ end
15
+
16
+ Capybara.register_driver :smartphone_landscape do |app|
17
+ driver = Capybara::Poltergeist::Driver.new(app,
18
+ window_size: [480, 320],
19
+ phantomjs_options: %w(--load-images=no --local-storage-quota=0 --proxy-type=none),
20
+ inspector: true,
21
+ js_errors: true
22
+ )
23
+ Helper::Driver.register(
24
+ :smartphone_landscape,
25
+ :poltergeist,
26
+ "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B141 Safari/8536.25"
27
+ )
28
+ driver
29
+ end
@@ -0,0 +1,14 @@
1
+ Capybara.register_driver :tablet do |app|
2
+ driver = Capybara::Poltergeist::Driver.new(app,
3
+ window_size: [1024,768],
4
+ phantomjs_options: %w(--load-images=no --local-storage-quota=0 --proxy-type=none),
5
+ inspector: true,
6
+ js_errors: true
7
+ )
8
+ Helper::Driver.register(
9
+ :tablet,
10
+ :poltergeist,
11
+ "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"
12
+ )
13
+ driver
14
+ end
@@ -0,0 +1,62 @@
1
+ require 'cgi'
2
+ module Helper
3
+ module Cookie
4
+ def self.init_cookies
5
+ @cookies ||= {}
6
+ end
7
+
8
+ def self.all
9
+ @cookies
10
+ end
11
+
12
+ def self.add(key, value, options = {})
13
+ self.init_cookies
14
+ @cookies[key] = {
15
+ value: value,
16
+ options: options
17
+ }
18
+ end
19
+
20
+ def self.add_test_cookie(key, value)
21
+ key = 'test-' + self.base64_encode(key)
22
+ value = base64_encode value
23
+ self.add(key, value)
24
+ end
25
+
26
+ def self.send_to_driver(driver)
27
+ driver = Helper::Driver.get(driver)
28
+ if driver
29
+ self.set_cookies(driver)
30
+ end
31
+ end
32
+
33
+ def self.set_cookies(driver)
34
+ self.init_cookies
35
+ if driver[:driver] == :poltergeist
36
+ @cookies.keys.each do |key|
37
+ cookie = @cookies[key]
38
+ Capybara.current_session.driver.set_cookie(
39
+ key,
40
+ cookie[:value],
41
+ domain: self.domain_for_cookie(cookie)
42
+ )
43
+ end
44
+ end
45
+ end
46
+
47
+ def self.domain_for_cookie(cookie)
48
+ if cookie[:options][:domain]
49
+ cookie[:options][:domain]
50
+ end
51
+ end
52
+
53
+ def self.base64_encode(key)
54
+ CGI.escape(Base64.encode64(key).gsub("\n", ""))
55
+ end
56
+
57
+ def self.reset
58
+ @cookies = nil
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,29 @@
1
+ module Helper
2
+ module Device
3
+ def use_device(device)
4
+ driver = driver_for_device(device)
5
+ self.set_driver(driver)
6
+ end
7
+
8
+ protected
9
+
10
+ def set_driver(driver)
11
+ Capybara.current_driver = driver
12
+ end
13
+
14
+ def default_drivers
15
+ {
16
+ desktop: :firefox,
17
+ tablet: :ipad,
18
+ smartphone: :smartphone,
19
+ feature_phone: :blackberry
20
+ }
21
+ end
22
+
23
+ def driver_for_device(device)
24
+ driver = ENV[device.to_s] || default_drivers[device]
25
+ raise "Driver '#{driver}' does not exist. Please define a driver for :#{driver} in drivers/#{driver}.rb" unless Capybara.drivers.keys.include?(driver)
26
+ driver
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,37 @@
1
+ module Helper
2
+ module Driver
3
+ def self.register(name, driver, useragent = '')
4
+ @drivers ||= {}
5
+ @drivers[name] = {
6
+ driver: driver,
7
+ useragent: useragent
8
+ }
9
+ end
10
+
11
+ def self.setup(driver)
12
+ driver = self.get(driver)
13
+ if driver
14
+ self.init_driver(driver)
15
+ end
16
+ end
17
+
18
+ def self.init_driver(driver)
19
+ if driver[:driver] == :poltergeist and driver[:useragent]
20
+ Capybara.current_session.driver.headers = {"User-Agent" => driver[:useragent]}
21
+ end
22
+ end
23
+
24
+ def self.get(driver)
25
+ if @drivers and @drivers[driver]
26
+ @drivers[driver]
27
+ end
28
+ end
29
+
30
+ def self.phantomjs_extensions
31
+ extension_path = File.expand_path('../../../../src/phantomjs/extensions', __FILE__)
32
+ [
33
+ "#{extension_path}/geolocation.js"
34
+ ]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,70 @@
1
+ module Helper
2
+ module Environment
3
+
4
+ def host(prefix = 'pal')
5
+ app_host = "http://"
6
+ if self.env == "sandbox"
7
+ app_host << "#{prefix}.sandbox.dev"
8
+ else
9
+ if prefix == 'pal'
10
+ host_prefix = 'www'
11
+ else
12
+ host_prefix = 'm'
13
+ end
14
+ app_host << "#{host_prefix}.#{self.env}"
15
+ end
16
+ "#{app_host}.bbc.co.uk"
17
+ end
18
+
19
+ def env
20
+ ENV["TARGET_ENV"] || "sandbox"
21
+ end
22
+
23
+ def stub_path
24
+ raise "Please set your stub path using Helper::Environment.stub_path = '/path'" unless @stub_path
25
+ FileUtils.mkdir_p(@stub_path) unless Dir.exists?(@stub_path)
26
+ @stub_path
27
+ end
28
+
29
+ def stub_path=(path)
30
+ @stub_path = path
31
+ end
32
+
33
+ def default_stub_path
34
+ raise "Please set your default stub path using Helper::Environment.default_stub_path = '/path'" unless @default_stub_path
35
+ FileUtils.mkdir_p(@default_stub_path) unless Dir.exists?(@default_stub_path)
36
+ @default_stub_path
37
+ end
38
+
39
+ def default_stub_path=(path)
40
+ @default_stub_path = path
41
+ end
42
+
43
+ def proxy
44
+ ENV["http_proxy"] || ""
45
+ end
46
+
47
+ def syd_proxy
48
+ "http://www-cache-syd.reith.bbc.co.uk:80"
49
+ end
50
+
51
+ def allow_driver_override?
52
+ true if ENV["device_override"]
53
+ end
54
+
55
+ def remote?
56
+ self.env != "sandbox"
57
+ end
58
+
59
+ module_function :host,
60
+ :env,
61
+ :stub_path,
62
+ :stub_path=,
63
+ :default_stub_path,
64
+ :default_stub_path=,
65
+ :proxy,
66
+ :syd_proxy,
67
+ :allow_driver_override?,
68
+ :remote?
69
+ end
70
+ end
@@ -0,0 +1,7 @@
1
+ module Helper
2
+ module Flagpole
3
+ def self.set(flagpole, value)
4
+ Helper::Cookie.add_test_cookie("fp-#{flagpole}", value)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,21 @@
1
+ module Helper
2
+ module Sleep
3
+
4
+ def enable
5
+ @enable_sleep = true
6
+ end
7
+
8
+ def disable
9
+ @enable_sleep = false
10
+ end
11
+
12
+ def enable?
13
+ sleep 10000 if @enable_sleep
14
+ end
15
+
16
+ module_function :enable,
17
+ :disable,
18
+ :enable?
19
+
20
+ end
21
+ end
@@ -0,0 +1,84 @@
1
+ require 'json'
2
+ module Helper
3
+ module Stub
4
+
5
+ def self.clear
6
+ Dir.foreach self.stub_file_path do |file|
7
+ next if file == '.' or file == '..' or file == '.svn'
8
+ if File.exists?(file)
9
+ File.delete(File.join(self.stub_file_path, file))
10
+ end
11
+ end
12
+ end
13
+
14
+ def self.init_stubs
15
+ @stubs ||= {}
16
+ end
17
+
18
+ def self.register(key, value)
19
+ self.init_stubs
20
+ @stubs[key] = value
21
+ end
22
+
23
+ def self.register_default(key, value)
24
+ self.init_stubs
25
+ unless @stubs[key]
26
+ self.register(key, value)
27
+ end
28
+ end
29
+
30
+ def self.load_defaults
31
+ Dir.glob(File.join(Helper::Environment.default_stub_path, '**/*')).each do |file|
32
+ unless File.directory?(file)
33
+ value = JSON.load(File.read(file))
34
+ key = file.split('/').last
35
+ self.register_default(key, value)
36
+ end
37
+ end
38
+ end
39
+
40
+ def self.create_key(class_name, method, parameters = nil)
41
+ Digest::MD5.hexdigest([
42
+ class_name,
43
+ method,
44
+ parameters
45
+ ].delete_if{|value| value == nil}.to_json)
46
+ end
47
+
48
+ def self.write
49
+ if @stubs and @stubs.size > 0
50
+ self.write_to_store
51
+ end
52
+ end
53
+
54
+ def self.write_to_store
55
+ if Helper::Environment.remote?
56
+ self.write_to_redis
57
+ else
58
+ self.write_to_file
59
+ end
60
+ end
61
+
62
+ def self.write_to_redis
63
+ @redis ||= Redis.new(host: '176.34.255.217', port: 6379)
64
+ @redis.flushall
65
+ @redis.pipelined do
66
+ @stubs.each_pair do |key, value|
67
+ @redis.set key, value.to_json
68
+ end
69
+ end
70
+ end
71
+
72
+ def self.write_to_file
73
+ @stubs.each_pair do |key, value|
74
+ path = self.stub_file_path + '/' + key
75
+ File.open(path, 'w') {|f| f.write(value.to_json) }
76
+ end
77
+ end
78
+
79
+ def self.stub_file_path
80
+ Helper::Environment.stub_path
81
+ end
82
+
83
+ end
84
+ end
@@ -0,0 +1,14 @@
1
+ module Helper
2
+ module Visit
3
+ def visit(*args)
4
+ current_driver = Capybara.current_driver
5
+ Helper::Stub.load_defaults
6
+ Helper::Stub.write
7
+ Capybara.current_session.visit "/"
8
+ Helper::Driver.setup current_driver
9
+ Helper::Cookie.send_to_driver current_driver
10
+ Helper::Sleep.enable?
11
+ Capybara.current_session.visit *args
12
+ end
13
+ end
14
+ end
@@ -0,0 +1 @@
1
+ Dir[File.dirname(__FILE__) + "/helper/*.rb"].each {|helper| require helper }
@@ -0,0 +1,8 @@
1
+ require 'cucumber_salad/before'
2
+ World(Helper::Cookie)
3
+ World(Helper::Device)
4
+ World(Helper::Environment)
5
+ World(Helper::Flagpole)
6
+ World(Helper::Sleep)
7
+ World(Helper::Stub)
8
+ World(Helper::Visit)
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bbc_cucumber_salad
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Matthew Crouch
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: capybara
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 2.0.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.0.2
30
+ - !ruby/object:Gem::Dependency
31
+ name: cucumber
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 1.2.1
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.2.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 2.1.3
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.1.3
62
+ - !ruby/object:Gem::Dependency
63
+ name: poltergeist
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 1.1.0
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.1.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: redis
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: 3.0.2
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 3.0.2
94
+ description: A gem to manage the usage of cucumber/mocking/multiple devices
95
+ email:
96
+ - Matthew.Crouch@bbc.co.uk
97
+ executables: []
98
+ extensions: []
99
+ extra_rdoc_files: []
100
+ files:
101
+ - lib/cucumber_salad/before.rb
102
+ - lib/cucumber_salad/drivers/blackberry.rb
103
+ - lib/cucumber_salad/drivers/firefox.rb
104
+ - lib/cucumber_salad/drivers/phantomjs.rb
105
+ - lib/cucumber_salad/drivers/safari.rb
106
+ - lib/cucumber_salad/drivers/smartphone.rb
107
+ - lib/cucumber_salad/drivers/tablet.rb
108
+ - lib/cucumber_salad/drivers.rb
109
+ - lib/cucumber_salad/helper/cookie.rb
110
+ - lib/cucumber_salad/helper/device.rb
111
+ - lib/cucumber_salad/helper/driver.rb
112
+ - lib/cucumber_salad/helper/environment.rb
113
+ - lib/cucumber_salad/helper/flagpole.rb
114
+ - lib/cucumber_salad/helper/sleep.rb
115
+ - lib/cucumber_salad/helper/stub.rb
116
+ - lib/cucumber_salad/helper/visit.rb
117
+ - lib/cucumber_salad/helpers.rb
118
+ - lib/cucumber_salad/world.rb
119
+ - lib/cucumber_salad.rb
120
+ - Gemfile
121
+ - Gemfile.lock
122
+ homepage:
123
+ licenses: []
124
+ post_install_message:
125
+ rdoc_options: []
126
+ require_paths:
127
+ - lib
128
+ required_ruby_version: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ required_rubygems_version: !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ! '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubyforge_project:
142
+ rubygems_version: 1.8.25
143
+ signing_key:
144
+ specification_version: 3
145
+ summary: Gem to ease the pain of managing capybara driver config and provide a home
146
+ for common utils and patches
147
+ test_files: []