summaryrefslogtreecommitdiff
path: root/qa
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-12-22 15:40:46 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-12-22 15:40:46 +0100
commitd69e4541a4874208590a7387186f8929143fd2af (patch)
tree13f6ab2e1d93c0330ddb18ac48586fe2faed8c70 /qa
parent481f461380d4919077c543c51f58e37337167706 (diff)
downloadgitlab-ce-d69e4541a4874208590a7387186f8929143fd2af.tar.gz
Use composite pattern to return page view errors
Diffstat (limited to 'qa')
-rw-r--r--qa/qa/page/base.rb4
-rw-r--r--qa/qa/page/element.rb13
-rw-r--r--qa/qa/page/validator.rb18
-rw-r--r--qa/qa/page/view.rb4
-rw-r--r--qa/spec/page/base_spec.rb17
-rw-r--r--qa/spec/page/element_spec.rb34
-rw-r--r--qa/spec/page/view_spec.rb4
7 files changed, 64 insertions, 30 deletions
diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb
index 48ac0569596..9064c78b792 100644
--- a/qa/qa/page/base.rb
+++ b/qa/qa/page/base.rb
@@ -48,8 +48,8 @@ module QA
@evaluator ||= Page::Base::DSL.new
end
- def self.validator
- Page::Validator.new(self)
+ def self.errors
+ @errors ||= views.map(&:errors).flatten
end
class DSL
diff --git a/qa/qa/page/element.rb b/qa/qa/page/element.rb
index c47776bb2f6..173fdbf6d36 100644
--- a/qa/qa/page/element.rb
+++ b/qa/qa/page/element.rb
@@ -8,15 +8,14 @@ module QA
@pattern = pattern
end
- def expression?
- @pattern.is_a?(Regexp)
- end
-
def matches?(line)
- if expression?
- line =~ pattern
+ case @pattern
+ when Regexp
+ !!(line =~ @pattern)
+ when String
+ line.include?(@pattern)
else
- line.includes?(pattern)
+ raise ArgumentError, 'Pattern should be either String or Regexp!'
end
end
end
diff --git a/qa/qa/page/validator.rb b/qa/qa/page/validator.rb
deleted file mode 100644
index bd9511595c5..00000000000
--- a/qa/qa/page/validator.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-module QA
- module Page
- class Validator
- def initialize(page)
- @page = page
- @views = page.views
- end
-
- def errors
- @errors ||= @views.map do |view|
- end
- end
-
- def message
- end
- end
- end
-end
diff --git a/qa/qa/page/view.rb b/qa/qa/page/view.rb
index ec20045e26d..b988b179e8f 100644
--- a/qa/qa/page/view.rb
+++ b/qa/qa/page/view.rb
@@ -15,8 +15,8 @@ module QA
def errors
##
- # Reduce required elements by streaming views and making assertions on
- # elements' patterns.
+ # Reduce required elements by streaming view and making assertions on
+ # elements' existence.
#
@missing ||= @elements.dup.tap do |elements|
File.new(pathname.to_s).foreach do |line|
diff --git a/qa/spec/page/base_spec.rb b/qa/spec/page/base_spec.rb
index 31ff9e258a1..63445d8f7bf 100644
--- a/qa/spec/page/base_spec.rb
+++ b/qa/spec/page/base_spec.rb
@@ -5,7 +5,7 @@ describe QA::Page::Base do
end
end
- describe 'DSL for defining view partials', '.view' do
+ describe '.view', 'DSL for defining view partials' do
subject do
Class.new(described_class) do
view 'path/to/some/view.html.haml' do
@@ -32,4 +32,19 @@ describe QA::Page::Base do
end
end
end
+
+ describe '.errors' do
+ let(:view) { double('view') }
+
+ before do
+ allow(described_class).to receive(:views)
+ .and_return([view])
+
+ allow(view).to receive(:errors).and_return(['some error'])
+ end
+
+ it 'iterates views composite and returns errors' do
+ expect(described_class.errors).to eq ['some error']
+ end
+ end
end
diff --git a/qa/spec/page/element_spec.rb b/qa/spec/page/element_spec.rb
new file mode 100644
index 00000000000..238c4d1ac66
--- /dev/null
+++ b/qa/spec/page/element_spec.rb
@@ -0,0 +1,34 @@
+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
+ expect(subject.matches?("button 'Sign in'")).to be true
+ end
+
+ it 'does not match if string does not match against a pattern' do
+ expect(subject.matches?("button 'Sign out'")).to be false
+ end
+ end
+
+ context 'when pattern is a string' do
+ subject { described_class.new(:something, 'button') }
+
+ it 'is correctly matches against a string' 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
+ expect(subject.matches?('text_field :name')).to be false
+ end
+ end
+
+ context 'when pattern is not supported' do
+ subject { described_class.new(:something, [/something/]) }
+
+ it 'raises an error' do
+ expect { subject.matches?('some line') }
+ .to raise_error ArgumentError
+ end
+ end
+end
diff --git a/qa/spec/page/view_spec.rb b/qa/spec/page/view_spec.rb
index 27e83d35de1..6a78e32db68 100644
--- a/qa/spec/page/view_spec.rb
+++ b/qa/spec/page/view_spec.rb
@@ -57,5 +57,9 @@ describe QA::Page::View do
.to match %r(Missing element `.*` in `.*/some/file.html` view)
end
end
+
+ context 'when view partial has not been found' do
+ pending
+ end
end
end