howitzer 1.0.1 → 1.0.2
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.
- checksums.yaml +7 -0
- data/.gitignore +4 -1
- data/.travis.yml +3 -2
- data/CHANGELOG.md +25 -5
- data/GETTING_STARTED.md +158 -13
- data/README.md +49 -32
- data/Rakefile +10 -1
- data/bin/howitzer +49 -78
- data/features/cli_help.feature +30 -0
- data/features/cli_new.feature +263 -0
- data/features/cli_unknown.feature +17 -0
- data/features/cli_version.feature +14 -0
- data/features/step_definitions/common_steps.rb +1 -0
- data/features/support/env.rb +1 -0
- data/features/support/transformers.rb +3 -0
- data/generators/base_generator.rb +2 -0
- data/generators/config/config_generator.rb +1 -1
- data/generators/config/templates/default.yml +4 -14
- data/generators/cucumber/cucumber_generator.rb +1 -1
- data/generators/cucumber/templates/cucumber.yml +1 -2
- data/generators/cucumber/templates/env.rb +8 -7
- data/generators/emails/emails_generator.rb +1 -1
- data/generators/pages/pages_generator.rb +1 -1
- data/generators/pages/templates/example_page.rb +2 -2
- data/generators/root/root_generator.rb +1 -1
- data/generators/root/templates/Gemfile +1 -1
- data/generators/rspec/rspec_generator.rb +1 -1
- data/generators/rspec/templates/example_spec.rb +2 -2
- data/generators/rspec/templates/rspec.rake +1 -1
- data/generators/rspec/templates/spec_helper.rb +6 -5
- data/generators/tasks/tasks_generator.rb +1 -1
- data/generators/tasks/templates/common.rake +1 -0
- data/howitzer.gemspec +8 -8
- data/lib/howitzer.rb +4 -1
- data/lib/howitzer/blank_page.rb +6 -0
- data/lib/howitzer/capybara/dsl_ex.rb +15 -0
- data/lib/howitzer/capybara/settings.rb +267 -0
- data/lib/howitzer/email.rb +134 -0
- data/lib/howitzer/exceptions.rb +18 -0
- data/lib/howitzer/helpers.rb +34 -23
- data/lib/howitzer/init.rb +1 -4
- data/lib/howitzer/mailgun/client.rb +48 -0
- data/lib/howitzer/mailgun/connector.rb +34 -0
- data/lib/howitzer/mailgun/response.rb +28 -0
- data/lib/howitzer/utils.rb +2 -2
- data/lib/howitzer/utils/data_generator/data_storage.rb +15 -2
- data/lib/howitzer/utils/data_generator/gen.rb +14 -10
- data/lib/howitzer/utils/locator_store.rb +14 -7
- data/lib/howitzer/utils/log.rb +2 -0
- data/lib/howitzer/utils/page_validator.rb +74 -27
- data/lib/howitzer/version.rb +1 -1
- data/lib/howitzer/web_page.rb +83 -32
- data/spec/config/default.yml +10 -12
- data/spec/spec_helper.rb +12 -0
- data/spec/support/mailgun_unit_client.rb +60 -0
- data/spec/unit/generators/generators_spec.rb +7 -7
- data/spec/unit/lib/capybara/dsl_ex_spec.rb +60 -0
- data/spec/unit/lib/{capybara_settings_spec.rb → capybara/settings_spec.rb} +16 -10
- data/spec/unit/lib/email_spec.rb +129 -0
- data/spec/unit/lib/helpers_spec.rb +160 -34
- data/spec/unit/lib/init_spec.rb +1 -12
- data/spec/unit/lib/mailgun/client_spec.rb +36 -0
- data/spec/unit/lib/mailgun/connector_spec.rb +70 -0
- data/spec/unit/lib/mailgun/response_spec.rb +29 -0
- data/spec/unit/lib/utils/data_generator/data_storage_spec.rb +23 -5
- data/spec/unit/lib/utils/data_generator/gen_spec.rb +2 -63
- data/spec/unit/lib/utils/locator_store_spec.rb +41 -6
- data/spec/unit/lib/utils/log_spec.rb +1 -1
- data/spec/unit/lib/utils/page_validator_spec.rb +149 -25
- data/spec/unit/lib/web_page_spec.rb +127 -53
- metadata +102 -142
- data/lib/howitzer/utils/capybara_patched.rb +0 -23
- data/lib/howitzer/utils/capybara_settings.rb +0 -247
- data/lib/howitzer/utils/email/email.rb +0 -85
- data/lib/howitzer/utils/email/mail_client.rb +0 -132
- data/lib/howitzer/utils/email/mailgun.rb +0 -175
- data/lib/howitzer/utils/email/mailgun_helper.rb +0 -61
- data/spec/unit/bin/howitzer_spec.rb +0 -175
- data/spec/unit/lib/utils/email/email_spec.rb +0 -75
- data/spec/unit/lib/utils/email/mail_client_spec.rb +0 -115
- data/spec/unit/lib/utils/email/mailgun_helper_spec.rb +0 -95
data/spec/spec_helper.rb
CHANGED
@@ -6,6 +6,11 @@ require 'ffaker'
|
|
6
6
|
require 'capybara'
|
7
7
|
require 'json'
|
8
8
|
require 'capybara/dsl'
|
9
|
+
require 'active_support'
|
10
|
+
require 'active_support/core_ext'
|
11
|
+
require 'repeater'
|
12
|
+
require 'howitzer/exceptions'
|
13
|
+
require 'howitzer/utils/log'
|
9
14
|
|
10
15
|
SimpleCov.start do
|
11
16
|
add_filter "/spec/"
|
@@ -27,6 +32,13 @@ RSpec.configure do |config|
|
|
27
32
|
config.mock_with :rspec do |c|
|
28
33
|
c.syntax = :expect
|
29
34
|
end
|
35
|
+
config.around(:each) do |ex|
|
36
|
+
$stdout = StringIO.new
|
37
|
+
$stderr = StringIO.new
|
38
|
+
ex.run
|
39
|
+
$stdout = STDOUT
|
40
|
+
$stderr = STDERR
|
41
|
+
end
|
30
42
|
end
|
31
43
|
|
32
44
|
def project_path
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require "time"
|
2
|
+
require "json"
|
3
|
+
require 'howitzer/exceptions'
|
4
|
+
|
5
|
+
module Mailgun
|
6
|
+
class UnitClient
|
7
|
+
|
8
|
+
attr_reader :url, :options, :block, :body, :code
|
9
|
+
|
10
|
+
def initialize(url, options={}, backwards_compatibility=nil, &block)
|
11
|
+
@url = url
|
12
|
+
@block = block
|
13
|
+
@options = options
|
14
|
+
@body = nil
|
15
|
+
@code = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def [](resource_path, &new_block)
|
19
|
+
case
|
20
|
+
when block_given? then self.class.new(resource_path, options, &new_block)
|
21
|
+
when block then self.class.new(resource_path, options, &block)
|
22
|
+
else
|
23
|
+
self.class.new(resource_path, options)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def get(options, query_string = nil)
|
28
|
+
begin
|
29
|
+
if query_string
|
30
|
+
|
31
|
+
response = response_generator("bounces")
|
32
|
+
else
|
33
|
+
response = response_generator("bounces")
|
34
|
+
end
|
35
|
+
Response.new(response)
|
36
|
+
rescue Exception => e
|
37
|
+
log.error Howitzer::CommunicationError.new(e), e.response
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def response_generator(resource_endpoint)
|
44
|
+
case resource_endpoint
|
45
|
+
when "messages"
|
46
|
+
t = Time.now
|
47
|
+
id = "<#{t.to_i}.#{rand(99999999)}.5817@example.com>"
|
48
|
+
@body = JSON.generate({"message" => "Queued. Thank you.", "id" => id})
|
49
|
+
when "bounces"
|
50
|
+
@body = JSON.generate({"total_count" => 1, "items" => {"created_at" => "Fri, 21 Oct 2011 11:02:55 GMT", "code" => 550, "address" => "baz@example.com", "error" => "Message was not accepted -- invalid mailbox. Local mailbox baz@example.com is unavailable: user not found"}})
|
51
|
+
when "lists"
|
52
|
+
@body = JSON.generate({"member" => {"vars" => {"age" => 26}, "name" => "Foo Bar", "subscribed" => false, "address" => "bar@example.com"}, "message" => "Mailing list member has been updated"})
|
53
|
+
when "campaigns"
|
54
|
+
@body = JSON.generate({"message" => "Campaign has been deleted", "id" => "ABC123"})
|
55
|
+
end
|
56
|
+
self
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -28,7 +28,7 @@ describe "Generators" do
|
|
28
28
|
it { expect(subject).to eql(expected_result) }
|
29
29
|
describe "output" do
|
30
30
|
let(:expected_output) do
|
31
|
-
"
|
31
|
+
" * Config files generation ...
|
32
32
|
Added 'config/custom.yml' file
|
33
33
|
Added 'config/default.yml' file\n"
|
34
34
|
end
|
@@ -48,7 +48,7 @@ describe "Generators" do
|
|
48
48
|
it { expect(subject).to eql(expected_result) }
|
49
49
|
describe "output" do
|
50
50
|
let(:expected_output) do
|
51
|
-
"
|
51
|
+
" * PageOriented pattern structure generation ...
|
52
52
|
Added 'pages/example_page.rb' file
|
53
53
|
Added 'pages/example_menu.rb' file\n"
|
54
54
|
end
|
@@ -67,7 +67,7 @@ describe "Generators" do
|
|
67
67
|
it { expect(subject).to eql(expected_result) }
|
68
68
|
describe "output" do
|
69
69
|
let(:expected_output) do
|
70
|
-
"
|
70
|
+
" * Base rake task generation ...
|
71
71
|
Added 'tasks/common.rake' file\n"
|
72
72
|
end
|
73
73
|
subject { output.string }
|
@@ -85,7 +85,7 @@ describe "Generators" do
|
|
85
85
|
it { expect(subject).to eql(expected_result) }
|
86
86
|
describe "output" do
|
87
87
|
let(:expected_output) do
|
88
|
-
"
|
88
|
+
" * Email example generation ...
|
89
89
|
Added '/emails/example_email.rb' file\n"
|
90
90
|
end
|
91
91
|
subject { output.string }
|
@@ -104,7 +104,7 @@ describe "Generators" do
|
|
104
104
|
it { expect(subject).to eql(expected_result) }
|
105
105
|
describe "output" do
|
106
106
|
let(:expected_output) do
|
107
|
-
"
|
107
|
+
" * Root files generation ...
|
108
108
|
Added '.gitignore' file
|
109
109
|
Added 'Gemfile' file
|
110
110
|
Added 'Rakefile' file
|
@@ -134,7 +134,7 @@ describe "Generators" do
|
|
134
134
|
it { expect(subject).to eql(expected_result) }
|
135
135
|
describe "output" do
|
136
136
|
let(:expected_output) do
|
137
|
-
"
|
137
|
+
" * Cucumber integration to the framework ...
|
138
138
|
Added 'features/step_definitions/common_steps.rb' file
|
139
139
|
Added 'features/support/env.rb' file
|
140
140
|
Added 'features/support/transformers.rb' file
|
@@ -160,7 +160,7 @@ describe "Generators" do
|
|
160
160
|
it { expect(subject).to eql(expected_result) }
|
161
161
|
describe "output" do
|
162
162
|
let(:expected_output) do
|
163
|
-
"
|
163
|
+
" * RSpec integration to the framework ...
|
164
164
|
Added 'spec/spec_helper.rb' file
|
165
165
|
Added 'spec/example_spec.rb' file
|
166
166
|
Added 'tasks/rspec.rake' file\n"
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'howitzer/capybara/dsl_ex'
|
3
|
+
|
4
|
+
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,10 +1,17 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'howitzer/capybara/settings'
|
4
4
|
|
5
5
|
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
|
+
describe "Capybara::Settings" do
|
6
13
|
let(:log) { double("log") }
|
7
|
-
let(:test_object) { double("test_object").extend(
|
14
|
+
let(:test_object) { double("test_object").extend(Capybara::Settings) }
|
8
15
|
before do
|
9
16
|
allow(log).to receive(:error).and_return( true )
|
10
17
|
end
|
@@ -12,21 +19,20 @@ describe "CapybaraSettings" do
|
|
12
19
|
describe "#sauce_resource_path" do
|
13
20
|
subject { test_object.sauce_resource_path(name) }
|
14
21
|
let (:name) { "test_name" }
|
15
|
-
before
|
22
|
+
before do
|
16
23
|
allow(settings).to receive(:sl_user) { "vlad" }
|
17
24
|
allow(settings).to receive(:sl_api_key) { "11111" }
|
18
25
|
allow(test_object).to receive(:session_id) { '12341234' }
|
19
26
|
end
|
20
|
-
|
21
27
|
it { expect(subject).to eql("https://vlad:11111@saucelabs.com/rest/vlad/jobs/12341234/results/test_name") }
|
22
28
|
end
|
23
29
|
describe ".sauce_resource_path" do
|
24
|
-
subject {
|
30
|
+
subject { Capybara::Settings.sauce_resource_path(name) }
|
25
31
|
let (:name) { "test_name" }
|
26
32
|
before do
|
27
33
|
allow(settings).to receive(:sl_user) { "vlad" }
|
28
34
|
allow(settings).to receive(:sl_api_key) { "11111" }
|
29
|
-
allow(
|
35
|
+
allow(Capybara::Settings).to receive(:session_id) { '12341234' }
|
30
36
|
end
|
31
37
|
|
32
38
|
it { expect(subject).to eql("https://vlad:11111@saucelabs.com/rest/vlad/jobs/12341234/results/test_name") }
|
@@ -48,11 +54,11 @@ describe "CapybaraSettings" do
|
|
48
54
|
end
|
49
55
|
|
50
56
|
describe ".update_sauce_resource_path" do
|
51
|
-
subject {
|
57
|
+
subject { Capybara::Settings.update_sauce_job_status }
|
52
58
|
before do
|
53
59
|
allow(settings).to receive(:sl_user) { "vlad1" }
|
54
60
|
allow(settings).to receive(:sl_api_key) { "22222" }
|
55
|
-
allow(
|
61
|
+
allow(Capybara::Settings).to receive(:session_id) { '12341234' }
|
56
62
|
stub_const("RestClient", double)
|
57
63
|
end
|
58
64
|
|
@@ -99,7 +105,7 @@ describe "CapybaraSettings" do
|
|
99
105
|
end
|
100
106
|
|
101
107
|
describe ".suite_name" do
|
102
|
-
subject {
|
108
|
+
subject { Capybara::Settings.suite_name }
|
103
109
|
before do
|
104
110
|
allow(settings).to receive(:sl_browser_name) { 'ie' }
|
105
111
|
end
|
@@ -152,7 +158,7 @@ describe "CapybaraSettings" do
|
|
152
158
|
end
|
153
159
|
|
154
160
|
describe ".session_id" do
|
155
|
-
subject {
|
161
|
+
subject { Capybara::Settings.session_id }
|
156
162
|
before do
|
157
163
|
browser = double
|
158
164
|
current_session = double
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require "howitzer/email"
|
3
|
+
require "howitzer/utils/log"
|
4
|
+
require 'howitzer/exceptions'
|
5
|
+
|
6
|
+
describe "Email" do
|
7
|
+
let(:recipient){ 'first_tester@gmail.com' }
|
8
|
+
let(:message) do
|
9
|
+
{
|
10
|
+
'body-plain' => 'test body footer',
|
11
|
+
'stripped-html' => "<p> test body </p> <p> footer </p>",
|
12
|
+
'stripped-text' => 'test body',
|
13
|
+
'From' => "Strong Tester <tester@gmail.com>",
|
14
|
+
'To' => recipient,
|
15
|
+
'Received' => "by 10.216.46.75 with HTTP; Sat, 5 Apr 2014 05:10:42 -0700 (PDT)",
|
16
|
+
'sender' => 'tester@gmail.com',
|
17
|
+
'attachments' => []
|
18
|
+
}
|
19
|
+
end
|
20
|
+
let(:message_subject){ 'test subject' }
|
21
|
+
let(:mail_address){ double }
|
22
|
+
let(:email_object){ Email.new(message) }
|
23
|
+
before do
|
24
|
+
stub_const('Email::SUBJECT', message_subject)
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#new' do
|
28
|
+
context 'when Email instance receive message and add create @message variable that' do
|
29
|
+
it { expect(email_object.instance_variable_get(:@message)).to eql message}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '.find_by_recipient' do
|
34
|
+
let(:recipient) { 'test@user.com' }
|
35
|
+
subject { Email.find_by_recipient(recipient) }
|
36
|
+
it do
|
37
|
+
expect(Email).to receive(:find).with(recipient, message_subject).once
|
38
|
+
subject
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '.find' do
|
43
|
+
let(:mailgun_message){ double(to_h: message) }
|
44
|
+
let(:events) { double(to_h: {'items' => [event]}) }
|
45
|
+
subject { Email.find(recipient, message_subject) }
|
46
|
+
context "when message is found" do
|
47
|
+
let(:event) { {'message' => {'recipients' => [recipient], 'headers' => {'subject' => message_subject} }, 'storage' => {'key' => '1234567890'} } }
|
48
|
+
before do
|
49
|
+
allow(Mailgun::Connector.instance.client).to receive(:get).with("mailgun@test.domain/events", event: 'stored').ordered.once {events}
|
50
|
+
allow(Mailgun::Connector.instance.client).to receive(:get).with("domains/mailgun@test.domain/messages/1234567890").ordered.once { mailgun_message }
|
51
|
+
end
|
52
|
+
it do
|
53
|
+
expect(Email).to receive(:new).with(message).once
|
54
|
+
subject
|
55
|
+
end
|
56
|
+
end
|
57
|
+
context "when message is not found" do
|
58
|
+
let(:event) { {'message' => {'recipients' => ["other@test.com"], 'headers' => {'subject' => message_subject} }, 'storage' => {'key' => '1234567890'} } }
|
59
|
+
before do
|
60
|
+
allow(settings).to receive(:timeout_small) { 0.5 }
|
61
|
+
allow(settings).to receive(:timeout_short) { 0.05 }
|
62
|
+
allow(Mailgun::Connector.instance.client).to receive(:get).with("mailgun@test.domain/events", event: 'stored').at_least(:twice).ordered {events}
|
63
|
+
end
|
64
|
+
it do
|
65
|
+
expect(log).to receive(:error).with(Howitzer::EmailNotFoundError, "Message with subject '#{message_subject}' for recipient '#{recipient}' was not found.")
|
66
|
+
subject
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe '#plain_text_body' do
|
72
|
+
it { expect(email_object.plain_text_body).to eql message['body-plain'] }
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#html_body' do
|
76
|
+
it { expect(email_object.html_body).to eql message['stripped-html'] }
|
77
|
+
end
|
78
|
+
|
79
|
+
describe '#text' do
|
80
|
+
it { expect(email_object.text).to eql message['stripped-text'] }
|
81
|
+
end
|
82
|
+
|
83
|
+
describe '#mail_from' do
|
84
|
+
it { expect(email_object.mail_from).to eql message['From'] }
|
85
|
+
end
|
86
|
+
|
87
|
+
describe '#recipients' do
|
88
|
+
subject { email_object.recipients }
|
89
|
+
it { expect(subject).to be_a_kind_of Array }
|
90
|
+
|
91
|
+
context 'when one recipient' do
|
92
|
+
it { expect(subject).to include message['To']}
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'when more than one recipient' do
|
96
|
+
let(:second_recipient) { "second_tester@gmail.com" }
|
97
|
+
let(:message_with_multiple_recipients) { message.merge({'To' => "#{recipient}, #{second_recipient}"}) }
|
98
|
+
let(:email_object) { Email.new(message_with_multiple_recipients) }
|
99
|
+
it { expect(subject).to eql [recipient, second_recipient] }
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '#received_time' do
|
104
|
+
it { expect(email_object.received_time).to eql message['Received'][27..63] }
|
105
|
+
end
|
106
|
+
|
107
|
+
describe '#sender_email' do
|
108
|
+
it { expect(email_object.sender_email).to eql message['sender'] }
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '#get_mime_part' do
|
112
|
+
subject { email_object.get_mime_part }
|
113
|
+
|
114
|
+
context 'when has attachments' do
|
115
|
+
let(:files) { [double] }
|
116
|
+
before { email_object.instance_variable_set(:@message, 'attachments' => files)}
|
117
|
+
it { expect(subject).to eq(files) }
|
118
|
+
end
|
119
|
+
|
120
|
+
context 'when no attachments' do
|
121
|
+
let(:error) { Howitzer::NoAttachmentsError }
|
122
|
+
let(:error_message) { 'No attachments where found.' }
|
123
|
+
it do
|
124
|
+
expect(log).to receive(:error).with(error, error_message).once
|
125
|
+
subject
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require
|
3
|
-
require "#{lib_path}/howitzer/helpers"
|
2
|
+
require "howitzer/helpers"
|
4
3
|
|
5
4
|
describe "Helpers" do
|
6
5
|
let(:settings) { double("settings")}
|
@@ -22,7 +21,10 @@ describe "Helpers" do
|
|
22
21
|
end
|
23
22
|
context "when driver is not specified" do
|
24
23
|
let(:driver_setting) { nil }
|
25
|
-
it
|
24
|
+
it do
|
25
|
+
expect(log).to receive(:error).with(Howitzer::DriverNotSpecifiedError, "Please check your settings").once.and_call_original
|
26
|
+
expect { subject }.to raise_error(Howitzer::DriverNotSpecifiedError)
|
27
|
+
end
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
@@ -43,7 +45,34 @@ describe "Helpers" do
|
|
43
45
|
end
|
44
46
|
context "when driver is not specified" do
|
45
47
|
let(:driver_setting) { nil }
|
46
|
-
it
|
48
|
+
it do
|
49
|
+
expect(log).to receive(:error).with(Howitzer::DriverNotSpecifiedError, "Please check your settings").once.and_call_original
|
50
|
+
expect { subject }.to raise_error(Howitzer::DriverNotSpecifiedError)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#phantomjs_driver?" do
|
56
|
+
subject { phantomjs_driver? }
|
57
|
+
before { allow(settings).to receive(:driver) { driver_setting } }
|
58
|
+
context "when :phantomjs" do
|
59
|
+
let(:driver_setting) {:phantomjs}
|
60
|
+
it{ expect(subject).to be_true }
|
61
|
+
end
|
62
|
+
context "when not :phantomjs" do
|
63
|
+
let(:driver_setting) {:selenium}
|
64
|
+
it{ expect(subject).to be_false }
|
65
|
+
end
|
66
|
+
context "when driver specified as String" do
|
67
|
+
let(:driver_setting) {"phantomjs"}
|
68
|
+
it{ expect(subject).to be_true }
|
69
|
+
end
|
70
|
+
context "when driver is not specified" do
|
71
|
+
let(:driver_setting) { nil }
|
72
|
+
it do
|
73
|
+
expect(log).to receive(:error).with(Howitzer::DriverNotSpecifiedError, "Please check your settings").once.and_call_original
|
74
|
+
expect { subject }.to raise_error(Howitzer::DriverNotSpecifiedError)
|
75
|
+
end
|
47
76
|
end
|
48
77
|
end
|
49
78
|
|
@@ -64,7 +93,10 @@ describe "Helpers" do
|
|
64
93
|
end
|
65
94
|
context "when driver is not specified" do
|
66
95
|
let(:driver_setting) { nil }
|
67
|
-
it
|
96
|
+
it do
|
97
|
+
expect(log).to receive(:error).with(Howitzer::DriverNotSpecifiedError, "Please check your settings").once.and_call_original
|
98
|
+
expect { subject }.to raise_error(Howitzer::DriverNotSpecifiedError)
|
99
|
+
end
|
68
100
|
end
|
69
101
|
end
|
70
102
|
|
@@ -89,7 +121,10 @@ describe "Helpers" do
|
|
89
121
|
end
|
90
122
|
context "settings.sl_browser_name is not specified" do
|
91
123
|
before { allow(settings).to receive(:sl_browser_name) { nil } }
|
92
|
-
it
|
124
|
+
it do
|
125
|
+
expect(log).to receive(:error).with(Howitzer::SlBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
126
|
+
expect { subject }.to raise_error(Howitzer::SlBrowserNotSpecifiedError)
|
127
|
+
end
|
93
128
|
end
|
94
129
|
end
|
95
130
|
context "when sauce_driver? is FALSE" do
|
@@ -112,7 +147,10 @@ describe "Helpers" do
|
|
112
147
|
end
|
113
148
|
context "settings.sel_browser is not specified" do
|
114
149
|
before { allow(settings).to receive(:sel_browser) { nil } }
|
115
|
-
it
|
150
|
+
it do
|
151
|
+
expect(log).to receive(:error).with(Howitzer::SelBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
152
|
+
expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError)
|
153
|
+
end
|
116
154
|
end
|
117
155
|
end
|
118
156
|
context "when selenium_driver? is FALSE" do
|
@@ -147,7 +185,10 @@ describe "Helpers" do
|
|
147
185
|
end
|
148
186
|
context "settings.tb_browser_name is not specified" do
|
149
187
|
before { allow(settings).to receive(:tb_browser_name) { nil } }
|
150
|
-
it
|
188
|
+
it do
|
189
|
+
expect(log).to receive(:error).with(Howitzer::TbBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
190
|
+
expect { subject }.to raise_error(Howitzer::TbBrowserNotSpecifiedError)
|
191
|
+
end
|
151
192
|
end
|
152
193
|
end
|
153
194
|
context "when testingbot_driver? is FALSE" do
|
@@ -169,7 +210,10 @@ describe "Helpers" do
|
|
169
210
|
end
|
170
211
|
context "settings.sl_browser_name is not specified" do
|
171
212
|
before { allow(settings).to receive(:sl_browser_name) { nil } }
|
172
|
-
it
|
213
|
+
it do
|
214
|
+
expect(log).to receive(:error).with(Howitzer::SlBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
215
|
+
expect { subject }.to raise_error(Howitzer::SlBrowserNotSpecifiedError)
|
216
|
+
end
|
173
217
|
end
|
174
218
|
end
|
175
219
|
end
|
@@ -193,7 +237,10 @@ describe "Helpers" do
|
|
193
237
|
end
|
194
238
|
context "settings.sel_browser is not specified" do
|
195
239
|
before { allow(settings).to receive(:sel_browser) { nil } }
|
196
|
-
it
|
240
|
+
it do
|
241
|
+
expect(log).to receive(:error).with(Howitzer::SelBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
242
|
+
expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError)
|
243
|
+
end
|
197
244
|
end
|
198
245
|
end
|
199
246
|
end
|
@@ -226,7 +273,10 @@ describe "Helpers" do
|
|
226
273
|
end
|
227
274
|
context "settings.tb_browser_name is not specified" do
|
228
275
|
before { allow(settings).to receive(:tb_browser_name) { nil } }
|
229
|
-
it
|
276
|
+
it do
|
277
|
+
expect(log).to receive(:error).with(Howitzer::TbBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
278
|
+
expect { subject }.to raise_error(Howitzer::TbBrowserNotSpecifiedError)
|
279
|
+
end
|
230
280
|
end
|
231
281
|
end
|
232
282
|
end
|
@@ -252,7 +302,10 @@ describe "Helpers" do
|
|
252
302
|
end
|
253
303
|
context "settings.sl_browser_name is not specified" do
|
254
304
|
before { allow(settings).to receive(:sl_browser_name) { nil } }
|
255
|
-
it
|
305
|
+
it do
|
306
|
+
expect(log).to receive(:error).with(Howitzer::SlBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
307
|
+
expect { subject }.to raise_error(Howitzer::SlBrowserNotSpecifiedError)
|
308
|
+
end
|
256
309
|
end
|
257
310
|
end
|
258
311
|
context "when sauce_driver? is FALSE" do
|
@@ -275,7 +328,10 @@ describe "Helpers" do
|
|
275
328
|
end
|
276
329
|
context "settings.sel_browser is not specified" do
|
277
330
|
before { allow(settings).to receive(:sel_browser) { nil } }
|
278
|
-
it
|
331
|
+
it do
|
332
|
+
expect(log).to receive(:error).with(Howitzer::SelBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
333
|
+
expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError)
|
334
|
+
end
|
279
335
|
end
|
280
336
|
end
|
281
337
|
context "when selenium_driver? is FALSE" do
|
@@ -310,7 +366,10 @@ describe "Helpers" do
|
|
310
366
|
end
|
311
367
|
context "settings.tb_browser_name is not specified" do
|
312
368
|
before { allow(settings).to receive(:tb_browser_name) { nil } }
|
313
|
-
it
|
369
|
+
it do
|
370
|
+
expect(log).to receive(:error).with(Howitzer::TbBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
371
|
+
expect { subject }.to raise_error(Howitzer::TbBrowserNotSpecifiedError)
|
372
|
+
end
|
314
373
|
end
|
315
374
|
end
|
316
375
|
context "when testingbot_driver? is FALSE" do
|
@@ -332,7 +391,10 @@ describe "Helpers" do
|
|
332
391
|
end
|
333
392
|
context "settings.sl_browser_name is not specified" do
|
334
393
|
before { allow(settings).to receive(:sl_browser_name) { nil } }
|
335
|
-
it
|
394
|
+
it do
|
395
|
+
expect(log).to receive(:error).with(Howitzer::SlBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
396
|
+
expect { subject }.to raise_error(Howitzer::SlBrowserNotSpecifiedError)
|
397
|
+
end
|
336
398
|
end
|
337
399
|
end
|
338
400
|
end
|
@@ -356,7 +418,10 @@ describe "Helpers" do
|
|
356
418
|
end
|
357
419
|
context "settings.sel_browser is not specified" do
|
358
420
|
before { allow(settings).to receive(:sel_browser) { nil } }
|
359
|
-
it
|
421
|
+
it do
|
422
|
+
expect(log).to receive(:error).with(Howitzer::SelBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
423
|
+
expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError)
|
424
|
+
end
|
360
425
|
end
|
361
426
|
end
|
362
427
|
end
|
@@ -389,7 +454,10 @@ describe "Helpers" do
|
|
389
454
|
end
|
390
455
|
context "settings.tb_browser_name is not specified" do
|
391
456
|
before { allow(settings).to receive(:tb_browser_name) { nil } }
|
392
|
-
it
|
457
|
+
it do
|
458
|
+
expect(log).to receive(:error).with(Howitzer::TbBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
459
|
+
expect { subject }.to raise_error(Howitzer::TbBrowserNotSpecifiedError)
|
460
|
+
end
|
393
461
|
end
|
394
462
|
end
|
395
463
|
|
@@ -412,7 +480,10 @@ describe "Helpers" do
|
|
412
480
|
end
|
413
481
|
context "settings.sl_browser_name is not specified" do
|
414
482
|
before { allow(settings).to receive(:sl_browser_name) { nil } }
|
415
|
-
it
|
483
|
+
it do
|
484
|
+
expect(log).to receive(:error).with(Howitzer::SlBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
485
|
+
expect { subject }.to raise_error(Howitzer::SlBrowserNotSpecifiedError)
|
486
|
+
end
|
416
487
|
end
|
417
488
|
end
|
418
489
|
context "when sauce_driver? is FALSE" do
|
@@ -431,7 +502,10 @@ describe "Helpers" do
|
|
431
502
|
end
|
432
503
|
context "settings.sel_browser is not specified" do
|
433
504
|
before { allow(settings).to receive(:sel_browser) { nil } }
|
434
|
-
it
|
505
|
+
it do
|
506
|
+
expect(log).to receive(:error).with(Howitzer::SelBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
507
|
+
expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError)
|
508
|
+
end
|
435
509
|
end
|
436
510
|
end
|
437
511
|
context "when selenium_driver? is FALSE" do
|
@@ -459,7 +533,10 @@ describe "Helpers" do
|
|
459
533
|
end
|
460
534
|
context "settings.tb_browser_name is not specified" do
|
461
535
|
before { allow(settings).to receive(:tb_browser_name) { nil } }
|
462
|
-
it
|
536
|
+
it do
|
537
|
+
expect(log).to receive(:error).with(Howitzer::TbBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
538
|
+
expect { subject }.to raise_error(Howitzer::TbBrowserNotSpecifiedError)
|
539
|
+
end
|
463
540
|
end
|
464
541
|
end
|
465
542
|
context "when testingbot_driver? is FALSE" do
|
@@ -477,7 +554,10 @@ describe "Helpers" do
|
|
477
554
|
end
|
478
555
|
context "settings.sl_browser_name is not specified" do
|
479
556
|
before { allow(settings).to receive(:sl_browser_name) { nil } }
|
480
|
-
it
|
557
|
+
it do
|
558
|
+
expect(log).to receive(:error).with(Howitzer::SlBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
559
|
+
expect { subject }.to raise_error(Howitzer::SlBrowserNotSpecifiedError)
|
560
|
+
end
|
481
561
|
end
|
482
562
|
end
|
483
563
|
|
@@ -498,7 +578,10 @@ describe "Helpers" do
|
|
498
578
|
end
|
499
579
|
context "settings.sel_browser is not specified" do
|
500
580
|
before { allow(settings).to receive(:sel_browser) { nil } }
|
501
|
-
it
|
581
|
+
it do
|
582
|
+
expect(log).to receive(:error).with(Howitzer::SelBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
583
|
+
expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError)
|
584
|
+
end
|
502
585
|
end
|
503
586
|
end
|
504
587
|
|
@@ -519,7 +602,10 @@ describe "Helpers" do
|
|
519
602
|
end
|
520
603
|
context "settings.sel_browser is not specified" do
|
521
604
|
before { allow(settings).to receive(:sel_browser) { nil } }
|
522
|
-
it
|
605
|
+
it do
|
606
|
+
expect(log).to receive(:error).with(Howitzer::SelBrowserNotSpecifiedError, "Please check your settings").once.and_call_original
|
607
|
+
expect { subject }.to raise_error(Howitzer::SelBrowserNotSpecifiedError)
|
608
|
+
end
|
523
609
|
end
|
524
610
|
end
|
525
611
|
context "when selenium_driver? is FALSE" do
|
@@ -591,29 +677,69 @@ describe "Helpers" do
|
|
591
677
|
it { expect {subject}.to raise_error(RuntimeError, /boom/) }
|
592
678
|
end
|
593
679
|
describe String do
|
680
|
+
let(:page_name) { "my" }
|
681
|
+
let(:page_object) { double }
|
682
|
+
before { stub_const("MyPage", page_object) }
|
594
683
|
describe "#open" do
|
595
|
-
subject {
|
596
|
-
let(:page_object) { double }
|
684
|
+
subject { page_name.open(:exit) }
|
597
685
|
before do
|
598
|
-
stub_const("MyPage", page_object)
|
599
686
|
expect(page_object).to receive(:open).with(:exit).once
|
600
687
|
end
|
601
688
|
it { expect(subject).to be_nil }
|
602
689
|
end
|
603
690
|
describe "#given" do
|
604
|
-
subject {
|
605
|
-
let(:page_object) { double }
|
691
|
+
subject { page_name.given }
|
606
692
|
before do
|
607
|
-
|
608
|
-
expect(page_object).to receive(:
|
693
|
+
allow(page_name).to receive(:as_page_class){ page_object }
|
694
|
+
expect(page_object).to receive(:given).once
|
695
|
+
end
|
696
|
+
it { expect(subject).to be_nil }
|
697
|
+
end
|
698
|
+
describe "#wait_for_opened" do
|
699
|
+
subject { page_name.wait_for_opened }
|
700
|
+
before do
|
701
|
+
allow(page_name).to receive(:as_page_class){ page_object }
|
702
|
+
expect(page_object).to receive(:wait_for_opened).once
|
609
703
|
end
|
610
704
|
it { expect(subject).to be_nil }
|
611
705
|
end
|
612
706
|
describe "#as_page_class" do
|
613
|
-
subject {
|
614
|
-
|
615
|
-
|
616
|
-
|
707
|
+
subject { page_name.as_page_class }
|
708
|
+
context "when 1 word" do
|
709
|
+
it { expect(subject).to eql(page_object) }
|
710
|
+
end
|
711
|
+
context "when more 1 word" do
|
712
|
+
let(:page_name) { 'my super mega' }
|
713
|
+
before { stub_const("MySuperMegaPage", page_object) }
|
714
|
+
it { expect(subject).to eql(page_object) }
|
715
|
+
end
|
716
|
+
|
717
|
+
context "when plural word" do
|
718
|
+
let(:page_name) { 'user notifications' }
|
719
|
+
before { stub_const("UserNotificationsPage", page_object) }
|
720
|
+
it { expect(subject).to eql(page_object) }
|
721
|
+
end
|
722
|
+
end
|
723
|
+
describe "#as_email_class" do
|
724
|
+
subject { email_name.as_email_class }
|
725
|
+
let(:my_email) { double }
|
726
|
+
context "when 1 word" do
|
727
|
+
let(:email_name) { 'my' }
|
728
|
+
before { stub_const("MyEmail", my_email) }
|
729
|
+
it { expect(subject).to eql(my_email) }
|
730
|
+
end
|
731
|
+
|
732
|
+
context "when more 1 word" do
|
733
|
+
let(:email_name) { 'my super mega' }
|
734
|
+
before { stub_const("MySuperMegaEmail", my_email) }
|
735
|
+
it { expect(subject).to eql(my_email) }
|
736
|
+
end
|
737
|
+
|
738
|
+
context "when plural word" do
|
739
|
+
let(:email_name) { 'email notifications' }
|
740
|
+
before { stub_const("EmailNotificationsEmail", my_email) }
|
741
|
+
it { expect(subject).to eql(my_email) }
|
742
|
+
end
|
617
743
|
end
|
618
744
|
end
|
619
745
|
end
|