public void ParserDeletionDoesNotCrashIfStatusIsContainedMultipleTimes() { // Arrange var context = new Mock <IContextEntry>(); var definition = new ColumnDefinition(ColumnType.User); var config = new Mock <IConfig>(); config.SetupGet(c => c.General).Returns(new GeneralConfig()); var parser = new Mock <IStreamParser>(); var vm = new TestColumn(context.Object, definition, config.Object, parser.Object) { Dispatcher = new SyncDispatcher() }; var status = DummyGenerator.CreateDummyStatus(); status.StatusID = status.ID = 1234; var s1 = new StatusViewModel(status, context.Object, config.Object, null); vm.Items.Add(s1); status = DummyGenerator.CreateDummyStatus(); status.StatusID = status.ID = 1234; var s2 = new StatusViewModel(status, context.Object, config.Object, null); vm.Items.Add(s2); var deleteArgs = new DeleteStreamEventArgs( "{\"delete\":{\"status\":{\"id\":1234,\"id_str\":\"1234\",\"user_id\":3,\"user_id_str\":\"3\"}}}"); // Act parser.Raise(e => e.StatusDeleted += null, deleteArgs); // Assert Assert.IsFalse(vm.Items.Any(s => s.Id == 1234)); }
public void RefereshingDataAddsStatuses() { // Arrange var context = new Mock <IContextEntry>(); var definition = new ColumnDefinition(ColumnType.User); var config = new Mock <IConfig>(); config.SetupGet(c => c.General).Returns(new GeneralConfig { RealtimeStreaming = false }); var parser = new Mock <IStreamParser>(); var statuses = new List <Status> { DummyGenerator.CreateDummyStatus(), DummyGenerator.CreateDummyStatus(), DummyGenerator.CreateDummyStatus() }; for (int i = 0; i < statuses.Count; ++i) { statuses[i].StatusID = (ulong)(i + 1); } var waitHandle = new ManualResetEventSlim(false); var twitterContext = new Mock <ITwitterContext>(); var statusRepo = new Mock <ITwitterStatusRepository>(); statusRepo.Setup( s => s.Filter(It.IsAny <Expression <Func <Status, bool> > >(), It.IsAny <Expression <Func <Status, bool> > >(), It.IsAny <Expression <Func <Status, bool> > >())).Returns( Task.FromResult(statuses)); twitterContext.SetupGet(c => c.Statuses).Returns(statusRepo.Object); context.Setup(c => c.Twitter).Returns(twitterContext.Object); var vm = new TestColumn(context.Object, definition, config.Object, parser.Object); var muter = new Mock <IStatusMuter>(); muter.Setup(m => m.IsMuted(It.IsAny <Status>())).Returns(false).Verifiable(); vm.Muter = muter.Object; vm.Dispatcher = new SyncDispatcher(); vm.Cache = new NullCache(); vm.PropertyChanged += (s, e) => { if (e.PropertyName == nameof(ColumnViewModelBase.IsLoading) && vm.IsLoading == false) { waitHandle.Set(); } }; // Act vm.ActionDispatcher.OnHeaderClicked(); bool wasSet = waitHandle.Wait(1000); // Assert Assert.IsTrue(wasSet); Assert.AreEqual(3, vm.Items.Count); }