diff --git a/app/controllers/signup/base_controller.rb b/app/controllers/signup/base_controller.rb index e399bcea8..e77f25d7a 100644 --- a/app/controllers/signup/base_controller.rb +++ b/app/controllers/signup/base_controller.rb @@ -1,5 +1,7 @@ module Signup class BaseController < ApplicationController + SIGNUP_TIMEOUT = 2.hours + before_action :load_steps before_action :set_page_title @@ -16,7 +18,7 @@ def is_membership_enabled? private def load_member - if session[:member_id] && session[:timeout] && session[:timeout] > Time.current - 15.minutes + if session[:member_id] && session[:timeout] && session[:timeout] > Time.current @member = Member.find(session[:member_id]) else reset_session diff --git a/app/controllers/signup/members_controller.rb b/app/controllers/signup/members_controller.rb index 02178b572..aa84ddaf2 100644 --- a/app/controllers/signup/members_controller.rb +++ b/app/controllers/signup/members_controller.rb @@ -20,7 +20,7 @@ def create if @member_signup_form.save session[:member_id] = @member_signup_form.member_id - session[:timeout] = Time.current + 15.minutes + session[:timeout] = Time.current + SIGNUP_TIMEOUT redirect_to signup_agreement_url else diff --git a/test/controllers/signup/members_controller_test.rb b/test/controllers/signup/members_controller_test.rb new file mode 100644 index 000000000..ea708c675 --- /dev/null +++ b/test/controllers/signup/members_controller_test.rb @@ -0,0 +1,24 @@ +require "test_helper" + +module Signup + class MembersControllerTest < ActionDispatch::IntegrationTest + include Devise::Test::IntegrationHelpers + + setup do + create(:agreement_document) + end + + test "submits the member form" do + travel_to Time.current do + assert_difference("Member.count", 1) do + post signup_members_url, params: { + member_signup_form: attributes_for(:member, password: "password", password_confirmation: "password") + } + end + + assert_redirected_to signup_agreement_url + assert_equal Time.current + Signup::BaseController::SIGNUP_TIMEOUT, session[:timeout] + end + end + end +end diff --git a/test/controllers/signup/payments_controller_test.rb b/test/controllers/signup/payments_controller_test.rb index 8985d2e81..04d331b7b 100644 --- a/test/controllers/signup/payments_controller_test.rb +++ b/test/controllers/signup/payments_controller_test.rb @@ -109,6 +109,21 @@ class PaymentsControllerTest < ActionDispatch::IntegrationTest assert_mock mock_checkout end + test "failed callback invocation by timing out the session" do + mock_result = Minitest::Mock.new + mock_result.expect :success?, false + mock_result.expect :error, [{code: "ERROR_CODE"}] + + travel_to(session[:timeout] + 1.minute) do + get callback_signup_payments_url, params: {orderId: "abcd1234"} + end + + assert_redirected_to "http://example.com/signup" + + follow_redirect! + assert_select ".toast-error", text: "Your session expired. Please come into the library to complete signup." + end + test "failed callback invocation by not finding a transaction" do mock_result = Minitest::Mock.new mock_result.expect :success?, false