2
2
// Refer to the solution LICENSE file for more information.
3
3
4
4
using System ;
5
+ using System . Collections . Generic ;
5
6
using Finbuckle . MultiTenant . Internal ;
6
7
using Microsoft . AspNetCore . Http ;
7
8
using Microsoft . Extensions . DependencyInjection ;
@@ -13,37 +14,72 @@ namespace Finbuckle.MultiTenant.AspNetCore.Test.Extensions
13
14
public class HttpContextExtensionShould
14
15
{
15
16
[ Fact ]
16
- public void GetTenantContextIfExists ( )
17
+ public void GetExistingMultiTenantContext ( )
17
18
{
18
19
var ti = new TenantInfo { Id = "test" } ;
19
- var tc = new MultiTenantContext < TenantInfo > ( ) ;
20
- tc . TenantInfo = ti ;
21
-
22
- var services = new ServiceCollection ( ) ;
23
- services . AddScoped < IMultiTenantContextAccessor < TenantInfo > > ( _ => new AsyncLocalMultiTenantContextAccessor < TenantInfo > { MultiTenantContext = tc } ) ;
24
- var sp = services . BuildServiceProvider ( ) ;
20
+ var mtc = new MultiTenantContext < TenantInfo >
21
+ {
22
+ TenantInfo = ti
23
+ } ;
25
24
26
25
var httpContextMock = new Mock < HttpContext > ( ) ;
27
- httpContextMock . Setup ( c => c . RequestServices ) . Returns ( sp ) ;
28
-
29
- var mtc = httpContextMock . Object . GetMultiTenantContext < TenantInfo > ( ) ;
30
-
31
- Assert . Same ( tc , mtc ) ;
26
+ var itemsDict = new Dictionary < object , object ? >
27
+ {
28
+ [ typeof ( IMultiTenantContext ) ] = mtc
29
+ } ;
30
+ httpContextMock . Setup ( c => c . Items ) . Returns ( itemsDict ) ;
31
+
32
+ var returnedMtc = httpContextMock . Object . GetMultiTenantContext < TenantInfo > ( ) ;
33
+
34
+ Assert . Same ( mtc , returnedMtc ) ;
32
35
}
33
-
36
+
34
37
[ Fact ]
35
- public void ReturnNullIfNoMultiTenantContext ( )
38
+ public void GetEmptyMultiTenantContextIfNoneSet ( )
36
39
{
37
- var services = new ServiceCollection ( ) ;
38
- services . AddScoped < IMultiTenantContextAccessor < TenantInfo > > ( _ => new AsyncLocalMultiTenantContextAccessor < TenantInfo > ( ) ) ;
39
- var sp = services . BuildServiceProvider ( ) ;
40
+ var httpContextMock = new Mock < HttpContext > ( ) ;
41
+ var itemsDict = new Dictionary < object , object ? > ( ) ;
42
+ httpContextMock . Setup ( c => c . Items ) . Returns ( itemsDict ) ;
43
+
44
+ var returnedMtc = httpContextMock . Object . GetMultiTenantContext < TenantInfo > ( ) ;
45
+
46
+ Assert . False ( returnedMtc . IsResolved ) ;
47
+ Assert . Null ( returnedMtc . TenantInfo ) ;
48
+ Assert . Null ( returnedMtc . StoreInfo ) ;
49
+ Assert . Null ( returnedMtc . StrategyInfo ) ;
50
+ }
51
+
52
+ [ Fact ]
53
+ public void ReturnTenantInfo ( )
54
+ {
55
+ var ti = new TenantInfo { Id = "test" } ;
56
+ var mtc = new MultiTenantContext < TenantInfo >
57
+ {
58
+ TenantInfo = ti
59
+ } ;
40
60
41
61
var httpContextMock = new Mock < HttpContext > ( ) ;
42
- httpContextMock . Setup ( c => c . RequestServices ) . Returns ( sp ) ;
62
+ var itemsDict = new Dictionary < object , object ? >
63
+ {
64
+ [ typeof ( IMultiTenantContext ) ] = mtc
65
+ } ;
66
+ httpContextMock . Setup ( c => c . Items ) . Returns ( itemsDict ) ;
67
+
68
+ var returnedTi = httpContextMock . Object . GetTenantInfo < TenantInfo > ( ) ;
69
+
70
+ Assert . Same ( ti , returnedTi ) ;
71
+ }
43
72
44
- var mtc = httpContextMock . Object . GetMultiTenantContext < TenantInfo > ( ) ;
73
+ [ Fact ]
74
+ public void ReturnNullTenantInfoIfNoTenantInfo ( )
75
+ {
76
+ var httpContextMock = new Mock < HttpContext > ( ) ;
77
+ var itemsDict = new Dictionary < object , object ? > ( ) ;
78
+ httpContextMock . Setup ( c => c . Items ) . Returns ( itemsDict ) ;
45
79
46
- Assert . Null ( mtc ) ;
80
+ var returnedTi = httpContextMock . Object . GetTenantInfo < TenantInfo > ( ) ;
81
+
82
+ Assert . Null ( returnedTi ) ;
47
83
}
48
84
49
85
[ Fact ]
@@ -55,13 +91,15 @@ public void SetTenantInfo()
55
91
56
92
var httpContextMock = new Mock < HttpContext > ( ) ;
57
93
httpContextMock . Setup ( c => c . RequestServices ) . Returns ( sp ) ;
94
+ var itemsDict = new Dictionary < object , object ? > ( ) ;
95
+ httpContextMock . Setup ( c => c . Items ) . Returns ( itemsDict ) ;
58
96
var context = httpContextMock . Object ;
59
97
60
98
var ti2 = new TenantInfo { Id = "tenant2" } ;
61
- var res = context . TrySetTenantInfo ( ti2 , false ) ;
62
- var mtc = context . GetMultiTenantContext < TenantInfo > ( ) ;
63
- Assert . True ( res ) ;
64
- Assert . Same ( ti2 , mtc ! . TenantInfo ) ;
99
+ context . SetTenantInfo ( ti2 , false ) ;
100
+ var ti = context . GetTenantInfo < TenantInfo > ( ) ;
101
+
102
+ Assert . Same ( ti2 , ti ) ;
65
103
}
66
104
67
105
[ Fact ]
@@ -73,13 +111,15 @@ public void SetMultiTenantContextAccessor()
73
111
74
112
var httpContextMock = new Mock < HttpContext > ( ) ;
75
113
httpContextMock . Setup ( c => c . RequestServices ) . Returns ( sp ) ;
114
+ var itemsDict = new Dictionary < object , object ? > ( ) ;
115
+ httpContextMock . Setup ( c => c . Items ) . Returns ( itemsDict ) ;
76
116
var context = httpContextMock . Object ;
77
117
78
118
var ti2 = new TenantInfo { Id = "tenant2" } ;
79
- var res = context . TrySetTenantInfo ( ti2 , false ) ;
119
+ context . SetTenantInfo ( ti2 , false ) ;
80
120
var mtc = context . GetMultiTenantContext < TenantInfo > ( ) ;
81
121
var accessor = context . RequestServices . GetRequiredService < IMultiTenantContextAccessor < TenantInfo > > ( ) ;
82
- Assert . True ( res ) ;
122
+
83
123
Assert . Same ( mtc , accessor . MultiTenantContext ) ;
84
124
}
85
125
@@ -92,14 +132,16 @@ public void SetStoreInfoAndStrategyInfoNull()
92
132
93
133
var httpContextMock = new Mock < HttpContext > ( ) ;
94
134
httpContextMock . Setup ( c => c . RequestServices ) . Returns ( sp ) ;
135
+ var itemsDict = new Dictionary < object , object ? > ( ) ;
136
+ httpContextMock . Setup ( c => c . Items ) . Returns ( itemsDict ) ;
95
137
var context = httpContextMock . Object ;
96
138
97
139
var ti2 = new TenantInfo { Id = "tenant2" } ;
98
- context . TrySetTenantInfo ( ti2 , false ) ;
140
+ context . SetTenantInfo ( ti2 , false ) ;
99
141
var mtc = context . GetMultiTenantContext < TenantInfo > ( ) ;
100
142
101
- Assert . Null ( mtc ? . StoreInfo ) ;
102
- Assert . Null ( mtc ? . StrategyInfo ) ;
143
+ Assert . Null ( mtc . StoreInfo ) ;
144
+ Assert . Null ( mtc . StrategyInfo ) ;
103
145
}
104
146
105
147
[ Fact ]
@@ -114,9 +156,11 @@ public void ResetScopeIfApplicable()
114
156
services . AddMultiTenant < TenantInfo > ( ) ;
115
157
var sp = services . BuildServiceProvider ( ) ;
116
158
httpContextMock . Object . RequestServices = sp ;
159
+ var itemsDict = new Dictionary < object , object ? > ( ) ;
160
+ httpContextMock . Setup ( c => c . Items ) . Returns ( itemsDict ) ;
117
161
118
162
var ti2 = new TenantInfo { Id = "tenant2" } ;
119
- httpContextMock . Object . TrySetTenantInfo ( ti2 , true ) ;
163
+ httpContextMock . Object . SetTenantInfo ( ti2 , true ) ;
120
164
121
165
Assert . NotSame ( sp , httpContextMock . Object . RequestServices ) ;
122
166
Assert . NotStrictEqual ( ( DateTime ? ) sp . GetService < object > ( ) ,
@@ -135,9 +179,11 @@ public void NotResetScopeIfNotApplicable()
135
179
services . AddMultiTenant < TenantInfo > ( ) ;
136
180
var sp = services . BuildServiceProvider ( ) ;
137
181
httpContextMock . Object . RequestServices = sp ;
182
+ var itemsDict = new Dictionary < object , object ? > ( ) ;
183
+ httpContextMock . Setup ( c => c . Items ) . Returns ( itemsDict ) ;
138
184
139
185
var ti2 = new TenantInfo { Id = "tenant2" } ;
140
- httpContextMock . Object . TrySetTenantInfo ( ti2 , false ) ;
186
+ httpContextMock . Object . SetTenantInfo ( ti2 , false ) ;
141
187
142
188
Assert . Same ( sp , httpContextMock . Object . RequestServices ) ;
143
189
Assert . StrictEqual ( ( DateTime ? ) sp . GetService < object > ( ) ,
0 commit comments