howitzer 1.0.2 → 1.1.0

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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +3 -1
  4. data/.ruby-gemset +1 -0
  5. data/.travis.yml +4 -1
  6. data/.yardopts +5 -0
  7. data/CHANGELOG.md +23 -1
  8. data/CONTRIBUTING.md +14 -0
  9. data/GETTING_STARTED.md +283 -183
  10. data/Gemfile +3 -2
  11. data/LICENSE +1 -1
  12. data/README.md +93 -39
  13. data/Rakefile +4 -0
  14. data/bin/howitzer +34 -5
  15. data/features/cli_help.feature +3 -2
  16. data/features/cli_new.feature +1 -1
  17. data/features/cli_unknown.feature +1 -1
  18. data/features/cli_update.feature +84 -0
  19. data/features/step_definitions/common_steps.rb +9 -1
  20. data/generators/base_generator.rb +30 -15
  21. data/generators/config/config_generator.rb +7 -7
  22. data/generators/config/templates/custom.yml +1 -0
  23. data/generators/config/templates/default.yml +35 -5
  24. data/generators/cucumber/templates/env.rb +2 -2
  25. data/generators/cucumber/templates/transformers.rb +3 -1
  26. data/generators/root/templates/Gemfile +5 -3
  27. data/generators/root/templates/Rakefile +2 -0
  28. data/generators/rspec/templates/example_spec.rb +3 -3
  29. data/generators/rspec/templates/spec_helper.rb +6 -7
  30. data/howitzer.gemspec +15 -15
  31. data/lib/howitzer/capybara/settings.rb +125 -49
  32. data/lib/howitzer/helpers.rb +161 -94
  33. data/lib/howitzer/mailgun/client.rb +1 -1
  34. data/lib/howitzer/tasks/framework.rake +3 -0
  35. data/lib/howitzer/utils.rb +1 -1
  36. data/lib/howitzer/utils/locator_store.rb +1 -1
  37. data/lib/howitzer/utils/log.rb +1 -1
  38. data/lib/howitzer/utils/page_validator.rb +1 -1
  39. data/lib/howitzer/version.rb +1 -1
  40. data/lib/howitzer/web_page.rb +11 -11
  41. data/spec/spec_helper.rb +25 -22
  42. data/spec/support/generator_helper.rb +8 -1
  43. data/spec/unit/generators/base_generator_spec.rb +242 -0
  44. data/spec/unit/generators/config_generator_spec.rb +34 -0
  45. data/spec/unit/generators/cucumber_generator_spec.rb +45 -0
  46. data/spec/unit/generators/emails_generator_spec.rb +31 -0
  47. data/spec/unit/generators/pages_generator_spec.rb +33 -0
  48. data/spec/unit/generators/root_generator_spec.rb +35 -0
  49. data/spec/unit/generators/rspec_generator_spec.rb +36 -0
  50. data/spec/unit/generators/tasks_generator_spec.rb +31 -0
  51. data/spec/unit/lib/capybara/dsl_ex_spec.rb +11 -11
  52. data/spec/unit/lib/capybara/settings_spec.rb +336 -58
  53. data/spec/unit/lib/email_spec.rb +17 -17
  54. data/spec/unit/lib/helpers_spec.rb +699 -315
  55. data/spec/unit/lib/mailgun/client_spec.rb +9 -9
  56. data/spec/unit/lib/mailgun/connector_spec.rb +20 -20
  57. data/spec/unit/lib/mailgun/response_spec.rb +9 -9
  58. data/spec/unit/lib/settings_spec.rb +6 -6
  59. data/spec/unit/lib/utils/data_generator/data_storage_spec.rb +31 -31
  60. data/spec/unit/lib/utils/data_generator/gen_spec.rb +20 -20
  61. data/spec/unit/lib/utils/locator_store_spec.rb +39 -39
  62. data/spec/unit/lib/utils/log_spec.rb +42 -42
  63. data/spec/unit/lib/utils/page_validator_spec.rb +69 -70
  64. data/spec/unit/lib/web_page_spec.rb +91 -69
  65. data/spec/unit/version_spec.rb +3 -3
  66. metadata +100 -78
  67. data/spec/unit/generators/generators_spec.rb +0 -175
