Skip to content

Commit

Permalink
UNIT TEST TRYOUTS
Browse files Browse the repository at this point in the history
  • Loading branch information
woutervanranst committed Aug 27, 2024
1 parent 9cb8333 commit 903e59c
Show file tree
Hide file tree
Showing 9 changed files with 569 additions and 18 deletions.
1 change: 1 addition & 0 deletions src/Arius.Core.Domain/Arius.Core.Domain.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

<ItemGroup>
<PackageReference Include="FluentValidation" Version="11.9.2" />
<PackageReference Include="TestableIO.System.IO.Abstractions" Version="21.0.29" />
<PackageReference Include="WouterVanRanst.Utils" Version="1.0.7" />
</ItemGroup>

Expand Down
10 changes: 6 additions & 4 deletions src/Arius.Core.Domain/AriusConfiguration.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
namespace Arius.Core.Domain;
using System.IO.Abstractions;

namespace Arius.Core.Domain;

public record AriusConfiguration
{
public required DirectoryInfo LocalConfigRoot { get; set; }
public required IDirectoryInfo LocalConfigRoot { get; set; }


private DirectoryInfo StateDbRoot => LocalConfigRoot.CreateSubdirectory("StateDbs");
public DirectoryInfo GetLocalStateDbFolderForRepositoryName(string containerName) => StateDbRoot.CreateSubdirectory(containerName);
private IDirectoryInfo StateDbRoot => LocalConfigRoot.CreateSubdirectory("StateDbs");
public IDirectoryInfo GetLocalStateDbFolderForRepositoryName(string containerName) => StateDbRoot.CreateSubdirectory(containerName);
}
16 changes: 8 additions & 8 deletions src/Arius.Core.Domain/DirectoryInfoExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
namespace WouterVanRanst.Utils;
//namespace WouterVanRanst.Utils;

