Skip to content

Commit

Permalink
test: add extension methods test
Browse files Browse the repository at this point in the history
  • Loading branch information
nogic1008 committed Jun 9, 2024
1 parent 8daf12e commit 549e1cb
Showing 1 changed file with 105 additions and 2 deletions.
107 changes: 105 additions & 2 deletions test/Nogic.WritableOptions.Tests/ServiceCollectionExtension.Test.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Text.Json;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

Expand All @@ -10,7 +11,7 @@ namespace Nogic.WritableOptions.Tests;
public sealed class ServiceCollectionExtensionTest
{
/// <summary>
/// <see cref="ServiceCollectionExtension.ConfigureWritable{TOptions}"/> calls <see cref="ServiceCollectionServiceExtensions.AddTransient{IWritableOptions{TOptions}}(IServiceCollection, Func{IServiceProvider, IWritableOptions{TOptions}})"/>.
/// <see cref="ServiceCollectionExtension.ConfigureWritable{TOptions}(IServiceCollection, IConfigurationSection, string)"/> calls <see cref="ServiceCollectionServiceExtensions.AddTransient{IWritableOptions{TOptions}}(IServiceCollection, Func{IServiceProvider, IWritableOptions{TOptions}})"/>.
/// </summary>
[TestMethod($"{nameof(ServiceCollectionExtension.ConfigureWritable)}<TOptions>() calls {nameof(ServiceCollectionServiceExtensions.AddTransient)}<IWritableOptions<TOptions>>().")]
public void ConfigureWritable_Calls_AddTransient()
Expand All @@ -35,7 +36,58 @@ public void ConfigureWritable_Calls_AddTransient()
}

/// <summary>
/// <see cref="ServiceCollectionExtension.ConfigureWritableWithExplicitPath{TOptions}"/> calls <see cref="ServiceCollectionServiceExtensions.AddTransient{IWritableOptions{TOptions}}(IServiceCollection, Func{IServiceProvider, IWritableOptions{TOptions}})"/>.
/// <see cref="ServiceCollectionExtension.ConfigureWritable{TOptions}(IServiceCollection, IConfigurationSection, JsonSerializerOptions, string)"/> calls <see cref="ServiceCollectionServiceExtensions.AddTransient{IWritableOptions{TOptions}}(IServiceCollection, Func{IServiceProvider, IWritableOptions{TOptions}})"/>.
/// </summary>
[TestMethod($"{nameof(ServiceCollectionExtension.ConfigureWritable)}<TOptions>({nameof(JsonSerializerOptions)}) calls {nameof(ServiceCollectionServiceExtensions.AddTransient)}<IWritableOptions<TOptions>>().")]
public void ConfigureWritable_JsonSerializerOptions_Calls_AddTransient()
{
// Arrange
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection()
.Build();
var service = new ServiceCollection();
var options = new JsonSerializerOptions();

// Act
_ = service.ConfigureWritable<SampleOption>(configuration.GetSection("Nested"), options);
var provider = service.BuildServiceProvider();

// Assert
var option = provider.GetService<IWritableOptions<SampleOption>>();
var otherOption = provider.GetService<IWritableOptions<SampleOption>>();

_ = option.Should().NotBeNull()
.And.BeOfType<JsonWritableOptions<SampleOption>>()
.And.NotBe(otherOption);
}

/// <summary>
/// <see cref="ServiceCollectionExtension.ConfigureWritable{TOptions}(IServiceCollection, IConfigurationSection, Func{JsonSerializerOptions}, string)"/> calls <see cref="ServiceCollectionServiceExtensions.AddTransient{IWritableOptions{TOptions}}(IServiceCollection, Func{IServiceProvider, IWritableOptions{TOptions}})"/>.
/// </summary>
[TestMethod($"{nameof(ServiceCollectionExtension.ConfigureWritable)}<TOptions>({nameof(Func<JsonSerializerOptions>)}) calls {nameof(ServiceCollectionServiceExtensions.AddTransient)}<IWritableOptions<TOptions>>().")]
public void ConfigureWritable_FuncJsonSerializerOptions_Calls_AddTransient()
{
// Arrange
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection()
.Build();
var service = new ServiceCollection();

// Act
_ = service.ConfigureWritable<SampleOption>(configuration.GetSection("Nested"), () => new());
var provider = service.BuildServiceProvider();

// Assert
var option = provider.GetService<IWritableOptions<SampleOption>>();
var otherOption = provider.GetService<IWritableOptions<SampleOption>>();

_ = option.Should().NotBeNull()
.And.BeOfType<JsonWritableOptions<SampleOption>>()
.And.NotBe(otherOption);
}

