public void ConfigurationRequirement_ToString_Succeeds()
        {
            ConfigurationRequirement requirement =
                TestUtil.CreateConfigurationRequirement();

            JsonCompare.Compare(requirement, requirement.ToString());
        }
        public void ConfigurationRequirement_ToString_Collection_NoMaximumCount_Succeeds()
        {
            ConfigurationRequirement requirement =
                TestUtil.CreateConfigurationRequirement(collectionInfo: new CollectionInfo(3));

            JsonCompare.Compare(requirement, requirement.ToString());
        }
Example #3
0
        public void Mapping_Equals_ValuesDoNotMatch_ReturnsFalse()
        {
            IConfigurationRequirement requirement = ConfigurationRequirement.String("Name", "Description");
            Mapping first  = new Mapping(requirement, "Hello World");
            Mapping second = new Mapping(requirement, "Goodbye World");

            Assert.IsFalse(first.Equals(second));
            Assert.IsFalse(second.Equals(first));
        }
Example #4
0
        public void Mapping_Equals_OneHasValueNull_ReturnsFalse()
        {
            IConfigurationRequirement requirement = ConfigurationRequirement.String("Name", "Description");
            Mapping first  = new Mapping(requirement, "Hello World");
            Mapping second = new Mapping(requirement, null);

            Assert.IsFalse(first.Equals(second));
            Assert.IsFalse(second.Equals(first));
        }
Example #5
0
        public void Mapping_Ctor_Success()
        {
            const string value = "Valid";
            IConfigurationRequirement requirement = ConfigurationRequirement.String("Name", "Description");

            Mapping mapping = new Mapping(requirement, value);

            Assert.AreEqual(requirement, mapping.Requirement);
            Assert.AreEqual(value, mapping.Value);
        }
Example #6
0
        public void Mapping_Equals_Succeeds()
        {
            const string value = "Hello World";
            IConfigurationRequirement requirement = ConfigurationRequirement.String("Name", "Description");

            Mapping first  = new Mapping(requirement, value);
            Mapping second = new Mapping(requirement, value);

            Assert.IsTrue(first.Equals(second));
            Assert.IsTrue(second.Equals(first));
        }
Example #7
0
        public void Mapping_Equals_RequirementsDoNotMatch_ReturnsFalse()
        {
            const string value = "Hello World";
            IConfigurationRequirement requirement1 = ConfigurationRequirement.String("Name1", "Description");
            IConfigurationRequirement requirement2 = ConfigurationRequirement.String("Name2", "Description");

            Mapping first  = new Mapping(requirement1, value);
            Mapping second = new Mapping(requirement2, value);

            Assert.IsFalse(first.Equals(second));
            Assert.IsFalse(second.Equals(first));
        }
        public void ConfigurationRequirement_SimpleValidator_AdditionalValidation_ReturnsNull()
        {
            IConfigurationRequirement requirement = TestUtil.CreateConfigurationRequirement();

            Assert.IsNull(
                ConfigurationRequirement
                .SimpleValidator(
                    requirement.OfType,
                    TestUtil.GetDefaultValidObjectForRequirement(requirement),
                    requirement,
                    new MockConfiguration(),
                    (x, y, z) => null));
        }
        public void ConfigurationRequirement_SimpleValidator_NotCollection_ValidObject()
        {
            const string value = "Valid";
            ConfigurationRequirementType type = ConfigurationRequirementType.String;

            Assert.IsNull(
                ConfigurationRequirement
                .SimpleValidator(
                    type,
                    value,
                    TestUtil.CreateConfigurationRequirement(type: type),
                    new MockConfiguration()));
        }
        public void ConfigurationRequirement_SimpleValidator_NullObject()
        {
            IConfigurationRequirement requirement = TestUtil.CreateConfigurationRequirement();

            Assert.AreEqual(
                typeof(ArgumentNullException),
                ConfigurationRequirement
                .SimpleValidator(
                    requirement.OfType,
                    null,
                    requirement,
                    new MockConfiguration())
                ?.GetType());
        }
        public void ConfigurationRequirement_SimpleValidator_Collection_ValidObject()
        {
            IConfigurationRequirement requirement =
                TestUtil.CreateConfigurationRequirement(collectionInfo: new CollectionInfo(1));
            object value = TestUtil.GetDefaultValidObjectForRequirement(requirement);

            Assert.IsNull(
                ConfigurationRequirement
                .SimpleValidator(
                    requirement.OfType,
                    value,
                    requirement,
                    new MockConfiguration()));
        }
        public void ConfigurationRequirement_SimpleValidator_Collection_CollectionIsEmpty()
        {
            object[] value = new object[0];
            IConfigurationRequirement requirement = TestUtil.CreateConfigurationRequirement(
                collectionInfo: new CollectionInfo(0));

            Exception result = ConfigurationRequirement.SimpleValidator(
                requirement.OfType,
                value,
                requirement,
                new MockConfiguration());

            Assert.IsNull(result);
        }
