require "test_helper" class ApplicationUserClaimTest < ActiveSupport::TestCase def setup @user = users(:bob) @application = applications(:another_app) end test "should create valid application user claim" do claim = ApplicationUserClaim.new( user: @user, application: @application, custom_claims: {role: "admin"} ) assert claim.valid? assert claim.save end test "should enforce uniqueness of user per application" do ApplicationUserClaim.create!( user: @user, application: @application, custom_claims: {role: "admin"} ) duplicate = ApplicationUserClaim.new( user: @user, application: @application, custom_claims: {role: "user"} ) assert_not duplicate.valid? assert_includes duplicate.errors[:user_id], "has already been taken" end test "parsed_custom_claims returns hash" do claim = ApplicationUserClaim.new( user: @user, application: @application, custom_claims: {role: "admin", level: 5} ) parsed = claim.parsed_custom_claims assert_equal "admin", parsed["role"] assert_equal 5, parsed["level"] end test "parsed_custom_claims returns empty hash when nil" do claim = ApplicationUserClaim.new( user: @user, application: @application, custom_claims: nil ) assert_equal({}, claim.parsed_custom_claims) end test "should not allow reserved OIDC claim names" do claim = ApplicationUserClaim.new( user: @user, application: @application, custom_claims: {groups: ["admin"], role: "user"} ) assert_not claim.valid? assert_includes claim.errors[:custom_claims], "cannot override reserved OIDC claims: groups" end test "should allow non-reserved claim names" do claim = ApplicationUserClaim.new( user: @user, application: @application, custom_claims: {kavita_groups: ["admin"], role: "user"} ) assert claim.valid? end end