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, }); }
/// <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)); }