public async Task Test_ActionProcessor_No_Actions()
        {
            var appSettings = new ApplicationSettings();
            var sut         = new ActionProcessor(ServiceProvider, LoggerFactory, appSettings);

            await sut.ExecuteAsync();

            Assert.True(Logger.LoggedMessages.Count == 1);
            Assert.Equal(LogLevel.Error, Logger.LoggedMessages[0].LogLevel);
        }
        public async Task Test_ActionProcessor_Action_None_Enabled()
        {
            var appSettings = new ApplicationSettings();

            Fixture.AddManyTo(appSettings.Actions, 23);
            appSettings.Actions.ForEach(action => action.Enabled = false);
            var sut = new ActionProcessor(ServiceProvider, LoggerFactory, appSettings);

            await sut.ExecuteAsync();

            Assert.True(Logger.LoggedMessages.Count == 1);
            Assert.Equal(LogLevel.Error, Logger.LoggedMessages[0].LogLevel);
        }
        public async Task Test_ActionProcessor_Action_Run_Enabled_No_Service_Found()
        {
            const int actionCount = 8;
            var       appSettings = new ApplicationSettings();

            Fixture.AddManyTo(appSettings.Actions, actionCount);
            appSettings.Actions.ForEach(x => x.FailOnError = false);

            var sut = new ActionProcessor(ServiceProvider, LoggerFactory, appSettings);

            await sut.ExecuteAsync();

            Assert.Equal(actionCount, Logger.LoggedMessages.Count(l => l.LogLevel == LogLevel.Error));
        }
        public async Task Test_ActionProcessor_Specific_Action_Found_Warn_Others_Not_Found()
        {
            var appSettings = new ApplicationSettings();

            Fixture.AddManyTo(appSettings.Actions, 25);
            appSettings.Actions.ForEach(x => x.FailOnError = false);

            var sut = new ActionProcessor(ServiceProvider, LoggerFactory, appSettings);

            await sut.ExecuteAsync(new List <string> {
                appSettings.Actions.First().Name, Fixture.Create("Action")
            });

            Assert.Equal(1, Logger.LoggedMessages.Count(l => l.LogLevel == LogLevel.Warning));
        }
        public async Task Test_ActionProcessor_Specific_Action_Not_Found()
        {
            var appSettings = new ApplicationSettings();

            Fixture.AddManyTo(appSettings.Actions, 25);

            var sut = new ActionProcessor(ServiceProvider, LoggerFactory, appSettings);

            await sut.ExecuteAsync(new List <string>
            {
                Fixture.Create("Action"),
                Fixture.Create("Action")
            });

            Assert.True(Logger.LoggedMessages.Count == 1);
            Assert.Equal(LogLevel.Error, Logger.LoggedMessages[0].LogLevel);
        }
        public async Task Test_ActionProcessor_Action_Run()
        {
            const int actionCount          = 8;
            bool      processPackageCalled = false;
            var       appSettings          = new ApplicationSettings();

            Fixture.AddManyTo(appSettings.Actions, actionCount);
            appSettings.Actions.ForEach(action => action.Enabled = false);
            appSettings.Actions[4].Enabled = true;
            appSettings.Actions[4].Type    = DummyActionFactory.ActionType;
            DummyAction.ProcessPackageFunc = (package, packageEvent) =>
            {
                processPackageCalled = true;
                return(true);
            };
            var sut = new ActionProcessor(ServiceProvider, LoggerFactory, appSettings);

            await sut.ExecuteAsync();

            Assert.True(processPackageCalled, "Action never ran ProcessPackage");
        }