1+ using System . IO . Compression ;
2+ using System . Text ;
13using System . Text . Json ;
24using BtmsGateway . Consumers ;
35using BtmsGateway . Domain ;
@@ -35,16 +37,14 @@ public async Task WhenCustomsDeclaration_ShouldPassThroughToClearanceDecisionCon
3537 Context = context ,
3638 } ;
3739
38- var message = JsonSerializer . Deserialize < JsonElement > (
39- JsonSerializer . Serialize (
40- new ResourceEvent < CustomsDeclaration >
41- {
42- ResourceId = "mrn" ,
43- ResourceType = ResourceEventResourceTypes . CustomsDeclaration ,
44- Operation = ResourceEventOperations . Created ,
45- SubResourceType = ResourceEventSubResourceTypes . ClearanceDecision ,
46- }
47- )
40+ var message = JsonSerializer . Serialize (
41+ new ResourceEvent < CustomsDeclaration >
42+ {
43+ ResourceId = "mrn" ,
44+ ResourceType = ResourceEventResourceTypes . CustomsDeclaration ,
45+ Operation = ResourceEventOperations . Created ,
46+ SubResourceType = ResourceEventSubResourceTypes . ClearanceDecision ,
47+ }
4848 ) ;
4949
5050 var act = async ( ) => await subject . OnHandle ( message , CancellationToken . None ) ;
@@ -71,16 +71,14 @@ public async Task WhenProcessingError_ShouldPassThroughToProcessingErrorConsumer
7171 Context = context ,
7272 } ;
7373
74- var message = JsonSerializer . Deserialize < JsonElement > (
75- JsonSerializer . Serialize (
76- new ResourceEvent < ProcessingErrorResource >
77- {
78- ResourceId = "mrn" ,
79- ResourceType = ResourceEventResourceTypes . ProcessingError ,
80- Operation = ResourceEventOperations . Created ,
81- Resource = new ProcessingErrorResource { ProcessingErrors = [ new ProcessingError ( ) ] } ,
82- }
83- )
74+ var message = JsonSerializer . Serialize (
75+ new ResourceEvent < ProcessingErrorResource >
76+ {
77+ ResourceId = "mrn" ,
78+ ResourceType = ResourceEventResourceTypes . ProcessingError ,
79+ Operation = ResourceEventOperations . Created ,
80+ Resource = new ProcessingErrorResource { ProcessingErrors = [ new ProcessingError ( ) ] } ,
81+ }
8482 ) ;
8583
8684 var act = async ( ) => await subject . OnHandle ( message , CancellationToken . None ) ;
@@ -107,19 +105,63 @@ public async Task WhenUnsupportedResourceType_ShouldNotThrow()
107105 Context = context ,
108106 } ;
109107
110- var message = JsonSerializer . Deserialize < JsonElement > (
111- JsonSerializer . Serialize (
112- new ResourceEvent < CustomsDeclaration >
113- {
114- ResourceId = "mrn" ,
115- ResourceType = ResourceEventResourceTypes . ImportPreNotification ,
116- Operation = ResourceEventOperations . Created ,
117- }
118- )
108+ var message = JsonSerializer . Serialize (
109+ new ResourceEvent < CustomsDeclaration >
110+ {
111+ ResourceId = "mrn" ,
112+ ResourceType = ResourceEventResourceTypes . ImportPreNotification ,
113+ Operation = ResourceEventOperations . Created ,
114+ }
119115 ) ;
120116
121117 var act = async ( ) => await subject . OnHandle ( message , CancellationToken . None ) ;
122118
123119 await act . Should ( ) . NotThrowAsync < ClearanceDecisionProcessingException > ( ) ;
124120 }
121+
122+ [ Fact ]
123+ public async Task WhenCompressedMessage_ShouldPassThroughToConsumer ( )
124+ {
125+ var context = Substitute . For < IConsumerContext > ( ) ;
126+ context . Headers . Returns (
127+ new Dictionary < string , object >
128+ {
129+ { MessageBusHeaders . ResourceType , ResourceEventResourceTypes . CustomsDeclaration } ,
130+ { MessageBusHeaders . ContentEncoding , "gzip, base64" } ,
131+ }
132+ ) ;
133+ var subject = new ConsumerMediator (
134+ Substitute . For < IDecisionSender > ( ) ,
135+ Substitute . For < IErrorNotificationSender > ( ) ,
136+ Substitute . For < ILoggerFactory > ( )
137+ )
138+ {
139+ Context = context ,
140+ } ;
141+
142+ var message = JsonSerializer . Serialize (
143+ new ResourceEvent < CustomsDeclaration >
144+ {
145+ ResourceId = "mrn" ,
146+ ResourceType = ResourceEventResourceTypes . CustomsDeclaration ,
147+ Operation = ResourceEventOperations . Created ,
148+ SubResourceType = ResourceEventSubResourceTypes . ClearanceDecision ,
149+ }
150+ ) ;
151+
152+ var act = async ( ) => await subject . OnHandle ( CompressMessage ( message ) , CancellationToken . None ) ;
153+
154+ await act . Should ( ) . ThrowAsync < ClearanceDecisionProcessingException > ( ) ;
155+ }
156+
157+ private static string CompressMessage ( string message )
158+ {
159+ var buffer = Encoding . UTF8 . GetBytes ( message ) ;
160+ var memoryStream = new MemoryStream ( ) ;
161+ using var gzipStream = new GZipStream ( memoryStream , CompressionLevel . Optimal ) ;
162+ gzipStream . Write ( buffer , 0 , buffer . Length ) ;
163+ gzipStream . Flush ( ) ;
164+
165+ return Convert . ToBase64String ( memoryStream . ToArray ( ) ) ;
166+ }
125167}
0 commit comments