Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 30 additions & 30 deletions src-Arius5/Arius.Cli.Tests/ArchiveCliCommandTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Arius.Core.Commands;
using Arius.Core.Models;
using MediatR;
using Wolverine;
using NSubstitute;
using Shouldly;

Expand All @@ -17,26 +17,26 @@ public ArchiveCliCommandTests(CliCommandTestsFixture fixture)
}

[Fact]
public async Task ExecuteAsync_WithAllOptions_SendsCorrectMediatRCommand()
public async Task ExecuteAsync_WithAllOptions_SendsCorrectCommand()
{
// Arrange: Capture the command sent to IMediator
// Arrange: Capture the command sent to IMessageBus
ArchiveCommand? capturedCommand = null;
var mediatorMock = Substitute.For<IMediator>();
mediatorMock
.Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(Unit.Value))
var busMock = Substitute.For<IMessageBus>();
busMock
.InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.CompletedTask)
.AndDoes(callInfo => capturedCommand = callInfo.Arg<ArchiveCommand>());

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

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

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

capturedCommand.ShouldNotBeNull();
capturedCommand.LocalRoot.FullName.ShouldBe(tempPath);
Expand Down Expand Up @@ -67,10 +67,10 @@ public async Task ExecuteAsync_NoPath_InContainer_UsesArchiveRoot()
{
// Arrange
ArchiveCommand? capturedCommand = null;
var mediatorMock = Substitute.For<IMediator>();
mediatorMock
.Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(Unit.Value))
var busMock = Substitute.For<IMessageBus>();
busMock
.InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.CompletedTask)
.AndDoes(callInfo => capturedCommand = callInfo.Arg<ArchiveCommand>());

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

// Assert
exitCode.ShouldBe(0);
await mediatorMock.Received(1).Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>());
await busMock.Received(1).InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>());

capturedCommand.ShouldNotBeNull();
capturedCommand.LocalRoot.FullName.ShouldBe(new DirectoryInfo("/archive").FullName);
Expand All @@ -103,10 +103,10 @@ public async Task ExecuteAsync_AccountKeyFromCli_NoEnvironmentVariable_UsesCliAc
{
// Arrange
ArchiveCommand? capturedCommand = null;
var mediatorMock = Substitute.For<IMediator>();
mediatorMock
.Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(Unit.Value))
var busMock = Substitute.For<IMessageBus>();
busMock
.InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.CompletedTask)
.AndDoes(callInfo => capturedCommand = callInfo.Arg<ArchiveCommand>());

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

// Assert
exitCode.ShouldBe(0);
Expand Down Expand Up @@ -157,10 +157,10 @@ public async Task ExecuteAsync_NoAccountKey_AccountKeyFromEnvironmentVariable_Us
{
// Arrange
ArchiveCommand? capturedCommand = null;
var mediatorMock = Substitute.For<IMediator>();
mediatorMock
.Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(Unit.Value))
var busMock = Substitute.For<IMessageBus>();
busMock
.InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.CompletedTask)
.AndDoes(callInfo => capturedCommand = callInfo.Arg<ArchiveCommand>());

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

// Assert
exitCode.ShouldBe(0);
Expand All @@ -188,10 +188,10 @@ public async Task ExecuteAsync_AccountKeyFromCli_AccountKeyFromEnvironmentVariab
{
// Arrange
ArchiveCommand? capturedCommand = null;
var mediatorMock = Substitute.For<IMediator>();
mediatorMock
.Send(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(Unit.Value))
var busMock = Substitute.For<IMessageBus>();
busMock
.InvokeAsync(Arg.Any<ArchiveCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.CompletedTask)
.AndDoes(callInfo => capturedCommand = callInfo.Arg<ArchiveCommand>());

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

// Assert
exitCode.ShouldBe(0);
Expand Down
10 changes: 5 additions & 5 deletions src-Arius5/Arius.Cli.Tests/CliCommandTestsFixture.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using CliFx.Infrastructure;
using MediatR;
using Wolverine;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;

Expand All @@ -11,16 +11,16 @@ public CliCommandTestsFixture()
{
}

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

var serviceProvider = mediatorMock is null
var serviceProvider = busMock is null
? Program.ConfigureServices(new ServiceCollection())
.BuildServiceProvider()
: Program.ConfigureServices(new ServiceCollection())
.RemoveAll<IMediator>()
.AddSingleton(mediatorMock)
.RemoveAll<IMessageBus>()
.AddSingleton(busMock)
.BuildServiceProvider();

var app = Program
Expand Down
58 changes: 29 additions & 29 deletions src-Arius5/Arius.Cli.Tests/RestoreCliCommandTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Arius.Core.Commands;
using MediatR;
using Wolverine;
using NSubstitute;
using Shouldly;

Expand All @@ -16,25 +16,25 @@ public RestoreCliCommandTests(CliCommandTestsFixture fixture)
}

