1
+ using System ;
2
+ using System . Linq ;
3
+ using NHibernate . Mapping ;
4
+ using NUnit . Framework ;
5
+ using SharpTestsEx ;
6
+
7
+ namespace NHibernate . Envers . Tests . Integration . Inheritance . TablePerClass . Discriminate
8
+ {
9
+ /// <summary>
10
+ /// Provides a basic set of tests to verify when the insert attribute of the discriminator element is set
11
+ /// to false, that the setting will carry into the audit table settings.
12
+ /// </summary>
13
+ public class DiscriminatorTest : TestBase
14
+ {
15
+ private BaseEntity baseEntityVer1 ;
16
+ private BaseEntity baseEntityVer2 ;
17
+ private SubtypeEntity subtypeEntityVer1 ;
18
+ private SubtypeEntity subtypeEntityVer2 ;
19
+
20
+ public DiscriminatorTest ( AuditStrategyForTest strategyType ) : base ( strategyType )
21
+ {
22
+ }
23
+
24
+ /// <summary>
25
+ /// Perform initialization for the test
26
+ /// </summary>
27
+ protected override void Initialize ( )
28
+ {
29
+ var baseEntityType = new ClassTypeEntity { Type = ClassTypeEntity . BaseName } ;
30
+ var subtypeEntityType = new ClassTypeEntity { Type = ClassTypeEntity . SubtypeName } ;
31
+
32
+ //rev 1
33
+ using ( var tx = Session . BeginTransaction ( ) )
34
+ {
35
+ Session . Save ( baseEntityType ) ;
36
+ Session . Save ( subtypeEntityType ) ;
37
+ tx . Commit ( ) ;
38
+ }
39
+
40
+ //rev 2
41
+ var baseEntity = new BaseEntity { TypeId = baseEntityType , Data = "parent data" } ;
42
+ var subtypeEntity = new SubtypeEntity { TypeId = subtypeEntityType , Data = "child data" , SubtypeData = "child specific data" } ;
43
+ using ( var tx = Session . BeginTransaction ( ) )
44
+ {
45
+ Session . Save ( baseEntity ) ;
46
+ Session . Save ( subtypeEntity ) ;
47
+ tx . Commit ( ) ;
48
+ }
49
+
50
+ //rev 3
51
+ using ( var tx = Session . BeginTransaction ( ) )
52
+ {
53
+ baseEntity . Data = "parent data modified" ;
54
+ subtypeEntity . Data = "child data modified" ;
55
+ tx . Commit ( ) ;
56
+ }
57
+
58
+ baseEntityVer1 = new BaseEntity { Id = baseEntity . Id , TypeId = baseEntityType , Data = "parent data" } ;
59
+ subtypeEntityVer1 = new SubtypeEntity { Id = subtypeEntity . Id , TypeId = subtypeEntityType , Data = "child data" , SubtypeData = "child specific data" } ;
60
+ baseEntityVer2 = new BaseEntity { Id = baseEntity . Id , TypeId = baseEntityType , Data = "parent data modified" } ;
61
+ subtypeEntityVer2 = new SubtypeEntity { Id = subtypeEntity . Id , TypeId = subtypeEntityType , Data = "child data modified" , SubtypeData = "child specific data" } ;
62
+ }
63
+
64
+ /// <summary>
65
+ /// This test is here to verify that the NHibernate configuration was able to complete and that the set up
66
+ /// performed in the Initialize method is correct.
67
+ /// </summary>
68
+ [ Test ]
69
+ public void VerifyInitializeCompleted ( )
70
+ {
71
+ var classTypeEntityCount = Session . Query < ClassTypeEntity > ( ) . Count ( ) ;
72
+ Assert . IsTrue ( classTypeEntityCount == 2 , "Did not retrieve two ClassTypeEntity records, but received {0}" , classTypeEntityCount ) ;
73
+
74
+ var baseTypeCount = Session . Query < BaseEntity > ( )
75
+ . Where ( be => be . TypeId . Id == 1 )
76
+ . Count ( ) ;
77
+ Assert . IsTrue ( baseTypeCount == 1 , "Only expected one BaseEntity record, but received {0}" , baseTypeCount ) ;
78
+
79
+ var subtypeCount = Session . Query < SubtypeEntity > ( ) . Count ( ) ;
80
+ Assert . IsTrue ( subtypeCount == 1 , "Only expected one SubtypeEntity record, but received {0}" , subtypeCount ) ;
81
+ }
82
+
83
+ /// <summary>
84
+ /// Verify that revisions match for each type
85
+ /// </summary>
86
+ [ Test ]
87
+ public void VerifyRevisionCounts ( )
88
+ {
89
+ CollectionAssert . AreEquivalent ( new [ ] { 2 , 3 } ,
90
+ AuditReader ( ) . GetRevisions ( typeof ( BaseEntity ) , baseEntityVer1 . Id ) ) ;
91
+ CollectionAssert . AreEquivalent ( new [ ] { 2 , 3 } ,
92
+ AuditReader ( ) . GetRevisions ( typeof ( SubtypeEntity ) , subtypeEntityVer1 . Id ) ) ;
93
+ }
94
+
95
+ [ Test ]
96
+ public void VerifyHistoryOfParent ( )
97
+ {
98
+ AuditReader ( ) . Find < BaseEntity > ( baseEntityVer1 . Id , 2 )
99
+ . Should ( ) . Be . EqualTo ( baseEntityVer1 ) ;
100
+
101
+ AuditReader ( ) . Find < BaseEntity > ( baseEntityVer2 . Id , 3 )
102
+ . Should ( ) . Be . EqualTo ( baseEntityVer2 ) ;
103
+ }
104
+
105
+ [ Test ]
106
+ public void VerifyHistoryOfChild ( )
107
+ {
108
+ AuditReader ( ) . Find < SubtypeEntity > ( subtypeEntityVer1 . Id , 2 )
109
+ . Should ( ) . Be . EqualTo ( subtypeEntityVer1 ) ;
110
+
111
+ AuditReader ( ) . Find < SubtypeEntity > ( subtypeEntityVer2 . Id , 3 )
112
+ . Should ( ) . Be . EqualTo ( subtypeEntityVer2 ) ;
113
+ }
114
+ }
115
+ }
0 commit comments