Exemplo n.º 1
0
        public void QuoteCanBeRemoved()
        {
            // Arrange
            var vm = new ComposeTweetViewModel();

            // Act
            bool without = vm.RemoveQuoteCommand.CanExecute(null);

            vm.QuotedTweet = new StatusViewModel(DummyGenerator.CreateDummyStatus(), null, null, null);
            bool with = vm.RemoveQuoteCommand.CanExecute(null);

            // Assert
            Assert.IsFalse(without);
            Assert.IsTrue(with);
        }
Exemplo n.º 2
0
        public async Task CachedUsersCanBeRetrieved()
        {
            // Arrange
            using (var con = OpenConnection())
                using (var cache = new SqliteCache(con))
                {
                    using (var cmd = con.CreateCommand())
                    {
                        cmd.CommandText = "INSERT INTO Users (Id, UserName, UserData) VALUES (@id1, @name1, @data1), "
                                          + "(@id2, @name2, @data2);";

                        cmd.AddParameter("id1", 111);
                        cmd.AddParameter("id2", 222);
                        cmd.AddParameter("name1", "testi");
                        cmd.AddParameter("name2", "testUser");

                        var u = DummyGenerator.CreateDummyUser();
                        u.UserID     = 111;
                        u.ScreenName = "testi";
                        u.CreatedAt  = new DateTime(1, 2, 3, 4, 5, 6);
                        cmd.AddParameter("data1", JsonConvert.SerializeObject(u));

                        u            = DummyGenerator.CreateDummyUser();
                        u.UserID     = 222;
                        u.ScreenName = "testUser";
                        u.CreatedAt  = new DateTime(6, 5, 4, 3, 2, 1);
                        cmd.AddParameter("data2", JsonConvert.SerializeObject(u));

                        cmd.ExecuteNonQuery();
                    }

                    // Act
                    var users = (await cache.GetKnownUsers()).ToArray();

                    // Assert
                    Assert.AreEqual(2, users.Length);
                    Assert.IsNotNull(users.SingleOrDefault(u => u.UserId == 111));
                    Assert.IsNotNull(users.SingleOrDefault(u => u.UserId == 222));
                    Assert.IsNotNull(users.SingleOrDefault(u => u.UserName == "testi"));
                    Assert.IsNotNull(users.SingleOrDefault(u => u.UserName == "testUser"));

                    var data = JsonConvert.DeserializeObject <User>(users.First(u => u.UserId == 111).Data);
                    Assert.AreEqual(new DateTime(1, 2, 3, 4, 5, 6), data.CreatedAt);

                    data = JsonConvert.DeserializeObject <User>(users.First(u => u.UserId == 222).Data);
                    Assert.AreEqual(new DateTime(6, 5, 4, 3, 2, 1), data.CreatedAt);
                }
        }
Exemplo n.º 3
0
        public void SimpleTextStatusResultsInSingeInline()
        {
            // Arrange
            var conv   = new StatusHighlighter();
            var status = DummyGenerator.CreateDummyStatus();

            status.Text = "Hello World";

            // Act
            var inlines = (Inline[])conv.Convert(status, null, null, null);

            // Assert
            Assert.AreEqual(1, inlines.Length);
            Assert.IsInstanceOfType(inlines[0], typeof(Run));
            Assert.AreEqual(status.Text, ((Run)inlines[0]).Text);
        }
Exemplo n.º 4
0
        public void CorrectUrlIsExctracted()
        {
            // Arrange
            var conv   = new StatusLink();
            var status = DummyGenerator.CreateDummyStatus();

            status.StatusID        = 123;
            status.User.ScreenName = "username";

            // Act
            var url = (Uri)conv.Convert(status, null, null, null);

            // Assert
            Assert.IsNotNull(url);
            Assert.AreEqual("https://twitter.com/username/status/123", url.AbsoluteUri);
        }
Exemplo n.º 5
0
        public void QuotingTweetOpensDialog()
        {
            // Arrange
            var viewServices = new Mock <IViewServiceRepository>();

            viewServices.Setup(v => v.QuoteTweet(It.IsAny <StatusViewModel>(), null)).Returns(Task.CompletedTask).Verifiable
                ();

            var vm = new StatusViewModel(DummyGenerator.CreateDummyStatus(), null, null, viewServices.Object);

            // Act
            vm.QuoteStatusCommand.Execute(null);

            // Assert
            viewServices.Verify(v => v.QuoteTweet(It.IsAny <StatusViewModel>(), null), Times.Once());
        }