/// <summary>
/// <see cref="ServiceCollectionExtension.ConfigureWritableWithExplicitPath{TOptions}(IServiceCollection, IConfigurationSection, string, string)"/> calls <see cref="ServiceCollectionServiceExtensions.AddTransient{IWritableOptions{TOptions}}(IServiceCollection, Func{IServiceProvider, IWritableOptions{TOptions}})"/>.
/// </summary>
[TestMethod($"{nameof(ServiceCollectionExtension.ConfigureWritableWithExplicitPath)}<TOptions>() calls {nameof(ServiceCollectionServiceExtensions.AddTransient)}<IWritableOptions<TOptions>>().")]
public void ConfigureWritableWithExplicitPath_Calls_AddTransient()
Expand All @@ -58,4 +110,55 @@ public void ConfigureWritableWithExplicitPath_Calls_AddTransient()
.And.BeOfType<JsonWritableOptions<SampleOption>>()
.And.NotBe(otherOption);
}

/// <summary>
/// <see cref="ServiceCollectionExtension.ConfigureWritableWithExplicitPath{TOptions}(IServiceCollection, IConfigurationSection, string, JsonSerializerOptions, string)"/> calls <see cref="ServiceCollectionServiceExtensions.AddTransient{IWritableOptions{TOptions}}(IServiceCollection, Func{IServiceProvider, IWritableOptions{TOptions}})"/>.
/// </summary>
[TestMethod($"{nameof(ServiceCollectionExtension.ConfigureWritableWithExplicitPath)}<TOptions>({nameof(JsonSerializerOptions)}) calls {nameof(ServiceCollectionServiceExtensions.AddTransient)}<IWritableOptions<TOptions>>().")]
public void ConfigureWritableWithExplicitPath_JsonSerializerOptions_Calls_AddTransient()
{
// Arrange
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection()
.Build();
var service = new ServiceCollection();
var options = new JsonSerializerOptions();

// Act
_ = service.ConfigureWritableWithExplicitPath<SampleOption>(configuration.GetSection("Nested"), AppDomain.CurrentDomain.BaseDirectory!, options);
var provider = service.BuildServiceProvider();

// Assert
var option = provider.GetService<IWritableOptions<SampleOption>>();
var otherOption = provider.GetService<IWritableOptions<SampleOption>>();

_ = option.Should().NotBeNull()
.And.BeOfType<JsonWritableOptions<SampleOption>>()
.And.NotBe(otherOption);
}

/// <summary>
/// <see cref="ServiceCollectionExtension.ConfigureWritableWithExplicitPath{TOptions}(IServiceCollection, IConfigurationSection, string, Func{JsonSerializerOptions}, string)"/> calls <see cref="ServiceCollectionServiceExtensions.AddTransient{IWritableOptions{TOptions}}(IServiceCollection, Func{IServiceProvider, IWritableOptions{TOptions}})"/>.
/// </summary>
[TestMethod($"{nameof(ServiceCollectionExtension.ConfigureWritableWithExplicitPath)}<TOptions>({nameof(Func<JsonSerializerOptions>)}) calls {nameof(ServiceCollectionServiceExtensions.AddTransient)}<IWritableOptions<TOptions>>().")]
public void ConfigureWritableWithExplicitPath_FuncJsonSerializerOptions_Calls_AddTransient()
{
// Arrange
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection()
.Build();
var service = new ServiceCollection();

// Act
_ = service.ConfigureWritableWithExplicitPath<SampleOption>(configuration.GetSection("Nested"), AppDomain.CurrentDomain.BaseDirectory!, () => new());
var provider = service.BuildServiceProvider();

// Assert
var option = provider.GetService<IWritableOptions<SampleOption>>();
var otherOption = provider.GetService<IWritableOptions<SampleOption>>();

_ = option.Should().NotBeNull()
.And.BeOfType<JsonWritableOptions<SampleOption>>()
.And.NotBe(otherOption);
}
}

0 comments on commit 549e1cb

Please sign in to comment.