7
7
namespace Shiny . Extensions . EntityFramework . Tests ;
8
8
9
9
10
- // TODO: test on entity updates
11
- // TODO: test ignored properties
10
+ // TODO: check entityId & entityType
12
11
public class AuditTests : IDisposable
13
12
{
14
13
readonly TestAuditInfoProvider auditProvider ;
@@ -45,36 +44,15 @@ async Task DoDb(Func<TestDbContext, Task> task)
45
44
[ Fact ]
46
45
public async Task AddAudits ( )
47
46
{
48
- using var scope = this . serviceProvider . CreateScope ( ) ;
49
- var data = scope . ServiceProvider . GetRequiredService < TestDbContext > ( ) ;
50
- await this . DoDb ( data =>
51
- {
52
- var manu = new Manufacturer { Name = "Cadillac" } ;
53
- data . Add ( manu ) ;
54
-
55
- var model = new Model
56
- {
57
- Name = "X5" ,
58
- Manufacturer = manu
59
- } ;
60
- data . Add ( model ) ;
61
- return data . SaveChangesAsync ( ) ;
62
- } ) ;
47
+ await this . Seed ( ) ;
63
48
64
-
65
49
await this . DoDb ( async data =>
66
50
{
67
51
var audits = await data . AuditEntries . ToListAsync ( ) ;
68
52
audits . Count . Should ( ) . Be ( 2 ) ;
69
-
70
- audits . All ( x => x . UserIdentifier ! . Equals ( "Test User" ) ) . Should ( ) . BeTrue ( "All audits should be 'Test User'" ) ;
71
- audits . All ( x => x . Tenant ! . Equals ( "Test Tenant" ) ) . Should ( ) . BeTrue ( "All audits should be 'Test Tenant'" ) ;
72
- audits . All ( x => x . UserIpAddress ! . Equals ( "0.0.0.0" ) ) . Should ( ) . BeTrue ( "All audits should be '0.0.0.0'" ) ;
73
- audits . All ( x => x . AppLocation ! . Equals ( "UNIT TESTS" ) ) . Should ( ) . BeTrue ( "All audits should be 'UNIT TESTS'" ) ;
74
-
75
- audits . All ( x => x . Operation == DbOperation . Insert ) . Should ( ) . BeTrue ( "All audits should Insert operations" ) ;
53
+ audits . ForEach ( x => AssertAudit ( x , DbOperation . Insert ) ) ;
76
54
77
- var manu = await data . Manufacturers . FirstOrDefaultAsync ( ) ;
55
+ var manu = await data . Manufacturers . FirstAsync ( ) ! ;
78
56
manu . LastEditUserIdentifier . Should ( ) . Be ( "Test User" ) ;
79
57
manu . DateUpdated . Date . Should ( ) . Be ( DateTimeOffset . UtcNow . Date , "DateUpdated is wrong" ) ;
80
58
manu . DateCreated . Date . Should ( ) . Be ( DateTimeOffset . UtcNow . Date , "DateCreated is wrong" ) ;
@@ -85,20 +63,69 @@ await this.DoDb(async data =>
85
63
[ Fact ]
86
64
public async Task DeleteAudits ( )
87
65
{
88
-
66
+ await this . Seed ( ) ;
67
+ await this . DoDb ( async data =>
68
+ {
69
+ var manu = await data . Manufacturers . FirstAsync ( ) ;
70
+ data . Remove ( manu ) ;
71
+ await data . SaveChangesAsync ( ) ;
72
+ } ) ;
73
+ await this . DoDb ( async data =>
74
+ {
75
+ var audit = await data . AuditEntries . FirstOrDefaultAsync ( x => x . Operation == DbOperation . Delete ) ;
76
+ audit . Should ( ) . NotBeNull ( "No Delete Audit Found" ) ;
77
+ AssertAudit ( audit ! , DbOperation . Delete ) ;
78
+
79
+ // TODO: check changeset
80
+ } ) ;
89
81
}
90
82
91
83
92
84
[ Fact ]
93
85
public async Task UpdateAudits ( )
94
86
{
95
-
87
+ await this . Seed ( ) ;
88
+ await this . DoDb ( async data =>
89
+ {
90
+ var manu = await data . Manufacturers . FirstAsync ( ) ;
91
+ manu . Name = "UPDATE" ;
92
+ await data . SaveChangesAsync ( ) ;
93
+ } ) ;
94
+ await this . DoDb ( async data =>
95
+ {
96
+ var audit = await data . AuditEntries . FirstOrDefaultAsync ( x => x . Operation == DbOperation . Update ) ;
97
+ audit . Should ( ) . NotBeNull ( "No Delete Audit Found" ) ;
98
+ AssertAudit ( audit ! , DbOperation . Update ) ;
99
+
100
+ // TODO: check changeset
101
+ } ) ;
96
102
}
97
103
98
- public void Dispose ( )
104
+
105
+ Task Seed ( ) => this . DoDb ( data =>
99
106
{
100
- ( this . serviceProvider as IDisposable ) ? . Dispose ( ) ;
107
+ var manu = new Manufacturer { Name = "Cadillac" } ;
108
+ data . Add ( manu ) ;
109
+
110
+ var model = new Model
111
+ {
112
+ Name = "X5" ,
113
+ Manufacturer = manu
114
+ } ;
115
+ data . Add ( model ) ;
116
+ return data . SaveChangesAsync ( ) ;
117
+ } ) ;
118
+
119
+
120
+ void AssertAudit ( AuditEntry audit , DbOperation op )
121
+ {
122
+ audit . Operation . Should ( ) . Be ( op , "Invalid Operation" ) ;
123
+ audit . UserIdentifier . Should ( ) . Be ( "Test User" ) ;
124
+ audit . UserIpAddress . Should ( ) . Be ( "0.0.0.0" ) ;
125
+ audit . AppLocation . Should ( ) . Be ( "UNIT TESTS" ) ;
101
126
}
127
+
128
+ public void Dispose ( ) => ( this . serviceProvider as IDisposable ) ? . Dispose ( ) ;
102
129
}
103
130
104
131
public class TestAuditInfoProvider : IAuditInfoProvider
0 commit comments