public void TestThatEvaluateThrowsFaultExceptionWhenExceptionOccurs()
        {
            var fixture = new Fixture();
            var authorizationHandlerMock = MockRepository.GenerateMock <IAuthorizationHandler>();

            var claimsPrincipalBuilderAuthorizationPolicy = new ClaimsPrincipalBuilderAuthorizationPolicy(authorizationHandlerMock);

            Assert.That(claimsPrincipalBuilderAuthorizationPolicy, Is.Not.Null);

            var error = fixture.Create <Exception>();
            var evaluationContextStub = MockRepository.GenerateStub <EvaluationContext>();

            evaluationContextStub.Stub(m => m.Properties)
            .Return(new Dictionary <string, object>(0))
            .Repeat.Any();
            evaluationContextStub.Stub(m => m.ClaimSets)
            .Throw(error)
            .Repeat.Any();
            var state = CreateLegalState();

            var exception = Assert.Throws <FaultException>(() => claimsPrincipalBuilderAuthorizationPolicy.Evaluate(evaluationContextStub, ref state));

            Assert.That(exception, Is.Not.Null);
            Assert.That(exception.Message, Is.Not.Null);
            Assert.That(exception.Message, Is.Not.Empty);
            Assert.That(exception.Message, Is.EqualTo(Resource.GetExceptionMessage(ExceptionMessage.NotAuthorizedToUseService, error.Message)));
            Assert.That(exception.Reason, Is.Not.Null);
            Assert.That(exception.Reason.ToString(), Is.Not.Null);
            Assert.That(exception.Reason.ToString(), Is.Not.Empty);
            Assert.That(exception.Reason.ToString(), Is.EqualTo(Resource.GetExceptionMessage(ExceptionMessage.NotAuthorizedToUseService, error.Message)));
            Assert.That(exception.InnerException, Is.Null);
        }
        public void TestThatEvaluateSetsPrincipalWithClaimIdentityWithoutClaimsInPropertiesOnEvaluationContextWhenClaimSetsInEvaluationContextIsNull()
        {
            var authorizationHandlerMock = MockRepository.GenerateMock <IAuthorizationHandler>();

            var claimsPrincipalBuilderAuthorizationPolicy = new ClaimsPrincipalBuilderAuthorizationPolicy(authorizationHandlerMock);

            Assert.That(claimsPrincipalBuilderAuthorizationPolicy, Is.Not.Null);

            var properties            = new Dictionary <string, object>(0);
            var evaluationContextStub = MockRepository.GenerateStub <EvaluationContext>();

            evaluationContextStub.Stub(m => m.Properties)
            .Return(properties)
            .Repeat.Any();
            evaluationContextStub.Stub(m => m.ClaimSets)
            .Return(null)
            .Repeat.Any();
            var state = CreateLegalState();

            claimsPrincipalBuilderAuthorizationPolicy.Evaluate(evaluationContextStub, ref state);

            var claimPrincipal = (ClaimsPrincipal)properties["Principal"];

            Assert.That(claimPrincipal, Is.Not.Null);
            Assert.That(claimPrincipal.Identity, Is.Not.Null);
            Assert.That(claimPrincipal.Identity, Is.TypeOf <ClaimsIdentity>());
            Assert.That(claimPrincipal.Identities, Is.Not.Null);
            Assert.That(claimPrincipal.Identities, Is.Not.Empty);
            Assert.That(claimPrincipal.Identities.Count, Is.EqualTo(1));
            Assert.That(claimPrincipal.Identities.ElementAt(0), Is.Not.Null);
            Assert.That(claimPrincipal.Identities.ElementAt(0).Claims, Is.Not.Null);
            Assert.That(claimPrincipal.Identities.ElementAt(0).Claims, Is.Empty);
        }
        public void TestThatEvaluateReturnsTrueWhenClaimSetsInEvaluationContextIsNotNull()
        {
            var authorizationHandlerMock = MockRepository.GenerateMock <IAuthorizationHandler>();

            authorizationHandlerMock.Stub(m => m.GetTrustedClaimSets(Arg <IEnumerable <ClaimSet> > .Is.NotNull))
            .Return(new List <ClaimSet>(0))
            .Repeat.Any();

            var claimsPrincipalBuilderAuthorizationPolicy = new ClaimsPrincipalBuilderAuthorizationPolicy(authorizationHandlerMock);

            Assert.That(claimsPrincipalBuilderAuthorizationPolicy, Is.Not.Null);

            var evaluationContextStub = MockRepository.GenerateStub <EvaluationContext>();

            evaluationContextStub.Stub(m => m.Properties)
            .Return(new Dictionary <string, object>(0))
            .Repeat.Any();
            evaluationContextStub.Stub(m => m.ClaimSets)
            .Return(new ReadOnlyCollection <ClaimSet>(new List <ClaimSet>(0)))
            .Repeat.Any();
            var state = CreateLegalState();

            var result = claimsPrincipalBuilderAuthorizationPolicy.Evaluate(evaluationContextStub, ref state);

            Assert.That(result, Is.True);
        }
        public void TestThatEvaluateReturnsFalseWhenPropertiesOnEvaluationContextContainsPrincipalWhichAreNotClaimsPrincipal()
        {
            var fixture = new Fixture();
            var authorizationHandlerMock = MockRepository.GenerateMock <IAuthorizationHandler>();

            var claimsPrincipalBuilderAuthorizationPolicy = new ClaimsPrincipalBuilderAuthorizationPolicy(authorizationHandlerMock);

            Assert.That(claimsPrincipalBuilderAuthorizationPolicy, Is.Not.Null);

            var properties = new Dictionary <string, object>
            {
                { "Principal", fixture.Create <object>() }
            };
            var evaluationContextStub = MockRepository.GenerateStub <EvaluationContext>();

            evaluationContextStub.Stub(m => m.Properties)
            .Return(properties)
            .Repeat.Any();
            evaluationContextStub.Stub(m => m.ClaimSets)
            .Return(null)
            .Repeat.Any();
            var state = CreateLegalState();

            var result = claimsPrincipalBuilderAuthorizationPolicy.Evaluate(evaluationContextStub, ref state);

            Assert.That(result, Is.False);
        }
        public void TestThatConstructorInitializeClaimsPrincipalBuilderAuthorizationPolicy()
        {
            var claimsPrincipalBuilderAuthorizationPolicy = new ClaimsPrincipalBuilderAuthorizationPolicy();

            Assert.That(claimsPrincipalBuilderAuthorizationPolicy, Is.Not.Null);
            Assert.That(claimsPrincipalBuilderAuthorizationPolicy.Id, Is.Not.Null);
            Assert.That(claimsPrincipalBuilderAuthorizationPolicy.Id, Is.Not.Empty);
            Assert.That(claimsPrincipalBuilderAuthorizationPolicy.Issuer, Is.Not.Null);
            Assert.That(claimsPrincipalBuilderAuthorizationPolicy.Issuer, Is.EqualTo(ClaimSet.System));
        }
        public void TestThatIdGetterReturnsGuid()
        {
            var authorizationHandlerMock = MockRepository.GenerateMock <IAuthorizationHandler>();

            var claimsPrincipalBuilderAuthorizationPolicy = new ClaimsPrincipalBuilderAuthorizationPolicy(authorizationHandlerMock);

            Assert.That(claimsPrincipalBuilderAuthorizationPolicy, Is.Not.Null);

            var guid = Guid.Parse(claimsPrincipalBuilderAuthorizationPolicy.Id);

            Assert.That(guid, Is.Not.Null);
            Assert.That(guid, Is.Not.EqualTo(Guid.Empty));
        }
        public void TestThatEvaluateSetsPrincipalWithClaimIdentityWithTrustedClaimSetsInPropertiesOnEvaluationContextWhenClaimSetsInEvaluationContextIsNotNull(string certificateSubjectName)
        {
            var certificateClaimSet = new X509CertificateClaimSet(TestHelper.GetCertificate(certificateSubjectName));

            var authorizationHandlerMock = MockRepository.GenerateMock <IAuthorizationHandler>();

            authorizationHandlerMock.Stub(m => m.GetTrustedClaimSets(Arg <IEnumerable <ClaimSet> > .Is.NotNull))
            .Return(new List <ClaimSet> {
                certificateClaimSet
            })
            .Repeat.Any();

            var claimsPrincipalBuilderAuthorizationPolicy = new ClaimsPrincipalBuilderAuthorizationPolicy(authorizationHandlerMock);

            Assert.That(claimsPrincipalBuilderAuthorizationPolicy, Is.Not.Null);

            var properties            = new Dictionary <string, object>(0);
            var evaluationContextStub = MockRepository.GenerateStub <EvaluationContext>();

            evaluationContextStub.Stub(m => m.Properties)
            .Return(properties)
            .Repeat.Any();
            evaluationContextStub.Stub(m => m.ClaimSets)
            .Return(new ReadOnlyCollection <ClaimSet>(new List <ClaimSet> {
                MockRepository.GenerateStub <ClaimSet>()
            }))
            .Repeat.Any();
            var state = CreateLegalState();

            claimsPrincipalBuilderAuthorizationPolicy.Evaluate(evaluationContextStub, ref state);

            var claimPrincipal = (ClaimsPrincipal)properties["Principal"];

            Assert.That(claimPrincipal, Is.Not.Null);
            Assert.That(claimPrincipal.Identity, Is.Not.Null);
            Assert.That(claimPrincipal.Identity, Is.TypeOf <ClaimsIdentity>());
            Assert.That(claimPrincipal.Identities, Is.Not.Null);
            Assert.That(claimPrincipal.Identities, Is.Not.Empty);
            Assert.That(claimPrincipal.Identities.Count, Is.EqualTo(1));
            Assert.That(claimPrincipal.Identities.ElementAt(0), Is.Not.Null);
            Assert.That(claimPrincipal.Identities.ElementAt(0).Claims, Is.Not.Null);
            Assert.That(claimPrincipal.Identities.ElementAt(0).Claims, Is.Not.Empty);
            Assert.That(claimPrincipal.Identities.ElementAt(0).Claims.Count, Is.EqualTo(certificateClaimSet.Count(claim => string.Compare(claim.Right, Rights.PossessProperty, StringComparison.Ordinal) == 0)));
        }
        public void TestThatEvaluateThrowsArgumentNullExceptionWhenEvaluationContextIsNull()
        {
            var authorizationHandlerMock = MockRepository.GenerateMock <IAuthorizationHandler>();

            var claimsPrincipalBuilderAuthorizationPolicy = new ClaimsPrincipalBuilderAuthorizationPolicy(authorizationHandlerMock);

            Assert.That(claimsPrincipalBuilderAuthorizationPolicy, Is.Not.Null);

            var state = CreateLegalState();

            // ReSharper disable AssignNullToNotNullAttribute
            var exception = Assert.Throws <ArgumentNullException>(() => claimsPrincipalBuilderAuthorizationPolicy.Evaluate(null, ref state));

            // ReSharper restore AssignNullToNotNullAttribute
            Assert.That(exception, Is.Not.Null);
            Assert.That(exception.ParamName, Is.Not.Null);
            Assert.That(exception.ParamName, Is.Not.Empty);
            Assert.That(exception.ParamName, Is.EqualTo("evaluationContext"));
            Assert.That(exception.InnerException, Is.Null);
        }
        public void TestThatEvaluateSetsPrincipalInPropertiesOnEvaluationContextWhenClaimSetsInEvaluationContextIsNull()
        {
            var authorizationHandlerMock = MockRepository.GenerateMock <IAuthorizationHandler>();

            var claimsPrincipalBuilderAuthorizationPolicy = new ClaimsPrincipalBuilderAuthorizationPolicy(authorizationHandlerMock);

            Assert.That(claimsPrincipalBuilderAuthorizationPolicy, Is.Not.Null);

            var evaluationContextStub = MockRepository.GenerateStub <EvaluationContext>();

            evaluationContextStub.Stub(m => m.Properties)
            .Return(new Dictionary <string, object>(0))
            .Repeat.Any();
            evaluationContextStub.Stub(m => m.ClaimSets)
            .Return(null)
            .Repeat.Any();
            var state = CreateLegalState();

            claimsPrincipalBuilderAuthorizationPolicy.Evaluate(evaluationContextStub, ref state);

            evaluationContextStub.AssertWasCalled(m => m.Properties[Arg <string> .Is.Equal("Principal")] = Arg <ClaimsPrincipal> .Is.TypeOf);
        }
        public void TestThatEvaluateDoesNotCallGetTrustedClaimSetsOnAuthorizationHandlerWhenClaimSetsInEvaluationContextIsNull()
        {
            var authorizationHandlerMock = MockRepository.GenerateMock <IAuthorizationHandler>();

            var claimsPrincipalBuilderAuthorizationPolicy = new ClaimsPrincipalBuilderAuthorizationPolicy(authorizationHandlerMock);

            Assert.That(claimsPrincipalBuilderAuthorizationPolicy, Is.Not.Null);

            var evaluationContextStub = MockRepository.GenerateStub <EvaluationContext>();

            evaluationContextStub.Stub(m => m.Properties)
            .Return(new Dictionary <string, object>(0))
            .Repeat.Any();
            evaluationContextStub.Stub(m => m.ClaimSets)
            .Return(null)
            .Repeat.Any();
            var state = CreateLegalState();

            claimsPrincipalBuilderAuthorizationPolicy.Evaluate(evaluationContextStub, ref state);

            authorizationHandlerMock.AssertWasNotCalled(m => m.GetTrustedClaimSets(Arg <IEnumerable <ClaimSet> > .Is.Anything));
        }
        public void TestThatEvaluateAddsPrincipalToPropertiesOnEvaluationContextWhenPropertiesDoesNotContainsPrincipal()
        {
            var authorizationHandlerMock = MockRepository.GenerateMock <IAuthorizationHandler>();

            var claimsPrincipalBuilderAuthorizationPolicy = new ClaimsPrincipalBuilderAuthorizationPolicy(authorizationHandlerMock);

            Assert.That(claimsPrincipalBuilderAuthorizationPolicy, Is.Not.Null);

            var properties            = new Dictionary <string, object>(0);
            var evaluationContextStub = MockRepository.GenerateStub <EvaluationContext>();

            evaluationContextStub.Stub(m => m.Properties)
            .Return(properties)
            .Repeat.Any();
            evaluationContextStub.Stub(m => m.ClaimSets)
            .Return(null)
            .Repeat.Any();
            var state = CreateLegalState();

            Assert.That(properties.ContainsKey("Principal"), Is.False);
            claimsPrincipalBuilderAuthorizationPolicy.Evaluate(evaluationContextStub, ref state);
            Assert.That(properties.ContainsKey("Principal"), Is.True);
        }