1+ using System . Text ;
2+ using System . Text . Json ;
3+ using BuslyCLI . Console . Tests . EndToEnd . Infrastructure ;
4+ using BuslyCLI . Console . Tests . TestHelpers ;
5+ using BuslyCLI . DependencyInjection ;
6+ using BuslyCLI . Spectre ;
7+ using Microsoft . Extensions . DependencyInjection ;
8+ using Spectre . Console . Cli . Extensions . DependencyInjection ;
9+ using Spectre . Console . Cli . Testing ;
10+
11+ namespace BuslyCLI . Console . Tests . EndToEnd . AzureStorageQueues ;
12+
13+ [ TestFixture ]
14+ public class SendCommandAzureStorageQueuesEndToEndTests : AzureStorageQueuesEndToEndTestBase
15+ {
16+ [ SetUp ]
17+ public void Setup ( )
18+ {
19+ var registrations = new ServiceCollection ( ) ;
20+ registrations . AddBuslyCLIServices ( ) ;
21+ using var registrar = new DependencyInjectionRegistrar ( registrations ) ;
22+ _sut = new CommandAppTester ( registrar ) ;
23+ _sut . Configure ( AppConfiguration . GetSpectreCommandConfiguration ( ) ) ;
24+ }
25+
26+ private CommandAppTester _sut ;
27+
28+ private readonly JsonSerializerOptions _jsonObjectOptions =
29+ new ( ) { PropertyNamingPolicy = JsonNamingPolicy . CamelCase , WriteIndented = true } ;
30+
31+ [ Test ]
32+ public async Task ShouldSendCommand ( )
33+ {
34+ await RunWithTestEndpoint ( async testEndpoint =>
35+ {
36+ // Arrange
37+ await testEndpoint . StartEndpoint ( ) ;
38+ var messageBody = new { OrderNumber = Guid . NewGuid ( ) } ;
39+ var json = JsonSerializer . Serialize ( messageBody , _jsonObjectOptions ) ;
40+ var yamlFile = $ """
41+ ---
42+ current-transport: local-azure-storage-queues
43+ transports:
44+ - name: local-azure-storage-queues
45+ azure-storage-queues-transport-config:
46+ connection-string: { Container . GetConnectionString ( ) }
47+ """ ;
48+ using var configFile = new TestableNServiceBusConfigurationFile ( yamlFile ) ;
49+
50+ // Act
51+ var result = _sut . Run (
52+ "command" ,
53+ "send" ,
54+ "--content-type" , "application/json" ,
55+ "--enclosed-message-type" , "MessageContracts.Commands.CreateOrder" ,
56+ "--destination-endpoint" , testEndpoint . EndpointName ,
57+ "--message-body" , json ,
58+ "--config" , configFile . FilePath ) ;
59+
60+ // Assert
61+ Assert . That ( result . ExitCode , Is . EqualTo ( 0 ) ) ;
62+ var message = testEndpoint . TryReceiveMessage ( ) ;
63+ Assert . That ( message . Headers [ "NServiceBus.EnclosedMessageTypes" ] ,
64+ Is . EqualTo ( "MessageContracts.Commands.CreateOrder" ) ) ;
65+ Assert . That ( message . Headers [ "NServiceBus.ContentType" ] , Is . EqualTo ( "application/json" ) ) ;
66+ Assert . That ( Encoding . UTF8 . GetString ( message . Body . Span ) , Is . EqualTo ( json ) ) ;
67+ } ) ;
68+ }
69+
70+ [ Test ]
71+ public async Task ShouldPublishEvent ( )
72+ {
73+ await RunWithTestEndpoint ( async testEndpoint =>
74+ {
75+ // Arrange
76+ await testEndpoint . StartEndpoint ( ) ;
77+ await testEndpoint . Subscribe ( "MessageContracts.Events.OrderCreated" ) ;
78+ var messageBody = new { OrderNumber = Guid . NewGuid ( ) } ;
79+ var json = JsonSerializer . Serialize ( messageBody , _jsonObjectOptions ) ;
80+ var yamlFile = $ """
81+ ---
82+ current-transport: local-azure-storage-queues
83+ transports:
84+ - name: local-azure-storage-queues
85+ azure-storage-queues-transport-config:
86+ connection-string: { Container . GetConnectionString ( ) }
87+ """ ;
88+ using var configFile = new TestableNServiceBusConfigurationFile ( yamlFile ) ;
89+
90+ // Act
91+ var result = _sut . Run (
92+ "event" ,
93+ "publish" ,
94+ "--content-type" , "application/json" ,
95+ "--enclosed-message-type" , "MessageContracts.Events.OrderCreated" ,
96+ "--message-body" , json ,
97+ "--config" , configFile . FilePath ) ;
98+
99+ // Assert
100+ Assert . That ( result . ExitCode , Is . EqualTo ( 0 ) ) ;
101+ var message = testEndpoint . TryReceiveMessage ( ) ;
102+ Assert . That ( message . Headers [ "NServiceBus.EnclosedMessageTypes" ] ,
103+ Is . EqualTo ( "MessageContracts.Events.OrderCreated" ) ) ;
104+ Assert . That ( message . Headers [ "NServiceBus.ContentType" ] , Is . EqualTo ( "application/json" ) ) ;
105+ Assert . That ( Encoding . UTF8 . GetString ( message . Body . Span ) , Is . EqualTo ( json ) ) ;
106+ } ) ;
107+ }
108+
109+ // Test Endpoint
110+ // Example of how to wait for and get messages
111+ // https://github.com/Particular/NServiceBus.RabbitMQ/blob/dba627a5a2c50519d7a2466efe3f76c8d5c8828d/src/NServiceBus.Transport.RabbitMQ.Tests/RabbitMqContext.cs#L41
112+ private async Task RunWithTestEndpoint ( Func < TestEndpoint , Task > testAction )
113+ {
114+ var testEndpoint = await new TestEndpointFactory ( ) . CreateAzureStorageQueuesTestEndpoint ( Container . GetConnectionString ( ) ) ;
115+
116+ await testAction ( testEndpoint ) ;
117+ await testEndpoint . ShutDownAndCleanUp ( ) ;
118+ }
119+ }
0 commit comments