Exemplo n.º 6
0
        public void HtmlCharsAreDecodedCorrectly()
        {
            // Arrange
            const string content = "<test>";
            var          conv    = new StatusHighlighter();
            var          status  = DummyGenerator.CreateDummyStatus();

            status.Text = WebUtility.HtmlEncode(content);

            // Act
            var inlines = (Inline[])conv.Convert(status, null, null, null);

            // Assert
            Assert.AreEqual(1, inlines.Length);
            Assert.IsInstanceOfType(inlines[0], typeof(Run));
            Assert.AreEqual(content, ((Run)inlines[0]).Text);
        }
Exemplo n.º 7
0
        public void StatusIsRejected()
        {
            // Arrange
            var context = new Mock <IContextEntry>();
            var config  = new Mock <IConfig>();

            config.SetupGet(c => c.General).Returns(new GeneralConfig());
            var parser = new Mock <IStreamParser>();

            var vm = new TestColumn(context.Object, new ColumnDefinition(ColumnType.Messages), config.Object, parser.Object);

            // Act
            bool suitable = vm.Suitable(DummyGenerator.CreateDummyStatus());

            // Assert
            Assert.IsFalse(suitable);
        }
Exemplo n.º 8
0
        public async Task InitialLoadingAddsStatuses()
        {
            // 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 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 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> > >())).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();

            // Act
            await vm.Load();

            // Assert
            Assert.AreEqual(3, vm.Items.Count);
        }
Exemplo n.º 9
0
        public void StatusWithMentionsForOtherUsersIsRejected()
        {
            // Arrange
            var vm     = new TestColumn();
            var status = DummyGenerator.CreateDummyStatus();

            status.Entities.UserMentionEntities.Add(new UserMentionEntity
            {
                Id = 123
            });

            // Act
            bool suitable = vm.Suitable(status);

            // Assert
            Assert.IsFalse(suitable);
        }
Exemplo n.º 10
0
        public void NotifyPropertyChangedIsImplementedCorrectly()
        {
            // Arrange
            var typeResolver = new Mock <ITypeResolver>();

            typeResolver.Setup(t => t.Resolve(typeof(UserViewModel))).Returns(
                new UserViewModel(DummyGenerator.CreateDummyUserEx()));

            var vm     = new ProfileDialogViewModel();
            var tester = new PropertyChangedTester(vm, false, typeResolver.Object);

            // Act
            tester.Test();

            // Assert
            tester.Verify();
        }
Exemplo n.º 11
0
        public void InlineMediasContainExtractedMedias()
        {
            var context = new Mock <IContextEntry>();

            context.SetupGet(c => c.UserId).Returns(123);

            var status = DummyGenerator.CreateDummyStatus();

            status.User.UserID = 222;
            status.Entities.UrlEntities.Add(new UrlEntity {
                ExpandedUrl = "https://example.com/1"
            });
            status.Entities.UrlEntities.Add(new UrlEntity {
                ExpandedUrl = "https://example.com/2"
            });
            status.Entities.UrlEntities.Add(new UrlEntity {
                ExpandedUrl = "https://example.com/3"
            });

            var config       = new Mock <IConfig>();
            var visualConfig = new VisualConfig {
                InlineMedia = true
            };

            config.SetupGet(c => c.Visual).Returns(visualConfig);

            var extractorRepo = new Mock <IMediaExtractorRepository>();

            extractorRepo.Setup(r => r.ExtractMedia(It.IsAny <string>())).Returns <string>(url => new Uri(url));

            var vm = new StatusViewModel(status, context.Object, config.Object, null)
            {
                MediaExtractor = extractorRepo.Object
            };

            // Act
            var medias = vm.InlineMedias.ToArray();

            // Assert
            Assert.AreEqual(3, medias.Length);
            Assert.IsNotNull(medias.SingleOrDefault(m => m.Url.AbsoluteUri == "https://example.com/1"));
            Assert.IsNotNull(medias.SingleOrDefault(m => m.Url.AbsoluteUri == "https://example.com/2"));
            Assert.IsNotNull(medias.SingleOrDefault(m => m.Url.AbsoluteUri == "https://example.com/3"));

            extractorRepo.Verify(e => e.ExtractMedia(It.IsAny <string>()), Times.Exactly(3));
        }
Exemplo n.º 12
0
        public void NotifyPropertyChangedIsImplementedCorrectly()
        {
            // Arrange
            var typeResolver = new Mock <ITypeResolver>();

            typeResolver.Setup(t => t.Resolve(typeof(StatusViewModel))).Returns(
                new StatusViewModel(DummyGenerator.CreateDummyStatus(), null, null, null));

            var vm     = new TweetDetailsViewModel();
            var tester = new PropertyChangedTester(vm, false, typeResolver.Object);

            // Act
            tester.Test(nameof(TweetDetailsViewModel.Context));

            // Assert
            tester.Verify();
        }
Exemplo n.º 13
0
        public async Task PreviousTweetsInConversationAreLoaded()
        {
            // Arrange
            var s1 = DummyGenerator.CreateDummyStatus();

            s1.StatusID = 111;

            var s2 = DummyGenerator.CreateDummyStatus();

            s2.StatusID          = 222;
            s2.InReplyToStatusID = s1.StatusID;

            var s3 = DummyGenerator.CreateDummyStatus();

            s3.StatusID          = 333;
            s3.InReplyToStatusID = s2.StatusID;

            var context = new Mock <IContextEntry>();

            context.Setup(c => c.Twitter.Statuses.GetTweet(111, It.IsAny <bool>())).Returns(Task.FromResult(s1));
            context.Setup(c => c.Twitter.Statuses.GetTweet(222, It.IsAny <bool>())).Returns(Task.FromResult(s2));
            context.Setup(c => c.Twitter.Statuses.GetTweet(333, It.IsAny <bool>())).Returns(Task.FromResult(s3));
            context.Setup(c => c.Twitter.Search.SearchReplies(It.IsAny <Status>())).Returns(
                Task.FromResult(new List <Status>()));
            context.Setup(c => c.Twitter.Users.LookupUsers(It.IsAny <IEnumerable <ulong> >())).Returns(
                Task.FromResult(new List <UserEx>()));
            context.Setup(c => c.Twitter.Statuses.FindRetweeters(123, It.IsAny <int>())).Returns(
                Task.FromResult(new List <ulong>()));

            var statusVm = new StatusViewModel(s3, context.Object, null, null);
            var vm       = new TweetDetailsViewModel
            {
                Dispatcher   = new SyncDispatcher(),
                Context      = context.Object,
                DisplayTweet = statusVm
            };

            // Act
            await vm.OnLoad(null);

            // Assert
            Assert.AreEqual(2, vm.PreviousConversationTweets.Count);
            Assert.AreEqual(111ul, vm.PreviousConversationTweets[0].Id);
            Assert.AreEqual(222ul, vm.PreviousConversationTweets[1].Id);
        }
Exemplo n.º 14
0
        public void QuotedTweetsUrlIsAppendedToUrl()
        {
            // Arrange
            var config          = new Mock <IConfig>();
            var viewServiceRepo = new Mock <IViewServiceRepository>();

            var quotedTweet = DummyGenerator.CreateDummyStatus();
            var url         = quotedTweet.GetUrl();

            var context = new Mock <IContextEntry>();
            var status  = DummyGenerator.CreateDummyStatus();

            context.Setup(c => c.Twitter.Statuses.TweetAsync("Hello world " + url, It.IsAny <IEnumerable <ulong> >(), 0))
            .Returns(
                Task.FromResult(status)).Verifiable();
            context.SetupGet(c => c.ProfileImageUrl).Returns(new Uri("http://example.com/image.png"));

            var waitHandle = new ManualResetEventSlim(false);
            var vm         = new ComposeTweetViewModel(null)
            {
                TwitterConfig = MockTwitterConfig(),
                Text          = "Hello world",
                QuotedTweet   = new StatusViewModel(quotedTweet, context.Object, config.Object, viewServiceRepo.Object)
            };

            vm.Accounts.Add(new AccountEntry(context.Object, false)
            {
                Use = true
            });
            vm.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == nameof(ComposeTweetViewModel.IsSending) && vm.IsSending == false)
                {
                    waitHandle.Set();
                }
            };

            // Act
            vm.SendTweetCommand.Execute(null);
            waitHandle.Wait(1000);

            // Assert
            context.Verify(c => c.Twitter.Statuses.TweetAsync("Hello world " + url, It.IsAny <IEnumerable <ulong> >(), 0),
                           Times.Once());
        }
Exemplo n.º 15
0
        public void ForeignStatusCanBeRetweeted()
        {
            // Arrange
            var context = new Mock <IContextEntry>();

            context.SetupGet(c => c.UserId).Returns(123);

            var status = DummyGenerator.CreateDummyStatus();

            status.User.UserID = 222;
            var vm = new StatusViewModel(status, context.Object, null, null);

            // Act
            bool canExecute = vm.RetweetStatusCommand.CanExecute(null);

            // Assert
            Assert.IsTrue(canExecute);
        }
