private async Task <List <Claim> > TransformClaims(BankIdClaimsTransformationContext context)
        {
            var claimsTransformer = new BankIdDefaultClaimsTransformer(new SystemClock());

            await claimsTransformer.TransformClaims(context);

            return(context.Claims);
        }
        public async Task Should_Add_PIN_As_swedish_personal_identity_number_Claim()
        {
            // Arrange
            var bankIdOptions = new BankIdOptions();
            var context       = new BankIdClaimsTransformationContext(bankIdOptions, "", "381123-9106", "", "", "");

            // Act
            var claims = await TransformClaims(context);

            // Assert
            AssertClaim(claims, "swedish_personal_identity_number", "381123-9106");
        }
        public async Task Should_Add_PIN_As_Sub_Claim()
        {
            // Arrange
            var bankIdOptions = new BankIdOptions();
            var context       = new BankIdClaimsTransformationContext(bankIdOptions, "", "381123-9106", "", "", "");

            // Act
            var claims = await TransformClaims(context);

            // Assert
            AssertClaim(claims, "sub", "193811239106");
        }
        public async Task Should_Add_Names_As_Name_Claims()
        {
            // Arrange
            var bankIdOptions = new BankIdOptions();
            var context       = new BankIdClaimsTransformationContext(bankIdOptions, "", "381123-9106", "NAME", "GIVEN_NAME", "FAMILY_NAME");

            // Act
            var claims = await TransformClaims(context);

            // Assert
            AssertClaim(claims, "name", "NAME");
            AssertClaim(claims, "given_name", "GIVEN_NAME");
            AssertClaim(claims, "family_name", "FAMILY_NAME");
        }
        public async Task Should_Add_AuthenticationMethod_As_amr_Claim()
        {
            // Arrange
            var bankIdOptions = new BankIdOptions
            {
                IssueAuthenticationMethodClaim = true,
                AuthenticationMethodName       = "AUTH_METHOD"
            };

            var context = new BankIdClaimsTransformationContext(bankIdOptions, "", "381123-9106", "", "", "");

            // Act
            var claims = await TransformClaims(context);

            // Assert
            AssertClaim(claims, "amr", "AUTH_METHOD");
        }
        public async Task Should_Not_Should_Add_IdentityProvider_As_idp_Claim_When_Disabled()
        {
            // Arrange
            var bankIdOptions = new BankIdOptions
            {
                IssueIdentityProviderClaim = false,
                IdentityProviderName       = "IDENTITY_PROVIDER"
            };

            var context = new BankIdClaimsTransformationContext(bankIdOptions, "", "381123-9106", "", "", "");

            // Act
            var claims = await TransformClaims(context);

            // Assert
            AssertNoClaim(claims, "idp");
        }
        private async Task <IEnumerable <Claim> > GetClaims(BankIdLoginResult loginResult)
        {
            var context = new BankIdClaimsTransformationContext(
                Options,
                loginResult.BankIdOrderRef,
                loginResult.PersonalIdentityNumber,
                loginResult.Name,
                loginResult.GivenName,
                loginResult.Surname
                );

            foreach (var transformer in _bankIdClaimsTransformers)
            {
                await transformer.TransformClaims(context);
            }

            return(context.Claims);
        }
        public async Task Should_Add_TokenExpiresIn_As_exp_Claim()
        {
            // Arrange
            var bankIdOptions = new BankIdOptions();

            bankIdOptions.TokenExpiresIn = TimeSpan.FromHours(2);

            var context         = new BankIdClaimsTransformationContext(bankIdOptions, "", "381123-9106", "", "", "");
            var systemClockMock = new Mock <ISystemClock>();
            var dateTime        = new DateTime(2022, 03, 11, 05, 30, 30, DateTimeKind.Utc);

            systemClockMock.Setup(x => x.UtcNow).Returns(dateTime);
            var claimsTransformer = new BankIdDefaultClaimsTransformer(systemClockMock.Object);

            // Act
            await claimsTransformer.TransformClaims(context);

            var claims = context.Claims;

            // Assert
            AssertClaim(claims, "exp", "1646983830");
        }