bbc_cucumber_salad 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []