63 lines
1.8 KiB
Ruby
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
|