@@ -1,26 +1,26 @@
1
1
  require 'spec_helper'
2
2
  require 'howitzer/mailgun/client'
3
3
 
4
- describe Mailgun::Client do
5
- let(:mg_obj) { Mailgun::Client.new("Fake-API-Key") }
6
- describe ".new" do
4
+ RSpec.describe Mailgun::Client do
5
+ let(:mg_obj) { Mailgun::Client.new('Fake-API-Key') }
6
+ describe '.new' do
7
7
  subject { mg_obj }
8
8
  it { expect { subject }.not_to raise_error }
9
9
  end
10
10
 
11
- describe "#get" do
11
+ describe '#get' do
12
12
  let(:query_string){ {'skip' => '10', 'limit' => '5'} }
13
- subject { mg_obj.get("test.com/bounces", query_string) }
14
- context "when simulation of client" do
13
+ subject { mg_obj.get('test.com/bounces', query_string) }
14
+ context 'when simulation of client' do
15
15
  before do
16
16
  expect(RestClient::Resource).to receive(:new).once { Mailgun::UnitClient::new('Fake-API-Key', 'api.mailgun.net', 'v2') }
17
17
  end
18
18
  it do
19
- expect(subject.body).to include("total_count")
20
- expect(subject.body).to include("items")
19
+ expect(subject.body).to include('total_count')
20
+ expect(subject.body).to include('items')
21
21
  end
22
22
  end
23
- context "when real client" do
23
+ context 'when real client' do
24
24
  let(:resource) { double }
25
25
  before do
26
26
  allow(resource).to receive('[]'){ resource }
@@ -1,68 +1,68 @@
1
1
  require 'spec_helper'
2
2
  require 'howitzer/mailgun/connector'
3
3
 
4
- describe Mailgun::Connector do
4
+ RSpec.describe Mailgun::Connector do
5
5
  let(:connector) { Mailgun::Connector.instance }
6
6
  let(:domain_name) { 'test@domain.com' }
7
- describe "#client" do
7
+ describe '#client' do
8
8
  subject { connector.client }
9
- context "when api_key is default" do
10
- context "when client is not initialized" do
11
- it { expect(subject).to be_an_instance_of Mailgun::Client }
9
+ context 'when api_key is default' do
10
+ context 'when client is not initialized' do
11
+ it { is_expected.to be_an_instance_of Mailgun::Client }
12
12
  end
13
- context "when client is already initialized" do
13
+ context 'when client is already initialized' do
14
14
  it do
15
15
  object_id = connector.client.object_id
16
16
  expect(subject.object_id).to eq(object_id)
17
17
  end
18
18
  end
19
19
  end
20
- context "when api_key is custom" do
21
- let(:key) { "some api key" }
20
+ context 'when api_key is custom' do
21
+ let(:key) { 'some api key' }
22
22
  subject { connector.client(key) }
23
- it { expect(subject).to be_an_instance_of Mailgun::Client }
23
+ it { is_expected.to be_an_instance_of Mailgun::Client }
24
24
  end
25
- context "when api_key is nil" do
25
+ context 'when api_key is nil' do
26
26
  let(:key) { nil }
27
27
  subject { connector.client(key) }
28
28
  it do
29
- expect(log).to receive(:error).with(Howitzer::InvalidApiKeyError, "Api key can not be blank").once.and_call_original
29
+ expect(log).to receive(:error).with(Howitzer::InvalidApiKeyError, 'Api key can not be blank').once.and_call_original
30
30
  expect { subject }.to raise_error(Howitzer::InvalidApiKeyError)
31
31
  end
32
32
  end
33
- context "when api_key is blank string" do
34
- let(:key) { "" }
33
+ context 'when api_key is blank string' do
34
+ let(:key) { '' }
35
35
  subject { connector.client(key) }
