示例#1
0
    public async Task TestApplicationReactToNewEvents()
    {
        var timedCancellationSource = new CancellationTokenSource(-1);
        var haRunner = new HomeAssistantRunnerMock(timedCancellationSource.Token);

        var hostBuilder = GetDefaultHostBuilder("Fixtures");
        var host        = hostBuilder.ConfigureServices((_, services) =>
                                                        services
                                                        .AddSingleton(haRunner.Object)
                                                        .AddNetDaemonApp <LocalApp>()
                                                        .AddTransient <IObservable <HassEvent> >(_ => haRunner.ClientMock.ConnectionMock.HomeAssistantEventMock)
                                                        ).Build();

        var runnerTask = host.RunAsync();

        while (!haRunner.ConnectMock.HasObservers && !runnerTask.IsCompleted)
        {
            await Task.Delay(10);
        }
        haRunner.ConnectMock.OnNext(haRunner.ClientMock.ConnectionMock.Object);
        _ = (NetDaemonRuntime)host.Services.GetService <IRuntime>() !;

        haRunner.ClientMock.ConnectionMock.AddStateChangeEvent(
            new HassState
        {
            EntityId = "binary_sensor.mypir",
            State    = "off"
        },
            new HassState
        {
            EntityId = "binary_sensor.mypir",
            State    = "on"
        });

        haRunner.ClientMock.ConnectionMock.Verify(
            n => n.SendCommandAsync <CallServiceCommand>(It.IsAny <CallServiceCommand>(),
                                                         It.IsAny <CancellationToken>()), Times.Once);
        timedCancellationSource.Cancel();
        await runnerTask.ConfigureAwait(false);
    }
示例#2
0
    public async Task TestApplicationIsLoaded()
    {
        var timedCancellationSource = new CancellationTokenSource(5000);
        var haRunner = new HomeAssistantRunnerMock(timedCancellationSource.Token);

        var hostBuilder = GetDefaultHostBuilder("Fixtures");
        var host        = hostBuilder.ConfigureServices((_, services) =>
                                                        services
                                                        .AddSingleton(haRunner.Object)
                                                        .AddAppsFromAssembly(Assembly.GetExecutingAssembly())
                                                        ).Build();


        var runnerTask = host.RunAsync();

        haRunner.ConnectMock.OnNext(haRunner.ClientMock.ConnectionMock.Object);
        var service   = (NetDaemonRuntime)host.Services.GetService <IRuntime>() !;
        var instances = service.ApplicationInstances;

        instances.Where(n => n.Id == "LocalApps.LocalApp").Should().NotBeEmpty();
        timedCancellationSource.Cancel();
        await runnerTask.ConfigureAwait(false);
    }
示例#3
0
    public async Task TestApplicationReactToNewEventsAndThrowException()
    {
        var timedCancellationSource = new CancellationTokenSource(5000);
        var haRunner = new HomeAssistantRunnerMock(timedCancellationSource.Token);

        var hostBuilder = GetDefaultHostBuilder("Fixtures");
        var host        = hostBuilder.ConfigureServices((_, services) =>
                                                        services
                                                        .AddSingleton(haRunner.Object)
                                                        .AddNetDaemonApp <LocalApp>()
                                                        ).Build();

        var runnerTask = host.RunAsync();

        while (!haRunner.ConnectMock.HasObservers && !runnerTask.IsCompleted)
        {
            await Task.Delay(10);
        }
        haRunner.ConnectMock.OnNext(haRunner.ClientMock.ConnectionMock.Object);
        _ = (NetDaemonRuntime)host.Services.GetService <IRuntime>() !;

        haRunner.ClientMock.ConnectionMock.AddStateChangeEvent(
            new HassState
        {
            EntityId = "binary_sensor.mypir_creates_fault",
            State    = "off"
        },
            new HassState
        {
            EntityId = "binary_sensor.mypir_creates_fault",
            State    = "on"
        });

        timedCancellationSource.Cancel();
        await runnerTask.ConfigureAwait(false);
    }