spec/unit/lib/web/page_spec.rb in howitzer-2.0.0 vs spec/unit/lib/web/page_spec.rb in howitzer-2.0.1
- old
+ new
@@ -12,24 +12,38 @@
context 'when validate missing' do
context 'when params present' do
let(:url_value) { 'http://example.com/users/1' }
subject { described_class.open(id: 1) }
it do
- expect(described_class).to receive(:expanded_url).with(id: 1) { url_value }.once.ordered
+ expect(described_class).to receive(:expanded_url).with({ id: 1 }, nil) { url_value }.once.ordered
expect(Howitzer::Log).to receive(:info)
.with("Open #{described_class} page by '#{url_value}' url").once.ordered
expect(described_class).to receive(:retryable).ordered.once.and_call_original
expect(session).to receive(:visit).with(url_value).once.ordered
expect(described_class).to receive(:given).once.ordered { true }
expect(subject).to eq(true)
end
end
+ context 'when custom processor specified' do
+ let(:custom_processor) { double }
+ let(:url_value) { 'http://example.com/users/1' }
+ subject { described_class.open(id: 1, url_processor: custom_processor) }
+ it do
+ expect(described_class).to receive(:expanded_url).with({ id: 1 }, custom_processor) { url_value }.once.ordered
+ expect(Howitzer::Log).to receive(:info)
+ .with("Open #{described_class} page by '#{url_value}' url").once.ordered
+ expect(described_class).to receive(:retryable).ordered.once.and_call_original
+ expect(session).to receive(:visit).with(url_value).once.ordered
+ expect(described_class).to receive(:given).once.ordered { true }
+ expect(subject).to eq(true)
+ end
+ end
context 'when params missing' do
let(:url_value) { 'http://example.com/users' }
subject { described_class.open }
it do
- expect(described_class).to receive(:expanded_url).with({}) { url_value }.once.ordered
+ expect(described_class).to receive(:expanded_url).with({}, nil) { url_value }.once.ordered
expect(Howitzer::Log).to receive(:info)
.with("Open #{described_class} page by '#{url_value}' url").once.ordered
expect(described_class).to receive(:retryable).ordered.once.and_call_original
expect(session).to receive(:visit).with(url_value).once.ordered
expect(described_class).to receive(:given).once.ordered { true }
@@ -39,11 +53,11 @@
end
context 'when validate: false' do
let(:url_value) { 'http://example.com/users' }
subject { described_class.open(validate: false) }
it do
- expect(described_class).to receive(:expanded_url).with({}) { url_value }.once.ordered
+ expect(described_class).to receive(:expanded_url).with({}, nil) { url_value }.once.ordered
expect(Howitzer::Log).to receive(:info).with("Open #{described_class} page by '#{url_value}' url").once.ordered
expect(described_class).to receive(:retryable).ordered.once.and_call_original
expect(session).to receive(:visit).with(url_value).once.ordered
expect(described_class).not_to receive(:given)
expect(subject).to be_nil
@@ -51,11 +65,11 @@
end
context 'when validate: true with params' do
let(:url_value) { 'http://example.com/users/1' }
subject { described_class.open(validate: true, id: 1) }
it do
- expect(described_class).to receive(:expanded_url).with(id: 1) { url_value }.once.ordered
+ expect(described_class).to receive(:expanded_url).with({ id: 1 }, nil) { url_value }.once.ordered
expect(Howitzer::Log).to receive(:info).with("Open #{described_class} page by '#{url_value}' url").once.ordered
expect(described_class).to receive(:retryable).ordered.once.and_call_original
expect(session).to receive(:visit).with(url_value).once.ordered
expect(described_class).to receive(:given).once.ordered { true }
expect(subject).to eq(true)
@@ -160,45 +174,76 @@
Class.new(base_class)
end
let!(:child_class3) do
Class.new(described_class)
end
- it { expect(described_class.send(:app_host)).to eq('http://login:pass@my.website.com') }
- it { expect(base_class.send(:app_host)).to eq('https://base.com') }
- it { expect(child_class1.send(:app_host)).to eq('https://child.com') }
- it { expect(child_class2.send(:app_host)).to eq('https://base.com') }
- it { expect(child_class3.send(:app_host)).to eq('http://login:pass@my.website.com') }
+ it { expect(described_class.send(:site_value)).to eq('http://login:pass@my.website.com') }
+ it { expect(base_class.send(:site_value)).to eq('https://base.com') }
+ it { expect(child_class1.send(:site_value)).to eq('https://child.com') }
+ it { expect(child_class2.send(:site_value)).to eq('https://base.com') }
+ it { expect(child_class3.send(:site_value)).to eq('http://login:pass@my.website.com') }
it 'should be protected' do
expect { described_class.site('http://example.com') }.to raise_error(NoMethodError)
end
end
describe '.expanded_url' do
- context 'when params present' do
- subject { test_page.expanded_url(id: 1) }
- context 'when page url specified' do
- context 'when BlankPage' do
- let(:test_page) { Howitzer::Web::BlankPage }
- it { is_expected.to eq('about:blank') }
- end
- context 'when other page' do
- let(:test_page) do
- Class.new(described_class) do
- site 'http://example.com'
- path '/users{/id}'
+ context 'when default url processor' do
+ context 'when params present' do
+ subject { test_page.expanded_url(id: 1) }
+ context 'when page url specified' do
+ context 'when BlankPage' do
+ let(:test_page) { Howitzer::Web::BlankPage }
+ it { is_expected.to eq('about:blank') }
+ end
+ context 'when other page' do
+ let(:test_page) do
+ Class.new(described_class) do
+ site 'http://example.com'
+ path '/users{/id}'
+ end
end
+ it { is_expected.to eq('http://example.com/users/1') }
end
- it { is_expected.to eq('http://example.com/users/1') }
+ context 'when root not specified' do
+ let(:test_page) do
+ Class.new(described_class) do
+ path '/users{/id}'
+ end
+ end
+ it { is_expected.to eq('http://login:pass@my.website.com/users/1') }
+ end
end
- context 'when root not specified' do
- let(:test_page) do
- Class.new(described_class) do
- path '/users{/id}'
+ end
+ context 'when custom url processor' do
+ let(:test_page) do
+ Class.new(described_class) do
+ site 'http://example.com'
+ path '/users{/id}'
+ end
+ end
+ let(:custom_processor_class) do
+ Class.new do
+ def self.restore(_name, value)
+ value.tr('-', ' ')
end
+
+ def self.match(_name)
+ '.*'
+ end
+
+ def self.validate(_name, value)
+ !(value =~ /^[\w ]+$/).nil?
+ end
+
+ def self.transform(_name, value)
+ value.tr(' ', '+')
+ end
end
- it { is_expected.to eq('http://login:pass@my.website.com/users/1') }
end
+ subject { test_page.expanded_url({ id: 'hello world' }, custom_processor_class) }
+ it { is_expected.to eq('http://example.com/users/hello+world') }
end
context 'when page url missing' do
subject { described_class.expanded_url }
it do
expect { subject }.to raise_error(
@@ -223,15 +268,20 @@
describe '.path' do
subject { described_class.send(:path, value) }
before { subject }
context 'when value is number' do
let(:value) { 1 }
- it { expect(described_class.instance_variable_get(:@path_template)).to eq('1') }
+ it do
+ expect(described_class.send(:path_value)).to eql '1'
+ expect(described_class.private_methods(true)).to include(:path_value)
+ end
end
context 'when value is string' do
let(:value) { '/users' }
- it { expect(described_class.instance_variable_get(:@path_template)).to eq('/users') }
+ it do
+ expect(described_class.send(:path_value)).to eql '/users'
+ end
end
end
describe '#initialize' do
subject { described_class.send(:new) }
@@ -255,24 +305,9 @@
end
end
describe 'inherited callback' do
let(:page_class) { Class.new(described_class) }
- context 'when abstract class without validations' do
- let!(:page_class) do
- Howitzer::Web::PageValidator.instance_variable_set(:@pages, [])
- Class.new(described_class)
- end
- it { expect(Howitzer::Web::PageValidator.pages).to eq([]) }
- end
- context 'when class has validations' do
- let!(:page_class) do
- allow(described_class).to receive(:validations) { { title: /some text/ } }
- Howitzer::Web::PageValidator.instance_variable_set(:@pages, [])
- Class.new(described_class)
- end
- it { expect(Howitzer::Web::PageValidator.pages).to eq([page_class]) }
- end
it 'can not be instantiated with new' do
expect { page_class.new }.to raise_error(NoMethodError, "private method `new' called for #{page_class}")
end
end