diff --git a/spec/controllers/concerns/web_app_controller_concern_spec.rb b/spec/controllers/concerns/web_app_controller_concern_spec.rb new file mode 100644 index 000000000..2e7c20a0f --- /dev/null +++ b/spec/controllers/concerns/web_app_controller_concern_spec.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe WebAppControllerConcern do + render_views + + controller(ApplicationController) do + include WebAppControllerConcern # rubocop:disable RSpec/DescribedClass + + def show + render plain: 'show' + end + end + + before do + routes.draw { get 'show' => 'anonymous#show' } + end + + describe 'when signed in' do + let(:user) { Fabricate(:user) } + + before { sign_in(user) } + + context 'when user does not require TOS interstitial' do + before { user.update(require_tos_interstitial: false) } + + it 'renders requested page as expected' do + get :show + + expect(response) + .to have_http_status(:success) + expect(response.body) + .to match(/show/) + end + end + + context 'when user does require TOS interstitial' do + before { user.update(require_tos_interstitial: true) } + + context 'when there is no TOS record' do + before { TermsOfService.destroy_all } + + it 'renders requested page as expected' do + get :show + + expect(response) + .to have_http_status(:success) + expect(response.body) + .to match(/show/) + end + end + + context 'when there is a TOS record' do + before { Fabricate :terms_of_service, published_at: 1.day.ago } + + it 'renders interstitial page instead of expected content' do + get :show + + expect(response) + .to have_http_status(:success) + expect(response.body) + .to match(I18n.t('terms_of_service_interstitial.title', domain: local_domain_uri.host)) + end + end + end + end +end