This way it will be possible to write CSS and JavaScript code that will only apply to specific tenants. Note that CSS customization is still limited because it isn't possible to use different SCSS variables per tenant.
160 lines
4.6 KiB
Ruby
160 lines
4.6 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Multitenancy" do
|
|
before do
|
|
create(:tenant, schema: "mars")
|
|
create(:tenant, schema: "venus")
|
|
end
|
|
|
|
scenario "Disabled features", :no_js do
|
|
Tenant.switch("mars") { Setting["process.debates"] = true }
|
|
Tenant.switch("venus") { Setting["process.debates"] = nil }
|
|
|
|
with_subdomain("mars") do
|
|
visit debates_path
|
|
|
|
expect(page).to have_css "#debates"
|
|
end
|
|
|
|
with_subdomain("venus") do
|
|
expect { visit debates_path }.to raise_exception(FeatureFlags::FeatureDisabled)
|
|
end
|
|
end
|
|
|
|
scenario "Content is different for differents tenants" do
|
|
Tenant.switch("mars") { create(:poll, name: "Human rights for Martians?") }
|
|
|
|
with_subdomain("mars") do
|
|
visit polls_path
|
|
|
|
expect(page).to have_content "Human rights for Martians?"
|
|
expect(page).to have_css "html.tenant-mars"
|
|
expect(page).not_to have_css "html.tenant-venus"
|
|
end
|
|
|
|
with_subdomain("venus") do
|
|
visit polls_path
|
|
|
|
expect(page).to have_content "There are no open votings"
|
|
expect(page).to have_css "html.tenant-venus"
|
|
expect(page).not_to have_css "html.tenant-mars"
|
|
end
|
|
end
|
|
|
|
scenario "PostgreSQL extensions work for tenants" do
|
|
Tenant.switch("mars") { login_as(create(:user)) }
|
|
|
|
with_subdomain("mars") do
|
|
visit new_proposal_path
|
|
fill_in "Proposal title", with: "Use the unaccent extension in Mars"
|
|
fill_in "Proposal summary", with: "tsvector for María the Martian"
|
|
check "I agree to the Privacy Policy and the Terms and conditions of use"
|
|
|
|
click_button "Create proposal"
|
|
|
|
expect(page).to have_content "Proposal created successfully."
|
|
|
|
click_link "No, I want to publish the proposal"
|
|
|
|
expect(page).to have_content "You've created a proposal!"
|
|
|
|
visit proposals_path
|
|
click_button "Advanced search"
|
|
fill_in "With the text", with: "Maria the Martian"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content "Search results"
|
|
expect(page).to have_content "María the Martian"
|
|
end
|
|
end
|
|
|
|
scenario "Creating content in one tenant doesn't affect other tenants" do
|
|
Tenant.switch("mars") { login_as(create(:user)) }
|
|
|
|
with_subdomain("mars") do
|
|
visit new_debate_path
|
|
fill_in "Debate title", with: "Found any water here?"
|
|
fill_in_ckeditor "Initial debate text", with: "Found any water here?"
|
|
check "I agree to the Privacy Policy and the Terms and conditions of use"
|
|
|
|
click_button "Start a debate"
|
|
|
|
expect(page).to have_content "Debate created successfully."
|
|
expect(page).to have_content "Found any water here?"
|
|
end
|
|
|
|
with_subdomain("venus") do
|
|
visit debates_path
|
|
|
|
expect(page).to have_content "Sign in"
|
|
expect(page).not_to have_css ".debate"
|
|
|
|
visit new_debate_path
|
|
|
|
expect(page).to have_content "You must sign in or register to continue."
|
|
end
|
|
end
|
|
|
|
scenario "Users from another tenant cannot vote" do
|
|
Tenant.switch("mars") { create(:proposal, title: "Earth invasion") }
|
|
Tenant.switch("venus") { login_as(create(:user)) }
|
|
|
|
with_subdomain("venus") do
|
|
visit proposals_path
|
|
|
|
expect(page).to have_content "Sign out"
|
|
expect(page).not_to have_content "Earth invasion"
|
|
end
|
|
|
|
with_subdomain("mars") do
|
|
visit proposals_path
|
|
|
|
within(".proposal", text: "Earth invasion") do
|
|
click_button "Support"
|
|
|
|
expect(page).to have_content "You must sign in or sign up to continue"
|
|
end
|
|
end
|
|
end
|
|
|
|
scenario "Sign up into subdomain" do
|
|
with_subdomain("mars") do
|
|
visit "/"
|
|
click_link "Register"
|
|
|
|
fill_in "Username", with: "Marty McMartian"
|
|
fill_in "Email", with: "marty@consul.dev"
|
|
fill_in "Password", with: "20151021"
|
|
fill_in "Confirm password", with: "20151021"
|
|
check "By registering you accept the terms and conditions of use"
|
|
click_button "Register"
|
|
|
|
confirm_email
|
|
|
|
expect(page).to have_content "Your account has been confirmed."
|
|
end
|
|
end
|
|
|
|
scenario "Users from another tenant can't sign in" do
|
|
Tenant.switch("mars") { create(:user, email: "marty@consul.dev", password: "20151021") }
|
|
|
|
with_subdomain("mars") do
|
|
visit new_user_session_path
|
|
fill_in "Email or username", with: "marty@consul.dev"
|
|
fill_in "Password", with: "20151021"
|
|
click_button "Enter"
|
|
|
|
expect(page).to have_content "You have been signed in successfully."
|
|
end
|
|
|
|
with_subdomain("venus") do
|
|
visit new_user_session_path
|
|
fill_in "Email or username", with: "marty@consul.dev"
|
|
fill_in "Password", with: "20151021"
|
|
click_button "Enter"
|
|
|
|
expect(page).to have_content "Invalid Email or username or password."
|
|
end
|
|
end
|
|
end
|