11using System ;
2+ using System . Collections . Generic ;
23using FluentAssertions ;
34using Xer . DomainDriven . Exceptions ;
45using Xer . DomainDriven . Tests . Entities ;
@@ -8,6 +9,134 @@ namespace Xer.DomainDriven.Tests
89{
910 public class AggregateRootTests
1011 {
12+ #region Equality
13+
14+ public class Equality
15+ {
16+ [ Fact ]
17+ public void EqualsShouldBeTrueIfSameId ( )
18+ {
19+ var id = Guid . NewGuid ( ) ;
20+ var aggregateRoot1 = new TestAggregateRoot ( id ) ;
21+ var aggregateRoot2 = new TestAggregateRoot ( id ) ;
22+
23+ // Same ID, should be equal.
24+ aggregateRoot1 . Equals ( aggregateRoot2 ) . Should ( ) . BeTrue ( ) ;
25+ }
26+
27+ [ Fact ]
28+ public void EqualsShouldBeTrueIfSameReference ( )
29+ {
30+ var aggregateRoot1 = new TestAggregateRoot ( Guid . NewGuid ( ) ) ;
31+ var sameReference = aggregateRoot1 ;
32+
33+ // Same ID, should be equal.
34+ aggregateRoot1 . Equals ( sameReference ) . Should ( ) . BeTrue ( ) ;
35+ }
36+
37+ [ Fact ]
38+ public void ObjectEqualsShouldBeTrueIfSameId ( )
39+ {
40+ var id = Guid . NewGuid ( ) ;
41+ var aggregateRoot1 = new TestAggregateRoot ( id ) ;
42+ var aggregateRoot2 = new TestAggregateRoot ( id ) ;
43+
44+ // Same ID, should be equal.
45+ aggregateRoot1 . Equals ( ( object ) aggregateRoot2 ) . Should ( ) . BeTrue ( ) ;
46+ }
47+
48+ [ Fact ]
49+ public void ObjectEqualsShouldBeTrueIfSameReference ( )
50+ {
51+ var aggregateRoot1 = new TestAggregateRoot ( Guid . NewGuid ( ) ) ;
52+ var sameReference = aggregateRoot1 ;
53+
54+ // Same ID, should be equal.
55+ aggregateRoot1 . Equals ( ( object ) sameReference ) . Should ( ) . BeTrue ( ) ;
56+ }
57+
58+ [ Fact ]
59+ public void EqualityOperatorShouldBeTrueIfSameId ( )
60+ {
61+ var id = Guid . NewGuid ( ) ;
62+ var aggregateRoot1 = new TestAggregateRoot ( id ) ;
63+ var aggregateRoot2 = new TestAggregateRoot ( id ) ;
64+
65+ // Same ID, should be equal.
66+ ( aggregateRoot1 == aggregateRoot2 ) . Should ( ) . BeTrue ( ) ;
67+ }
68+
69+ [ Fact ]
70+ public void EqualityOperatorShouldBeTrueIfSameReference ( )
71+ {
72+ var aggregateRoot1 = new TestAggregateRoot ( Guid . NewGuid ( ) ) ;
73+ var sameReference = aggregateRoot1 ;
74+
75+ // Same ID, should be equal.
76+ ( aggregateRoot1 == sameReference ) . Should ( ) . BeTrue ( ) ;
77+ }
78+
79+ [ Fact ]
80+ public void ShouldNotBeEqualIfSameIdButDifferentType ( )
81+ {
82+ var id = Guid . NewGuid ( ) ;
83+ var aggregateRoot1 = new TestAggregateRoot ( id ) ;
84+ var aggregateRoot2 = new NoApplierAggregateRoot ( id ) ;
85+
86+ // Same ID, should be equal.
87+ aggregateRoot1 . Should ( ) . NotBe ( aggregateRoot2 ) ;
88+ }
89+ }
90+
91+ #endregion Equality
92+
93+ #region GetHashCodeMethod
94+
95+ public class GetHashCodeMethod
96+ {
97+ [ Fact ]
98+ public void ShouldReturnTheSameValueForSameInstance ( )
99+ {
100+ var aggregateRoot = new TestAggregateRoot ( Guid . NewGuid ( ) ) ;
101+ int hashCode1 = aggregateRoot . GetHashCode ( ) ;
102+ int hashCode2 = aggregateRoot . GetHashCode ( ) ;
103+
104+ hashCode1 . Should ( ) . Be ( hashCode2 ) ;
105+ }
106+
107+ [ Fact ]
108+ public void ShouldBeSearcheableInHashSet ( )
109+ {
110+ var id = Guid . NewGuid ( ) ;
111+ var aggregateRoot1 = new TestAggregateRoot ( id ) ;
112+ var aggregateRoot2 = new TestAggregateRoot ( id ) ;
113+
114+ var hashSet = new HashSet < TestAggregateRoot > ( ) ;
115+ hashSet . Add ( aggregateRoot1 ) ;
116+
117+ // Should be searcheable because aggregate roots are equal by ID.
118+ hashSet . Contains ( aggregateRoot1 ) . Should ( ) . BeTrue ( ) ;
119+ hashSet . Contains ( aggregateRoot2 ) . Should ( ) . BeTrue ( ) ;
120+ }
121+
122+ [ Fact ]
123+ public void ShouldBeSearcheableInDictionary ( )
124+ {
125+ var id = Guid . NewGuid ( ) ;
126+ var aggregateRoot1 = new TestAggregateRoot ( id ) ;
127+ var aggregateRoot2 = new TestAggregateRoot ( id ) ;
128+
129+ var dictionary = new Dictionary < TestAggregateRoot , TestAggregateRoot > ( 1 ) ;
130+ dictionary [ aggregateRoot1 ] = aggregateRoot1 ;
131+
132+ // Should be searcheable because aggregate roots are equal by ID.
133+ dictionary [ aggregateRoot1 ] . Should ( ) . Be ( aggregateRoot1 ) ;
134+ dictionary [ aggregateRoot2 ] . Should ( ) . Be ( aggregateRoot1 ) ;
135+ }
136+ }
137+
138+ #endregion GetHashCodeMethod
139+
11140 #region ApplyDomainEventMethod
12141
13142 public class ApplyDomainEventMethod
0 commit comments