-
Notifications
You must be signed in to change notification settings - Fork 1
/
PersonTest.cs
125 lines (107 loc) · 3.98 KB
/
PersonTest.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
using FluentSpecification.Extensions;
using FluentSpecification.Test.Models;
using FluentSpecification.Test.Specifications;
using FluentSpecification.Test.Validatons;
using FluentSpecification.Test.Validators;
using Microsoft.Practices.Unity;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Linq;
namespace FluentSpecification.Test
{
[TestClass]
public class PersonTest
{
private PersonValidator _personValidator;
private UnityContainer _container = new UnityContainer();
[TestInitialize]
public void Config()
{
_container.RegisterType<Validator<Person>, PersonValidator>();
_personValidator = _container.Resolve<PersonValidator>();
}
[TestMethod]
public void CannotAcceptPersonWithInvalidName()
{
//given
var specification = new PersonNameSpecification();
var person = new Person();
//when
var result = specification.IsSatisfiedBy(person);
//then
Assert.IsFalse(result);
}
[TestMethod]
public void CannotAcceptPersonWithInvalidEmail()
{
//given
var specification = new PersonEmailSpecification();
var person = new Person()
{
Email = "invalidemail@com"
};
//when
var result = specification.IsSatisfiedBy(person);
//then
Assert.IsFalse(result);
}
[TestMethod]
public void CannotAcceptInvalidPerson()
{
//given
var person = new Person();
//when
var result = _personValidator.IsValid(person);
//then
Assert.IsFalse(result);
Assert.AreEqual(_personValidator.InvalidRules.Count, 2);
Assert.IsNotNull(_personValidator.InvalidRules.FirstOrDefault(x => (PersonValidation)x == PersonValidation.InvalidName));
Assert.IsNotNull(_personValidator.InvalidRules.FirstOrDefault(x => (PersonValidation)x == PersonValidation.InvalidEmail));
}
[TestMethod]
/// Use when you want to filter specified rule in a validator
public void CanAcceptPersonWithInvalidEmail()
{
//given
var person = new Person()
{
FirstName = "Douglas",
LastName = "Franco",
Email = "invalid@email"
};
//when
var result = _personValidator
.FilterRules(typeof(PersonNameSpecification))
.IsValid(person);
//then
Assert.IsTrue(result);
}
[TestMethod]
/// Use when you want to add some parameters to specification
public void CannotAcceptPersonWithMyNameAndMyEmail()
{
//given
var person = new Person()
{
FirstName = "Douglas",
LastName = "Franco",
Email = "[email protected]"
};
//when
var result = _personValidator
.AddParameter("MyEmail", "[email protected]")
.AddParameter("MyFirstName", "Douglas")
.AddParameter("MyLastName", "Franco")
.IsValid(person);
foreach(var item in _personValidator.InvalidRules)
{
Console.WriteLine(item);
}
//then
Assert.IsFalse(result);
Assert.AreEqual(_personValidator.InvalidRules.Count, 2);
Assert.IsNotNull(_personValidator.InvalidRules.FirstOrDefault(x => (PersonValidation)x == PersonValidation.InvalidName));
Assert.IsNotNull(_personValidator.InvalidRules.FirstOrDefault(x => (PersonValidation)x == PersonValidation.InvalidEmail));
}
}
}