36
36
  it do
37
- expect(log).to receive(:error).with(Howitzer::InvalidApiKeyError, "Api key can not be blank").once.and_call_original
37
+ expect(log).to receive(:error).with(Howitzer::InvalidApiKeyError, 'Api key can not be blank').once.and_call_original
38
38
  expect { subject }.to raise_error(Howitzer::InvalidApiKeyError)
39
39
  end
40
40
  end
41
41
  end
42
42
  describe '#domain' do
43
43
  subject { connector.domain }
44
- context "when domain is not set" do
44
+ context 'when domain is not set' do
45
45
  before { connector.instance_variable_set(:@domain, nil)}
46
46
  it do
47
47
  expect(connector).to receive(:change_domain).once{ domain_name }
48
- expect(subject).to eq(domain_name)
48
+ is_expected.to eq(domain_name)
49
49
  end
50
50
  end
51
- context "when domain is already set" do
51
+ context 'when domain is already set' do
52
52
  before do
53
53
  expect(connector).to receive(:change_domain).never
54
54
  connector.instance_variable_set(:@domain, domain_name)
55
55
  end
56
- it { expect(subject).to eql(domain_name) }
56
+ it { is_expected.to eql(domain_name) }
57
57
  end
58
58
  end
59
59
 
60
60
  describe '#change_domain' do
61
- context "when default" do
61
+ context 'when default' do
62
62
  before { connector.change_domain }
63
63
  it { expect(connector.instance_variable_get(:@domain)).to eq(settings.mailgun_domain)}
64
64
  end
65
- context "when custom" do
65
+ context 'when custom' do
66
66
  before { connector.change_domain(domain_name) }
67
67
  it { expect(connector.instance_variable_get(:@domain)).to eq(domain_name) }
68
68
  end
@@ -2,23 +2,23 @@ require 'spec_helper'
2
2
  require 'howitzer/mailgun/client'
3
3
  require 'howitzer/exceptions'
4
4
 
5
- describe Mailgun::Response do
5
+ RSpec.describe Mailgun::Response do
6
6
  let(:body) { {foo: 'bar'}.to_json }
7
7
  let(:response) { double(:response, body: body, code: 201)}
8
- describe "#body" do
8
+ describe '#body' do
9
9
  subject { Mailgun::Response.new(response).body }
10
- it { expect(subject).to eq("{\"foo\":\"bar\"}")}
10
+ it { is_expected.to eq("{\"foo\":\"bar\"}")}
11
11
  end
12
- describe "#code" do
12
+ describe '#code' do
13
13
  subject { Mailgun::Response.new(response).code }
14
- it { expect(subject).to eq(201)}
14
+ it { is_expected.to eq(201)}
15
15
  end
16
- describe "#to_h" do
16
+ describe '#to_h' do
17
17
  subject { Mailgun::Response.new(response).to_h }
18
- context "when possible parse body" do
19
- it { expect(subject).to eq({"foo"=>"bar"})}
18
+ context 'when possible parse body' do
19
+ it { is_expected.to eq({'foo' => 'bar'})}
20
20
  end
21
- context "when impossible parse body" do
21
+ context 'when impossible parse body' do
22
22
  let(:body) { '123' }
23
23
  it do
24
24
  expect(log).to receive(:error).with(Howitzer::ParseError, "757: unexpected token at '123'").once.and_call_original
@@ -1,17 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Settings" do
4
- context "#settings" do
3
+ RSpec.describe 'Settings' do
4
+ context '#settings' do
5
5
  subject { settings }
6
- context "when method called two times" do
6
+ context 'when method called two times' do
7
7
  let(:other_settings) { settings }
8
- it { expect(subject).to equal(other_settings) }
8
+ it { is_expected.to equal(other_settings) }
9
9
  it { expect(other_settings).to be_a_kind_of(SexySettings::Base) }
10
10
  end
11
11
  end
