debian-mirror-gitlab/spec/initializers/safe_session_store_patch_spec.rb
2023-05-27 22:25:52 +05:30

63 lines
1.8 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'safe_sesion_store_patch', feature_category: :integrations do
shared_examples 'safe session store' do
it 'allows storing a String' do
session[:good_data] = 'hello world'
expect(session[:good_data]).to eq('hello world')
end
it 'raises error when session attempts to store an unsafe object' do
expect { session[:test] = Struct.new(:test) }
.to raise_error(/Serializing novel Ruby objects can cause uninitialized constants in mixed deployments/)
end
it 'allows instance double of OneLogin::RubySaml::Response' do
response_double = instance_double(OneLogin::RubySaml::Response)
session[:response_double] = response_double
expect(session[:response_double]).to eq(response_double)
end
it 'raises an error for instance double of REXML::Document' do
response_double = instance_double(REXML::Document)
expect { session[:response_double] = response_double }
.to raise_error(/Serializing novel Ruby objects can cause uninitialized constants in mixed deployments/)
end
end
context 'with ActionController::TestSession' do
let(:session) { ActionController::TestSession.new }
it_behaves_like 'safe session store'
end
context 'with ActionDispatch::Request::Session' do
let(:dummy_store) do
Class.new do
def load_session(_env)
[1, {}]
end
def session_exists?(_env)
true
end
def delete_session(_env, _id, _options)
123
end
end.new
end
let(:request) { ActionDispatch::Request.new({}) }
let(:session) { ActionDispatch::Request::Session.create(dummy_store, request, {}) }
it_behaves_like 'safe session store'
end
end