Skip to content

Commit

Permalink
Merge 4e2c0d3 into 8cf919b
Browse files Browse the repository at this point in the history
  • Loading branch information
gburgett committed Jan 31, 2019
2 parents 8cf919b + 4e2c0d3 commit 8a6cf07
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 3 deletions.
Expand Up @@ -5,24 +5,35 @@ class WCC::Contentful::App::PagesController < ApplicationController

def index
@page = global_site_config&.homepage ||
page_model.find_by(slug: '/', options: { include: 3 })
page_model.find_by(slug: '/', options: { include: 3, preview: preview? })
render 'pages/show'
end

def show
slug = '/' + params[:slug]
@page = page_model.find_by(slug: slug, options: { include: 3 })
@page = page_model.find_by(slug: slug, options: { include: 3, preview: preview? })

return render 'pages/show' if @page

redirect = redirect_model.find_by(slug: slug, options: { include: 0 })
redirect = redirect_model.find_by(slug: slug, options: { include: 0, preview: preview? })
raise WCC::Contentful::App::PageNotFoundError, slug unless redirect

redirect_to redirect.href
end

private

def preview?
return super if defined?(super)

@preview ||=
if ENV['CONTENTFUL_PREVIEW_PASSWORD'].present?
params[:preview]&.chomp == ENV['CONTENTFUL_PREVIEW_PASSWORD']&.chomp
else
false
end
end

def page_model
WCC::Contentful::Model.resolve_constant('page')
end
Expand Down
Expand Up @@ -72,4 +72,96 @@ class MyPage < WCC::Contentful::Model::Page
get '/not-found'
}.to raise_error(WCC::Contentful::App::PageNotFoundError)
end

it 'uses preview if preview param set' do
page = contentful_create('page', slug: '/test')

expect(MyPage).to receive(:find_by)
.with(slug: '/test', options: { include: 3, preview: true })
.and_return(page)
expect(WCC::Contentful::Model::Redirect).to_not receive(:find_by)

# act
with_preview_password do |pw|
get '/test', params: { preview: pw }
end

expect(assigns(:page)).to eq(page)
end

it 'uses preview in redirect as well' do
redirect = contentful_create('redirect',
slug: '/test',
external_link: 'https://www.google.com')

expect(MyPage).to receive(:find_by)
.with(slug: '/test', options: { include: 3, preview: true })
expect(WCC::Contentful::Model::Redirect).to receive(:find_by)
.with(slug: '/test', options: { include: 0, preview: true })
.and_return(redirect)

# act
with_preview_password do |pw|
get '/test', params: { preview: pw }
end

expect(response).to redirect_to(redirect.external_link)
end

it 'does not use preview when password doesnt match' do
expect(MyPage).to receive(:find_by)
.with(slug: '/test', options: { include: 3, preview: false })
expect(WCC::Contentful::Model::Redirect).to receive(:find_by)
.with(slug: '/test', options: { include: 0, preview: false })

# act
expect {
with_preview_password do |_pw|
get '/test', params: { preview: 'some other password' }
end
}.to raise_error(WCC::Contentful::App::PageNotFoundError)
end

it 'uses application controller defined preview? function' do
allow_any_instance_of(ApplicationController)
.to receive(:preview?)
.and_return(true)

page = contentful_create('page', slug: '/test')
expect(MyPage).to receive(:find_by)
.with(slug: '/test', options: { include: 3, preview: true })
.and_return(page)

# act
get '/test'

expect(assigns(:page)).to eq(page)
end

it 'respects application controller defined preview? function even if preview param set' do
allow_any_instance_of(ApplicationController)
.to receive(:preview?)
.and_return(false)

expect(MyPage).to receive(:find_by)
.with(slug: '/test', options: { include: 3, preview: false })
expect(WCC::Contentful::Model::Redirect).to receive(:find_by)
.with(slug: '/test', options: { include: 0, preview: false })

# act
expect {
with_preview_password do |_pw|
get '/test', params: { preview: 'some other password' }
end
}.to raise_error(WCC::Contentful::App::PageNotFoundError)
end

def with_preview_password
previous = ENV['CONTENTFUL_PREVIEW_PASSWORD']
ENV['CONTENTFUL_PREVIEW_PASSWORD'] = 'topsecret'

yield 'topsecret'
ensure
ENV['CONTENTFUL_PREVIEW_PASSWORD'] = previous
end
end

0 comments on commit 8a6cf07

Please sign in to comment.