12
- context "SexySettings configuration" do
12
+ context 'SexySettings configuration' do
13
13
  subject { SexySettings.configuration }
14
14
  it { expect(subject.path_to_custom_settings).to include('config/custom.yml') }
15
15
  it { expect(subject.path_to_default_settings).to include('config/default.yml') }
16
16
  end
17
- end
17
+ end
@@ -1,79 +1,79 @@
1
1
  require 'spec_helper'
2
2
  require 'howitzer/utils/data_generator/data_storage'
3
3
 
4
- describe "DataGenerator" do
5
- describe "DataStorage" do
4
+ RSpec.describe 'DataGenerator' do
5
+ describe 'DataStorage' do
6
6
  before { DataGenerator::DataStorage.data.clear }
7
- describe ".store" do
7
+ describe '.store' do
8
8
  subject { DataGenerator::DataStorage.store(ns, 7, :halt) }
9
- context "when namespace specified" do
9
+ context 'when namespace specified' do
10
10
  let(:ns) { :user }
11
- it "should return value" do
12
- expect(subject).to eql(:halt)
11
+ it 'should return value' do
12
+ is_expected.to eql(:halt)
13
13
  end
14
- it "should store namespace value" do
14
+ it 'should store namespace value' do
15
15
  subject
16
16
  expect(DataGenerator::DataStorage.data[:user]).to eql({7 => :halt})
17
17
  end
18
18
  end
19
- context "when namespace empty" do
19
+ context 'when namespace empty' do
20
20
  let(:ns) { nil }
21
- it { expect {subject}.to raise_error(RuntimeError, "Data storage namespace can not be empty") }
21
+ it { expect {subject}.to raise_error(RuntimeError, 'Data storage namespace can not be empty') }
22
22
  end
23
23
  end
24
- describe ".extract" do
24
+ describe '.extract' do
25
25
  subject { DataGenerator::DataStorage.extract(ns, key) }
26
26
  before { DataGenerator::DataStorage.data[:user] = {7 => :exit} }
27
- describe "when namespace specified" do
27
+ describe 'when namespace specified' do
28
28
  let(:ns) { :user }
29
- context "and namespace key found" do
29
+ context 'and namespace key found' do
30
30
  let(:key) { 7 }
31
- it { expect(subject).to eql(:exit) }
31
+ it { is_expected.to eql(:exit) }
32
32
  end
33
- context "and namespace key not found" do
33
+ context 'and namespace key not found' do
34
34
  let(:key) { 5 }
35
- it { expect(subject).to be_nil }
35
+ it { is_expected.to be_nil }
36
36
  end
37
- context "but namespace key not specified" do
37
+ context 'but namespace key not specified' do
38
38
  let(:key) { nil }
39
- it { expect(subject).to eql({ 7 => :exit }) }
39
+ it { is_expected.to eql({ 7 => :exit }) }
40
40
  end
41
41
  end
42
- context "when namespace not found" do
42
+ context 'when namespace not found' do
43
43
  let(:ns) { :guest }
44
44
  let(:key) { 11 }
45
- it { expect(subject).to be_nil }
45
+ it { is_expected.to be_nil }
46
46
  end
47
- context "when namespace not specified" do
47
+ context 'when namespace not specified' do
48
48
  let(:ns) { nil }
49
49
  let(:key) { nil }
50
- it { expect {subject}.to raise_error(RuntimeError, "Data storage namespace can not be empty") }
50
+ it { expect {subject}.to raise_error(RuntimeError, 'Data storage namespace can not be empty') }
51
51
  end
52
52
  end
53
- describe ".clear_ns" do
53
+ describe '.clear_ns' do
54
54
  subject { DataGenerator::DataStorage.clear_ns(:user) }
55
55
  before { DataGenerator::DataStorage.data[:user]= {7 => :exit}}
56
- it "should return empty hash" do
56
+ it 'should return empty hash' do
57
57
  subject
58
58
  adata = DataGenerator::DataStorage.instance_variable_get(:@data)
