howitzer 1.1.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +32 -0
  4. data/.travis.yml +1 -4
  5. data/.yardopts +1 -2
  6. data/CHANGELOG.md +28 -1
  7. data/Gemfile +6 -0
  8. data/LICENSE +1 -1
  9. data/README.md +55 -85
  10. data/Rakefile +7 -7
  11. data/bin/howitzer +56 -31
  12. data/features/cli_new.feature +162 -79
  13. data/features/cli_update.feature +114 -21
  14. data/features/step_definitions/common_steps.rb +29 -9
  15. data/features/support/env.rb +1 -1
  16. data/features/support/transformers.rb +2 -2
  17. data/generators/base_generator.rb +121 -49
  18. data/generators/config/config_generator.rb +8 -5
  19. data/generators/config/templates/boot.rb +14 -0
  20. data/generators/config/templates/capybara.rb +156 -0
  21. data/generators/config/templates/custom.yml +2 -3
  22. data/generators/config/templates/default.yml +50 -82
  23. data/generators/cucumber/cucumber_generator.rb +9 -9
  24. data/generators/cucumber/templates/common_steps.rb +4 -4
  25. data/generators/cucumber/templates/cucumber.rake +63 -54
  26. data/generators/cucumber/templates/env.rb +24 -23
  27. data/generators/cucumber/templates/transformers.rb +23 -15
  28. data/generators/emails/emails_generator.rb +4 -2
  29. data/generators/emails/templates/example_email.rb +4 -4
  30. data/generators/prerequisites/prerequisites_generator.rb +24 -0
  31. data/generators/prerequisites/templates/base.rb +22 -0
  32. data/generators/prerequisites/templates/factory_girl.rb +30 -0
  33. data/generators/prerequisites/templates/user.rb +7 -0
  34. data/generators/prerequisites/templates/users.rb +12 -0
  35. data/generators/root/root_generator.rb +11 -7
  36. data/generators/root/templates/.rubocop.yml +32 -0
  37. data/generators/root/templates/Gemfile.erb +27 -0
  38. data/generators/root/templates/Rakefile +6 -8
  39. data/generators/rspec/rspec_generator.rb +7 -7
  40. data/generators/rspec/templates/example_spec.rb +1 -1
  41. data/generators/rspec/templates/rspec.rake +48 -29
  42. data/generators/rspec/templates/spec_helper.rb +33 -32
  43. data/generators/tasks/tasks_generator.rb +4 -2
  44. data/generators/tasks/templates/common.rake +1 -16
  45. data/generators/turnip/templates/.rspec +1 -0
  46. data/generators/turnip/templates/common_steps.rb +25 -0
  47. data/generators/turnip/templates/example.feature +8 -0
  48. data/generators/turnip/templates/spec_helper.rb +56 -0
  49. data/generators/turnip/templates/turnip.rake +61 -0
  50. data/generators/turnip/templates/turnip_helper.rb +6 -0
  51. data/generators/turnip/turnip_generator.rb +26 -0
  52. data/generators/web/templates/example_page.rb +15 -0
  53. data/generators/web/templates/menu_section.rb +13 -0
  54. data/generators/web/web_generator.rb +22 -0
  55. data/howitzer.gemspec +14 -21
  56. data/lib/howitzer.rb +47 -7
  57. data/lib/howitzer/cache.rb +70 -0
  58. data/lib/howitzer/capybara_helpers.rb +194 -0
  59. data/lib/howitzer/email.rb +96 -104
  60. data/lib/howitzer/exceptions.rb +10 -6
  61. data/lib/howitzer/log.rb +120 -0
  62. data/lib/howitzer/mail_adapters.rb +7 -0
  63. data/lib/howitzer/mail_adapters/abstract.rb +84 -0
  64. data/lib/howitzer/mail_adapters/mailgun.rb +115 -0
  65. data/lib/howitzer/mailgun_api.rb +9 -0
  66. data/lib/howitzer/mailgun_api/client.rb +79 -0
  67. data/lib/howitzer/mailgun_api/connector.rb +37 -0
  68. data/lib/howitzer/mailgun_api/response.rb +28 -0
  69. data/lib/howitzer/tasks/framework.rake +2 -2
  70. data/lib/howitzer/utils.rb +7 -1
  71. data/lib/howitzer/utils/string_extensions.rb +66 -0
  72. data/lib/howitzer/version.rb +2 -1
  73. data/lib/howitzer/web.rb +11 -0
  74. data/lib/howitzer/web/base_section.rb +27 -0
  75. data/lib/howitzer/web/blank_page.rb +12 -0
  76. data/lib/howitzer/web/capybara_methods_proxy.rb +29 -0
  77. data/lib/howitzer/web/element_dsl.rb +109 -0
  78. data/lib/howitzer/web/iframe_dsl.rb +93 -0
  79. data/lib/howitzer/web/page.rb +173 -0
  80. data/lib/howitzer/web/page_dsl.rb +64 -0
  81. data/lib/howitzer/web/page_validator.rb +118 -0
  82. data/lib/howitzer/web/section.rb +27 -0
  83. data/lib/howitzer/web/section_dsl.rb +154 -0
  84. data/spec/config/custom.yml +10 -1
  85. data/spec/spec_helper.rb +37 -19
  86. data/spec/support/generator_helper.rb +12 -11
  87. data/spec/support/logger_helper.rb +10 -9
  88. data/spec/support/mailgun_unit_client.rb +52 -44
  89. data/spec/support/shared_examples/capybara_context_holder.rb +33 -0
  90. data/spec/support/shared_examples/capybara_methods_proxy.rb +94 -0
  91. data/spec/support/shared_examples/dynamic_section_methods.rb +35 -0
  92. data/spec/support/shared_examples/element_dsl.rb +119 -0
  93. data/spec/unit/generators/base_generator_spec.rb +64 -33
  94. data/spec/unit/generators/config_generator_spec.rb +11 -7
  95. data/spec/unit/generators/cucumber_generator_spec.rb +26 -17
  96. data/spec/unit/generators/emails_generator_spec.rb +10 -6
  97. data/spec/unit/generators/prerequisites_generator_spec.rb +53 -0
  98. data/spec/unit/generators/root_generator_spec.rb +50 -13
  99. data/spec/unit/generators/rspec_generator_spec.rb +9 -9
  100. data/spec/unit/generators/tasks_generator_spec.rb +6 -6
  101. data/spec/unit/generators/turnip_generator_spec.rb +52 -0
  102. data/spec/unit/generators/web_generator_spec.rb +52 -0
  103. data/spec/unit/lib/cache_spec.rb +85 -0
  104. data/spec/unit/lib/capybara_helpers_spec.rb +696 -0
  105. data/spec/unit/lib/email_spec.rb +104 -91
  106. data/spec/unit/lib/howitzer.rb +31 -0
  107. data/spec/unit/lib/init_spec.rb +0 -1
  108. data/spec/unit/lib/log_spec.rb +122 -0
  109. data/spec/unit/lib/mail_adapters/abstract_spec.rb +62 -0
  110. data/spec/unit/lib/mail_adapters/mailgun_spec.rb +163 -0
  111. data/spec/unit/lib/mailgun_api/client_spec.rb +58 -0
  112. data/spec/unit/lib/mailgun_api/connector_spec.rb +54 -0
  113. data/spec/unit/lib/mailgun_api/response_spec.rb +28 -0
  114. data/spec/unit/lib/utils/string_extensions_spec.rb +77 -0
  115. data/spec/unit/lib/web/base_section_spec.rb +41 -0
  116. data/spec/unit/lib/web/element_dsl_spec.rb +17 -0
  117. data/spec/unit/lib/web/iframe_dsl_spec.rb +99 -0
  118. data/spec/unit/lib/web/page_dsl_spec.rb +52 -0
  119. data/spec/unit/lib/web/page_spec.rb +304 -0
  120. data/spec/unit/lib/web/page_validator_spec.rb +218 -0
  121. data/spec/unit/lib/web/section_dsl_spec.rb +165 -0
  122. data/spec/unit/lib/web/section_spec.rb +61 -0
  123. data/spec/unit/version_spec.rb +1 -1
  124. metadata +116 -203
  125. data/GETTING_STARTED.md +0 -774
  126. data/generators/cucumber/templates/cucumber.yml +0 -10
  127. data/generators/pages/pages_generator.rb +0 -21
  128. data/generators/pages/templates/example_menu.rb +0 -15
  129. data/generators/pages/templates/example_page.rb +0 -15
  130. data/generators/root/templates/Gemfile +0 -7
  131. data/generators/root/templates/boot.rb +0 -10
  132. data/lib/howitzer/blank_page.rb +0 -6
  133. data/lib/howitzer/capybara/dsl_ex.rb +0 -15
  134. data/lib/howitzer/capybara/settings.rb +0 -343
  135. data/lib/howitzer/helpers.rb +0 -230
  136. data/lib/howitzer/init.rb +0 -1
  137. data/lib/howitzer/mailgun/client.rb +0 -65
  138. data/lib/howitzer/mailgun/connector.rb +0 -34
  139. data/lib/howitzer/mailgun/response.rb +0 -28
  140. data/lib/howitzer/patches/rawler_patched.rb +0 -86
  141. data/lib/howitzer/settings.rb +0 -27
  142. data/lib/howitzer/utils/data_generator/data_storage.rb +0 -88
  143. data/lib/howitzer/utils/data_generator/gen.rb +0 -135
  144. data/lib/howitzer/utils/locator_store.rb +0 -217
  145. data/lib/howitzer/utils/log.rb +0 -139
  146. data/lib/howitzer/utils/page_validator.rb +0 -133
  147. data/lib/howitzer/vendor/firebug-1.12.1-fx.xpi +0 -0
  148. data/lib/howitzer/vendor/firepath-0.9.7-fx.xpi +0 -0
  149. data/lib/howitzer/web_page.rb +0 -253
  150. data/spec/active_resource.rb +0 -0
  151. data/spec/config/default.yml +0 -26
  152. data/spec/support/boot_helper.rb +0 -15
  153. data/spec/unit/generators/pages_generator_spec.rb +0 -33
  154. data/spec/unit/lib/capybara/dsl_ex_spec.rb +0 -60
  155. data/spec/unit/lib/capybara/settings_spec.rb +0 -441
  156. data/spec/unit/lib/helpers_spec.rb +0 -1129
  157. data/spec/unit/lib/mailgun/client_spec.rb +0 -36
  158. data/spec/unit/lib/mailgun/connector_spec.rb +0 -70
  159. data/spec/unit/lib/mailgun/response_spec.rb +0 -28
  160. data/spec/unit/lib/settings_spec.rb +0 -17
  161. data/spec/unit/lib/utils/data_generator/data_storage_spec.rb +0 -80
  162. data/spec/unit/lib/utils/data_generator/gen_spec.rb +0 -90
  163. data/spec/unit/lib/utils/locator_store_spec.rb +0 -157
  164. data/spec/unit/lib/utils/log_spec.rb +0 -107
  165. data/spec/unit/lib/utils/page_validator_spec.rb +0 -265
  166. data/spec/unit/lib/web_page_spec.rb +0 -346
