public void Given_MaintenanceTimeFrame_When_IsWithinMaintenanceHours_Then_GetAvailableUpdatesIsCalled()
        {
            var cultureInfo = new CultureInfo("nl-NL");

            string configContent  = File.ReadAllText(@"..\..\centralConfig.xml");
            var    serializer     = new Serialization <CustomerConfigurationsFile>();
            var    configInstance = serializer.GetObjectFromXml(configContent);

            configContent = serializer.Serialize(configInstance);

            var httpClient = Mock.Of <IHttpClient>();

            Mock.Get(httpClient).Setup(c => c.GetResponse(It.IsAny <string>())).Returns(configContent);

            IUpdateClient updateClient = Mock.Of <IUpdateClient>();

            mController = createController(null, httpClient, updateClient);
            var run = mController.GetType().GetMethod("runUpdateProcedure", BindingFlags.NonPublic | BindingFlags.Instance);

            bool inactive = false;

            mController.Inactivated += (s, e) => { inactive = true; };
            run.Invoke(mController, new object[] { });

            while (!inactive)
            {
                Thread.Sleep(0);
            }

            Mock.Get(updateClient).Verify(c => c.GetAvailableUpdates(), Times.Once);
        }
        public void Given_TwoCallsOnBeginUpdate_WhenFirstCallInactivates_Then_SecondCallStarts()
        {
            var updateClient = Mock.Of <IUpdateClient>();

            Mock.Get(updateClient).Setup(u => u.GetAvailableUpdates()).Callback(() => Thread.Sleep(500)).Returns(new UpdateCollectionClass());

            mController = createController(null, null, updateClient);

            int k = 0;

            mController.Inactivated += (s, e) =>
            {
                if (k == 0)
                {
                    Mock.Get(updateClient).Verify(u => u.GetAvailableUpdates(), Times.Once);
                    k++;
                }
                else if (k == 1)
                {
                    Mock.Get(updateClient).Verify(u => u.InstallUpdates(It.IsAny <IUpdateCollection>()), Times.Never);
                    k++;
                }
            };

            mController.BeginUpdate();

            Thread.Sleep(100);

            var localConfig = Mock.Of <ILocalConfiguration>();

            Mock.Get(localConfig).Setup(lc => lc.GroupName).Returns("Not_present");

            var updateClientProperty = mController.GetType().GetProperty("LocalConfig", BindingFlags.Public | BindingFlags.Instance);

            updateClientProperty.SetValue(mController, localConfig);

            mController.BeginUpdate();

            while (k != 2)
            {
                Thread.Sleep(100);
            }
        }
        public void Given_TimeFrameMaintenanceThrowsException_Then_InactivatedIsRaised()
        {
            var cultureInfo = new CultureInfo("nl-NL");

            string configContent  = File.ReadAllText(@"..\..\centralConfig.xml");
            var    serializer     = new Serialization <CustomerConfigurationsFile>();
            var    configInstance = serializer.GetObjectFromXml(configContent);

            var timeFrame = configInstance.FirstOrDefault().MaintenanceSchedule.FirstOrDefault(tf => tf.GroupName == CGroupName);

            timeFrame.DayOfWeek = (int)DateTime.UtcNow.DayOfWeek;
            timeFrame.StartTime = DateTime.UtcNow.AddMinutes(10).ToString(cultureInfo);
            timeFrame.EndTime   = DateTime.UtcNow.AddMinutes(30).ToString(cultureInfo);

            configContent = serializer.Serialize(configInstance);

            var httpClient = Mock.Of <IHttpClient>();

            Mock.Get(httpClient).Setup(c => c.GetResponse(It.IsAny <string>())).Returns(configContent);

            var timeFrameDecision = Mock.Of <ITimeFrameDecision>();

            Mock.Get(timeFrameDecision).Setup(t => t.IsWithinTimeFrame(It.IsAny <TimeFrame>())).Throws(new ConfigurationErrorsException());

            IUpdateClient updateClient = Mock.Of <IUpdateClient>();

            mController = createController(null, httpClient, updateClient, timeFrameDecision: timeFrameDecision);
            var run = mController.GetType().GetMethod("runUpdateProcedure", BindingFlags.NonPublic | BindingFlags.Instance);

            bool inactive = false;

            mController.Inactivated += (s, e) => { inactive = true; };
            run.Invoke(mController, new object[] { });

            while (!inactive)
            {
                Thread.Sleep(0);
            }

            Mock.Get(updateClient).Verify(c => c.GetAvailableUpdates(), Times.Never);
        }
        public void Given_FailReadingCentralConfigAndCentralConfigNotInitialized_Then_InactivatedIsRaised()
        {
            var httpClient = Mock.Of <IHttpClient>();

            Mock.Get(httpClient).Setup(c => c.GetResponse(It.IsAny <string>())).Throws <Exception>();

            IUpdateClient updateClient = Mock.Of <IUpdateClient>();

            mController = createController(null, httpClient, updateClient);
            var run = mController.GetType().GetMethod("runUpdateProcedure", BindingFlags.NonPublic | BindingFlags.Instance);

            bool inactive = false;

            mController.Inactivated += (s, e) => { inactive = true; };
            run.Invoke(mController, new object[] { });

            while (!inactive)
            {
                Thread.Sleep(0);
            }

            Mock.Get(updateClient).Verify(c => c.GetAvailableUpdates(), Times.Never);
        }