public void Should_have_1_expecation_when_expecations_have_same_instance_for_has_and_does_not_have()
        {
            // Arrange
            var expectation1 = new HasInstanceExpectation(new RequireAnyRolePolicy("Editor"));
            var expectation2 = new DoesNotHaveInstanceExpectation(new RequireAnyRolePolicy("Editor"));

            // Act
            _expectationGroup.ApplyExpectation(expectation1);
            _expectationGroup.ApplyExpectation(expectation2);

            // Assert
            Assert.That(_expectationGroup.Expectations.Count(), Is.EqualTo(1));
        }
        private void HandleHasInstanceExpectation(HasInstanceExpectation expectation)
        {
            var doesNotHaveInstanceExpectations = _expectations.Where(x => x is DoesNotHaveInstanceExpectation).Cast<DoesNotHaveInstanceExpectation>().Where(x => x.Instance.Equals(expectation.Instance));
            for (var i = 0; i < doesNotHaveInstanceExpectations.Count(); i++)
            {
                var doesNotHaveInstanceExpectation = doesNotHaveInstanceExpectations.ElementAt(i);
                _expectations.Remove(doesNotHaveInstanceExpectation);
            }

            var hasInstanceExpectations = _expectations.Where(x => x is HasInstanceExpectation).Cast<HasInstanceExpectation>();
            if (hasInstanceExpectations.Any(x => x.Instance.Equals(expectation.Instance))) return;

            _expectations.Add(expectation);
        }
        public void Should_have_2_expecation_when_expecations_have_different_instances_for_HasInstanceExpectation()
        {
            // Arrange
            var expectation1 = new HasInstanceExpectation(new RequireAnyRolePolicy("Editor"));
            var expectation2 = new HasInstanceExpectation(new RequireAnyRolePolicy("Editor", "Writer"));

            // Act
            _expectationGroup.ApplyExpectation(expectation1);
            _expectationGroup.ApplyExpectation(expectation2);

            // Assert
            Assert.That(_expectationGroup.Expectations.Count(), Is.EqualTo(2));
        }
        private ExpectationResult VerifyHasInstance(IPolicyContainer policyContainer, HasInstanceExpectation expectation, string controllerName, string actionName)
        {
            if (expectation == null) return null;
            if (policyContainer == null)
            {
                const string messageFormat = "Expected a configuration for controller \"{0}\", action \"{1}\". Policycontainer could not be found!";
                var message = string.Format(messageFormat, controllerName, actionName);
                return _expectationViolationHandler.Handle(message);
            }

            if (policyContainer.HasPolicy(expectation.Instance) == false)
            {
                const string messageFormat = "The expected instance of the policy \"{2}\" was not found! Controller \"{0}\", action \"{1}\".";
                var expectedPolicyType = expectation.Instance.GetType().Name;
                var message = string.Format(messageFormat, policyContainer.ControllerName, policyContainer.ActionName, expectedPolicyType);
                return _expectationViolationHandler.Handle(message);
            }
            return ExpectationResult.CreateSuccessResult();
        }