File without changes
@@ -1,26 +0,0 @@
1
- ###########################################################
2
- # LOGGER SETTINGS #
3
- ###########################################################
4
- log_dir: "spec/log"
5
- txt_log: log.txt
6
- html_log: log.html
7
- rawler_log: rawler_log.txt
8
- selenium_server_log: selenium-server.log
9
- required_clean_logs: true
10
- hide_datetime_from_log: true
11
-
12
- driver: selenium
13
-
14
- ###########################################################
15
- # MAILGUN SETTINGS #
16
- ###########################################################
17
- mailgun_key: mailgun_account_private_key
18
- mailgun_domain: mailgun@test.domain
19
-
20
- ############################################################
21
- # TIMEOUTS #
22
- ############################################################
23
- timeout_tiny: 1
24
- timeout_short: 2
25
- timeout_small: 5
26
- timeout_medium: 15
@@ -1,15 +0,0 @@
1
- require 'sexy_settings'
2
- SexySettings.configure do |config|
3
- config.path_to_default_settings = File.expand_path("default.yml", File.join(File.dirname(__FILE__), '..', 'config'))
4
- config.path_to_custom_settings = File.expand_path("custom.yml", File.join(File.dirname(__FILE__), '..', 'config'))
5
- end
6
-
7
- def settings
8
- SexySettings::Base.instance
9
- end
10
-
11
- def log
12
- Howitzer::Log.instance
13
- end
14
-
15
- ENV['TEST_MODE'] = "TRUE"
@@ -1,33 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe 'Generators' do
4
- let(:destination) { Howitzer::BaseGenerator.destination }
5
- let(:output) { StringIO.new }
6
- subject { file_tree_info(destination) }
7
- before do
8
- Howitzer::BaseGenerator.logger = output
9
- generator_name.new
10
- end
11
- after { FileUtils.rm_r(destination) }
12
-
13
- describe 'PagesGenerator' do
14
- let(:generator_name) { Howitzer::PagesGenerator }
15
- let(:expected_result) do
16
- [
17
- {:name=> '/pages', :is_directory=>true},
18
- {:name=> '/pages/example_menu.rb', :is_directory=>false, :size=>template_file_size('pages', 'example_menu.rb')},
19
- {:name=> '/pages/example_page.rb', :is_directory=>false, :size=>template_file_size('pages', 'example_page.rb')}
20
- ]
21
- end
22
- it { is_expected.to eql(expected_result) }
23
- describe 'output' do
24
- let(:expected_output) do
25
- " * PageOriented pattern structure generation ...
26
- Added 'pages/example_page.rb' file
27
- Added 'pages/example_menu.rb' file\n"
28
- end
29
- subject { output.string }
30
- it { is_expected.to eql(expected_output) }
31
- end
32
- end
33
- end
@@ -1,60 +0,0 @@
1
- require 'spec_helper'
2
- require 'howitzer/capybara/dsl_ex'
3
-
4
- RSpec.describe Howitzer::Capybara::DslEx do
5
- let(:test_page_klass) do
6
- Class.new do
7
- include Howitzer::Capybara::DslEx
8
- extend Howitzer::Capybara::DslEx
9
- end
10
- end
11
- let(:test_page) { test_page_klass.new }
12
-
13
- describe '#find' do
14
- context 'when string argument with block' do
15
- subject { test_page.find('foo'){ 'bar' } }
16
- it do
17
- expect(test_page.page).to receive(:find).with('foo').and_yield.once
18
- subject
19
- end
20
- end
21
- context 'when first hash argument and second hash' do
22
- subject { test_page.find({xpath: '//bar'}, {with: 'foo'}) }
23
- it do
24
- expect(test_page.page).to receive(:find).with(:xpath, '//bar', {:with=> 'foo'}).once
25
- subject
26
- end
27
- end
28
- context 'when array argument' do
29
- subject { test_page.find([:xpath, '//bar']) }
30
- it do
31
- expect(test_page.page).to receive(:find).with(:xpath, '//bar').once
32
- subject
33
- end
34
- end
35
- end
36
-
37
- describe '.find' do
38
- context 'when string argument with block' do
39
- subject { test_page_klass.find('foo'){ 'bar' } }
40
- it do
41
- expect(test_page.page).to receive(:find).with('foo').and_yield.once
42
- subject
43
- end
44
- end
45
- context 'when first hash argument and second hash' do
46
- subject { test_page_klass.find({xpath: '//bar'}, {with: 'foo'}) }
47
- it do
48
- expect(test_page.page).to receive(:find).with(:xpath, '//bar', {:with=> 'foo'}).once
49
- subject
50
- end
51
- end
52
- context 'when array argument' do
53
- subject { test_page_klass.find([:xpath, '//bar']) }
54
- it do
55
- expect(test_page.page).to receive(:find).with(:xpath, '//bar').once
56
- subject
57
- end
58
- end
59
- end
60
- end
@@ -1,441 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'howitzer/capybara/settings'
4
-
5
- RSpec.describe 'CapybaraSettings' do
6
- it 'supports deprecated module name' do
7
- expect { CapybaraSettings }.to_not raise_error
8
- expect(CapybaraSettings).to eq(Capybara::Settings)
9
- end
10
- end
11
-
12
- RSpec.describe 'Capybara::Settings' do
13
- let(:log) { double('log') }
14
- let(:test_object) { double('test_object').extend(Capybara::Settings) }
15
- before do
16
- allow(log).to receive(:error).and_return( true )
17
- end
18
-
19
- describe '.base_ff_profile_settings' do
20
- subject { Capybara::Settings.base_ff_profile_settings }
21
- before do
22
- allow(::Selenium::WebDriver::Firefox::Profile).to receive(:new) { Hash.new }
23
- allow(settings).to receive(:app_host) { 'localhost' }
24
- end
25
-
26
- it do
27
- is_expected.to eq(
28
- 'network.http.phishy-userpass-length' => 255,
29
- 'browser.safebrowsing.malware.enabled' => false,
30
- 'network.automatic-ntlm-auth.allow-non-fqdn' => true,
31
- 'network.ntlm.send-lm-response' => true,
32
- 'network.automatic-ntlm-auth.trusted-uris' => 'localhost'
33
- )
34
- end
35
- end
36
-
37
- describe '.define_driver' do
38
- subject { Capybara::Settings.define_driver }
39
- context 'when selenium driver' do
40
- before do
41
- allow(settings).to receive(:driver).and_return('selenium')
42
- allow(settings).to receive(:sel_browser).and_return('chrome')
43
- allow(Capybara::Settings).to receive(:ff_browser?).and_return(false)
44
- end
45
- it do
46
- expect(Capybara.default_driver).to be(:selenium)
47
- expect(subject.call).to be_an_instance_of(Capybara::Selenium::Driver)
48
- end
49
- end
50
-
51
- context 'when selenium dev driver' do
52
- let(:profile) { Hash.new }
53
- before do
54
- allow(::Selenium::WebDriver::Firefox::Profile).to receive(:new) { profile }
55
- allow(settings).to receive(:app_host) { 'localhost' }
56
- allow(settings).to receive(:driver).and_return('selenium_dev')
57
- allow(settings).to receive(:sel_browser).and_return('firefox')
58
- end
59
-
60
- context 'when extension is found' do
61
- before { allow(profile).to receive(:add_extension).and_return('') }
62
- it do
63
- expect(Capybara.default_driver).to be(:selenium)
64
- expect(subject.call).to be_an_instance_of(Capybara::Selenium::Driver)
65
- end
66
- it do
67
- expect(subject.call.options[:profile]).to eq(
68
- 'network.http.phishy-userpass-length' => 255,
69
- 'browser.safebrowsing.malware.enabled' => false,
70
- 'network.automatic-ntlm-auth.allow-non-fqdn' => true,
71
- 'network.ntlm.send-lm-response' => true,
72
- 'network.automatic-ntlm-auth.trusted-uris' => 'localhost',
73
- 'extensions.firebug.currentVersion' => 'Last',
74
- 'extensions.firebug.previousPlacement' => 1,
75
- 'extensions.firebug.onByDefault' => true,
76
- 'extensions.firebug.defaultPanelName' => 'firepath',
77
- 'extensions.firebug.script.enableSites' => true,
78
- 'extensions.firebug.net.enableSites' => true,
79
- 'extensions.firebug.console.enableSites' => true
80
- )
81
- end
82
- end
83
- end
84
-
85
- context 'when webkit driver' do
86
- before do
87
- allow(settings).to receive(:driver).and_return('webkit')
88
- allow(Capybara::Settings).to receive(:require).with('capybara-webkit').and_return(true)
89
- end
90
- it { is_expected.to be true }
91
- end
92
-
93
- context 'when poltergeist driver' do
94
- before do
95
- allow(settings).to receive(:driver).and_return('poltergeist')
96
- allow(settings).to receive(:pjs_ignore_js_errors).and_return(false)
97
- end
98
- it do
99
- expect(subject.call).to be_an_instance_of(Capybara::Poltergeist::Driver)
100
- expect(subject.call.options).to eq(
101
- js_errors: !settings.pjs_ignore_js_errors,
102
- phantomjs_options: ['--ignore-ssl-errors=no']
103
- )
104
- end
105
- end
106
-
107
- context 'when phantomjs driver' do
108
- before do
109
- allow(settings).to receive(:driver).and_return('phantomjs')
110
- allow(settings).to receive(:pjs_ignore_js_errors).and_return(false)
111
- end
112
- it do
113
- expect(subject.call).to be_an_instance_of(Capybara::Selenium::Driver)
114
- expect(subject.call.options[:browser]).to eq(:phantomjs)
115
- expect(subject.call.options[:desired_capabilities][:javascript_enabled]).not_to eq(settings.pjs_ignore_js_errors)
116
- expect(subject.call.options[:args]).to eq(["--ignore-ssl-errors=no"])
117
- end
118
- end
119
-
120
- context 'when sauce driver' do
121
- let(:driver) { Object.new }
122
- before do
123
- allow(settings).to receive(:driver).and_return('sauce')
124
- allow(settings).to receive(:sl_browser_name).and_return('firefox')
125
- allow(driver).to receive_message_chain(:browser, :file_detector=)
126
- allow(Capybara::Selenium::Driver).to receive(:new).and_return(driver)
127
- end
128
- it { expect(subject.call).to eql(driver) }
129
- end
130
-
131
- context 'when testingbot driver' do
132
- let(:driver) { Object.new }
133
- before do
134
- allow(settings).to receive(:driver).and_return('testingbot')
135
- allow(settings).to receive(:tb_browser_name).and_return('firefox')
136
- allow(driver).to receive_message_chain(:browser, :file_detector=)
137
- allow(Capybara::Selenium::Driver).to receive(:new).and_return(driver)
138
- end
139
- it { expect(subject.call).to eql(driver) }
140
- end
141
-
142
- context 'when selenium_grid driver' do
143
- before { allow(settings).to receive(:driver).and_return('selenium_grid') }
144
-
145
- context "and ie browser" do
146
- before { allow(Capybara::Settings).to receive(:ie_browser?).and_return(true) }
147
- it do
148
- expect(subject.call).to be_an_instance_of(Capybara::Selenium::Driver)
149
- expect(subject.call.options[:desired_capabilities][:browser_name]).to eq('internet explorer')
150
- expect(subject.call.options[:desired_capabilities][:platform]).to eq(:windows)
151
- end
152
- end
153
-
154
- context "and firefox browser" do
155
- before do
156
- allow(Capybara::Settings).to receive(:ie_browser?).and_return(false)
157
- allow(Capybara::Settings).to receive(:ff_browser?).and_return(true)
158
- end
159
- it do
160
- expect(subject.call).to be_an_instance_of(Capybara::Selenium::Driver)
161
- expect(subject.call.options[:desired_capabilities][:browser_name]).to eq('firefox')
162
- end
163
- end
164
-
165
- context "and chrome browser" do
166
- before do
167
- allow(Capybara::Settings).to receive(:ie_browser?).and_return(false)
168
- allow(Capybara::Settings).to receive(:ff_browser?).and_return(false)
169
- allow(Capybara::Settings).to receive(:chrome_browser?).and_return(true)
170
- end
171
- it do
172
- expect(subject.call).to be_an_instance_of(Capybara::Selenium::Driver)
173
- expect(subject.call.options[:desired_capabilities][:browser_name]).to eq('chrome')
174
- end
175
- end
176
-
177
- context "and safari browser" do
178
- before do
179
- allow(Capybara::Settings).to receive(:ie_browser?).and_return(false)
180
- allow(Capybara::Settings).to receive(:ff_browser?).and_return(false)
181
- allow(Capybara::Settings).to receive(:chrome_browser?).and_return(false)
182
- allow(Capybara::Settings).to receive(:opera_browser?).and_return(false)
183
- allow(Capybara::Settings).to receive(:safari_browser?).and_return(true)
184
- end
185
- it do
186
- expect(subject.call).to be_an_instance_of(Capybara::Selenium::Driver)
187
- expect(subject.call.options[:desired_capabilities][:browser_name]).to eq('safari')
188
- end
189
- end
190
-
191
- context "and incorrect browser" do
192
- before do
193
- allow(Capybara::Settings).to receive(:ie_browser?).and_return(false)
194
- allow(Capybara::Settings).to receive(:ff_browser?).and_return(false)
195
- allow(Capybara::Settings).to receive(:chrome_browser?).and_return(false)
196
- allow(Capybara::Settings).to receive(:opera_browser?).and_return(false)
197
- allow(Capybara::Settings).to receive(:safari_browser?).and_return(false)
198
- it do
199
- expect { subject }.to raise_error(RuntimeError, "Unknown '#{settings.sel_browser}' sel_browser. Check your settings, it should be one of [:ie, :iexplore, :ff, :firefox, :chrome, :opera, safari]")
200
- end
201
- end
202
- end
203
- end
204
-
205
- context 'when browserstack driver' do
206
- let(:driver) { Object.new }
207
- before do
208
- allow(settings).to receive(:driver).and_return('browserstack')
209
- allow(settings).to receive(:bs_browser_name).and_return('firefox')
210
- allow(driver).to receive_message_chain(:browser, :file_detector=)
211
- allow(Capybara::Selenium::Driver).to receive(:new).and_return(driver)
212
- end
213
- it { expect(subject.call).to eql(driver) }
214
- end
215
-
216
- context 'when incorrect driver' do
217
- before do
218
- allow(settings).to receive(:driver).and_return('caramba')
219
- end
220
- it do
221
- expect { subject }.to raise_error(RuntimeError, "Unknown '#{settings.driver}' driver. Check your settings, it should be one of [selenium, selenium_grid, selenium_dev, webkit, poltergeist, phantomjs, sauce, testingbot, browserstack]")
222
- end
223
- end
224
- end
225
-
226
- describe '#sauce_resource_path' do
227
- subject { test_object.sauce_resource_path(name) }
228
- let (:name) { 'test_name' }
229
- before do
230
- allow(settings).to receive(:sl_user) { 'vlad' }
231
- allow(settings).to receive(:sl_api_key) { '11111' }
232
- allow(test_object).to receive(:session_id) { '12341234' }
233
- end
234
- it { is_expected.to eql('https://vlad:11111@saucelabs.com/rest/vlad/jobs/12341234/results/test_name') }
235
- end
236
- describe '.sauce_resource_path' do
237
- subject { Capybara::Settings.sauce_resource_path(name) }
238
- let (:name) { 'test_name' }
239
- before do
240
- allow(settings).to receive(:sl_user) { 'vlad' }
241
- allow(settings).to receive(:sl_api_key) { '11111' }
242
- allow(Capybara::Settings).to receive(:session_id) { '12341234' }
243
- end
244
-
245
- it { is_expected.to eql('https://vlad:11111@saucelabs.com/rest/vlad/jobs/12341234/results/test_name') }
246
- end
247
-
248
- describe '#update_sauce_job_status' do
249
- subject { test_object.update_sauce_job_status }
250
- before do
251
- allow(settings).to receive(:sl_user) { 'vlad1' }
252
- allow(settings).to receive(:sl_api_key) { '22222' }
253
- allow(test_object).to receive(:session_id) { '12341234' }
254
- stub_const('RestClient', double)
255
- end
256
-
257
- it do
258
- expect(RestClient).to receive(:put).with('http://vlad1:22222@saucelabs.com/rest/v1/vlad1/jobs/12341234', '{}', {content_type: :json, accept: :json}).once
259
- subject
260
- end
261
- end
262
-
263
- describe '.update_sauce_resource_path' do
264
- subject { Capybara::Settings.update_sauce_job_status }
265
- before do
266
- allow(settings).to receive(:sl_user) { 'vlad1' }
267
- allow(settings).to receive(:sl_api_key) { '22222' }
268
- allow(Capybara::Settings).to receive(:session_id) { '12341234' }
269
- stub_const('RestClient', double)
270
- end
271
-
272
- it do
273
- expect(RestClient).to receive(:put).with('http://vlad1:22222@saucelabs.com/rest/v1/vlad1/jobs/12341234', '{}', {content_type: :json, accept: :json}).once
274
- subject
275
- end
276
- end
277
-
278
- describe '#suite_name' do
279
- subject { test_object.suite_name }
280
- before do
281
- allow(settings).to receive(:sl_browser_name) { 'ie' }
282
- end
283
-
284
- context 'when environment present' do
285
- before { ENV['RAKE_TASK'] = rake_task }
286
- context 'when includes rspec' do
287
- let(:rake_task) { 'rspec:bvt' }
288
- it { is_expected.to eql('BVT IE')}
289
- end
290
- context 'when includes spec' do
291
- let(:rake_task) { 'spec:bvt' }
292
- it { is_expected.to eql('BVT IE')}
293
- end
294
-
295
- context 'when includes cucumber' do
296
- let(:rake_task) { 'cucumber:bvt' }
297
- it { is_expected.to eql('BVT IE')}
298
- end
299
- context 'when not includes rpsec and cucumber' do
300
- let(:rake_task) { 'unknown' }
301
- it { is_expected.to eql('UNKNOWN IE')}
302
- end
303
- context 'when includes only cucumber' do
304
- let(:rake_task) { 'cucumber' }
305
- it { is_expected.to eql('ALL IE')}
306
- end
307
- end
308
- context 'when environment empty' do
309
- before { ENV['RAKE_TASK'] = nil }
310
- it { is_expected.to eql('CUSTOM IE')}
311
- end
312
- end
313
-
314
- describe '.suite_name' do
315
- subject { Capybara::Settings.suite_name }
316
- before do
317
- allow(settings).to receive(:sl_browser_name) { 'ie' }
318
- end
319
-
320
- context 'when environment present' do
321
- before { ENV['RAKE_TASK'] = rake_task }
322
- context 'when includes rspec' do
323
- let(:rake_task) { 'rspec:bvt' }
324
- it { is_expected.to eql('BVT IE')}
325
- end
326
- context 'when includes spec' do
327
- let(:rake_task) { 'spec:bvt' }
328
- it { is_expected.to eql('BVT IE')}
329
- end
330
-
331
- context 'when includes cucumber' do
332
- let(:rake_task) { 'cucumber:bvt' }
333
- it { is_expected.to eql('BVT IE')}
334
- end
335
- context 'when not includes rpsec and cucumber' do
336
- let(:rake_task) { 'unknown' }
337
- it { is_expected.to eql('UNKNOWN IE')}
338
- end
339
- context 'when includes only cucumber' do
340
- let(:rake_task) { 'cucumber' }
341
- it { is_expected.to eql('ALL IE')}
342
- end
343
- end
344
- context 'when environment empty' do
345
- before { ENV['RAKE_TASK'] = nil }
346
- it { is_expected.to eql('CUSTOM IE')}
347
- end
348
- end
349
-
350
- describe '#session_id' do
351
- subject { test_object.session_id }
352
- before do
353
- browser = double
354
- current_session = double
355
- driver = double
356
- instance_variable = double
357
- allow(Capybara).to receive(:current_session){current_session}
358
- allow(current_session).to receive(:driver){driver}
359
- allow(driver).to receive(:browser){browser}
360
- allow(browser).to receive(:instance_variable_get).with(:@bridge){ instance_variable }
361
- allow(instance_variable).to receive(:session_id){ 'test'}
362
- end
363
-
364
- it { is_expected.to eql('test') }
365
- end
366
-
367
- describe '.session_id' do
368
- subject { Capybara::Settings.session_id }
369
- before do
370
- browser = double
371
- current_session = double
372
- driver = double
373
- instance_variable = double
374
- allow(Capybara).to receive(:current_session){current_session}
375
- allow(current_session).to receive(:driver){driver}
376
- allow(driver).to receive(:browser){browser}
377
- allow(browser).to receive(:instance_variable_get).with(:@bridge){ instance_variable }
378
- allow(instance_variable).to receive(:session_id){ 'test'}
379
- end
380
-
381
- it { is_expected.to eql('test') }
382
- end
383
-
384
- describe '#rake_task_name' do
385
- subject { test_object.rake_task_name }
386
- before { ENV['RAKE_TASK'] = rake_task }
387
- context 'when includes rspec' do
388
- let(:rake_task) { 'rspec:bvt' }
389
- it { is_expected.to eq('BVT') }
390
- end
391
- context 'when includes cucumber' do
392
- let(:rake_task) { 'cucumber:bvt' }
393
- it { is_expected.to eq('BVT') }
394
- end
395
- context 'when includes spec' do
396
- let(:rake_task) { 'spec:bvt' }
397
- it { is_expected.to eq('BVT') }
398
- end
399
- context 'when includes only cucumber' do
400
- let(:rake_task) { 'cucumber' }
401
- it { is_expected.to eq('') }
402
- end
403
- context 'when includes unknown task' do
404
- let(:rake_task) { 'unknown' }
405
- it { is_expected.to eq('UNKNOWN') }
406
- end
407
- context 'when environment is empty' do
408
- let(:rake_task) { nil }
409
- it { is_expected.to eq('') }
410
- end
411
- end
412
-
413
- describe '.rake_task_name' do
414
- subject { Capybara::Settings.rake_task_name }
415
- before { ENV['RAKE_TASK'] = rake_task }
416
- context 'when includes rspec' do
417
- let(:rake_task) { 'rspec:bvt' }
418
- it { is_expected.to eq('BVT') }
419
- end
420
- context 'when includes cucumber' do
421
- let(:rake_task) { 'cucumber:bvt' }
422
- it { is_expected.to eq('BVT') }
423
- end
424
- context 'when includes spec' do
425
- let(:rake_task) { 'spec:bvt' }
426
- it { is_expected.to eq('BVT') }
427
- end
428
- context 'when includes only cucumber' do
429
- let(:rake_task) { 'cucumber' }
430
- it { is_expected.to eq('') }
431
- end
432
- context 'when includes unknown task' do
433
- let(:rake_task) { 'unknown' }
434
- it { is_expected.to eq('UNKNOWN') }
435
- end
436
- context 'when environment is empty' do
437
- let(:rake_task) { nil }
438
- it { is_expected.to eq('') }
439
- end
440
- end
441
- end