private bool ValidateModelValues(StaticAllowedValuesProviderModel model, object?values)
        {
            model.Values = values;

            var context = new ValidationContext(model)
            {
                MemberName = nameof(model.Values)
            };

            return(Validator.TryValidateProperty(model.Values, context, new List <ValidationResult>()));
        }
        public void StaticAllowedValuesProvider()
        {
            var model = new StaticAllowedValuesProviderModel();

            StaticAllowedValuesProviderModel.AllowedValues = ListOf("a", "b");

            Assert.True(ValidateModelValues(model, ListOf("a")));
            Assert.True(ValidateModelValues(model, ListOf("a", "a")));
            Assert.True(ValidateModelValues(model, ListOf("a", "b")));
            Assert.True(ValidateModelValues(model, ListOf("b", "b")));
        }
        public void StaticAllowedValuesProvider_Invalid()
        {
            var model = new StaticAllowedValuesProviderModel();

            StaticAllowedValuesProviderModel.AllowedValues = ListOf("a", "b");

            Assert.False(ValidateModelValues(model, ListOf("A")));
            Assert.False(ValidateModelValues(model, ListOf("A", "a")));
            Assert.False(ValidateModelValues(model, ListOf("d")));
            Assert.False(ValidateModelValues(model, ListOf("d", "a")));
            Assert.False(ValidateModelValues(model, ListOf("d", "a", "a")));
            Assert.False(ValidateModelValues(model, ListOf("d", "a", "b", "c")));
            Assert.False(ValidateModelValues(model, ListOf("d", "d")));
            Assert.False(ValidateModelValues(model, ListOf("d", "d", "a")));
            Assert.False(ValidateModelValues(model, ListOf("d", "d", "a", "a")));
            Assert.False(ValidateModelValues(model, ListOf("d", "d", "a", "b", "c")));
            Assert.False(ValidateModelValues(model, ListOf(1)));
            Assert.False(ValidateModelValues(model, ListOf(new { })));
            Assert.False(ValidateModelValues(model, ListOf <object>("a", 1, new { })));
        }