Exemplo n.º 16
0
        public void OwnUserCannotBeBlocked()
        {
            // Arrange
            var context = new Mock <IContextEntry>();

            context.SetupGet(c => c.UserId).Returns(123);

            var status = DummyGenerator.CreateDummyStatus();

            status.User.UserID = 123;
            var vm = new StatusViewModel(status, context.Object, null, null);

            // Act
            bool canExecute = vm.BlockUserCommand.CanExecute(null);

            // Assert
            Assert.IsFalse(canExecute);
        }
Exemplo n.º 17
0
        public void SimpleTextStatusResultsInSingeInline()
        {
            // Arrange
            var conv   = new StatusHighlighter();
            var status = DummyGenerator.CreateDummyStatus();

            status.Text = "Hello World";
            var vm = new StatusViewModel(status, null, null, null);

            // Act
            var inlines = (List <Inline>)conv.Convert(vm, null, null, null);

            // Assert
            Assert.IsNotNull(inlines);
            Assert.AreEqual(1, inlines.Count);
            Assert.IsInstanceOfType(inlines[0], typeof(Run));
            Assert.AreEqual(status.Text, ((Run)inlines[0]).Text);
        }
Exemplo n.º 18
0
        public void NotifyPropertyChangedIsImplementedCorrectly()
        {
            // Arrange
            var resolver = new Mock <ITypeResolver>();
            var context  = new Mock <IContextEntry>();

            resolver.Setup(r => r.Resolve(typeof(MessageViewModel)))
            .Returns(new MessageViewModel(DummyGenerator.CreateDummyMessage(), context.Object, null, null));

            var vm     = new ComposeMessageViewModel();
            var tester = new PropertyChangedTester(vm, false, resolver.Object);

            // Act
            tester.Test();

            // Assert
            tester.Verify();
        }
Exemplo n.º 19
0
        public void NewStatusEventWithoutSubscribersDoesNotCrash()
        {
            // 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);

            // Act
            vm.RaiseStatusWrapper(new StatusViewModel(DummyGenerator.CreateDummyStatus(), context.Object, null, null));

            // Assert
            Assert.IsTrue(true);               // HACK: This is ugly...
        }
Exemplo n.º 20
0
        public void ToastsAreRaisedWhenEnabledInConfig()
        {
            // Arrange
            var context = new Mock<IContextEntry>();
            var config = new Mock<IConfig>();
            config.SetupGet( c => c.Notifications ).Returns( new NotificationConfig { ToastsEnabled = true } );
            var viewServices = new Mock<IViewServiceRepository>();
            viewServices.Setup( v => v.OpenNotificationFlyout( It.IsAny<NotificationViewModel>() ) ).Verifiable();

            var notifier = new Notifier( config.Object, null, new SyncDispatcher(), viewServices.Object, null);
            var status = new StatusViewModel( DummyGenerator.CreateDummyStatus(), context.Object, null, null );

            // Act
            notifier.OnItem( status, new ColumnNotifications { Toast = true } );

            // Assert
            viewServices.Verify( v => v.OpenNotificationFlyout( It.IsAny<NotificationViewModel>() ), Times.Once() );
        }
Exemplo n.º 21
0
        public async Task OwnUserNameIsNotIncludedInReplyToAll()
        {
            // Arrange
            var user = DummyGenerator.CreateDummyUser();

            user.ScreenName = "you";
            var status = DummyGenerator.CreateDummyStatus(user);

            status.Entities.UserMentionEntities.Add(new UserMentionEntity {
                ScreenName = "me"
            });
            status.Entities.UserMentionEntities.Add(new UserMentionEntity {
                ScreenName = "them"
            });

            var context = new Mock <IContextEntry>();

            context.SetupGet(c => c.AccountName).Returns("me");
            context.SetupGet(c => c.ProfileImageUrl).Returns(new Uri("http://example.com/file.name"));

            var contextList = new Mock <ITwitterContextList>();

            contextList.SetupGet(c => c.Contexts).Returns(new[] { context.Object });

            var reply = new StatusViewModel(status, context.Object, null, null);

            var vm = new ComposeTweetViewModel(null)
            {
                ContextList   = contextList.Object,
                Dispatcher    = new SyncDispatcher(),
                TwitterConfig = new Mock <ITwitterConfiguration>().Object,
                Cache         = new Mock <ICache>().Object
            };

            vm.SetReply(reply, true);

            // Act
            await vm.OnLoad(false);

            // Assert
            Assert.IsTrue(vm.Text.Contains("@them"));
            Assert.IsTrue(vm.Text.Contains("@you"));
            Assert.IsFalse(vm.Text.Contains("@me"));
        }