Example #13
0
        public static void Compare(
            ConfigurationRequirement expected,
            string actual)
        {
            JObject jObj = JObject.Parse(actual);

            Assert.AreEqual(7, jObj.Count);
            Assert.AreEqual(expected.Name, jObj["Name"]);
            Assert.AreEqual(expected.Description, jObj["Description"]);
            Assert.AreEqual(expected.IsOptional, jObj["IsOptional"]);
            Assert.AreEqual(expected.OfType.Type.FullName, jObj["OfType"]);
            JsonCompare.Compare(expected.CollectionInfo, jObj["CollectionInfo"]);
            JsonCompare.Compare(expected.DependsOn, jObj.Value <JArray>("DependsOn"));
            JsonCompare.Compare(expected.ExclusiveWith, jObj.Value <JArray>("ExclusiveWith"));
        }
        public void ConfigurationRequirement_Bool_Success()
        {
            const string name        = "ConfigurationRequirementName";
            const string description = "Configuration requirement description.";
            const string badInput    = "Bad input";
            const bool   goodInput   = true;

            AssertUtil.Compare(
                name,
                description,
                ConfigurationRequirementType.Bool,
                () => ConfigurationRequirement.Bool(name, description),
                badInput,
                goodInput);
        }
        public void ConfigurationRequirement_Int64_Success()
        {
            const string name        = "ConfigurationRequirementName";
            const string description = "Configuration requirement description.";
            const string badInput    = "Bad input";
            const long   goodInput   = 8675309L;

            AssertUtil.Compare(
                name,
                description,
                ConfigurationRequirementType.Int64,
                () => ConfigurationRequirement.Int64(name, description),
                badInput,
                goodInput);
        }
        public void ConfigurationRequirement_SimpleValidator_NotCollection_InvalidObject()
        {
            const long value = 8675309L;
            ConfigurationRequirementType type = ConfigurationRequirementType.String;

            Assert.AreEqual(
                typeof(ArgumentException),
                ConfigurationRequirement
                .SimpleValidator(
                    type,
                    value,
                    TestUtil.CreateConfigurationRequirement(),
                    new MockConfiguration())
                ?.GetType());
        }
        public void ConfigurationRequirement_SecureString_Succeeds()
        {
            const string name        = "ConfigurationRequirementName";
            const string description = "Configuration requirement description.";
            const long   badInput    = 8675309L;
            SecureString goodInput   = "Hello world".ToSecureString();

            AssertUtil.Compare(
                name,
                description,
                ConfigurationRequirementType.SecureString,
                () => ConfigurationRequirement.SecureString(name, description),
                badInput,
                goodInput);
        }
        public void ConfigurationRequirement_Uri_Succeeds()
        {
            const string name        = "ConfigurationRequirementName";
            const string description = "Configuration requirement description.";
            const long   badInput    = 8675309L;
            Uri          goodInput   = new Uri("https://www.example.com");

            AssertUtil.Compare(
                name,
                description,
                ConfigurationRequirementType.Uri,
                () => ConfigurationRequirement.Uri(name, description),
                badInput,
                goodInput);
        }
        public void ConfigurationRequirement_FilePath()
        {
            const string name        = "ConfigurationRequirementName";
            const string description = "Configuration requirement description.";
            const string badInput    = "Bad input";
            FilePath     goodInput   = new FilePath("DoesntMatter.txt", new MockPathInteractor(x => x, x => true));

            AssertUtil.Compare(
                name,
                description,
                ConfigurationRequirementType.FilePath,
                () => ConfigurationRequirement.FilePath(name, description),
                badInput,
                goodInput);
        }
