fix issue locomotivecms/engine#1155 (Unpublished Pages still visible)
did
committed Jul 12, 2016
commit c17802c3deb1a58093fc6396ee594cbac28a6aed
Showing 8
changed files with
86 additions
and 11 deletions
locomotive/steam/middlewares/page.rb b/lib/locomotive/steam/middlewares/page.rb
+12
-2
| @@ | @@ -26,11 +26,21 @@ module Locomotive::Steam |
| protected | |
| def fetch_page | |
| - | services.page_finder.match(path).tap do |pages| |
| + | page = page_finder.match(path).tap do |pages| |
| if pages.size > 1 | |
| self.log "Found multiple pages: #{pages.map(&:title).join(', ')}" | |
| end | |
| - | end.first || services.page_finder.find('404') |
| + | end.first |
| + | |
| + | if page && (page.published? || page.not_found? || live_editing?) |
| + | page |
| + | else |
| + | page_finder.find('404') |
| + | end |
| + | end |
| + | |
| + | def page_finder |
| + | services.page_finder |
| end | |
| end | |
locomotive/steam/middlewares/renderer.rb b/lib/locomotive/steam/middlewares/renderer.rb
+1
-1
| @@ | @@ -73,7 +73,7 @@ module Locomotive::Steam |
| 'today' => Date.today, | |
| 'mode' => Locomotive::Steam.configuration.mode, | |
| 'wagon' => Locomotive::Steam.configuration.mode == :test, | |
| - | 'live_editing' => !!env['steam.live_editing'] |
| + | 'live_editing' => live_editing? |
| } | |
| end | |
locomotive/steam/middlewares/thread_safe.rb b/lib/locomotive/steam/middlewares/thread_safe.rb
+4
-0
| @@ | @@ -61,6 +61,10 @@ module Locomotive::Steam::Middlewares |
| @params ||= self.request.params.with_indifferent_access | |
| end | |
| + | def live_editing? |
| + | !!env['steam.live_editing'] |
| + | end |
| + | |
| end | |
| end | |
spec/fixtures/default/app/views/pages/all.liquid.haml
+1
-1
| @@ | @@ -1,7 +1,7 @@ |
| --- | |
| title: All the pages | |
| listed: false | |
| - | published: false |
| + | published: true |
| --- | |
| {% extends parent %} | |
| {% block content %} | |
spec/fixtures/default/app/views/pages/tags/nav_in_deep.liquid.haml
+2
-2
| @@ | @@ -1,6 +1,6 @@ |
| --- | |
| title: Page to test the nav tag with a high depth | |
| listed: false | |
| - | published: false |
| + | published: true |
| --- | |
| - | {% nav 'site', depth: 2 %} |
| \ No newline at end of file | |
| + | {% nav 'site', depth: 2 %} |
spec/integration/server/sitemap_spec.rb
+1
-1
| @@ | @@ -21,7 +21,7 @@ describe Locomotive::Steam::Server do |
| it 'checks if it looks valid' do | |
| expect(Nokogiri::XML(subject).errors.empty?).to eq true | |
| - | expect(subject.scan(/<url>/).size).to eq 46 |
| + | expect(subject.scan(/<url>/).size).to eq 48 |
| expect(subject).to match("<loc>http://example.org/songs/song-number-2/band</loc>") | |
| expect(subject).to match((<<-EOF | |
| <url> | |
spec/unit/middlewares/page_spec.rb
+63
-0
| @@ | @@ -0,0 +1,63 @@ |
| + | require 'spec_helper' |
| + | |
| + | require_relative '../../../lib/locomotive/steam/middlewares/thread_safe' |
| + | require_relative '../../../lib/locomotive/steam/middlewares/helpers' |
| + | require_relative '../../../lib/locomotive/steam/middlewares/page' |
| + | |
| + | describe Locomotive::Steam::Middlewares::Page do |
| + | |
| + | let(:live_editing) { nil } |
| + | let(:published) { true } |
| + | let(:page_not_found) { instance_double('PageNotFound', not_found?: true) } |
| + | let(:page) { instance_double('Page', title: 'Hello world', fullpath: 'hello-world', not_found?: false, published?: published) } |
| + | let(:pages) { [page] } |
| + | let(:site) { instance_double('Site', default_locale: 'en') } |
| + | let(:service) { instance_double('PageFinder', match: pages) } |
| + | let(:url) { 'http://models.example.com' } |
| + | let(:app) { ->(env) { [200, env, 'app'] } } |
| + | let(:middleware) { described_class.new(app) } |
| + | |
| + | subject do |
| + | env = env_for(url, 'steam.site' => site) |
| + | env['steam.path'] = 'hello-world' |
| + | env['steam.locale'] = 'en' |
| + | env['steam.request'] = Rack::Request.new(env) |
| + | env['steam.live_editing'] = live_editing |
| + | code, env = middleware.call(env) |
| + | env['steam.page'] |
| + | end |
| + | |
| + | before do |
| + | allow_any_instance_of(described_class).to receive(:page_finder).and_return(service) |
| + | allow(service).to receive(:find).with('404').and_return(page_not_found) |
| + | end |
| + | |
| + | it { is_expected.to eq page } |
| + | |
| + | context "page doesn't exist" do |
| + | |
| + | let(:pages) { [] } |
| + | |
| + | it { is_expected.to eq page_not_found } |
| + | |
| + | end |
| + | |
| + | context 'page is unpublished' do |
| + | |
| + | let(:published) { false } |
| + | |
| + | it { is_expected.to eq page_not_found } |
| + | |
| + | context 'the live editing mode is on' do |
| + | |
| + | let(:live_editing) { true } |
| + | |
| + | it 'has to display it' do |
| + | is_expected.to eq page |
| + | end |
| + | |
| + | end |
| + | |
| + | end |
| + | |
| + | end |
spec/unit/middlewares/renderer_spec.rb
+2
-4
| @@ | @@ -8,9 +8,7 @@ describe Locomotive::Steam::Middlewares::Renderer do |
| let(:app) { ->(env) { [200, env, 'app'] }} | |
| - | let :middleware do |
| - | Locomotive::Steam::Middlewares::Renderer.new(app) |
| - | end |
| + | let(:middleware) { described_class.new(app) } |
| describe 'missing 404 page' do | |
| @@ | @@ -21,7 +19,7 @@ describe Locomotive::Steam::Middlewares::Renderer do |
| middleware.call env_for('http://www.example.com', { 'steam.page' => nil, 'steam.locale' => locale, 'steam.site' => site }) | |
| end | |
| - | specify 'return 200' do |
| + | specify 'return 404' do |
| code, headers, response = subject | |
| expect(code).to eq(404) | |
| expect(response).to eq(["Your 404 page is missing. Please create it."]) | |