Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using System.Reflection;
using LocalApps;
using NetDaemon.AppModel.Internal.AppAssemblyProviders;
using NetDaemon.AppModel.Tests.Helpers;

namespace NetDaemon.AppModel.Tests.AppAssemblyProviders;

public class CombinedAppAssemblyProviderTests
{
[Fact]
public void TestCombinedAssembliesAreProvided()
{
// ARRANGE
var serviceProvider = CreateServiceProvider(typeof(MyAppLocalApp).Assembly);

// ACT
var assemblyProviders = serviceProvider.GetRequiredService<IEnumerable<IAppAssemblyProvider>>();
var assemblies = assemblyProviders.Select(provider => provider.GetAppAssembly()).ToList();

// ASSERT
assemblies.Should().Contain(assembly => CheckAssemblyHasType(assembly, MyAppLocalApp.Id));
assemblies.Should().Contain(assembly => CheckAssemblyHasType(assembly, "Apps.MyApp"));
}

private static bool CheckAssemblyHasType(Assembly assembly, string name)
{
var type = assembly.GetType(name);
return type?.FullName == name;
}

private static IServiceProvider CreateServiceProvider(Assembly assembly)
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging();
serviceCollection.AddFakeOptions("Dynamic");
serviceCollection.AddAppsFromAssembly(assembly);
serviceCollection.AddAppsFromSource();

return serviceCollection.BuildServiceProvider();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using System.Reflection;
using NetDaemon.AppModel.Internal.AppAssemblyProviders;
using NetDaemon.AppModel.Tests.Helpers;

namespace NetDaemon.AppModel.Tests.AppAssemblyProviders;

public class DynamicAppAssemblyProviderTests
{
[Fact]
public void TestDynamicallyCompiledAssembliesAreProvided()
{
// ARRANGE
var serviceProvider = CreateServiceProvider();

// ACT
var assemblyProviders = serviceProvider.GetRequiredService<IEnumerable<IAppAssemblyProvider>>();
var assemblies = assemblyProviders.Select(provider => provider.GetAppAssembly()).ToList();

// ASSERT
assemblies.Should().Contain(assembly => CheckAssemblyHasType(assembly, "Apps.MyApp"));
}

private static bool CheckAssemblyHasType(Assembly assembly, string name)
{
var type = assembly.GetType(name);
return type?.FullName == name;
}

private static IServiceProvider CreateServiceProvider()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging();
serviceCollection.AddFakeOptions("Dynamic");
serviceCollection.AddAppsFromSource();

return serviceCollection.BuildServiceProvider();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using System.Reflection;
using LocalApps;
using NetDaemon.AppModel.Internal.AppAssemblyProviders;

namespace NetDaemon.AppModel.Tests.AppAssemblyProviders;

public class LocalAppAssemblyProviderTests
{
[Fact]
public void TestLocalAppAssembliesAreProvided()
{
// ARRANGE
var serviceProvider = CreateServiceProvider(typeof(MyAppLocalApp).Assembly);

// ACT
var assemblyProviders = serviceProvider.GetRequiredService<IEnumerable<IAppAssemblyProvider>>();
var assemblies = assemblyProviders.Select(provider => provider.GetAppAssembly()).ToList();

// ASSERT
assemblies.Should().Contain(assembly => CheckAssemblyHasType(assembly, MyAppLocalApp.Id));
}

private static bool CheckAssemblyHasType(Assembly assembly, string name)
{
var type = assembly.GetType(name);
return type?.FullName == name;
}

private static IServiceProvider CreateServiceProvider(Assembly assembly)
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging();
serviceCollection.AddAppsFromAssembly(assembly);

return serviceCollection.BuildServiceProvider();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
using NetDaemon.AppModel.Internal.AppFactoryProviders;
using NetDaemon.AppModel.Tests.Helpers;

namespace NetDaemon.AppModel.Tests.AppFactories;

public class DynamicAppFactoryTests
{
[Fact]
public void TestDynamicAppFactoryCreatesApp()
{
// ARRANGE
var serviceProvider = CreateServiceProvider();

// ACT
var appFactoryProviders = serviceProvider.GetRequiredService<IEnumerable<IAppFactoryProvider>>();
var appFactories = appFactoryProviders.SelectMany(provider => provider.GetAppFactories()).ToList();
var appFactory = appFactories.Single(factory => factory.Id == "Apps.InjectedApp");
var appInstance = appFactory.Create(serviceProvider);

// ASSERT
appInstance.Should().NotBeNull();
appInstance.GetType().FullName.Should().BeEquivalentTo("Apps.InjectedApp");
}

private static IServiceProvider CreateServiceProvider()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging();
serviceCollection.AddFakeOptions("DynamicWithServiceCollection");
serviceCollection.AddAppsFromSource();

return serviceCollection.BuildServiceProvider();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
using System.Reflection;
using LocalApps;
using NetDaemon.AppModel.Internal.AppFactoryProviders;

namespace NetDaemon.AppModel.Tests.AppFactories;

public class LocalAppFactoryTests
{
[Fact]
public void TestLocalAppFactoryCreatesApp()
{
// ARRANGE
var serviceProvider = CreateServiceProvider(typeof(MyAppLocalAppWithId).Assembly);

// ACT
var appFactoryProviders = serviceProvider.GetRequiredService<IEnumerable<IAppFactoryProvider>>();
var appFactories = appFactoryProviders.SelectMany(provider => provider.GetAppFactories()).ToList();
var appFactory = appFactories.Single(factory => factory.Id == MyAppLocalAppWithId.Id);
var appInstance = appFactory.Create(serviceProvider);

// ASSERT
appInstance.Should().NotBeNull();
appInstance.Should().BeOfType<MyAppLocalAppWithId>();
}

[Fact]
public void TestCustomAppFactoryCreatesApp()
{
// ARRANGE
var serviceProvider = CreateServiceProvider(_ => new MyAppLocalApp(Mock.Of<IAppConfig<LocalTestSettings>>()));

// ACT
var appFactoryProviders = serviceProvider.GetRequiredService<IEnumerable<IAppFactoryProvider>>();
var appFactories = appFactoryProviders.SelectMany(provider => provider.GetAppFactories()).ToList();
var appFactory = appFactories.Single(factory => factory.Id == MyAppLocalApp.Id);
var appInstance = appFactory.Create(serviceProvider);

// ASSERT
appInstance.Should().NotBeNull();
appInstance.Should().BeOfType<MyAppLocalApp>();
}

private static IServiceProvider CreateServiceProvider(Assembly assembly)
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging();
serviceCollection.AddAppsFromAssembly(assembly);

return serviceCollection.BuildServiceProvider();
}

private static IServiceProvider CreateServiceProvider<TAppType>(
Func<IServiceProvider, TAppType> func,
string? id = default,
bool? focus = default) where TAppType : class
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging();
serviceCollection.AddApp(func, id, focus);

return serviceCollection.BuildServiceProvider();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using System.Reflection;
using LocalApps;
using NetDaemon.AppModel.Internal.AppFactoryProviders;
using NetDaemon.AppModel.Tests.Helpers;

namespace NetDaemon.AppModel.Tests.AppFactoryProviders;

public class CombinedAppFactoryProviderTests
{
[Fact]
public void TestCombinedAssemblyAppFactoriesAreProvided()
{
// ARRANGE
var serviceProvider = CreateServiceProvider<MyAppLocalApp>(typeof(MyAppLocalAppWithId).Assembly);

// ACT
var appFactoryProviders = serviceProvider.GetRequiredService<IEnumerable<IAppFactoryProvider>>();
var appFactories = appFactoryProviders.SelectMany(provider => provider.GetAppFactories()).ToList();

// ASSERT
appFactories.Should().Contain(factory => factory.Id == MyAppLocalApp.Id);
appFactories.Should().Contain(factory => factory.Id == MyAppLocalAppWithId.Id);
appFactories.Should().Contain(factory => factory.Id == "Apps.MyApp");
}

private static IServiceProvider CreateServiceProvider<TAppType>(Assembly assembly)
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging();
serviceCollection.AddFakeOptions("Dynamic");
serviceCollection.AddAppFromType<TAppType>();
serviceCollection.AddAppsFromAssembly(assembly);
serviceCollection.AddAppsFromSource();

return serviceCollection.BuildServiceProvider();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using NetDaemon.AppModel.Internal.AppFactoryProviders;
using NetDaemon.AppModel.Tests.Helpers;

namespace NetDaemon.AppModel.Tests.AppFactoryProviders;

public class DynamicAppFactoryProviderTests
{
[Fact]
public void TestDynamicAssemblyAppFactoriesAreProvidedWithoutFocus()
{
// ARRANGE
var serviceProvider = CreateServiceProvider();

// ACT
var appFactoryProviders = serviceProvider.GetRequiredService<IEnumerable<IAppFactoryProvider>>();
var appFactories = appFactoryProviders.SelectMany(provider => provider.GetAppFactories()).ToList();

// ASSERT
appFactories.Should().Contain(factory => factory.Id == "Apps.NonFocusApp" &&
factory.HasFocus == false);
}

[Fact]
public void TestDynamicAssemblyAppFactoriesAreProvidedWithFocus()
{
// ARRANGE
var serviceProvider = CreateServiceProvider();

// ACT
var appFactoryProviders = serviceProvider.GetRequiredService<IEnumerable<IAppFactoryProvider>>();
var appFactories = appFactoryProviders.SelectMany(provider => provider.GetAppFactories()).ToList();

// ASSERT
appFactories.Should().Contain(factory => factory.Id == "Apps.MyFocusApp" &&
factory.HasFocus == true);
}

private static IServiceProvider CreateServiceProvider()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging();
serviceCollection.AddFakeOptions("DynamicWithFocus");
serviceCollection.AddAppsFromSource();

return serviceCollection.BuildServiceProvider();
}
}
Loading