Пример #1
0
        /// <summary>
        /// Performs the validation of this configuration object.
        /// Returns empty list if no problems found, otherwise list contains validation problems.
        /// </summary>
        public IEnumerable <ConfigurationValidationItem> Validate()
        {
            // Helper to collect and perform validations
            var validations = new ConfigurationValidationCollector <SampleConfig>(this);

            // Here are validations
            validations.ValidateNotZero(c => c.SomeValue, "Configuration should not contain default value (=0).");
            validations.ValidateNotNullOrEmpty(c => c.SomeName, "Configuration should specify value for Name.");
            validations.ValidateUri(c => c.SomeEndpoint, "External API endpoint is incorrect");
            validations.ValidateEmail(c => c.SomeEmail, "E-mail address is wrong.");
            validations.ValidateIpV4Address(c => c.SomeIp, "IP address is not valid.");
            validations.ValidatePublicIpV4Address(c => c.SomeIp, "IP address is not a public IP address.");

            // Generic methods, expecting boolean outcome of Linq expression
            validations.ValidateMust(c => c.SomeEndpoint.StartsWith("https", StringComparison.OrdinalIgnoreCase), nameof(this.SomeEndpoint), "Enpoint is no SSL secured.");
            validations.ValidateMust(c => c.SomeEndpoint.EndsWith("/", StringComparison.OrdinalIgnoreCase), nameof(this.SomeEndpoint), "Enpoint should end with shash /.");
            validations.ValidateMust(c =>
                                     c.SomeName.Contains("sparta", StringComparison.OrdinalIgnoreCase) &&
                                     c.SomeValue > 10,
                                     $"{nameof(this.SomeName)} and {nameof(this.SomeValue)}",
                                     "Combined validations failed.");

            // Syntactic sugar
            validations.ValidateStartsWith(c => c.SomeEndpoint, "https", "Enpoint is no SSL secured.");
            validations.ValidateEndsWith(c => c.SomeEndpoint, "/", "Enpoint should end in slash /.");

            // Returning all found validation problems
            return(validations.Result);
        }
        public void StartsWith_Correct_Validation()
        {
            var cfg = new TestConfig {
                SomeEndpoint = "https://domain.com"
            };
            var coll = new ConfigurationValidationCollector <TestConfig>(cfg);

            coll.ValidateStartsWith(c => c.SomeEndpoint, "HTTP", "Should start with web protocol!");
            coll.Result.Should().NotBeNull();
            coll.Result.Count.Should().Be(0);
        }
        public void EndsWith_Wrong_Validation()
        {
            var cfg = new TestConfig {
                SomeEndpoint = "ftp://domain.lv"
            };
            var coll = new ConfigurationValidationCollector <TestConfig>(cfg);

            coll.ValidateStartsWith(c => c.SomeEndpoint, "COM", "Should be COM domain!");
            coll.Result.Should().NotBeNull();
            coll.Result.Count.Should().Be(1);
            coll.Result[0].ConfigurationSection.Should().Be("TestConfig");
            coll.Result[0].ConfigurationItem.Should().Be("SomeEndpoint");
            coll.Result[0].ConfigurationValue.Should().Be("ftp://domain.lv");
            coll.Result[0].ValidationMessage.Should().Be("Should be COM domain!");
        }
        public void StartsWith_Empty_Validation()
        {
            var cfg = new TestConfig {
                SomeEndpoint = string.Empty
            };
            var coll = new ConfigurationValidationCollector <TestConfig>(cfg);

            coll.ValidateStartsWith(c => c.SomeEndpoint, "HTTP", "Should start with protocol!");
            coll.Result.Should().NotBeNull();
            coll.Result.Count.Should().Be(1);
            coll.Result[0].ConfigurationSection.Should().Be("TestConfig");
            coll.Result[0].ConfigurationItem.Should().Be("SomeEndpoint");
            coll.Result[0].ConfigurationValue.Should().Be(string.Empty);
            coll.Result[0].ValidationMessage.Should().Be("Should start with protocol!");
        }