Commit 4b945e28 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Make it possible to define a QA-specific page element

parent 489267e6
...@@ -3,21 +3,22 @@ module QA ...@@ -3,21 +3,22 @@ module QA
class Element class Element
attr_reader :name attr_reader :name
def initialize(name, pattern) def initialize(name, pattern = nil)
@name = name @name = name
@pattern = pattern @pattern = pattern || "qa-#{@name.to_s.gsub('_', '-')}"
end end
def matches?(line) def expression
case @pattern if @pattern.is_a?(String)
when Regexp @_regexp ||= Regexp.new(Regexp.escape(@pattern))
!!(line =~ @pattern)
when String
line.include?(@pattern)
else else
raise ArgumentError, 'Pattern should be either String or Regexp!' @pattern
end end
end end
def matches?(line)
!!(line =~ expression)
end
end end
end end
end end
...@@ -46,7 +46,7 @@ module QA ...@@ -46,7 +46,7 @@ module QA
@elements = [] @elements = []
end end
def element(name, pattern) def element(name, pattern = nil)
@elements.push(Page::Element.new(name, pattern)) @elements.push(Page::Element.new(name, pattern))
end end
end end
......
...@@ -2,11 +2,11 @@ describe QA::Page::Element do ...@@ -2,11 +2,11 @@ describe QA::Page::Element do
context 'when pattern is an expression' do context 'when pattern is an expression' do
subject { described_class.new(:something, /button 'Sign in'/) } subject { described_class.new(:something, /button 'Sign in'/) }
it 'is correctly matches against a string' do it 'matches when there is a match' do
expect(subject.matches?("button 'Sign in'")).to be true expect(subject.matches?("button 'Sign in'")).to be true
end end
it 'does not match if string does not match against a pattern' do it 'does not match if pattern is not present' do
expect(subject.matches?("button 'Sign out'")).to be false expect(subject.matches?("button 'Sign out'")).to be false
end end
end end
...@@ -14,21 +14,24 @@ describe QA::Page::Element do ...@@ -14,21 +14,24 @@ describe QA::Page::Element do
context 'when pattern is a string' do context 'when pattern is a string' do
subject { described_class.new(:something, 'button') } subject { described_class.new(:something, 'button') }
it 'is correctly matches against a string' do it 'matches when there is match' do
expect(subject.matches?('some button in the view')).to be true expect(subject.matches?('some button in the view')).to be true
end end
it 'does not match if string does not match against a pattern' do it 'does not match if pattern is not present' do
expect(subject.matches?('text_field :name')).to be false expect(subject.matches?('text_field :name')).to be false
end end
end end
context 'when pattern is not supported' do context 'when pattern is not provided' do
subject { described_class.new(:something, [/something/]) } subject { described_class.new(:some_name) }
it 'raises an error' do it 'matches when QA specific selector is present' do
expect { subject.matches?('some line') } expect(subject.matches?('some qa-some-name selector')).to be true
.to raise_error ArgumentError end
it 'does not match if QA selector is not there' do
expect(subject.matches?('some_name selector')).to be false
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment