コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }