Skip to content

Commit 9de9604

Browse files
Replace MediatR with Wolverine (#52)
1 parent 279125d commit 9de9604

File tree

12 files changed

+89
-96
lines changed

12 files changed

+89
-96
lines changed

src-Arius5/Arius.Cli.Tests/ArchiveCliCommandTests.cs

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using Arius.Core.Commands;
22
using Arius.Core.Models;
3-
using MediatR;
3+
using Wolverine;
44
using NSubstitute;
55
using Shouldly;
66

@@ -17,26 +17,26 @@ public ArchiveCliCommandTests(CliCommandTestsFixture fixture)
1717
}
1818

1919
[Fact]
20-
public async Task ExecuteAsync_WithAllOptions_SendsCorrectMediatRCommand()
20+
public async Task ExecuteAsync_WithAllOptions_SendsCorrectCommand()
2121
{
22-
// Arrange: Capture the command sent to IMediator
22+
// Arrange: Capture the command sent to IMessageBus
2323
ArchiveCommand? capturedCommand = null;
24-
var mediatorMock = Substitute.For<IMediator>();
25-
mediatorMock
26-
.Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
27-
.Returns(Task.FromResult(Unit.Value))
24+
var busMock = Substitute.For<IMessageBus>();
25+
busMock
26+
.InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
27+
.Returns(Task.CompletedTask)
2828
.AndDoes(callInfo => capturedCommand = callInfo.Arg<ArchiveCommand>());
2929

3030
// Arrange: Set up the CLI arguments
3131
var tempPath = Path.GetTempPath();
3232
var command = $"archive {tempPath} --accountname testaccount --accountkey testkey --passphrase testpass --container testcontainer";
3333

3434
// Act: Run the application
35-
var (exitCode, output, error) = await fixture.CallCliAsync(command, mediatorMock);
35+
var (exitCode, output, error) = await fixture.CallCliAsync(command, busMock);
3636

3737
// Assert: Verify the outcome
3838
exitCode.ShouldBe(0);
39-
await mediatorMock.Received(1).Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>());
39+
await busMock.Received(1).InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>());
4040

4141
capturedCommand.ShouldNotBeNull();
4242
capturedCommand.LocalRoot.FullName.ShouldBe(tempPath);
@@ -67,10 +67,10 @@ public async Task ExecuteAsync_NoPath_InContainer_UsesArchiveRoot()
6767
{
6868
// Arrange
6969
ArchiveCommand? capturedCommand = null;
70-
var mediatorMock = Substitute.For<IMediator>();
71-
mediatorMock
72-
.Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
73-
.Returns(Task.FromResult(Unit.Value))
70+
var busMock = Substitute.For<IMessageBus>();
71+
busMock
72+
.InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
73+
.Returns(Task.CompletedTask)
7474
.AndDoes(callInfo => capturedCommand = callInfo.Arg<ArchiveCommand>());
7575

7676
Environment.SetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER", "true");
@@ -79,11 +79,11 @@ public async Task ExecuteAsync_NoPath_InContainer_UsesArchiveRoot()
7979
try
8080
{
8181
// Act
82-
var (exitCode, output, error)= await fixture.CallCliAsync(command, mediatorMock);
82+
var (exitCode, output, error)= await fixture.CallCliAsync(command, busMock);
8383

8484
// Assert
8585
exitCode.ShouldBe(0);
86-
await mediatorMock.Received(1).Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>());
86+
await busMock.Received(1).InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>());
8787