59
59
  expect(adata[:user]).to eql({})
60
60
  end
61
61
  end
62
- describe ".clear_all_ns" do
62
+ describe '.clear_all_ns' do
63
63
  before do
64
64
  DataGenerator::DataStorage.store('sauce', :status, false)
65
- DataGenerator::DataStorage.store(:foo, "foo", "some value1")
66
- DataGenerator::DataStorage.store(:bar, "bar", "some value2")
67
- DataGenerator::DataStorage.store(:baz, "baz", "some value3")
65
+ DataGenerator::DataStorage.store(:foo, 'foo', 'some value1')
66
+ DataGenerator::DataStorage.store(:bar, 'bar', 'some value2')
67
+ DataGenerator::DataStorage.store(:baz, 'baz', 'some value3')
68
68
  end
69
- context "when default argument" do
69
+ context 'when default argument' do
70
70
  before { DataGenerator::DataStorage.clear_all_ns }
71
- it { expect(DataGenerator::DataStorage.data).to eq({"sauce"=>{:status=>false}, :foo=>{}, :bar=>{}, :baz=>{}}) }
71
+ it { expect(DataGenerator::DataStorage.data).to eq({'sauce' =>{:status=>false}, :foo=>{}, :bar=>{}, :baz=>{}}) }
72
72
  end
73
- context "when custom argument" do
73
+ context 'when custom argument' do
74
74
  let(:exception_list) { [:foo, :bar] }
75
75
  before { DataGenerator::DataStorage.clear_all_ns(exception_list) }
76
- it { expect(DataGenerator::DataStorage.data).to eq({"sauce"=>{}, :foo=>{"foo"=>"some value1"}, :bar=>{"bar"=>"some value2"}, :baz=>{}}) }
76
+ it { expect(DataGenerator::DataStorage.data).to eq({'sauce' =>{}, :foo=>{'foo' => 'some value1'}, :bar=>{'bar' => 'some value2'}, :baz=>{}}) }
77
77
  end
78
78
  end
79
79
  end
@@ -1,18 +1,18 @@
1
1
  require 'spec_helper'
2
2
  require 'howitzer/utils/data_generator/gen'
3
3
 
4
- describe "DataGenerator" do
5
- describe "Gen" do
6
- describe ".user" do
4
+ RSpec.describe 'DataGenerator' do
5
+ describe 'Gen' do
6
+ describe '.user' do
7
7
  subject { DataGenerator::Gen.user(params) }
8
8
  before do
9
9
  allow(settings).to receive(:def_test_pass) { 'test_pass' }
10
10
  allow(settings).to receive(:mailgun_domain) { 'mail.com' }
11
11
  allow(DataGenerator::Gen).to receive(:serial) { '012345678abcde' }
12
12
  end
13
- context "when params specified" do
13
+ context 'when params specified' do
14
14
  let(:params) { { login: 'alex', password: 'pa$$w0rd', mailbox: 'member@test.com' } }
15
- it { expect(subject).to be_an_instance_of DataGenerator::Gen::User }
15
+ it { is_expected.to be_an_instance_of DataGenerator::Gen::User }
16
16
  it { expect(subject.email).to eql 'u012345678abcde@mail.com' }
17
17
  it do
18
18
  email_nm = subject.instance_variable_get(:@email_name)
@@ -24,9 +24,9 @@ describe "DataGenerator" do
24
24
  it { expect(subject.first_name).to eql 'FirstName012345678abcde' }
25
25
  it { expect(subject.last_name).to eql 'LastName012345678abcde' }
26
26
  end
27
- context "with empty params" do
27
+ context 'with empty params' do
28
28
  let(:params) { {} }
29
- it { expect(subject).to be_an_instance_of DataGenerator::Gen::User }
29
+ it { is_expected.to be_an_instance_of DataGenerator::Gen::User }
30
30
  it { expect(subject.email).to eql 'u012345678abcde@mail.com' }
