-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
ValidationExceptionTests.cs
174 lines (155 loc) · 5.78 KB
/
ValidationExceptionTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
using System;
using System.Linq;
using System.Net;
using Funq;
using NUnit.Framework;
using ServiceStack.FluentValidation;
using ServiceStack.FluentValidation.Validators;
using ServiceStack.Text;
using ServiceStack.Validation;
namespace ServiceStack.WebHost.Endpoints.Tests
{
public class TriggerValidators : IReturn<TriggerValidators>
{
public string CreditCard { get; set; }
public string Email { get; set; }
public string Empty { get; set; }
public string Equal { get; set; }
public int ExclusiveBetween { get; set; }
public int GreaterThanOrEqual { get; set; }
public int GreaterThan { get; set; }
public int InclusiveBetween { get; set; }
public string Length { get; set; }
public int LessThanOrEqual { get; set; }
public int LessThan { get; set; }
public string NotEmpty { get; set; }
public string NotEqual { get; set; }
public string Null { get; set; }
public string RegularExpression { get; set; }
public decimal ScalePrecision { get; set; }
}
public class TriggerValidatorsValidator : AbstractValidator<TriggerValidators>
{
public TriggerValidatorsValidator()
{
RuleFor(x => x.CreditCard).CreditCard();
RuleFor(x => x.Email).EmailAddress();
RuleFor(x => x.Empty).Empty();
RuleFor(x => x.Equal).Equal("Equal");
RuleFor(x => x.ExclusiveBetween).ExclusiveBetween(10, 20);
RuleFor(x => x.GreaterThanOrEqual).GreaterThanOrEqualTo(10);
RuleFor(x => x.GreaterThan).GreaterThan(10);
RuleFor(x => x.InclusiveBetween).InclusiveBetween(10, 20);
RuleFor(x => x.Length).Length(10);
RuleFor(x => x.LessThanOrEqual).LessThanOrEqualTo(10);
RuleFor(x => x.LessThan).LessThan(10);
RuleFor(x => x.NotEmpty).NotEmpty();
RuleFor(x => x.NotEqual).NotEqual("NotEqual");
RuleFor(x => x.Null).Null();
RuleFor(x => x.RegularExpression).Matches(@"^[a-z]*$");
RuleFor(x => x.ScalePrecision).SetValidator(new ScalePrecisionValidator(1, 1));
}
}
public class ValidatorIssues : IReturn<ValidatorIssues>
{
public DateTime ValidTo { get; set; }
}
public class ValidatorIssuesValidator : AbstractValidator<ValidatorIssues>
{
public ValidatorIssuesValidator()
{
RuleFor(x => x.ValidTo).GreaterThanOrEqualTo(x => DateTime.UtcNow);
}
}
public class ValidationRulesTest : IReturn<ValidationRulesTest>
{
public string Id { get; set; }
public string AuthSecret { get; set; }
}
public class ValidationService : Service
{
public object Any(TriggerValidators request) => request;
public object Any(ValidatorIssues request) => request;
public object Any(ValidationRulesTest request) => request;
}
public class ValidationExceptionTests
{
class AppHost : AppSelfHostBase
{
public AppHost() : base(nameof(ValidationExceptionTests), typeof(ValidationExceptionTests).Assembly) { }
public override void Configure(Container container)
{
Plugins.Add(new ValidationFeature());
container.RegisterValidator(typeof(TriggerValidatorsValidator));
container.RegisterValidator(typeof(ValidatorIssuesValidator));
}
}
private readonly ServiceStackHost appHost;
public ValidationExceptionTests()
{
appHost = new AppHost()
.Init()
.Start(Config.ListeningOn);
}
[OneTimeTearDown] public void OneTimeTearDown() => appHost.Dispose();
protected virtual JsonServiceClient GetClient() => new JsonServiceClient(Config.ListeningOn);
[Test]
public void Triggering_all_validators_returns_right_ErrorCode()
{
var client = GetClient();
var request = CreateTriggerValidators();
try
{
var response = client.Post(request);
Assert.Fail("Should throw");
}
catch (WebServiceException ex)
{
//ex.ResponseStatus.PrintDump();
ex.AssertTriggerValidators();
}
}
public static TriggerValidators CreateTriggerValidators()
{
var request = new TriggerValidators {
CreditCard = "NotCreditCard",
Email = "NotEmail",
Empty = "NotEmpty",
Equal = "NotEqual",
ExclusiveBetween = 1,
GreaterThan = 1,
GreaterThanOrEqual = 1,
InclusiveBetween = 1,
Length = "Length",
LessThan = 20,
LessThanOrEqual = 20,
NotEmpty = "",
NotEqual = "NotEqual",
Null = "NotNull",
RegularExpression = "FOO",
ScalePrecision = 123.456m
};
return request;
}
[Test]
public void Does_handle_reported_issues_correctly()
{
var client = GetClient();
var request = new ValidatorIssues
{
ValidTo = DateTime.UtcNow.AddDays(-1),
};
try
{
var response = client.Post(request);
Assert.Fail("Should throw");
}
catch (WebServiceException ex)
{
ex.ResponseStatus.PrintDump();
var errors = ex.ResponseStatus.Errors;
Assert.That(errors.First(x => x.FieldName == "ValidTo").ErrorCode, Is.EqualTo("GreaterThanOrEqual"));
}
}
}
}