public void PreriodicReaderMustRaiseError()
        {
            var cts = new CancellationTokenSource();
            var repo = new InMemoryRepository();
            var manager = new SettingsManagerPeriodic(repo);
            var settings = manager.Get<ReadOnlySettings>();
            settings.Text = "a";
            manager.Save(settings);

            var error = false;
            manager.PeriodicReaderError += (s, a) => { error = true; };
            manager.StartReadingTask(TimeSpan.FromMilliseconds(10), cts.Token);
            Thread.Sleep(200);
            Assert.AreEqual(false, error);
        }
 public void PeriodicReaderMustDetectNewFlags()
 {
     var cts = new CancellationTokenSource();
     var repo = new InMemoryRepository();
     var manager = new SettingsManagerPeriodic(repo);
     Assert.AreEqual(false, manager.IsFlagSet("TestFlag"));
     manager.StartReadingTask(TimeSpan.FromMilliseconds(10), cts.Token);
     repo.Content.Add(new SettingsStorageModel() { Category = SettingsManager.FlagsCategoryName, Name = "TestFlag", Value = "True" });
     Thread.Sleep(200);
     Assert.AreEqual(true, manager.IsFlagSet("TestFlag"));
     cts.Cancel();
 }
        public void PeriodicReaderShouldReactToFlagChanges()
        {
            Mock<ISettingsRepository> settingsRepo = new Mock<ISettingsRepository>();

            _mockSettingsStorageModels.AddRange(new List<SettingsStorageModel> {
                new SettingsStorageModel
                {
                    Category = SettingsManager.FlagsCategoryName,
                    Name = "X",
                    Value = "true",
                    UpdatedAt = new DateTime(2015, 1, 1)
                }
            });

            settingsRepo.Setup(x => x.ReadSettings(It.IsAny<string>()))
               .Returns<string>(category => _mockSettingsStorageModels);

            settingsRepo.Setup(x => x.ReadSettings(It.IsAny<IList<string>>(), It.IsAny<DateTime?>()))
               .Returns<IList<string>, DateTime?>((categories, lastChangedDate) => _mockSettingsStorageModels);
            var cancellationTokenSource = new CancellationTokenSource();

            var manager = new SettingsManagerPeriodic(settingsRepo.Object);

            var initialValue = manager.IsFlagSet("X");
            manager.StartReadingTask(TimeSpan.FromMilliseconds(10), cancellationTokenSource.Token);
            Thread.Sleep(100);
            var repoItem = _mockSettingsStorageModels.Single(s => s.Name == "X");
            repoItem.Value = "0";
            Thread.Sleep(100);
            Assert.AreEqual(!initialValue, manager.IsFlagSet("X"));
        }
        public void PeriodicReaderCancel()
        {
            var repo = new InMemoryRepository();
            var manager = new SettingsManagerPeriodic(repo);
            var settings = manager.Get<Settings>();
            var cts = new CancellationTokenSource();
            var task = manager.StartReadingTask(TimeSpan.FromMilliseconds(1), cts.Token);
            int cnt = 0;
            bool cancelEvent = false;
            manager.ReaderExecuting += (sender, args) => cnt++;
            manager.PeriodicReaderCanceled += (sender, args) => cancelEvent = true;

            Thread.Sleep(200);
            cts.Cancel();
            Thread.Sleep(200);
            Assert.IsTrue(cancelEvent);
            Assert.IsTrue(task.IsCanceled);
            Assert.IsTrue(cnt > 0);
        }