public static class DirectoryInfoExtensions
{
public static string GetFullName(this DirectoryInfo directoryInfo, string fileName)
{
return Path.Combine(directoryInfo.FullName, fileName);
}
}
//public static class DirectoryInfoExtensions
//{
// public static string GetFullName(this DirectoryInfo directoryInfo, string fileName)
// {
// return Path.Combine(directoryInfo.FullName, fileName);
// }
//}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<PackageReference Include="Microsoft.Extensions.Options" Version="8.0.2" />
<PackageReference Include="Nito.AsyncEx.Coordination" Version="5.1.2" />
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
<PackageReference Include="TestableIO.System.IO.Abstractions" Version="21.0.29" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Arius.Core.Domain;
using System.IO.Abstractions;
using Arius.Core.Domain;
using Arius.Core.Domain.Repositories;
using Arius.Core.Domain.Storage;
using Azure;
Expand All @@ -10,16 +11,22 @@ namespace Arius.Core.Infrastructure.Repositories;
public class SqliteStateDbRepositoryFactory : IStateDbRepositoryFactory
{
private readonly IStorageAccountFactory storageAccountFactory;
private readonly IFileSystem fileSystem;
private readonly AriusConfiguration config;
private readonly ILogger<SqliteStateDbRepositoryFactory> logger;

public SqliteStateDbRepositoryFactory(
IStorageAccountFactory storageAccountFactory,
IOptions<AriusConfiguration> config,
IFileSystem fileSystem,
ILogger<SqliteStateDbRepositoryFactory> logger)




{
this.storageAccountFactory = storageAccountFactory;
this.fileSystem = fileSystem;
this.config = config.Value;
this.logger = logger;
}
Expand Down Expand Up @@ -52,9 +59,9 @@ public async Task<IStateDbRepository> CreateAsync(RepositoryOptions repositoryOp

private async Task<string> GetLocalRepositoryFullNameAsync(IRepository repository, DirectoryInfo stateDbFolder, RepositoryVersion version, string passphrase)
{
var localPath = stateDbFolder.GetFullName(version.GetFileSystemName());
var localPath = fileSystem.Path.Combine(stateDbFolder.FullName, version.GetFileSystemName());

if (File.Exists(localPath))
if (fileSystem.File.Exists(localPath))
return localPath;

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="System.IO.Abstractions.TestingHelpers" Version="21.0.29" />
<PackageReference Include="System.Text.Json" Version="8.0.4" />
<PackageReference Include="WouterVanRanst.Utils" Version="1.0.7" />
<PackageReference Include="xunit" Version="2.9.0" />
Expand Down
262 changes: 262 additions & 0 deletions src/Arius.Core.New.UnitTests/Fixtures/AriusFixture - Copy.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,262 @@
using System.IO.Abstractions;
using Arius.Core.Domain;
using Arius.Core.Domain.Repositories;
using Arius.Core.Domain.Services;
using Arius.Core.Domain.Storage;
using Arius.Core.Infrastructure.Repositories;
using Arius.Core.New.UnitTests.Fakes;
using MediatR;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using NSubstitute;

namespace Arius.Core.New.UnitTests.Fixtures;

public class AriusFixture2
{
public AriusFixture2()
{
//Setup the configuration
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddUserSecrets<AriusFixture2>(optional: true)
.Build();

//UnitTestRoot = new DirectoryInfo(Path.Combine(@"C:\AriusTest", $"UnitTests-{DateTime.Now:yyMMddHHmmss}-{Random.Shared.Next()}"));
//UnitTestRoot.Create();

// Setup the service collection
var services = new ServiceCollection();

// Add configuration to the service collection
testRepositoryOptions = configuration.GetSection("RepositoryOptions").Get<TestRepositoryOptions>()!;

// Register the actual services
services.AddArius(c => c.LocalConfigRoot = FileSystem.DirectoryInfo.New("bla"));
services.AddLogging();

// Add additional services
ConfigureServices(services, ServiceConfiguration.Mocked);

// Build the service provider
var serviceProvider = services.BuildServiceProvider();

// Get the required services
StorageAccountFactory = serviceProvider.GetRequiredService<IStorageAccountFactory>();
Mediator = serviceProvider.GetRequiredService<IMediator>();

//StorageAccountFactory = Substitute.For<IStorageAccountFactory>();
//FileSystem = Substitute.For<IFileSystem>();
//Config = Substitute.For<AriusConfiguration>();

//var options = Substitute.For<IOptions<AriusConfiguration>>();
//options.Value.Returns(Config);

Factory = new SqliteStateDbRepositoryFactory(StorageAccountFactory, options, FileSystem, NullLogger<SqliteStateDbRepositoryFactory>.Instance);

}

private void ConfigureServices(IServiceCollection services, ServiceConfiguration serviceConfiguration)
{
services.AddSingleton<IStorageAccountFactory>(Substitute.For<IStorageAccountFactory>());
services.AddSingleton<ICryptoService, FakeCryptoService>();
}

public SqliteStateDbRepositoryFactory Factory { get; }
public IStorageAccountFactory StorageAccountFactory { get; }
public IFileSystem FileSystem { get; }
public IMediator Mediator { get; }
//public AriusConfiguration Config { get; }

public IRepository repository;
public string localPath;
public TestRepositoryOptions testRepositoryOptions;
public RepositoryOptions repositoryOptions;
public RepositoryVersion? version;
public IBlob blob;
}

public static class FixtureExtensions
{
public static AriusFixture2 GivenRepositoryWithNoVersions(this AriusFixture2 fixture)
{
fixture.repository.GetRepositoryVersions().Returns(AsyncEnumerable.Empty<RepositoryVersion>());
return fixture;
}
}

public class SqliteStateDbRepositoryFactoryTests3
{
private readonly AriusFixture2 fixture;

public SqliteStateDbRepositoryFactoryTests3()
{
fixture = new AriusFixture2();
}

[Fact]
public async Task CreateAsync_WhenNoVersionsAvailable_ShouldReturnNewFileName()
{
// Arrange
fixture.GivenRepositoryWithNoVersions();

// Act
var result = await fixture.Factory.CreateAsync(fixture.repositoryOptions);

}
}



//public abstract class AriusFixture : IDisposable
//{
// public Lazy<TestRepositoryOptions> mockedTestRepositoryOptions;
// public Lazy<TestRepositoryOptions> realTestRepositoryOptions;

// private Lazy<IMediator> mockedMediator;
// private Lazy<IStorageAccountFactory> mockedStorageAccountFactory;

// private Lazy<IMediator> realMediator;
// private Lazy<IStorageAccountFactory> realStorageAccountFactory;

// private Lazy<IServiceProvider> mockedServiceProvider;
// private Lazy<IServiceProvider> realServiceProvider;

// public DirectoryInfo UnitTestRoot { get; }


// protected AriusFixture()
// {
// // Setup the configuration
// var configuration = new ConfigurationBuilder()
// .SetBasePath(Directory.GetCurrentDirectory())
// .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
// .AddUserSecrets<AriusFixture>(optional: true)
// .Build();

// UnitTestRoot = new DirectoryInfo(Path.Combine(@"C:\AriusTest", $"UnitTests-{DateTime.Now:yyMMddHHmmss}-{Random.Shared.Next()}"));
// UnitTestRoot.Create();

// InitializeMockedServices();
// InitializeRealServices();


// void InitializeMockedServices()
// {
// // Setup the service collection
// var services = new ServiceCollection();

// // Add configuration to the service collection
// mockedTestRepositoryOptions = new Lazy<TestRepositoryOptions>(configuration.GetSection("RepositoryOptions").Get<TestRepositoryOptions>()!);

// // Register the actual services
// services.AddArius(c => c.LocalConfigRoot = UnitTestRoot);
// services.AddLogging();

// // Add additional services
// ConfigureServices(services, ServiceConfiguration.Mocked);

// // Build the service provider
// mockedServiceProvider = new Lazy<IServiceProvider>(services.BuildServiceProvider());

// // Get the required services
// mockedStorageAccountFactory = new Lazy<IStorageAccountFactory>(mockedServiceProvider.Value.GetRequiredService<IStorageAccountFactory>());
// mockedMediator = new Lazy<IMediator>(mockedServiceProvider.Value.GetRequiredService<IMediator>());
// }

// void InitializeRealServices()
// {
// // Setup the service collection
// var services = new ServiceCollection();

// // Add configuration to the service collection
// realTestRepositoryOptions = new Lazy<TestRepositoryOptions>(configuration.GetSection("RepositoryOptions").Get<TestRepositoryOptions>()!);

// // Register the actual services
// services.AddArius(c => c.LocalConfigRoot = UnitTestRoot);
// services.AddLogging();

// // Add additional services
// ConfigureServices(services, ServiceConfiguration.Real);

// // Build the service provider
// realServiceProvider = new Lazy<IServiceProvider>(services.BuildServiceProvider());

// // Get the required services
// realStorageAccountFactory = new Lazy<IStorageAccountFactory>(realServiceProvider.Value.GetRequiredService<IStorageAccountFactory>());
// realMediator = new Lazy<IMediator>(realServiceProvider.Value.GetRequiredService<IMediator>());
// }
// }

// public IStorageAccountFactory GetStorageAccountFactory(ServiceConfiguration serviceConfiguration) =>
// serviceConfiguration == ServiceConfiguration.Mocked ?
// mockedStorageAccountFactory.Value :
// realStorageAccountFactory.Value;

// public IMediator GetMediator(ServiceConfiguration serviceConfiguration) =>
// serviceConfiguration == ServiceConfiguration.Mocked ?
// mockedMediator.Value :
// realMediator.Value;

// public TestRepositoryOptions GetTestRepositoryOptions(ServiceConfiguration serviceConfiguration) =>
// serviceConfiguration == ServiceConfiguration.Mocked ?
// mockedTestRepositoryOptions.Value :
// realTestRepositoryOptions.Value;

// public StorageAccountOptions GetStorageAccountOptions(ServiceConfiguration serviceConfiguration) =>
// new()
// {
// AccountName = GetTestRepositoryOptions(serviceConfiguration).AccountName,
// AccountKey = GetTestRepositoryOptions(serviceConfiguration).AccountKey
// };

// public RepositoryOptions GetRepositoryOptions(ServiceConfiguration serviceConfiguration) =>
// new()
// {
// AccountName = GetTestRepositoryOptions(serviceConfiguration).AccountName,
// AccountKey = GetTestRepositoryOptions(serviceConfiguration).AccountKey,
// ContainerName = GetTestRepositoryOptions(serviceConfiguration).ContainerName,
// Passphrase = GetTestRepositoryOptions(serviceConfiguration).Passphrase
// };

// public IStateDbRepositoryFactory GetStateDbRepositoryFactory(ServiceConfiguration serviceConfiguration) =>
// serviceConfiguration == ServiceConfiguration.Mocked ?
// mockedServiceProvider.Value.GetRequiredService<IStateDbRepositoryFactory>() :
// realServiceProvider.Value.GetRequiredService<IStateDbRepositoryFactory>();

// public AriusConfiguration GetAriusConfiguration(ServiceConfiguration serviceConfiguration) =>
// serviceConfiguration == ServiceConfiguration.Mocked ?
// mockedServiceProvider.Value.GetRequiredService<IOptions<AriusConfiguration>>().Value :
// realServiceProvider.Value.GetRequiredService<IOptions<AriusConfiguration>>().Value;

// protected abstract void ConfigureServices(IServiceCollection services, ServiceConfiguration serviceConfiguration);

// public void Dispose()
// {
// // Cleanup if necessary
// }
//}

//public class RequestHandlerFixture : AriusFixture
//{
// protected override void ConfigureServices(IServiceCollection services, ServiceConfiguration serviceConfiguration)
// {
// if (serviceConfiguration == ServiceConfiguration.Mocked)
// {
// // Substitute for the dependencies

// services.AddSingleton<IStorageAccountFactory>(Substitute.For<IStorageAccountFactory>());
// services.AddSingleton<ICryptoService, FakeCryptoService>();
// }
// }
//}

//public enum ServiceConfiguration
//{
// Mocked,
// Real
//}
3 changes: 0 additions & 3 deletions src/Arius.Core.New.UnitTests/Fixtures/AriusFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,10 @@
using Arius.Core.Domain.Repositories;
using Arius.Core.Domain.Services;
using Arius.Core.Domain.Storage;
using Arius.Core.Infrastructure.Repositories;
using Arius.Core.New.Services;
using Arius.Core.New.UnitTests.Fakes;
using MediatR;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using NSubstitute;

Expand Down
Loading

0 comments on commit 903e59c

Please sign in to comment.