3399e45130
- New untenanted Identity and Membership models - New `identity_token` cookie with path "/" holds state across tenants We're not sure whether the untenanted database will be sqlite or MySQL, and so I've been careful to minimize - database reads, placing them behind etags and caching - database writes, only writing when a new Session is created (login) Note that we track two things in the identity_token cookie: a signed id, and the updated_at for the underlying Identity object. This allows us to effectively cache on the Identity without having to hit the database, by using an Identity::Mock object that is compatible with etag and cache methods. The new integration test shows the desired user-facing behavior, which is to make it easy to login without a tenanted URL and to jump between tenants. - the untenanted "login_help" page shows all linked memberships - the jump menu shows all linked memberships (except the current) Also introduced a utility script to populate existing employee Identities, grouping accounts by email address.
38 lines
1.6 KiB
Ruby
38 lines
1.6 KiB
Ruby
require "test_helper"
|
|
|
|
class IdentityMembershipTest < ActionDispatch::IntegrationTest
|
|
setup do
|
|
@tenants = [ ActiveRecord::FixtureSet.identify("identity-tenant-1"),
|
|
ActiveRecord::FixtureSet.identify("identity-tenant-2") ]
|
|
@tenant_paths = @tenants.map { "/#{_1}" }
|
|
@tenant_urls = @tenant_paths.map { root_url(script_name: _1) }
|
|
@user_params = { email_address: "user@example.com", password: "password1234" }
|
|
@users = @tenants.map do |tenant|
|
|
ApplicationRecord.create_tenant(tenant) do
|
|
Account.create! name: "Account for #{tenant}"
|
|
User.create! @user_params.merge(name: "Harold Hancox")
|
|
end
|
|
end
|
|
end
|
|
|
|
test "multiple signins on the same browser" do
|
|
post session_path(script_name: @tenant_paths[0], params: @user_params)
|
|
assert_redirected_to root_path(script_name: @tenant_paths[0])
|
|
|
|
post session_path(script_name: @tenant_paths[1], params: @user_params)
|
|
assert_redirected_to root_path(script_name: @tenant_paths[1])
|
|
|
|
# Render links for other Fizzies in the jump menu
|
|
get my_menu_path(script_name: @tenant_paths[0])
|
|
assert_select "#my_menu ul li a[href='#{@tenant_urls[1]}']", "Account for #{@tenants[1]}"
|
|
|
|
get my_menu_path(script_name: @tenant_paths[1])
|
|
assert_select "#my_menu ul li a[href='#{@tenant_urls[0]}']", "Account for #{@tenants[0]}"
|
|
|
|
# Render links for all the identity's Fizzies
|
|
get root_path(script_name: nil)
|
|
assert_select "ul li a[href='#{@tenant_urls[0]}']", "Account for #{@tenants[0]}"
|
|
assert_select "ul li a[href='#{@tenant_urls[1]}']", "Account for #{@tenants[1]}"
|
|
end
|
|
end
|