public ConfirmPurchaseRequestValidationTests()
        {
            this.protocolSettings = ProtocolSettings.CreateEmpty();
            this.validator        = new LikePharmaValidator(protocolSettings);

            validValue = new ConfirmPurchaseRequest
            {
                PosId        = "A12BC",
                CardNumber   = "1234567890123",
                Transactions = new List <string>()
                {
                    "abc123", "abcd1234"
                },
            };
        }
        /// <summary>
        /// Создает пустой класс ответа, устанавливая поля ErrorCode и Message в указанные значения.
        /// </summary>
        /// <param name="request">Запрос.</param>
        /// <param name="errorCode">Значение для поля <see cref="ResponseBase.ErrorCode"/>.</param>
        /// <param name="message">Значение для поля <see cref="ResponseBase.Message"/>.</param>
        /// <returns>Ответ с установленными полями <see cref="ResponseBase.Status"/>, <see cref="ResponseBase.ErrorCode"/>, <see cref="ResponseBase.Message"/>.</returns>
        /// <remarks>Если передать значение 0 для <paramref name="errorCode"/>, то будет создан "успешный" ответ, иначе "ошибочный".</remarks>
        public static ConfirmPurchaseResponse CreateEmptyResponse(
            this ConfirmPurchaseRequest request,
            int errorCode,
            string message)
        {
            request = request ?? throw new ArgumentNullException(nameof(request));

            if (string.IsNullOrEmpty(message))
            {
                throw new ArgumentNullException(nameof(message));
            }

            return(new ConfirmPurchaseResponse
            {
                Status = errorCode == 0 ? Globals.StatusSuccess : Globals.StatusError,
                ErrorCode = errorCode,
                Message = message,
            });
        }
Exemplo n.º 3
0
        /// <summary>
        /// Выполняет валидацию объекта с учётом вложенных коллекций (Orders, Products, ...), используя <see cref="ProtocolSettings">параметры протокола</see>, заданные в конструкторе.
        /// </summary>
        /// <param name="instance">Экземпляр объекта для проверки.</param>
        /// <param name="results">Список, который необходимо заполнить ошибками (если они будут найдены).</param>
        /// <returns>Результат валидации: <b>true</b> в случае успешной валидации или <b>false</b> если были обнаружены ошибки.</returns>
        public bool TryValidateObject(object instance, out List <ValidationResult> results)
        {
            if (instance == null)
            {
                throw new ArgumentNullException(nameof(instance));
            }

            var psp = new ProtocolSettingsServiceProvider(protocolSettings);

            var vc = new ValidationContext(instance, psp, null);

            results = new List <ValidationResult>();

            var isValid = Validator.TryValidateObject(instance, vc, results, true);

            IEnumerable <object>?children = instance switch
            {
                GetDiscountRequest gdr => gdr.Orders,
                GetDiscountResponse gdr => gdr.Orders,
                ConfirmPurchaseRequest cpr => cpr.Skus,
                GetProgramsResponse gpr => gpr.Programs,
                GetProductsResponse gpr => gpr.Products,
                UpdatePharmaciesRequest upr => upr.Pharmacies,
                                _ => null,
            };

            if (children != null)
            {
                foreach (var child in children)
                {
                    if (child != null)
                    {
                        var childvc = new ValidationContext(child, psp, null);
                        isValid &= Validator.TryValidateObject(child, childvc, results, true);
                    }
                }
            }

            return(isValid);
        }
 /// <inheritdoc />
 public Task <ConfirmPurchaseResponse> ConfirmPurchaseAsync(ConfirmPurchaseRequest request)
 {
     return(MakeRequestAsync <ConfirmPurchaseRequest, ConfirmPurchaseResponse>("confirm_purchase", request));
 }