31
31
  it do
32
32
  email_nm = subject.instance_variable_get(:@email_name)
@@ -39,40 +39,40 @@ describe "DataGenerator" do
39
39
  it { expect(subject.last_name).to eql 'LastName012345678abcde' }
40
40
  end
41
41
  end
42
- describe ".given_user_by_number" do
42
+ describe '.given_user_by_number' do
43
43
  subject { DataGenerator::Gen.given_user_by_number(7) }
44
- before { stub_const("DataGenerator::DataStorage", double) }
45
- context "when namespace key found" do
44
+ before { stub_const('DataGenerator::DataStorage', double) }
45
+ context 'when namespace key found' do
46
46
  before { expect(DataGenerator::DataStorage).to receive(:extract).with('user', 7) { :namespace_value } }
47
- it { expect(subject).to eql(:namespace_value) }
47
+ it { is_expected.to eql(:namespace_value) }
48
48
  end
49
- context "when namespace key not found" do
49
+ context 'when namespace key not found' do
50
50
  let(:dat) { :data_store }
51
51
  before do
52
52
  allow(DataGenerator::Gen).to receive(:user) { dat }
53
53
  expect(DataGenerator::DataStorage).to receive(:extract).with('user', 7) { nil }
54
54
  allow(DataGenerator::DataStorage).to receive(:store).with('user', 7, dat)
55
55
  end
56
- it { expect(subject).to eql :data_store }
56
+ it { is_expected.to eql :data_store }
57
57
  end
58
58
  end
59
- describe ".serial" do
59
+ describe '.serial' do
60
60
  subject { DataGenerator::Gen.serial }
61
61
  let(:ser) { 1 }
62
- context "received value should conform to template" do
62
+ context 'received value should conform to template' do
63
63
  let(:ser) { subject }
64
64
  it { expect(ser).to match /\d{9}\w{5}/ }
65
65
  end
66
- context "received values should be different" do
67
- it { expect(subject).to_not eql ser }
66
+ context 'received values should be different' do
67
+ it { is_expected.to_not eql ser }
68
68
  end
69
69
  end
70
- describe "User" do
71
- describe "#initialize" do
70
+ describe 'User' do
71
+ describe '#initialize' do
72
72
  subject { DataGenerator::Gen::User.new(params) }
73
73
  let(:params) { { email: 'alex.petrenko@mail.com', login: 'alex', password: 'pa$$w0rd',
74
74
  first_name: 'Alexey', last_name: 'Petrenko', mailbox: 'member@test.com' } }
75
- it { expect(subject).to be_an_instance_of DataGenerator::Gen::User }
75
+ it { is_expected.to be_an_instance_of DataGenerator::Gen::User }
76
76
  it { expect(subject.email).to eql 'alex.petrenko@mail.com' }
77
77
  it do
78
78
  email_nm = subject.instance_variable_get(:@email_name)
@@ -1,80 +1,80 @@
1
1
  require 'spec_helper'
2
2
  require 'howitzer/utils/locator_store'
3
3
 
4
- describe "Locator store" do
4
+ RSpec.describe 'Locator store' do
5
5
  let(:bad_name) { 'name' }
6
6
  let(:error) { Howitzer::LocatorNotDefinedError }
7
7
 
8
- shared_examples "locator methods" do |prefix, web_page|
8
+ shared_examples 'locator methods' do |prefix, web_page|
9
9
  describe "#{prefix}locator" do
10
- context "when bad locator given" do
10
+ context 'when bad locator given' do
11
11
  subject { web_page.locator(bad_name) }
12
12
  it do
13
13
  expect(log).to receive(:error).with(error, bad_name).once.and_call_original
14
14
  expect { subject }.to raise_error(error)
15
15
  end
16
16
  end
17
- context "when CSS locator given" do
17
+ context 'when CSS locator given' do
18
18
  before { web_page.add_locator :base_locator, 'base_locator' }
19
19
  subject { web_page.locator(:base_locator) }
