static ISpecificationsRepository CreateSpecificationsRepository(bool hasPolicy = false, bool parentPolicyExists = true)
        {
            ISpecificationsRepository repository = Substitute.For <ISpecificationsRepository>();

            repository
            .GetPolicyBySpecificationIdAndPolicyName(Arg.Is(specificationId), Arg.Is(name))
            .Returns(hasPolicy ? new Policy() : null);

            repository
            .GetPolicyBySpecificationIdAndPolicyId(Arg.Is(specificationId), Arg.Is(parentPolicyId))
            .Returns(parentPolicyExists ? new Policy() : null);

            return(repository);
        }
Esempio n. 2
0
        public PolicyEditModelValidator(ISpecificationsRepository specificationsRepository)
        {
            _specificationsRepository = specificationsRepository;

            RuleFor(model => model.Description)
            .NotEmpty()
            .WithMessage("You must give a description for the policy");

            RuleFor(model => model.SpecificationId)
            .NotEmpty()
            .WithMessage("Null or empty specification id provided");

            RuleFor(model => model.ParentPolicyId)
            .Custom((name, context) =>
            {
                PolicyEditModel model = context.ParentContext.InstanceToValidate as PolicyEditModel;
                if (!string.IsNullOrEmpty(model.ParentPolicyId))
                {
                    Policy policy = _specificationsRepository.GetPolicyBySpecificationIdAndPolicyId(model.SpecificationId, model.ParentPolicyId).Result;

                    if (policy == null)
                    {
                        context.AddFailure($"The parent policy does not exist");
                    }
                }
            });

            RuleFor(model => model.Name)
            .NotEmpty()
            .WithMessage("You must give a unique policy name")
            .Custom((name, context) => {
                PolicyEditModel model = context.ParentContext.InstanceToValidate as PolicyEditModel;

                if (string.IsNullOrWhiteSpace(model.PolicyId))
                {
                    context.AddFailure("Policy ID not specified on the model");
                    return;
                }

                if (!string.IsNullOrEmpty(model.SpecificationId))
                {
                    Policy policy = _specificationsRepository.GetPolicyBySpecificationIdAndPolicyName(model.SpecificationId, model.Name).Result;

                    if (policy != null && policy.Id != model.PolicyId)
                    {
                        context.AddFailure($"You must give a unique policy name");
                    }
                }
            });
        }