public async Task <ObservableCollection <ServicesViewModel> > GetServices(string key)
        {
            var activeWindowsServices = new ObservableCollection <ServicesViewModel>();
            var allServices           = await _webservice.GetServerOtherParamsAsync("Windows Services installed", key);

            var value          = allServices.Value;
            var deserializeAll = Newtonsoft.Json.JsonConvert.DeserializeObject <List <WindowsServicesValue> >(value);

            var configuration   = _webservice.GetServicesConfig(key);
            var deserializeConf = Newtonsoft.Json.JsonConvert.DeserializeObject <List <CheckedServices> >(configuration);
            var color           = Color.FromRgb(99, 255, 74);

            foreach (var d in deserializeAll)
            {
                foreach (var c in deserializeConf)
                {
                    if (d.ServiceName == c.ServiceName)
                    {
                        var status = ServicesValidator.validate(d);
                        if (status == ServicesValidator.outcome.NotOK)
                        {
                            color = Color.FromRgb(192, 0, 2);
                        }
                        else
                        {
                            color = Color.FromRgb(99, 255, 74);
                        }

                        var service = new ServicesViewModel(d.ServiceName, d.DisplayName, d.ServiceType, d.Status, color);
                        activeWindowsServices.Add(service);
                    }
                }
            }
            return(activeWindowsServices);
        }
        public void Collection_is_invalid_when_dependency_is_missing()
        {
            var services = GetEmptyServiceCollection();

            services.AddScoped <Wrapper>();

            ServicesValidator.IsValid(services).Should().BeFalse();
        }
        public void Validator_evaluates_complex_dependencies_correctly()
        {
            var services = GetEmptyServiceCollection();

            services.AddScoped <Dependency>();
            services.AddScoped <Wrapper>((x) => new Wrapper(x.GetService <Dependency>()));

            ServicesValidator.IsValid(services).Should().BeTrue();
        }
        public void Collection_is_valid_when_all_dependencies_are_registered()
        {
            var services = GetEmptyServiceCollection();

            services.AddScoped <Wrapper>();
            services.AddScoped <Dependency>();

            ServicesValidator.IsValid(services).Should().BeTrue();
        }
        public void Diagnostic_output_shows_information_about_missing_dependency_and_misconfigured_class()
        {
            var services = GetEmptyServiceCollection();

            services.AddScoped <Wrapper>();

            var result = ServicesValidator.IsValid(services, out var diagnostics);

            result.Should().BeFalse();
            diagnostics.Should().Contain($"{nameof(Dependency)}");
            diagnostics.Should().Contain($"{nameof(Wrapper)}");
        }
        public void Collection_is_valid_when_class_with_missing_dependency_is_ignored()
        {
            var services = GetEmptyServiceCollection();

            services.AddScoped <Wrapper>();
            var classesNotToBeAnalyzed = new List <Type>()
            {
                typeof(Wrapper)
            };

            var result = ServicesValidator.IsValid(services, classesNotToBeAnalyzed);

            result.Should().BeTrue();
        }
        public void Collection_is_valid_when_missing_dependency_is_ignored()
        {
            var services = GetEmptyServiceCollection();

            services.AddScoped <Wrapper>();
            var dependenciesToSkip = new List <Type>()
            {
                typeof(Dependency)
            };

            var result = ServicesValidator.IsValid(services,
                                                   dependenciesToSkip: dependenciesToSkip);

            result.Should().BeTrue();
        }
        public void Collection_is_invalid_when_class_is_missing_dependency_and_is_itself_ignored_as_missing_dependency()
        {
            var services = GetEmptyServiceCollection();

            services.AddScoped <Wrapper>();
            var dependenciesToSkip = new List <Type>()
            {
                typeof(Wrapper)
            };

            var result = ServicesValidator.IsValid(services,
                                                   dependenciesToSkip: dependenciesToSkip);

            result.Should().BeFalse();
        }
        public void Collection_is_valid_when_missing_dependency_is_skipped_and_set_not_to_be_analyzed()
        {
            var services = GetEmptyServiceCollection();

            services.AddScoped <Wrapper>();
            var classesNotToBeAnalyzed = new List <Type>()
            {
                typeof(Dependency)
            };

            var result = ServicesValidator.IsValid(services,
                                                   classesNotToBeAnalyzed,
                                                   classesNotToBeAnalyzed);

            result.Should().BeTrue();
        }