20
- it { expect(subject).to eq('base_locator') }
20
+ it { is_expected.to eq('base_locator') }
21
21
  end
22
- context "when XPATH locator given" do
22
+ context 'when XPATH locator given' do
23
23
  before { web_page.add_locator :test_xpath, xpath: "//select[@id='modelOptions']/option[@value='m6']" }
24
24
  subject { web_page.locator(:test_xpath) }
25
- it { expect(subject).to eq([:xpath, "//select[@id='modelOptions']/option[@value='m6']"]) }
25
+ it { is_expected.to eq([:xpath, "//select[@id='modelOptions']/option[@value='m6']"]) }
26
26
  end
27
27
  end
28
28
 
29
29
  describe "#{prefix}link_locator" do
30
- context "when bad locator given" do
30
+ context 'when bad locator given' do
31
31
  subject { web_page.link_locator(bad_name) }
32
32
  it { expect {subject}. to raise_error(error) }
33
33
  end
34
- context "when correct locator given" do
34
+ context 'when correct locator given' do
35
35
  before { web_page.add_link_locator :link_locator, 'link_locator' }
36
36
  subject { web_page.link_locator(:link_locator) }
37
- it { expect(subject).to eq('link_locator') }
37
+ it { is_expected.to eq('link_locator') }
38
38
  end
39
39
  end
40
40
 
41
41
  describe "#{prefix}field_locator" do
42
- context "when bad locator given" do
42
+ context 'when bad locator given' do
43
43
  subject { web_page.field_locator(bad_name) }
44
44
  it { expect {subject}. to raise_error(error) }
45
45
  end
46
- context "when correct locator given" do
46
+ context 'when correct locator given' do
47
47
  before { web_page.add_field_locator :field_locator, 'field_locator' }
48
48
  subject { web_page.field_locator(:field_locator) }
49
- it { expect(subject).to eq('field_locator') }
49
+ it { is_expected.to eq('field_locator') }
50
50
  end
51
51
  end
52
52
 
53
53
  describe "#{prefix}button_locator" do
54
- context "when bad locator given" do
54
+ context 'when bad locator given' do
55
55
  subject { web_page.button_locator(bad_name) }
56
56
  it { expect {subject}. to raise_error(error) }
57
57
  end
58
- context "when correct locator given" do
58
+ context 'when correct locator given' do
59
59
  before { web_page.add_button_locator :button_locator, 'button_locator' }
60
60
  subject { web_page.button_locator(:button_locator) }
61
- it { expect(subject).to eq('button_locator') }
61
+ it { is_expected.to eq('button_locator') }
62
62
  end
63
63
  end
64
64
 
65
65
  describe "#{prefix}find_element" do
66
- context "when existing locator name given" do
67
- context "of base type" do
66
+ context 'when existing locator name given' do
67
+ context 'of base type' do
68
68
  before { web_page.add_locator :test_locator, '.foo' }
69
69
  subject { web_page.find_element(name) }
70
- context "as string" do
71
- let(:name) { "test_locator" }
70
+ context 'as string' do
71
+ let(:name) { 'test_locator' }
72
72
  it do
73
73
  expect(web_page.is_a?(Class) ? web_page : web_page.class).to receive(:find).with('.foo')
74
74
  subject
75
75
  end
76
76
  end
77
- context "as symbol" do
77
+ context 'as symbol' do
78
78
  let(:name) { :test_locator }
79
79
  it do
80
80
  expect(web_page.is_a?(Class) ? web_page : web_page.class).to receive(:find).with('.foo')
@@ -82,7 +82,7 @@ describe "Locator store" do
82
82
  end
83
83
  end
84
84
  end
85
- context "when link locator or other" do
85
+ context 'when link locator or other' do
86
86
  before { web_page.add_link_locator :test_link_locator, 'foo' }
87
87
  subject { web_page.find_element(:test_link_locator) }
88
88
  it do
@@ -91,24 +91,24 @@ describe "Locator store" do
91
91
  end
