Skip to content

Commit

Permalink
Added unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
david-driscoll committed Nov 2, 2019
1 parent cfc73e4 commit 88bf824
Show file tree
Hide file tree
Showing 7 changed files with 110 additions and 23 deletions.
4 changes: 2 additions & 2 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<NoWarn>NU5105;CS0579;$(NoWarn)</NoWarn>
</PropertyGroup>
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)/.tmp/packageicon.png" Condition="Exists('$(MSBuildThisFileDirectory)/.tmp/packageicon.png')" Pack="true" PackagePath="/images/" />
<None Include="$(MSBuildThisFileDirectory)/LICENSE" Pack="true" PackagePath="/" />
<None Include="$(MSBuildThisFileDirectory)/.tmp/packageicon.png" Condition="Exists('$(MSBuildThisFileDirectory)/.tmp/packageicon.png')" Pack="true" PackagePath="/images/" Visible="false" />
<None Include="$(MSBuildThisFileDirectory)/LICENSE" Pack="true" PackagePath="/" Visible="false" />
</ItemGroup>
</Project>
44 changes: 26 additions & 18 deletions src/Conventions.TestHost/ConventionTestHostBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Diagnostics;
using System.IO;
using System.Reflection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyModel;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
Expand All @@ -10,6 +11,7 @@
using Rocket.Surgery.Conventions;
using Rocket.Surgery.Conventions.Reflection;
using Rocket.Surgery.Conventions.Scanners;
using Rocket.Surgery.Extensions.Configuration;

namespace Rocket.Surgery.Conventions.TestHost
{
Expand All @@ -28,6 +30,28 @@ public class ConventionTestHostBuilder
private IRocketEnvironment? _environment;
private Assembly _assembly;

/// <summary>
/// Default constructor
/// </summary>
public ConventionTestHostBuilder()
{
_serviceProperties.Set(new ConfigurationOptions()
{
ApplicationConfiguration = {
(builder) => builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true),
(builder) => builder.AddYamlFile("appsettings.yml", optional: true, reloadOnChange: true),
(builder) => builder.AddYamlFile("appsettings.yaml", optional: true, reloadOnChange: true),
(builder) => builder.AddIniFile("appsettings.ini", optional: true, reloadOnChange: true),
},
EnvironmentConfiguration = {
(builder, environmentName) => builder.AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: true),
(builder, environmentName) => builder.AddYamlFile($"appsettings.{environmentName}.yml", optional: true, reloadOnChange: true),
(builder, environmentName) => builder.AddYamlFile($"appsettings.{environmentName}.yaml", optional: true, reloadOnChange: true),
(builder, environmentName) => builder.AddIniFile($"appsettings.{environmentName}.ini", optional: true, reloadOnChange: true),
}
});
}

/// <summary>
/// Create a convention test host build for the given <see cref="DependencyContext" /> in the assembly.
/// </summary>
Expand Down Expand Up @@ -188,23 +212,7 @@ public ConventionTestHostBuilder With(IRocketEnvironment environment)
/// Create the convention test host with the given defaults
/// </summary>
/// <returns></returns>
public ConventionTestHost Create()
{
var assemblyCandidateFinder = _assemblyCandidateFinder ?? throw new ArgumentNullException("AssemblyCandidateFinder");
var assemblyProvider = _assemblyProvider ?? throw new ArgumentNullException("AssemblyProvider");

string contentRootPath = _assembly != null && Directory.Exists(Path.GetDirectoryName(_assembly.Location)) ? Path.GetDirectoryName(_assembly.Location) : Directory.GetCurrentDirectory();
var contentProvider = !string.IsNullOrWhiteSpace(contentRootPath) ? new PhysicalFileProvider(contentRootPath) : new NullFileProvider() as IFileProvider;
return new ConventionTestHost(
_scanner ?? new SimpleConventionScanner(assemblyCandidateFinder, _serviceProperties, _logger ?? NullLogger.Instance),
assemblyCandidateFinder,
assemblyProvider,
_diagnosticSource ?? new DiagnosticListener(nameof(ConventionTestHost)),
_serviceProperties,
_loggerFactory ?? NullLoggerFactory.Instance,
_environment ?? new RocketEnvironment("Test", nameof(ConventionTestHost), contentRootPath, contentProvider)
);
}
public ConventionTestHost Create() => Create(_ => { });

/// <summary>
/// Create the convention test host with the given defaults
Expand All @@ -215,7 +223,7 @@ public ConventionTestHost Create(Action<IConventionHostBuilder> action)
var assemblyCandidateFinder = _assemblyCandidateFinder ?? throw new ArgumentNullException("AssemblyCandidateFinder");
var assemblyProvider = _assemblyProvider ?? throw new ArgumentNullException("AssemblyProvider");

