Commit 0c3caffa authored by Grzegorz Bizon's avatar Grzegorz Bizon

Make it possible to define a QA-specific page element

parent 052edb3d
......@@ -3,21 +3,22 @@ module QA
class Element
attr_reader :name
def initialize(name, pattern)
def initialize(name, pattern = nil)
@name = name
@pattern = pattern
@pattern = pattern || "qa-#{@name.to_s.gsub('_', '-')}"
end
def matches?(line)
case @pattern
when Regexp
!!(line =~ @pattern)
when String
line.include?(@pattern)
def expression
if @pattern.is_a?(String)
@_regexp ||= Regexp.new(Regexp.escape(@pattern))
else
raise ArgumentError, 'Pattern should be either String or Regexp!'
@pattern
end
end
def matches?(line)
!!(line =~ expression)
end
end
end
end
......@@ -46,7 +46,7 @@ module QA
@elements = []
end
def element(name, pattern)
def element(name, pattern = nil)
@elements.push(Page::Element.new(name, pattern))
end
end
......
......@@ -2,11 +2,11 @@ describe QA::Page::Element do
context 'when pattern is an expression' do
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
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
end
end
......@@ -14,21 +14,24 @@ describe QA::Page::Element do
context 'when pattern is a string' do
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
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
end
end
context 'when pattern is not supported' do
subject { described_class.new(:something, [/something/]) }
context 'when pattern is not provided' do
subject { described_class.new(:some_name) }
it 'raises an error' do
expect { subject.matches?('some line') }
.to raise_error ArgumentError
it 'matches when QA specific selector is present' do
expect(subject.matches?('some qa-some-name selector')).to be true
end
it 'does not match if QA selector is not there' do
expect(subject.matches?('some_name selector')).to be false
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