Example #20
0
        static DemoFactory()
        {
            // [~2]. Create the requirements. For the demo, these are just examples.
            DemoFactory.Website = ConfigurationRequirement.Uri(
                "Website",
                "The website to use for the demo.");
            DemoFactory.Username = ConfigurationRequirement.String(
                "Username",
                "The username to use for the demo.");
            DemoFactory.Password = ConfigurationRequirement.SecureString(
                "Password",
                "The password to use for the demo.",
                dependsOn: new IConfigurationRequirement[]
            {
                DemoFactory.Website,
                DemoFactory.Username
            },
                additionalValidation: (x, y, z) =>
            {
                if (!z.TryGetOrDefault(DemoFactory.Website, () => null, out Uri website))
                {
                    return(new InvalidOperationException("Missing website."));
                }

                if (!z.TryGetOrDefault(DemoFactory.Username, () => null, out string username))
                {
                    return(new InvalidOperationException("Missing username."));
                }

                Console.WriteLine();
                Console.WriteLine("Additional validation callback for password.");
                Console.WriteLine("Press enter to continue. Non-empty inputs will intentionally fail validation.");
                string input = Console.ReadLine();
                if (input.Length != 0)
                {
                    return(new InvalidOperationException(input));
                }

                return(null);
            });

            DemoFactory.BackingRequirements = new IConfigurationRequirement[]
            {
                DemoFactory.Website,
                DemoFactory.Username,
                DemoFactory.Password
            };
        }
        public void ConfigurationRequirement_SimpleValidator_Collection_CollectionIsRightSizeButContainsWrongType()
        {
            object[] value = new object[] { 8675309L, "Not assignable to expected type" };
            ConfigurationRequirementType type        = ConfigurationRequirementType.Int64;
            IConfigurationRequirement    requirement = TestUtil.CreateConfigurationRequirement(
                type: type,
                collectionInfo: new CollectionInfo(1, 3));

            Exception result = ConfigurationRequirement.SimpleValidator(
                type,
                value,
                requirement,
                new MockConfiguration());

            Assert.AreEqual(typeof(ArgumentException), result?.GetType());
        }
        public void ConfigurationRequirement_SimpleValidator_AdditionalValidation_ThrowsException()
        {
            Exception toReturn = new Exception("CONFIGURATIONREQUIREMENTTESTS_AdditionalValidation");
            IConfigurationRequirement requirement = TestUtil.CreateConfigurationRequirement();

            Assert.AreEqual(
                toReturn.Message,
                ConfigurationRequirement
                .SimpleValidator(
                    requirement.OfType,
                    TestUtil.GetDefaultValidObjectForRequirement(requirement),
                    requirement,
                    new MockConfiguration(),
                    (x, y, z) => throw toReturn)
                .Message);
        }
        public void ConfigurationRequirement_SimpleValidator_Collection_CollectionTooLarge()
        {
            string[] value = new string[] { "Too big", "Too big", "Too big" };
            ConfigurationRequirementType type        = ConfigurationRequirementType.String;
            IConfigurationRequirement    requirement = TestUtil.CreateConfigurationRequirement(
                type: type,
                collectionInfo: new CollectionInfo(1, 2));

            Assert.AreEqual(
                typeof(ArgumentException),
                ConfigurationRequirement
                .SimpleValidator(
                    type,
                    value,
                    requirement,
                    new MockConfiguration())
                ?.GetType());
        }
        public void ConfigurationRequirement_SimpleValidator_Collection_ObjectIsNotCollection()
        {
            const string value = "Invalid";
            ConfigurationRequirementType type        = ConfigurationRequirementType.String;
            IConfigurationRequirement    requirement =
                TestUtil.CreateConfigurationRequirement(
                    type: type,
                    collectionInfo: new CollectionInfo(1));

            Assert.AreEqual(
                typeof(ArgumentException),
                ConfigurationRequirement
                .SimpleValidator(
                    type,
                    value,
                    requirement,
                    new MockConfiguration())
                ?.GetType());
        }
        public void ConfigurationRequirement_Bool_PropagatesInfo()
        {
            const string name        = "ConfigurationRequirementName";
            const string description = "Configuration requirement description.";
            const bool   isOptional  = true;
            const string badInput    = "Bad input";

            bool[] goodInput =
                new bool[]
            {
                true,
                false,
                true
            };
            CollectionInfo collectionInfo = new CollectionInfo(1, 4);

            IEnumerable <IConfigurationRequirement> dependsOn =
                TestUtil.CreateIConfigurationRequirementCollection(3);
            IEnumerable <IConfigurationRequirement> exclusiveWith =
                TestUtil.CreateIConfigurationRequirementCollection(3);

            AssertUtil.Compare(
                name,
                description,
                ConfigurationRequirementType.Bool,
                isOptional,
                collectionInfo,
                dependsOn,
                exclusiveWith,
                () => ConfigurationRequirement.Bool(
                    name,
                    description,
                    isOptional,
                    collectionInfo,
                    dependsOn,
                    exclusiveWith),
                badInput,
                goodInput);
        }
        public void ConfigurationRequirement_Ctor_Succeeds()
        {
            const string name        = "ConfigurationRequirementName";
            const string description = "Configuration requirement description.";
            const bool   isOptional  = false;

            ConfigurationRequirementType type = ConfigurationRequirementType.Int32;

            ConfigurationRequirement requirement = new ConfigurationRequirement(
                name,
                description,
                type,
                isOptional,
                (x, y, z) => null);

            Assert.AreEqual(name, requirement.Name);
            Assert.AreEqual(description, requirement.Description);
            Assert.AreEqual(type, requirement.OfType);
            Assert.AreEqual(isOptional, requirement.IsOptional);
            Assert.IsNull(requirement.CollectionInfo);
            Assert.IsFalse(requirement.DependsOn.Any());
            Assert.IsFalse(requirement.ExclusiveWith.Any());
        }
        public void ConfigurationRequirement_SecureString_PropagatesInfo()
        {
            const string name        = "ConfigurationRequirementName";
            const string description = "Configuration requirement description.";
            const bool   isOptional  = true;
            const long   badInput    = 8675309L;

            SecureString[] goodInput =
                new SecureString[]
            {
                "Hello world".ToSecureString()
            };
            CollectionInfo collectionInfo = new CollectionInfo(1, 4);

            IEnumerable <IConfigurationRequirement> dependsOn =
                TestUtil.CreateIConfigurationRequirementCollection(3);
            IEnumerable <IConfigurationRequirement> exclusiveWith =
                TestUtil.CreateIConfigurationRequirementCollection(3);

            AssertUtil.Compare(
                name,
                description,
                ConfigurationRequirementType.SecureString,
                isOptional,
                collectionInfo,
                dependsOn,
                exclusiveWith,
                () => ConfigurationRequirement.SecureString(
                    name,
                    description,
                    isOptional,
                    collectionInfo,
                    dependsOn,
                    exclusiveWith),
                badInput,
                goodInput);
        }
        public void ConfigurationRequirement_FilePath_PropagatesInfo()
        {
            const string name        = "ConfigurationRequirementName";
            const string description = "Configuration requirement description.";
            const bool   isOptional  = true;
            const string badInput    = "Bad input";

            FilePath[] goodInput =
                new FilePath[]
            {
                new FilePath("DoesntMatter.txt", new MockPathInteractor(x => x, x => true))
            };
            CollectionInfo collectionInfo = new CollectionInfo(1, 4);

            IEnumerable <IConfigurationRequirement> dependsOn =
                TestUtil.CreateIConfigurationRequirementCollection(3);
            IEnumerable <IConfigurationRequirement> exclusiveWith =
                TestUtil.CreateIConfigurationRequirementCollection(3);

            AssertUtil.Compare(
                name,
                description,
                ConfigurationRequirementType.FilePath,
                isOptional,
                collectionInfo,
                dependsOn,
                exclusiveWith,
                () => ConfigurationRequirement.FilePath(
                    name,
                    description,
                    isOptional,
                    collectionInfo,
                    dependsOn,
                    exclusiveWith),
                badInput,
                goodInput);
        }
        public void ConfigurationRequirement_Uri_PropagatesInfo()
        {
            const string name        = "ConfigurationRequirementName";
            const string description = "Configuration requirement description.";
            const bool   isOptional  = true;
            const long   badInput    = 8675309L;

            Uri[] goodInput =
                new Uri[]
            {
                new Uri("https://www.example.com")
            };
            CollectionInfo collectionInfo = new CollectionInfo(1, 4);

            IEnumerable <IConfigurationRequirement> dependsOn =
                TestUtil.CreateIConfigurationRequirementCollection(3);
            IEnumerable <IConfigurationRequirement> exclusiveWith =
                TestUtil.CreateIConfigurationRequirementCollection(3);

            AssertUtil.Compare(
                name,
                description,
                ConfigurationRequirementType.Uri,
                isOptional,
                collectionInfo,
                dependsOn,
                exclusiveWith,
                () => ConfigurationRequirement.Uri(
                    name,
                    description,
                    isOptional,
                    collectionInfo,
                    dependsOn,
                    exclusiveWith),
                badInput,
                goodInput);
        }
Example #30
0
        public void Mapping_Equals_NotMapping_ReturnsFalse()
        {
            Mapping mapping = new Mapping(ConfigurationRequirement.String("Name", "Description"), "Hello World");

            Assert.IsFalse(mapping.Equals("Hello world"));
        }