Exemplo n.º 22
0
        public void QuoteIsNotExtractedForDifferentUrls()
        {
            // Arrange
            var status = DummyGenerator.CreateDummyStatus();

            status.Entities.UrlEntities.Add(new UrlEntity {
                ExpandedUrl = "https://example.com/123456"
            });

            var vm = new StatusViewModel(status, null, null, null);

            // Act
            ulong quotedId = vm.ExtractQuotedTweetUrl();
            bool  hasQuote = vm.HasQuotedTweet;

            // Assert
            Assert.AreEqual(0ul, quotedId);
            Assert.IsFalse(hasQuote);
        }
Exemplo n.º 23
0
        public async Task UserDataIsLoaded()
        {
            // Arrange
            var notifier = new Mock <INotifier>();

            notifier.Setup(n => n.DisplayMessage(Strings.UserNotFound, NotificationType.Error)).Verifiable();

            var user = DummyGenerator.CreateDummyUser();

            user.UserID = 123;

            var contextList = new Mock <ITwitterContextList>();
            var context     = new Mock <IContextEntry>();

            context.SetupGet(c => c.UserId).Returns(444);
            context.Setup(c => c.Twitter.Users.ShowUser(123ul, It.IsAny <bool>())).Returns(Task.FromResult(user));
            context.Setup(c => c.Twitter.Friendships.GetFriendshipWith(444, 123)).Returns(Task.FromResult(new Friendship
            {
                TargetRelationship = new Relationship
                {
                    FollowedBy = true,
                    Following  = true
                }
            }));

            contextList.SetupGet(c => c.Contexts).Returns(new[] { context.Object }).Verifiable();
            var vm = new ProfileDialogViewModel
            {
                ContextList = contextList.Object,
                Notifier    = notifier.Object,
                Dispatcher  = new SyncDispatcher()
            };

            vm.Setup(123);

            // Act
            await vm.OnLoad(null);

            // Assert
            Assert.AreEqual(user.UserID, vm.User.UserId);
            Assert.IsTrue(vm.Friendship.TargetRelationship.Following);
            Assert.IsTrue(vm.Friendship.TargetRelationship.FollowedBy);
        }
Exemplo n.º 24
0
        public void QuoteIsExtractedFromStatus()
        {
            // Arrange
            var status = DummyGenerator.CreateDummyStatus();

            status.Entities.UrlEntities.Add(new UrlEntity {
                ExpandedUrl = "https://twitter.com/user/status/123456"
            });

            var vm = new StatusViewModel(status, null, null, null);

            // Act
            ulong quotedId = vm.ExtractQuotedTweetUrl();
            bool  hasQuote = vm.HasQuotedTweet;

            // Assert
            Assert.AreEqual(123456ul, quotedId);
            Assert.IsTrue(hasQuote);
        }
Exemplo n.º 25
0
        public void UserCanBeBlocked()
        {
            // Arrange
            var status = DummyGenerator.CreateDummyStatus();

            status.User.UserID = 111;
            status.UserID      = 111;

            var viewServices = new Mock <IViewServiceRepository>();

            viewServices.Setup(v => v.Confirm(It.IsAny <ConfirmServiceArgs>())).Returns(Task.FromResult(true));

            var twitter = new Mock <ITwitterContext>();

            twitter.Setup(t => t.CreateBlockAsync(111, It.IsAny <string>(), It.IsAny <bool>())).Returns(
                Task.FromResult(status.User)).Verifiable();

            var context = new Mock <IContextEntry>();

            context.SetupGet(c => c.Twitter).Returns(twitter.Object);
            context.SetupGet(c => c.UserId).Returns(123);
            var waitHandle = new ManualResetEventSlim(false);
            var vm         = new StatusViewModel(status, context.Object, null, viewServices.Object)
            {
                Dispatcher = new SyncDispatcher()
            };

            vm.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == nameof(vm.IsLoading) && vm.IsLoading == false)
                {
                    waitHandle.Set();
                }
            };

            // Act
            vm.BlockUserCommand.Execute(null);
            waitHandle.Wait(1000);

            // Assert
            twitter.Verify(t => t.CreateBlockAsync(111, It.IsAny <string>(), It.IsAny <bool>()), Times.Once());
        }
