From d2c2f93fe6ed557ecfbc53afedef899dd49b244d Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Fri, 22 Dec 2017 16:09:00 +0100 Subject: [PATCH] Append page validation error if view partial is missing --- qa/qa/page/view.rb | 6 ++++- qa/spec/page/view_spec.rb | 51 ++++++++++++++++++++++++--------------- 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/qa/qa/page/view.rb b/qa/qa/page/view.rb index b988b179e8f..fa0ed8be9d9 100644 --- a/qa/qa/page/view.rb +++ b/qa/qa/page/view.rb @@ -9,11 +9,15 @@ module QA end def pathname - Pathname.new(File.join( __dir__, '../../../', @path)) + @pathname ||= Pathname.new(File.join( __dir__, '../../../', @path)) .cleanpath.expand_path end def errors + unless pathname.readable? + return ["Missing view partial `#{pathname}`!"] + end + ## # Reduce required elements by streaming view and making assertions on # elements' existence. diff --git a/qa/spec/page/view_spec.rb b/qa/spec/page/view_spec.rb index 6a78e32db68..dd38b171ad5 100644 --- a/qa/spec/page/view_spec.rb +++ b/qa/spec/page/view_spec.rb @@ -30,36 +30,47 @@ describe QA::Page::View do allow(File).to receive(:new).and_return(file) end - context 'when pattern is found' do + context 'when view partial is present' do before do - allow(file).to receive(:foreach) - .and_yield('some element').once - allow(element).to receive(:matches?) - .with('some element').and_return(true) + allow(subject.pathname).to receive(:readable?) + .and_return(true) end - it 'walks through the view and asserts on elements existence' do - expect(subject.errors).to be_empty - end - end + context 'when pattern is found' do + before do + allow(file).to receive(:foreach) + .and_yield('some element').once + allow(element).to receive(:matches?) + .with('some element').and_return(true) + end - context 'when pattern has not been found' do - before do - allow(file).to receive(:foreach) - .and_yield('some element').once - allow(element).to receive(:matches?) - .with('some element').and_return(false) + it 'walks through the view and asserts on elements existence' do + expect(subject.errors).to be_empty + end end - it 'returns an array of errors related to missing elements' do - expect(subject.errors).not_to be_empty - expect(subject.errors.first) - .to match %r(Missing element `.*` in `.*/some/file.html` view) + context 'when pattern has not been found' do + before do + allow(file).to receive(:foreach) + .and_yield('some element').once + allow(element).to receive(:matches?) + .with('some element').and_return(false) + end + + it 'returns an array of errors related to missing elements' do + expect(subject.errors).not_to be_empty + expect(subject.errors.first) + .to match %r(Missing element `.*` in `.*/some/file.html` view) + end end end context 'when view partial has not been found' do - pending + it 'returns an error when it is not able to find the partial' do + expect(subject.errors).to be_one + expect(subject.errors.first) + .to match %r(Missing view partial `.*/some/file.html`!) + end end end end