92
92
  end
93
93
  end
94
- context "when not existing locator name" do
94
+ context 'when not existing locator name' do
95
95
  subject { web_page.find_element(:unknown_locator) }
96
- it { expect{ subject }.to raise_error(Howitzer::LocatorNotDefinedError, "unknown_locator") }
96
+ it { expect{ subject }.to raise_error(Howitzer::LocatorNotDefinedError, 'unknown_locator') }
97
97
  end
98
98
  end
99
99
  describe "#{prefix}first_element" do
100
- context "when existing locator name given" do
101
- context "of base type" do
100
+ context 'when existing locator name given' do
101
+ context 'of base type' do
102
102
  before { web_page.add_locator :test_locator, '.foo' }
103
103
  subject { web_page.first_element(name) }
104
- context "as string" do
105
- let(:name) { "test_locator" }
104
+ context 'as string' do
105
+ let(:name) { 'test_locator' }
106
106
  it do
107
107
  expect(web_page.is_a?(Class) ? web_page : web_page.class).to receive(:first).with('.foo')
108
108
  subject
109
109
  end
110
110
  end
111
- context "as symbol" do
111
+ context 'as symbol' do
112
112
  let(:name) { :test_locator }
113
113
  it do
114
114
  expect(web_page.is_a?(Class) ? web_page : web_page.class).to receive(:first).with('.foo')
@@ -116,7 +116,7 @@ describe "Locator store" do
116
116
  end
117
117
  end
118
118
  end
119
- context "when link locator or other" do
119
+ context 'when link locator or other' do
120
120
  before { web_page.add_link_locator :test_link_locator, 'foo' }
121
121
  subject { web_page.first_element(:test_link_locator) }
122
122
  it do
@@ -125,33 +125,33 @@ describe "Locator store" do
125
125
  end
126
126
  end
127
127
  end
128
- context "when not existing locator name" do
128
+ context 'when not existing locator name' do
129
129
  subject { web_page.first_element(:unknown_locator) }
130
- it { expect{ subject }.to raise_error(Howitzer::LocatorNotDefinedError, "unknown_locator") }
130
+ it { expect{ subject }.to raise_error(Howitzer::LocatorNotDefinedError, 'unknown_locator') }
131
131
  end
132
132
  end
133
133
  describe "#{prefix}apply" do
134
- context "when bad locator given" do
134
+ context 'when bad locator given' do
135
135
  before { web_page.add_locator :test_locator, lambda{|test| test} }
136
136
  let(:locator) { lambda{|test| test} }
137
137
  subject { web_page.apply(locator, 'test') }
138
138
  it { expect {subject}.to raise_error(NoMethodError) }
139
139
  end
140
- context "when correct locator given" do
140
+ context 'when correct locator given' do
141
141
  before { web_page.add_locator :test_locator, lambda{|location_name| {xpath: ".//a[contains(.,'#{location_name}')]"}} }
142
142
  let(:locator) { lambda{|location_name| {xpath: ".//a[contains(.,'#{location_name}')]"}} }
143
143
  subject { web_page.apply(locator, 'Kiev') }
144
- it { expect(subject).to eq([:xpath, ".//a[contains(.,'Kiev')]"]) }
144
+ it { is_expected.to eq([:xpath, ".//a[contains(.,'Kiev')]"]) }
145
145
  end
146
146
  end
147
147
  end
148
148
 
149
- context "Class methods" do
150
- it_behaves_like "locator methods", '.', Class.new{ include LocatorStore }
149
+ context 'Class methods' do
150
+ it_behaves_like 'locator methods', '.', Class.new{ include LocatorStore }
151
151
  end
152
152
 
153
- context "Instance methods" do
154
- it_behaves_like "locator methods", '#', Class.new{ include LocatorStore }.new
153
+ context 'Instance methods' do
154
+ it_behaves_like 'locator methods', '#', Class.new{ include LocatorStore }.new
155
155
  end
156
156
 
157
157
  end