multi_tenancy_test.rb
1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
require_relative "../test_helper"
class MultiTenancyTest < ActionDispatch::IntegrationTest
should 'change postgresql schema' do
host! 'schema1.com'
Noosfero::MultiTenancy.expects(:on?).at_least_once.returns(true)
Noosfero::MultiTenancy.expects(:mapping).returns({ 'schema1.com' => 'schema1' }).at_least_once
exception = assert_raise(ActiveRecord::StatementInvalid) { get '/' }
# we have switched to a new database schema; depending on the PostgreSQL
# version, we will receive either an error message because the schema
# does not exist, or an error saying that whatever table we need can't be
# found.
assert_match /(SET search_path TO schema1|PG::UndefinedTable)/, exception.message
end
should 'not change postgresql schema if multitenancy is off' do
host! 'schema1.com'
Noosfero::MultiTenancy.stubs(:on?).returns(false)
Noosfero::MultiTenancy.stubs(:mapping).returns({ 'schema1.com' => 'schema1' })
assert_nothing_raised(ActiveRecord::StatementInvalid) { get '/' }
end
should 'find session from the correct database schema' do
Noosfero::MultiTenancy.expects(:on?).at_least_once.returns(true)
Noosfero::MultiTenancy.expects(:mapping).returns({ 'schema2.com' => 'public', 'schema1.com' => 'schema1' }).at_least_once
user = create_user
session_obj = create(Session, user_id: user.id, session_id: 'some_id', data: {})
person_identifier = user.person.identifier
Noosfero::MultiTenancy.setup!('schema1.com')
host! 'schema2.com'
cookies[:_noosfero_session] = session_obj.session_id
assert_nothing_raised { get "/myprofile/#{person_identifier}" }
assert_equal 'public', ActiveRecord::Base.connection.schema_search_path
end
end