[Fact]
public async Task ExecuteAsync_WithAllOptions_SendsCorrectMediatRCommand()
public async Task ExecuteAsync_WithAllOptions_SendsCorrectCommand()
{
// Arrange
RestoreCommand? capturedCommand = null;
var mediatorMock = Substitute.For<IMediator>();
mediatorMock
.Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(Unit.Value))
var busMock = Substitute.For<IMessageBus>();
busMock
.InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.CompletedTask)
.AndDoes(callInfo => capturedCommand = callInfo.Arg<RestoreCommand>());

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

// Act
var (exitCode, output, error) = await fixture.CallCliAsync(command, mediatorMock);
var (exitCode, output, error) = await fixture.CallCliAsync(command, busMock);

// Assert
exitCode.ShouldBe(0);
await mediatorMock.Received(1).Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>());
await busMock.Received(1).InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>());

capturedCommand.ShouldNotBeNull();
capturedCommand.LocalRoot.FullName.ShouldBe(tempPath);
Expand Down Expand Up @@ -66,10 +66,10 @@ public async Task ExecuteAsync_NoPath_InContainer_UsesArchiveRoot()
{
// Arrange
RestoreCommand? capturedCommand = null;
var mediatorMock = Substitute.For<IMediator>();
mediatorMock
.Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(Unit.Value))
var busMock = Substitute.For<IMessageBus>();
busMock
.InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.CompletedTask)
.AndDoes(callInfo => capturedCommand = callInfo.Arg<RestoreCommand>());

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

// Assert
exitCode.ShouldBe(0);
await mediatorMock.Received(1).Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>());
await busMock.Received(1).InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>());

capturedCommand.ShouldNotBeNull();
capturedCommand.LocalRoot.FullName.ShouldBe(new DirectoryInfo("/archive").FullName);
Expand All @@ -102,10 +102,10 @@ public async Task ExecuteAsync_AccountKeyFromCli_NoEnvironmentVariable_UsesCliAc
{
// Arrange
RestoreCommand? capturedCommand = null;
var mediatorMock = Substitute.For<IMediator>();
mediatorMock
.Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(Unit.Value))
var busMock = Substitute.For<IMessageBus>();
busMock
.InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.CompletedTask)
.AndDoes(callInfo => capturedCommand = callInfo.Arg<RestoreCommand>());

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

// Assert
exitCode.ShouldBe(0);
Expand Down Expand Up @@ -156,10 +156,10 @@ public async Task ExecuteAsync_NoAccountKey_AccountKeyFromEnvironmentVariable_Us
{
// Arrange
RestoreCommand? capturedCommand = null;
var mediatorMock = Substitute.For<IMediator>();
mediatorMock
.Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(Unit.Value))
var busMock = Substitute.For<IMessageBus>();
busMock
.InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.CompletedTask)
.AndDoes(callInfo => capturedCommand = callInfo.Arg<RestoreCommand>());

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

// Assert
exitCode.ShouldBe(0);
Expand All @@ -187,10 +187,10 @@ public async Task ExecuteAsync_AccountKeyFromCli_AccountKeyFromEnvironmentVariab
{
// Arrange
RestoreCommand? capturedCommand = null;
var mediatorMock = Substitute.For<IMediator>();
mediatorMock
.Send(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(Unit.Value))
var busMock = Substitute.For<IMessageBus>();
busMock
.InvokeAsync(Arg.Any<RestoreCommand>(), Arg.Any<CancellationToken>())
.Returns(Task.CompletedTask)
.AndDoes(callInfo => capturedCommand = callInfo.Arg<RestoreCommand>());

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

// Assert
exitCode.ShouldBe(0);
Expand Down
14 changes: 7 additions & 7 deletions src-Arius5/Arius.Cli/CliCommands/ArchiveCliCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@
using CliFx;
using CliFx.Attributes;
using CliFx.Infrastructure;
using MediatR;
using Wolverine;
using Spectre.Console;
using System.Collections.Concurrent;

namespace Arius.Cli.CliCommands;

public abstract class ArchiveCliCommandBase : ICommand
{
private readonly IMediator _mediator;
private readonly IMessageBus _bus;

public ArchiveCliCommandBase(IMediator mediator)
public ArchiveCliCommandBase(IMessageBus bus)
{
_mediator = mediator;
_bus = bus;
}

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

// Send the command and start the progress display loop
var cancellationToken = console.RegisterCancellationHandler();
var commandTask = _mediator.Send(command, cancellationToken);
var commandTask = _bus.InvokeAsync(command, cancellationToken);

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

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

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

Expand Down
Loading
Loading