public void WhenCommandFailsToRunValidationResultIsUnavailable()
        {
            // Prepare
            string        aValidOSVersion = "valid_os_version";
            List <string> validOsVersions = new List <string>()
            {
                aValidOSVersion
            };
            IConfiguration configuration = MockFactory.ConfigurationWithValidOSVersions(validOsVersions);

            var powershellCommandRunnerMockFactory = new Moq.Mock <IPowershellCommandRunner>();

            powershellCommandRunnerMockFactory.Setup(powershellCommandRunner => powershellCommandRunner.AddScript(It.IsAny <string>())).Verifiable();

            PSObject     getCimInstanceResult = new PSObject();
            string       anInvalidOSVersion   = "invalid_os_version";
            PSMemberInfo versionMember        = new PSNoteProperty("version", anInvalidOSVersion);

            getCimInstanceResult.Members.Add(versionMember);
            Collection <PSObject> commandResults = new Collection <PSObject>
            {
                getCimInstanceResult
            };

            powershellCommandRunnerMockFactory.Setup(powershellCommandRunner => powershellCommandRunner.Invoke()).Throws(new Exception());

            // Exercise
            OSVersionValidation osVersionValidation = new OSVersionValidation(configuration);
            IValidationResult   validationResult    = osVersionValidation.ValidateUsing(powershellCommandRunnerMockFactory.Object);

            // Verify
            Assert.StrictEqual <Result>(Result.Unavailable, validationResult.Result);
        }
        public void WhenOsVersionIsNotSupportedValidationResultIsError()
        {
            // Prepare
            string        aValidOSVersion = "1.0";
            uint          aValidOSSku     = 0;
            List <string> validOsVersions = new List <string>()
            {
                aValidOSVersion
            };
            List <uint> validOsSkus = new List <uint>()
            {
                aValidOSSku
            };
            var configurationMockFactory = new Moq.Mock <IConfiguration>();

            configurationMockFactory.Setup(configuration => configuration.ValidOsVersions()).Returns(validOsVersions);
            configurationMockFactory.Setup(configuration => configuration.ValidOsSKU()).Returns(validOsSkus);

            var powershellCommandRunnerMockFactory = new Moq.Mock <IPowershellCommandRunner>();

            powershellCommandRunnerMockFactory.Setup(powershellCommandRunner => powershellCommandRunner.AddScript(It.IsAny <string>())).Verifiable();

            PSObject getCimInstanceResult = new PSObject();

            getCimInstanceResult.Members.Add(new PSNoteProperty("version", "2.0"));
            getCimInstanceResult.Members.Add(new PSNoteProperty("OperatingSystemSKU", aValidOSSku));

            Collection <PSObject> commandResults = new Collection <PSObject>
            {
                getCimInstanceResult
            };

            powershellCommandRunnerMockFactory.Setup(powershellCommandRunner => powershellCommandRunner.Invoke()).Returns(commandResults);

            // Exercise
            OSVersionValidation osVersionValidation = new OSVersionValidation(configurationMockFactory.Object);
            IValidationResult   validationResult    = osVersionValidation.ValidateUsing(powershellCommandRunnerMockFactory.Object);

            // Verify
            Assert.StrictEqual <Result>(Result.Fail, validationResult.Result);
        }