string contentRootPath = _assembly != null && Directory.Exists(Path.GetDirectoryName(_assembly.Location)) ? Path.GetDirectoryName(_assembly.Location) : string.Empty;
var contentRootPath = _assembly != null && Directory.Exists(Path.GetDirectoryName(_assembly.Location)) ? Path.GetDirectoryName(_assembly.Location) : string.Empty;
var contentProvider = !string.IsNullOrWhiteSpace(contentRootPath) ? new PhysicalFileProvider(contentRootPath) : new NullFileProvider() as IFileProvider;
var builder = new ConventionTestHost(
_scanner ?? new SimpleConventionScanner(assemblyCandidateFinder, _serviceProperties, _logger ?? NullLogger.Instance),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@
<ProjectReference Include="..\Conventions\Rocket.Surgery.Conventions.csproj" />
<ProjectReference Include="..\DependencyInjection\Rocket.Surgery.Extensions.DependencyInjection.csproj" />
<ProjectReference Include="..\Configuration\Rocket.Surgery.Extensions.Configuration.csproj" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" />
<PackageReference Include="NetEscapades.Configuration.Yaml" />
</ItemGroup>
<ItemGroup>
</ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion test/Conventions.Tests/ConventionHostBuilderTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
Expand Down
34 changes: 34 additions & 0 deletions test/Conventions.Tests/ConventionTestHostTests.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
using System;
using System.Diagnostics;
using System.Linq;
using FakeItEasy;
using FluentAssertions;
using Microsoft.Extensions.Configuration.Ini;
using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.DependencyModel;
using Microsoft.Extensions.Logging;
using NetEscapades.Configuration.Yaml;
using Rocket.Surgery.Conventions.Reflection;
using Rocket.Surgery.Conventions.Scanners;
using Rocket.Surgery.Conventions.TestHost;
using Rocket.Surgery.Extensions.Configuration;
using Rocket.Surgery.Extensions.Testing;
using Xunit;
using Xunit.Abstractions;
Expand Down Expand Up @@ -179,5 +184,34 @@ public void Builder_Should_Not_Scan_For_Conventions()

host.Scanner.BuildProvider().GetAll().Should().BeEmpty();
}

[Fact]
public void Builder_Should_Add_Configuration()
{
var host = ConventionTestHostBuilder.For(this, LoggerFactory)
.Create();

var (configuration, serviceProvider) = host.Build();

configuration.Providers.OfType<JsonConfigurationProvider>().Should().HaveCount(3);
configuration.Providers.OfType<YamlConfigurationProvider>().Should().HaveCount(6);
configuration.Providers.OfType<IniConfigurationProvider>().Should().HaveCount(3);
}

[Fact]
public void Builder_Should_Add_Configuration_After_It_Has_Been_Changed()
{
var host = ConventionTestHostBuilder.For(this, LoggerFactory)
.Create();
var options = host.GetOrAdd(() => new ConfigurationOptions());

options.EnvironmentConfiguration.Clear();

var (configuration, serviceProvider) = host.Build();

configuration.Providers.OfType<JsonConfigurationProvider>().Should().HaveCount(1);
configuration.Providers.OfType<YamlConfigurationProvider>().Should().HaveCount(2);
configuration.Providers.OfType<IniConfigurationProvider>().Should().HaveCount(1);
}
}
}
8 changes: 7 additions & 1 deletion test/Hosting.Functions.Tests/RocketHostTests.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
using System;
using System;
using System.Linq;
using FluentAssertions;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Ini;
using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.DependencyModel;
using Microsoft.Extensions.Hosting;
using NetEscapades.Configuration.Yaml;
using Rocket.Surgery.Extensions.Configuration;
using Xunit;

namespace Rocket.Surgery.Hosting.Functions.Tests
Expand Down
37 changes: 36 additions & 1 deletion test/Hosting.Tests/RocketHostTests.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
using System;
using System;
using System.Linq;
using FluentAssertions;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Ini;
using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyModel;
using Microsoft.Extensions.Hosting;
using NetEscapades.Configuration.Yaml;
using Rocket.Surgery.Conventions;
using Rocket.Surgery.Extensions.Configuration;
using Xunit;

namespace Rocket.Surgery.Hosting.Tests
Expand All @@ -22,5 +29,33 @@ public void Creates_RocketHost_ForAssemblies()
var host = Host.CreateDefaultBuilder().LaunchWith(RocketBooster.For(new[] { typeof(RocketHostTests).Assembly }));
host.Should().BeAssignableTo<IHostBuilder>();
}

[Fact]
public void Creates_RocketHost_WithConfiguration()
{
var host = Host.CreateDefaultBuilder().LaunchWith(RocketBooster.For(new[] { typeof(RocketHostTests).Assembly }));
var configuration = host.Build().Services.GetRequiredService<IConfiguration>() as IConfigurationRoot;

configuration.Providers.OfType<JsonConfigurationProvider>().Should().HaveCount(3);
configuration.Providers.OfType<YamlConfigurationProvider>().Should().HaveCount(6);
configuration.Providers.OfType<IniConfigurationProvider>().Should().HaveCount(3);
}

[Fact]
public void Creates_RocketHost_WithModifiedConfiguration()
{
var host = Host.CreateDefaultBuilder().LaunchWith(RocketBooster.For(new[] { typeof(RocketHostTests).Assembly }))
.ConfigureRocketSurgery(c =>
{
var options = c.GetOrAdd(() => new ConfigurationOptions());
options.EnvironmentConfiguration.Clear();
});

var configuration = host.Build().Services.GetRequiredService<IConfiguration>() as IConfigurationRoot;

configuration.Providers.OfType<JsonConfigurationProvider>().Should().HaveCount(1);
configuration.Providers.OfType<YamlConfigurationProvider>().Should().HaveCount(2);
configuration.Providers.OfType<IniConfigurationProvider>().Should().HaveCount(1);
}
}
}

0 comments on commit 88bf824

Please sign in to comment.