1+ using System . Collections . Generic ;
2+ using FluentAssertions ;
3+ using Xunit ;
4+
5+ namespace Rsk . AuthZen . Client . Test ;
6+
7+ public class AuthZenBoxcarEvaluationBodyTests
8+ {
9+ [ Fact ]
10+ public void ToDto_WhenDefaultSubjectIsSet_ShouldPopulateSubject ( )
11+ {
12+ var defaults = new AuthZenEvaluationBody ( )
13+ {
14+ Subject = new AuthZenSubject
15+ {
16+ Id = "subject-id" ,
17+ Type = "subject-type" ,
18+ Properties = new Dictionary < string , object > { { "key" , "value" } }
19+ }
20+ } ;
21+
22+
23+ var request = new AuthZenBoxcarEvaluationBody
24+ {
25+ DefaultValues = defaults
26+ } ;
27+
28+ var dto = request . ToDto ( ) ;
29+
30+ dto . Subject . Should ( ) . NotBeNull ( ) ;
31+ dto . Subject . Id . Should ( ) . Be ( "subject-id" ) ;
32+ dto . Subject . Type . Should ( ) . Be ( "subject-type" ) ;
33+ dto . Subject . Properties . Keys . Should ( ) . Contain ( "key" ) ;
34+ dto . Subject . Properties [ "key" ] . Should ( ) . Be ( "value" ) ;
35+ }
36+
37+ [ Fact ]
38+ public void ToDto_WhenDefaultResourceIsSet_ShouldPopulateResource ( )
39+ {
40+ var defaults = new AuthZenEvaluationBody ( )
41+ {
42+ Resource = new AuthZenResource
43+ {
44+ Id = "resource-id" ,
45+ Type = "resource-type" ,
46+ Properties = new Dictionary < string , object > { { "key" , "value" } }
47+ }
48+ } ;
49+
50+ var request = new AuthZenBoxcarEvaluationBody
51+ {
52+ DefaultValues = defaults
53+ } ;
54+
55+ var dto = request . ToDto ( ) ;
56+
57+ dto . Resource . Should ( ) . NotBeNull ( ) ;
58+ dto . Resource . Id . Should ( ) . Be ( "resource-id" ) ;
59+ dto . Resource . Type . Should ( ) . Be ( "resource-type" ) ;
60+ dto . Resource . Properties . Keys . Should ( ) . Contain ( "key" ) ;
61+ dto . Resource . Properties [ "key" ] . Should ( ) . Be ( "value" ) ;
62+ }
63+
64+ [ Fact ]
65+ public void ToDto_WhenDefaultActionIsSet_ShouldPopulateAction ( )
66+ {
67+ var defaults = new AuthZenEvaluationBody ( )
68+ {
69+ Action = new AuthZenAction
70+ {
71+ Name = "action-name" ,
72+ Properties = new Dictionary < string , object > { { "key" , "value" } }
73+ }
74+ } ;
75+
76+ var request = new AuthZenBoxcarEvaluationBody
77+ {
78+ DefaultValues = defaults
79+ } ;
80+
81+ var dto = request . ToDto ( ) ;
82+
83+ dto . Action . Should ( ) . NotBeNull ( ) ;
84+ dto . Action . Name . Should ( ) . Be ( "action-name" ) ;
85+ dto . Action . Properties . Keys . Should ( ) . Contain ( "key" ) ;
86+ dto . Action . Properties [ "key" ] . Should ( ) . Be ( "value" ) ;
87+ }
88+
89+ [ Fact ]
90+ public void ToDto_WhenDefaultContextIsSet_ShouldPopulateContext ( )
91+ {
92+ var defaults = new AuthZenEvaluationBody ( )
93+ {
94+ Context = new Dictionary < string , object >
95+ {
96+ { "contextKey" , "contextValue" }
97+ }
98+ } ;
99+
100+ var request = new AuthZenBoxcarEvaluationBody
101+ {
102+ DefaultValues = defaults
103+ } ;
104+
105+ var dto = request . ToDto ( ) ;
106+
107+ dto . Context . Should ( ) . NotBeNull ( ) ;
108+ dto . Context . Keys . Should ( ) . Contain ( "contextKey" ) ;
109+ dto . Context [ "contextKey" ] . Should ( ) . Be ( "contextValue" ) ;
110+ }
111+
112+ [ Fact ]
113+ public void ToDto_WhenEvaluationsIsMissing_ShouldNotPopulateEvaluations ( )
114+ {
115+ var request = new AuthZenBoxcarEvaluationBody
116+ {
117+ Evaluations = null
118+ } ;
119+
120+ var dto = request . ToDto ( ) ;
121+
122+ dto . Evaluations . Should ( ) . BeNull ( ) ;
123+ }
124+
125+ [ Fact ]
126+ public void ToDto_WhenEvaluationsIsEmpty_ShouldNotPopulateEvaluations ( )
127+ {
128+ var request = new AuthZenBoxcarEvaluationBody
129+ {
130+ Evaluations = new List < AuthZenEvaluationBody > ( )
131+ } ;
132+
133+ var dto = request . ToDto ( ) ;
134+
135+ dto . Evaluations . Should ( ) . BeNull ( ) ;
136+ }
137+
138+ [ Fact ]
139+ public void ToDto_WhenEvaluationsIsSet_ShouldPopulateEachEvaluation ( )
140+ {
141+ var request = new AuthZenBoxcarEvaluationBody
142+ {
143+ Evaluations = new List < AuthZenEvaluationBody >
144+ {
145+ new ( )
146+ {
147+ Subject = new AuthZenSubject { Id = "eval-subject-id1" , Type = "eval-subject-type1" } ,
148+ Resource = new AuthZenResource { Id = "eval-resource-id1" , Type = "eval-resource-type1" } ,
149+ Action = new AuthZenAction { Name = "eval-action-name1" , }
150+ } ,
151+
152+ new ( )
153+ {
154+ Subject = new AuthZenSubject { Id = "eval-subject-id2" , Type = "eval-subject-type2" } ,
155+ Resource = new AuthZenResource { Id = "eval-resource-id2" , Type = "eval-resource-type2" } ,
156+ Action = new AuthZenAction { Name = "eval-action-name2" , }
157+ } ,
158+
159+ new ( )
160+ {
161+ Subject = new AuthZenSubject { Id = "eval-subject-id3" , Type = "eval-subject-type3" } ,
162+ Resource = new AuthZenResource { Id = "eval-resource-id3" , Type = "eval-resource-type3" } ,
163+ Action = new AuthZenAction { Name = "eval-action-name3" , }
164+ } ,
165+ }
166+ } ;
167+
168+ var dto = request . ToDto ( ) ;
169+
170+ dto . Evaluations . Should ( ) . NotBeNull ( ) ;
171+ dto . Evaluations . Length . Should ( ) . Be ( 3 ) ;
172+
173+ dto . Evaluations [ 0 ] . Subject . Id . Should ( ) . Be ( "eval-subject-id1" ) ;
174+ dto . Evaluations [ 0 ] . Subject . Type . Should ( ) . Be ( "eval-subject-type1" ) ;
175+ dto . Evaluations [ 0 ] . Resource . Id . Should ( ) . Be ( "eval-resource-id1" ) ;
176+ dto . Evaluations [ 0 ] . Resource . Type . Should ( ) . Be ( "eval-resource-type1" ) ;
177+ dto . Evaluations [ 0 ] . Action . Name . Should ( ) . Be ( "eval-action-name1" ) ;
178+
179+ dto . Evaluations [ 1 ] . Subject . Id . Should ( ) . Be ( "eval-subject-id2" ) ;
180+ dto . Evaluations [ 1 ] . Subject . Type . Should ( ) . Be ( "eval-subject-type2" ) ;
181+ dto . Evaluations [ 1 ] . Resource . Id . Should ( ) . Be ( "eval-resource-id2" ) ;
182+ dto . Evaluations [ 1 ] . Resource . Type . Should ( ) . Be ( "eval-resource-type2" ) ;
183+ dto . Evaluations [ 1 ] . Action . Name . Should ( ) . Be ( "eval-action-name2" ) ;
184+
185+ dto . Evaluations [ 2 ] . Subject . Id . Should ( ) . Be ( "eval-subject-id3" ) ;
186+ dto . Evaluations [ 2 ] . Subject . Type . Should ( ) . Be ( "eval-subject-type3" ) ;
187+ dto . Evaluations [ 2 ] . Resource . Id . Should ( ) . Be ( "eval-resource-id3" ) ;
188+ dto . Evaluations [ 2 ] . Resource . Type . Should ( ) . Be ( "eval-resource-type3" ) ;
189+ dto . Evaluations [ 2 ] . Action . Name . Should ( ) . Be ( "eval-action-name3" ) ;
190+ }
191+
192+ [ Fact ]
193+ public void ToDto_WhenEvaluationSubjectIsSet_ShouldPopulateSubject ( )
194+ {
195+ var request = new AuthZenBoxcarEvaluationBody
196+ {
197+ Evaluations = new List < AuthZenEvaluationBody > ( )
198+ {
199+ new ( )
200+ {
201+ Subject = new AuthZenSubject
202+ {
203+ Id = "subject-id" ,
204+ Type = "subject-type" ,
205+ Properties = new Dictionary < string , object > { { "key" , "value" } }
206+ }
207+ }
208+ }
209+ } ;
210+
211+ var dto = request . ToDto ( ) ;
212+
213+ dto . Evaluations [ 0 ] . Subject . Should ( ) . NotBeNull ( ) ;
214+ dto . Evaluations [ 0 ] . Subject . Id . Should ( ) . Be ( "subject-id" ) ;
215+ dto . Evaluations [ 0 ] . Subject . Type . Should ( ) . Be ( "subject-type" ) ;
216+ dto . Evaluations [ 0 ] . Subject . Properties . Keys . Should ( ) . Contain ( "key" ) ;
217+ dto . Evaluations [ 0 ] . Subject . Properties [ "key" ] . Should ( ) . Be ( "value" ) ;
218+ }
219+
220+ [ Fact ]
221+ public void ToDto_WhenEvaluationResourceIsSet_ShouldPopulateResource ( )
222+ {
223+ var request = new AuthZenBoxcarEvaluationBody
224+ {
225+ Evaluations = new List < AuthZenEvaluationBody > ( )
226+ {
227+ new ( )
228+ {
229+ Resource = new AuthZenResource
230+ {
231+ Id = "resource-id" ,
232+ Type = "resource-type" ,
233+ Properties = new Dictionary < string , object > { { "key" , "value" } }
234+ }
235+ }
236+ }
237+
238+ } ;
239+
240+ var dto = request . ToDto ( ) ;
241+
242+ dto . Evaluations [ 0 ] . Resource . Should ( ) . NotBeNull ( ) ;
243+ dto . Evaluations [ 0 ] . Resource . Id . Should ( ) . Be ( "resource-id" ) ;
244+ dto . Evaluations [ 0 ] . Resource . Type . Should ( ) . Be ( "resource-type" ) ;
245+ dto . Evaluations [ 0 ] . Resource . Properties . Keys . Should ( ) . Contain ( "key" ) ;
246+ dto . Evaluations [ 0 ] . Resource . Properties [ "key" ] . Should ( ) . Be ( "value" ) ;
247+ }
248+
249+ [ Fact ]
250+ public void ToDto_WhenEvaluationActionIsSet_ShouldPopulateAction ( )
251+ {
252+ var request = new AuthZenBoxcarEvaluationBody
253+ {
254+ Evaluations = new List < AuthZenEvaluationBody > ( )
255+ {
256+ new ( )
257+ {
258+ Action = new AuthZenAction
259+ {
260+ Name = "action-name" ,
261+ Properties = new Dictionary < string , object > { { "key" , "value" } }
262+ }
263+ }
264+ }
265+ } ;
266+
267+ var dto = request . ToDto ( ) ;
268+
269+ dto . Evaluations [ 0 ] . Action . Should ( ) . NotBeNull ( ) ;
270+ dto . Evaluations [ 0 ] . Action . Name . Should ( ) . Be ( "action-name" ) ;
271+ dto . Evaluations [ 0 ] . Action . Properties . Keys . Should ( ) . Contain ( "key" ) ;
272+ dto . Evaluations [ 0 ] . Action . Properties [ "key" ] . Should ( ) . Be ( "value" ) ;
273+ }
274+
275+ [ Fact ]
276+ public void ToDto_WhenEvaluationContextIsSet_ShouldPopulateContext ( )
277+ {
278+ var request = new AuthZenBoxcarEvaluationBody
279+ {
280+ Evaluations = new List < AuthZenEvaluationBody > ( )
281+ {
282+ new ( )
283+ {
284+ Context = new Dictionary < string , object >
285+ {
286+ { "contextKey" , "contextValue" }
287+ }
288+ }
289+ }
290+ } ;
291+
292+ var dto = request . ToDto ( ) ;
293+
294+ dto . Evaluations [ 0 ] . Context . Should ( ) . NotBeNull ( ) ;
295+ dto . Evaluations [ 0 ] . Context . Keys . Should ( ) . Contain ( "contextKey" ) ;
296+ dto . Evaluations [ 0 ] . Context [ "contextKey" ] . Should ( ) . Be ( "contextValue" ) ;
297+ }
298+
299+ [ Theory ]
300+ [ InlineData ( BoxcarSemantics . DenyOnFirstDeny ) ]
301+ [ InlineData ( BoxcarSemantics . PermitOnFirstPermit ) ]
302+ [ InlineData ( BoxcarSemantics . ExecuteAll ) ]
303+ public void ToDto_OptionsAreProvided_ShouldIncludeOptionsInRequestDto ( BoxcarSemantics semantics )
304+ {
305+ var options = new AuthZenBoxcarOptions ( )
306+ {
307+ Semantics = semantics
308+ } ;
309+
310+ var request = new AuthZenBoxcarEvaluationBody
311+ {
312+ Evaluations = new List < AuthZenEvaluationBody >
313+ {
314+ new ( )
315+ {
316+ Subject = new AuthZenSubject { Id = "eval-subject-id1" , Type = "eval-subject-type1" } ,
317+ Resource = new AuthZenResource { Id = "eval-resource-id1" , Type = "eval-resource-type1" } ,
318+ Action = new AuthZenAction { Name = "eval-action-name1" , }
319+ } ,
320+
321+ new ( )
322+ {
323+ Subject = new AuthZenSubject { Id = "eval-subject-id2" , Type = "eval-subject-type2" } ,
324+ Resource = new AuthZenResource { Id = "eval-resource-id2" , Type = "eval-resource-type2" } ,
325+ Action = new AuthZenAction { Name = "eval-action-name2" , }
326+ } ,
327+
328+ new ( )
329+ {
330+ Subject = new AuthZenSubject { Id = "eval-subject-id3" , Type = "eval-subject-type3" } ,
331+ Resource = new AuthZenResource { Id = "eval-resource-id3" , Type = "eval-resource-type3" } ,
332+ Action = new AuthZenAction { Name = "eval-action-name3" , }
333+ } ,
334+ } ,
335+ Options = options
336+ } ;
337+
338+ var dto = request . ToDto ( ) ;
339+
340+ dto . Options . Should ( ) . NotBeNull ( ) ;
341+ dto . Options . Should ( ) . BeEquivalentTo ( options . ToDto ( ) ) ;
342+ }
343+ }
0 commit comments