Exemplo n.º 26
0
        public void RemoveQuoteRemoves()
        {
            // Arrange
            var config = new Mock <ITwitterConfiguration>();

            config.SetupGet(c => c.UrlLength).Returns(1);
            config.SetupGet(c => c.UrlLengthHttps).Returns(2);

            var vm = new ComposeTweetViewModel(null)
            {
                TwitterConfig = config.Object,
                QuotedTweet   = new StatusViewModel(DummyGenerator.CreateDummyStatus(), null, null, null)
            };

            // Act
            vm.RemoveQuoteCommand.Execute(null);

            // Assert
            Assert.IsNull(vm.QuotedTweet);
        }
Exemplo n.º 27
0
        public void ReplyCommandOpensDialog()
        {
            // Arrange
            var viewServices = new Mock <IViewServiceRepository>();

            viewServices.Setup(v => v.ReplyToMessage(It.Is <MessageViewModel>(m => m.Id == 123))).Returns(Task.CompletedTask).Verifiable();

            var context = new Mock <IContextEntry>();

            var msg = DummyGenerator.CreateDummyMessage();

            msg.ID = 123;
            var vm = new MessageViewModel(msg, context.Object, null, viewServices.Object);

            // Act
            vm.ReplyCommand.Execute(null);

            // Assert
            viewServices.Verify(v => v.ReplyToMessage(It.Is <MessageViewModel>(m => m.Id == 123)), Times.Once());
        }
Exemplo n.º 28
0
        public async Task CleanupRemovesColumnMappings()
        {
            // Arrange
            using (var con = OpenConnection())
                using (var cache = new SqliteCache(con))
                {
                    var status = DummyGenerator.CreateDummyStatus();
                    status.ID = 123;

                    var colId = Guid.NewGuid();

                    await cache.MapStatusesToColumn(new[] { status }, colId);

                    // Act
                    var statuses = await cache.GetStatusesForColumn(colId, 1);

                    // Assert
                    Assert.AreEqual(0, statuses.Count);
                }
        }
Exemplo n.º 29
0
        public void StatusWithUserMentionIsAccepted()
        {
            // Arrange
            var context = new Mock <IContextEntry>();

            context.SetupGet(c => c.UserId).Returns(123);

            var vm     = new TestColumn(context.Object);
            var status = DummyGenerator.CreateDummyStatus();

            status.Entities.UserMentionEntities.Add(new UserMentionEntity {
                Id = 123
            });

            // Act
            bool suitable = vm.Suitable(status);

            // Assert
            Assert.IsTrue(suitable);
        }
Exemplo n.º 30
0
        public async Task StatusesForColumnCanBeLoaded()
        {
            // Arrange
            using (var con = OpenConnection())
                using (var cache = new SqliteCache(con))
                {
                    var user = DummyGenerator.CreateDummyUser();
                    user.UserID = 123;

                    var s1 = DummyGenerator.CreateDummyStatus(user);
                    s1.ID = 1;
                    var s2 = DummyGenerator.CreateDummyStatus(user);
                    s2.ID = 2;
                    var s3 = DummyGenerator.CreateDummyStatus(user);
                    s3.ID = 3;

                    await cache.AddStatuses(new[] { s1, s2, s3 });

                    var c1 = Guid.NewGuid();
                    var c2 = Guid.NewGuid();
                    using (var cmd = con.CreateCommand())
                    {
                        cmd.CommandText = "INSERT INTO ColumnStatuses (ColumnId, StatusId) VALUES (@c1, 1), (@c1, 2), (@c2, 3);";
                        cmd.AddParameter("c1", c1);
                        cmd.AddParameter("c2", c2);
                        cmd.ExecuteNonQuery();
                    }

                    // Act
                    var statusesC1 = (await cache.GetStatusesForColumn(c1, 999)).ToArray();
                    var statusesC2 = (await cache.GetStatusesForColumn(c2, 999)).ToArray();

                    // Assert
                    Assert.AreEqual(2, statusesC1.Length);
                    Assert.IsNotNull(statusesC1.SingleOrDefault(s => s.ID == 1));
                    Assert.IsNotNull(statusesC1.SingleOrDefault(s => s.ID == 2));

                    Assert.AreEqual(1, statusesC2.Length);
                    Assert.IsNotNull(statusesC2.SingleOrDefault(s => s.ID == 3));
                }
        }