public async Task StopAsync_StopsServices()
        {
            // Arrange

            var logger = new Mock <ILogger <ShawarmaExecutor> >().Object;

            var stateProvider = new ApplicationStateProvider(new Mock <ILogger <ApplicationStateProvider> >().Object);

            var service = new Mock <IShawarmaService>();

            service
            .Setup(m => m.StopAsync(CancellationToken.None))
            .Returns(Task.CompletedTask);

            var services = new[] { service.Object };

            var executor = new ShawarmaExecutor(stateProvider, services, logger);

            // Act

            await executor.StopAsync(CancellationToken.None);

            // Assert

            service
            .Verify(m => m.StopAsync(CancellationToken.None), Times.Once);
        }
        public async Task StartAsync_MonitorsForChanges()
        {
            // Arrange

            var logger = new Mock <ILogger <ShawarmaExecutor> >().Object;

            var stateProvider = new ApplicationStateProvider(new Mock <ILogger <ApplicationStateProvider> >().Object);

            var service = new Mock <IShawarmaService>();

            service
            .Setup(m => m.UpdateStateAsync(It.IsAny <ApplicationState>(), CancellationToken.None))
            .Returns(Task.CompletedTask);
            service
            .Setup(m => m.StopAsync(CancellationToken.None))
            .Returns(Task.CompletedTask);

            var services = new[] { service.Object };

            var executor = new ShawarmaExecutor(stateProvider, services, logger);

            // Act

            await executor.StartAsync(CancellationToken.None);

            service.Invocations.Clear();

            await stateProvider.SetApplicationStateAsync(new ApplicationState { Status = ApplicationStatus.Active });

            await stateProvider.SetApplicationStateAsync(new ApplicationState { Status = ApplicationStatus.Inactive });

            await Task.Delay(100);

            // Assert

            service
            .Verify(m => m.UpdateStateAsync(It.IsAny <ApplicationState>(), CancellationToken.None), Times.Exactly(2));
            service
            .Verify(m => m.StopAsync(CancellationToken.None), Times.Never);
        }