public void Should_not_validate_and_return_errors_when_some_severity_levels_are_not_excluded()
        {
            var context = new OEContext();

            context.Configuration.ValidationSafeSeverityLevels = new Collection <object>()
            {
                ValidationSeverityLevel.Warning
            };
            // ValidationSeverityLevel.Error should fail validation

            var productSet = context.Set <ProductWithCustomValidationSeveritySupport>();
            var product    = new ProductWithCustomValidationSeveritySupport()
            {
                Id        = -1,
                Name      = null,
                UnitPrice = -1
            };

            productSet.Add(product);

            var validationResults = new List <ValidationResultWithSeverityLevel>();
            var result            = productSet.Validate(validationResults);

            Assert.AreEqual(false, result);
            Assert.AreEqual(3, validationResults.Count());
            Assert.AreSame(product, validationResults[0].Entity);
            Assert.AreEqual("Id", validationResults[0].MemberNames.ElementAt(0));
            Assert.AreEqual(ValidationSeverityLevel.Error, validationResults[0].ErrorSeverity);
            Assert.AreSame(product, validationResults[1].Entity);
            Assert.AreEqual("Name", validationResults[1].MemberNames.ElementAt(0));
            Assert.AreEqual(ValidationSeverityLevel.Error, validationResults[1].ErrorSeverity);
            Assert.AreSame(product, validationResults[2].Entity);
            Assert.AreEqual("UnitPrice", validationResults[2].MemberNames.ElementAt(0));
            Assert.AreEqual(ValidationSeverityLevel.Warning, validationResults[2].ErrorSeverity);

            validationResults = new List <ValidationResultWithSeverityLevel>();
            result            = context.Validate(validationResults);
            Assert.AreEqual(false, result);
            Assert.AreEqual(3, validationResults.Count());
            Assert.AreSame(product, validationResults[0].Entity);
            Assert.AreEqual("Id", validationResults[0].MemberNames.ElementAt(0));
            Assert.AreEqual(ValidationSeverityLevel.Error, validationResults[0].ErrorSeverity);
            Assert.AreSame(product, validationResults[1].Entity);
            Assert.AreEqual("Name", validationResults[1].MemberNames.ElementAt(0));
            Assert.AreEqual(ValidationSeverityLevel.Error, validationResults[1].ErrorSeverity);
            Assert.AreSame(product, validationResults[2].Entity);
            Assert.AreEqual("UnitPrice", validationResults[2].MemberNames.ElementAt(0));
            Assert.AreEqual(ValidationSeverityLevel.Warning, validationResults[2].ErrorSeverity);
        }
        public void Should_validate_when_custom_validation_is_met_severity_support()
        {
            var context    = new OEContext();
            var productSet = context.Set <ProductWithCustomValidationSeveritySupport>();
            var product    = new ProductWithCustomValidationSeveritySupport()
            {
                Id        = 1,
                Name      = "Valid Product",
                UnitPrice = 1
            };

            productSet.Add(product);

            var validationResults = new List <ValidationResultWithSeverityLevel>();
            var result            = productSet.Validate(validationResults);

            Assert.AreEqual(true, result);
        }
        public void Should_not_validate_and_return_errors_when_custom_validation_is_not_met_severity_support()
        {
            var context    = new OEContext();
            var productSet = context.Set <ProductWithCustomValidationSeveritySupport>();
            var product    = new ProductWithCustomValidationSeveritySupport()
            {
                Id        = -1,
                Name      = null,
                UnitPrice = -1
            };

            productSet.Add(product);

            var validationResults = new List <ValidationResultWithSeverityLevel>();
            var result            = productSet.Validate(validationResults);

            Assert.AreEqual(false, result);
            Assert.AreEqual(3, validationResults.Count());
            Assert.AreSame(product, validationResults[0].Entity);
            Assert.AreEqual("Id", validationResults[0].MemberNames.ElementAt(0));
            Assert.AreEqual(ValidationSeverityLevel.Error, validationResults[0].ErrorSeverity);
            Assert.AreSame(product, validationResults[1].Entity);
            Assert.AreEqual("Name", validationResults[1].MemberNames.ElementAt(0));
            Assert.AreEqual(ValidationSeverityLevel.Error, validationResults[1].ErrorSeverity);
            Assert.AreSame(product, validationResults[2].Entity);
            Assert.AreEqual("UnitPrice", validationResults[2].MemberNames.ElementAt(0));
            Assert.AreEqual(ValidationSeverityLevel.Warning, validationResults[2].ErrorSeverity);

            validationResults = new List <ValidationResultWithSeverityLevel>();
            result            = context.Validate(validationResults);
            Assert.AreEqual(false, result);
            Assert.AreEqual(3, validationResults.Count());
            Assert.AreSame(product, validationResults[0].Entity);
            Assert.AreEqual("Id", validationResults[0].MemberNames.ElementAt(0));
            Assert.AreEqual(ValidationSeverityLevel.Error, validationResults[0].ErrorSeverity);
            Assert.AreSame(product, validationResults[1].Entity);
            Assert.AreEqual("Name", validationResults[1].MemberNames.ElementAt(0));
            Assert.AreEqual(ValidationSeverityLevel.Error, validationResults[1].ErrorSeverity);
            Assert.AreSame(product, validationResults[2].Entity);
            Assert.AreEqual("UnitPrice", validationResults[2].MemberNames.ElementAt(0));
            Assert.AreEqual(ValidationSeverityLevel.Warning, validationResults[2].ErrorSeverity);
        }