8888
capturedCommand.ShouldNotBeNull();
8989
capturedCommand.LocalRoot.FullName.ShouldBe(new DirectoryInfo("/archive").FullName);
@@ -103,10 +103,10 @@ public async Task ExecuteAsync_AccountKeyFromCli_NoEnvironmentVariable_UsesCliAc
103103
{
104104
// Arrange
105105
ArchiveCommand? capturedCommand = null;
106-
var mediatorMock = Substitute.For<IMediator>();
107-
mediatorMock
108-
.Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
109-
.Returns(Task.FromResult(Unit.Value))
106+
var busMock = Substitute.For<IMessageBus>();
107+
busMock
108+
.InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
109+
.Returns(Task.CompletedTask)
110110
.AndDoes(callInfo => capturedCommand = callInfo.Arg<ArchiveCommand>());
111111

112112
Environment.SetEnvironmentVariable("ARIUS_ACCOUNT_KEY", null);
@@ -116,7 +116,7 @@ public async Task ExecuteAsync_AccountKeyFromCli_NoEnvironmentVariable_UsesCliAc
116116
try
117117
{
118118
// Act
119-
var (exitCode, output, error) = await fixture.CallCliAsync(command, mediatorMock);
119+
var (exitCode, output, error) = await fixture.CallCliAsync(command, busMock);
120120

121121
// Assert
122122
exitCode.ShouldBe(0);
@@ -157,10 +157,10 @@ public async Task ExecuteAsync_NoAccountKey_AccountKeyFromEnvironmentVariable_Us
157157
{
158158
// Arrange
159159
ArchiveCommand? capturedCommand = null;
160-
var mediatorMock = Substitute.For<IMediator>();
161-
mediatorMock
162-
.Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
163-
.Returns(Task.FromResult(Unit.Value))
160+
var busMock = Substitute.For<IMessageBus>();
161+
busMock
162+
.InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
163+
.Returns(Task.CompletedTask)
164164
.AndDoes(callInfo => capturedCommand = callInfo.Arg<ArchiveCommand>());
165165

166166
Environment.SetEnvironmentVariable("ARIUS_ACCOUNT_KEY", "testkeyenv");
@@ -170,7 +170,7 @@ public async Task ExecuteAsync_NoAccountKey_AccountKeyFromEnvironmentVariable_Us
170170
try
171171
{
172172
// Act
173-
var (exitCode, output, error) = await fixture.CallCliAsync(command, mediatorMock);
173+
var (exitCode, output, error) = await fixture.CallCliAsync(command, busMock);
174174

175175
// Assert
176176
exitCode.ShouldBe(0);
@@ -188,10 +188,10 @@ public async Task ExecuteAsync_AccountKeyFromCli_AccountKeyFromEnvironmentVariab
188188
{
189189
// Arrange
190190
ArchiveCommand? capturedCommand = null;
191-
var mediatorMock = Substitute.For<IMediator>();
192-
mediatorMock
193-
.Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
194-
.Returns(Task.FromResult(Unit.Value))
191+
var busMock = Substitute.For<IMessageBus>();
192+
busMock
193+
.InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
194+
.Returns(Task.CompletedTask)
195195
.AndDoes(callInfo => capturedCommand = callInfo.Arg<ArchiveCommand>());
196196

197197
Environment.SetEnvironmentVariable("ARIUS_ACCOUNT_KEY", "testkeyenv");
@@ -201,7 +201,7 @@ public async Task ExecuteAsync_AccountKeyFromCli_AccountKeyFromEnvironmentVariab
201201
try
202202
{
203203
// Act
204-
var (exitCode, output, error) = await fixture.CallCliAsync(command, mediatorMock);
204+
var (exitCode, output, error) = await fixture.CallCliAsync(command, busMock);
205205

206206
// Assert
207207
exitCode.ShouldBe(0);

src-Arius5/Arius.Cli.Tests/CliCommandTestsFixture.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using CliFx.Infrastructure;
2-
using MediatR;
2+
using Wolverine;
33
using Microsoft.Extensions.DependencyInjection;
44
using Microsoft.Extensions.DependencyInjection.Extensions;
55

@@ -11,16 +11,16 @@ public CliCommandTestsFixture()
1111
{
1212
}
1313

14-
public async Task<(int ExitCode, string Output, string Error)> CallCliAsync(string command, IMediator? mediatorMock = null)
14+
public async Task<(int ExitCode, string Output, string Error)> CallCliAsync(string command, IMessageBus? busMock = null)
1515
{
1616
using var console = new FakeInMemoryConsole();
1717

18-
var serviceProvider = mediatorMock is null
18+
var serviceProvider = busMock is null
1919
? Program.ConfigureServices(new ServiceCollection())
2020
.BuildServiceProvider()
2121
: Program.ConfigureServices(new ServiceCollection())
22-
.RemoveAll<IMediator>()
23-
.AddSingleton(mediatorMock)
22+
.RemoveAll<IMessageBus>()
23+
.AddSingleton(busMock)
2424
.BuildServiceProvider();
2525

2626
var app = Program

src-Arius5/Arius.Cli.Tests/RestoreCliCommandTests.cs

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using Arius.Core.Commands;
2-
using MediatR;
2+
using Wolverine;
33
using NSubstitute;
44
using Shouldly;
55

@@ -16,25 +16,25 @@ public RestoreCliCommandTests(CliCommandTestsFixture fixture)
1616
}
1717

1818
[Fact]
19-
public async Task ExecuteAsync_WithAllOptions_SendsCorrectMediatRCommand()
19+
public async Task ExecuteAsync_WithAllOptions_SendsCorrectCommand()
2020
{
2121
// Arrange
2222
RestoreCommand? capturedCommand = null;
23-
var mediatorMock = Substitute.For<IMediator>();
24-
mediatorMock
25-
.Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
26-
.Returns(Task.FromResult(Unit.Value))
23+
var busMock = Substitute.For<IMessageBus>();
24+
busMock
25+
.InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
26+
.Returns(Task.CompletedTask)
2727
.AndDoes(callInfo => capturedCommand = callInfo.Arg<RestoreCommand>());
2828

2929
var tempPath = Path.GetTempPath();
3030
var command = $"restore {tempPath} --accountname testaccount --accountkey testkey --passphrase testpass --container testcontainer --synchronize --download --keep-pointers";
3131

3232
// Act
33-
var (exitCode, output, error) = await fixture.CallCliAsync(command, mediatorMock);
33+
var (exitCode, output, error) = await fixture.CallCliAsync(command, busMock);
3434

3535
// Assert
3636
exitCode.ShouldBe(0);
37-
await mediatorMock.Received(1).Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>());
37+
await busMock.Received(1).InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>());
3838

3939
capturedCommand.ShouldNotBeNull();
4040
capturedCommand.LocalRoot.FullName.ShouldBe(tempPath);
@@ -66,10 +66,10 @@ public async Task ExecuteAsync_NoPath_InContainer_UsesArchiveRoot()
6666
{
6767
// Arrange
6868
RestoreCommand? capturedCommand = null;
69-
var mediatorMock = Substitute.For<IMediator>();
70-
mediatorMock
71-
.Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
72-
.Returns(Task.FromResult(Unit.Value))
69+
var busMock = Substitute.For<IMessageBus>();
70+
busMock
71+
.InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
72+
.Returns(Task.CompletedTask)
7373
.AndDoes(callInfo => capturedCommand = callInfo.Arg<RestoreCommand>());
7474

7575
Environment.SetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER", "true");
@@ -78,11 +78,11 @@ public async Task ExecuteAsync_NoPath_InContainer_UsesArchiveRoot()
7878
try
7979
{
8080
// Act
81-
var (exitCode, output, error) = await fixture.CallCliAsync(command, mediatorMock);
81+
var (exitCode, output, error) = await fixture.CallCliAsync(command, busMock);
8282

8383
// Assert
8484
exitCode.ShouldBe(0);
85-
await mediatorMock.Received(1).Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>());
85+
await busMock.Received(1).InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>());
8686

8787
capturedCommand.ShouldNotBeNull();
8888
capturedCommand.LocalRoot.FullName.ShouldBe(new DirectoryInfo("/archive").FullName);
@@ -102,10 +102,10 @@ public async Task ExecuteAsync_AccountKeyFromCli_NoEnvironmentVariable_UsesCliAc
102102
{
103103
// Arrange
104104
RestoreCommand? capturedCommand = null;
105-
var mediatorMock = Substitute.For<IMediator>();
106-
mediatorMock
107-
.Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
108-
.Returns(Task.FromResult(Unit.Value))
105+
var busMock = Substitute.For<IMessageBus>();
106+
busMock
107+
.InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
108+
.Returns(Task.CompletedTask)
109109
.AndDoes(callInfo => capturedCommand = callInfo.Arg<RestoreCommand>());
110110

111111
Environment.SetEnvironmentVariable("ARIUS_ACCOUNT_KEY", null);
@@ -115,7 +115,7 @@ public async Task ExecuteAsync_AccountKeyFromCli_NoEnvironmentVariable_UsesCliAc
115115
try
116116
{
117117
// Act
118-
var (exitCode, output, error) = await fixture.CallCliAsync(command, mediatorMock);
118+
var (exitCode, output, error) = await fixture.CallCliAsync(command, busMock);
119119

120120
// Assert
121121
exitCode.ShouldBe(0);
@@ -156,10 +156,10 @@ public async Task ExecuteAsync_NoAccountKey_AccountKeyFromEnvironmentVariable_Us
156156
{
157157
// Arrange
158158
RestoreCommand? capturedCommand = null;
159-
var mediatorMock = Substitute.For<IMediator>();
160-
mediatorMock
161-
.Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
162-
.Returns(Task.FromResult(Unit.Value))
159+
var busMock = Substitute.For<IMessageBus>();
160+
busMock
161+
.InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
162+
.Returns(Task.CompletedTask)
163163
.AndDoes(callInfo => capturedCommand = callInfo.Arg<RestoreCommand>());
164164

165165
Environment.SetEnvironmentVariable("ARIUS_ACCOUNT_KEY", "testkeyenv");
@@ -169,7 +169,7 @@ public async Task ExecuteAsync_NoAccountKey_AccountKeyFromEnvironmentVariable_Us
169169
try
170170
{
171171
// Act
172-
var (exitCode, output, error) = await fixture.CallCliAsync(command, mediatorMock);
172+
var (exitCode, output, error) = await fixture.CallCliAsync(command, busMock);
173173

174174
// Assert
175175
exitCode.ShouldBe(0);
@@ -187,10 +187,10 @@ public async Task ExecuteAsync_AccountKeyFromCli_AccountKeyFromEnvironmentVariab
187187
{
188188
// Arrange
189189
RestoreCommand? capturedCommand = null;
190-
var mediatorMock = Substitute.For<IMediator>();
191-
mediatorMock
192-
.Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
193-
.Returns(Task.FromResult(Unit.Value))
190+
var busMock = Substitute.For<IMessageBus>();
191+
busMock
192+
.InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
193+
.Returns(Task.CompletedTask)
194194
.AndDoes(callInfo => capturedCommand = callInfo.Arg<RestoreCommand>());
195195

196196
Environment.SetEnvironmentVariable("ARIUS_ACCOUNT_KEY", "testkeyenv");
@@ -200,7 +200,7 @@ public async Task ExecuteAsync_AccountKeyFromCli_AccountKeyFromEnvironmentVariab
200200
try
201201
{
202202
// Act
203-
var (exitCode, output, error) = await fixture.CallCliAsync(command, mediatorMock);
203+
var (exitCode, output, error) = await fixture.CallCliAsync(command, busMock);
204204

205205
// Assert
206206
exitCode.ShouldBe(0);

src-Arius5/Arius.Cli/CliCommands/ArchiveCliCommand.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@
33
using CliFx;
44
using CliFx.Attributes;
55
using CliFx.Infrastructure;
6-
using MediatR;
6+
using Wolverine;
77
using Spectre.Console;
88
using System.Collections.Concurrent;
99

1010
namespace Arius.Cli.CliCommands;
1111

1212
public abstract class ArchiveCliCommandBase : ICommand
1313
{
14-
private readonly IMediator _mediator;
14+
private readonly IMessageBus _bus;
1515

16-
public ArchiveCliCommandBase(IMediator mediator)
16+
public ArchiveCliCommandBase(IMessageBus bus)
1717
{
18-
_mediator = mediator;
18+
_bus = bus;
1919
}
2020

2121
public abstract DirectoryInfo LocalRoot { get; init; }
@@ -77,7 +77,7 @@ await AnsiConsole.Progress()
7777

7878
// Send the command and start the progress display loop
7979
var cancellationToken = console.RegisterCancellationHandler();
80-
var commandTask = _mediator.Send(command, cancellationToken);
80+
var commandTask = _bus.InvokeAsync(command, cancellationToken);
8181

8282
var taskDictionary = new ConcurrentDictionary<string, ProgressTask>();
8383

@@ -145,7 +145,7 @@ private static string TruncateAndLeftJustify(string input, int width)
145145
[Command("archive", Description = "Archives a local directory to Azure Blob Storage.")]
146146
public class ArchiveCliCommand: ArchiveCliCommandBase
147147
{
148-
public ArchiveCliCommand(IMediator mediator) : base(mediator)
148+
public ArchiveCliCommand(IMessageBus bus) : base(bus)
149149
{
150150
}
151151

@@ -158,7 +158,7 @@ public ArchiveCliCommand(IMediator mediator) : base(mediator)
158158
[Command("archive", Description = "Archives a local directory to Azure Blob Storage. [Docker]")]
159159
public class ArchiveDockerCliCommand : ArchiveCliCommandBase
160160
{
161-
public ArchiveDockerCliCommand(IMediator mediator) : base(mediator)
161+
public ArchiveDockerCliCommand(IMessageBus bus) : base(bus)
162162
{
163163
}
164164

0 commit comments

Comments
 (0)