From 9b419c7e923ab808437dab259e1e4cc583dd93ac Mon Sep 17 00:00:00 2001 From: Nicolas Constant Date: Tue, 5 Jan 2021 01:18:00 -0500 Subject: [PATCH] added ProcessFollowUser Tests --- .../BirdsiteLive.Domain.Tests.csproj | 1 + .../ProcessFollowUserTests.cs | 149 ++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 src/Tests/BirdsiteLive.Domain.Tests/BusinessUseCases/ProcessFollowUserTests.cs diff --git a/src/Tests/BirdsiteLive.Domain.Tests/BirdsiteLive.Domain.Tests.csproj b/src/Tests/BirdsiteLive.Domain.Tests/BirdsiteLive.Domain.Tests.csproj index 8762be8..72a94c9 100644 --- a/src/Tests/BirdsiteLive.Domain.Tests/BirdsiteLive.Domain.Tests.csproj +++ b/src/Tests/BirdsiteLive.Domain.Tests/BirdsiteLive.Domain.Tests.csproj @@ -8,6 +8,7 @@ + diff --git a/src/Tests/BirdsiteLive.Domain.Tests/BusinessUseCases/ProcessFollowUserTests.cs b/src/Tests/BirdsiteLive.Domain.Tests/BusinessUseCases/ProcessFollowUserTests.cs new file mode 100644 index 0000000..d5d735e --- /dev/null +++ b/src/Tests/BirdsiteLive.Domain.Tests/BusinessUseCases/ProcessFollowUserTests.cs @@ -0,0 +1,149 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using BirdsiteLive.DAL.Contracts; +using BirdsiteLive.DAL.Models; +using BirdsiteLive.Domain.BusinessUseCases; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; +using Org.BouncyCastle.Crypto.Prng; + +namespace BirdsiteLive.Domain.Tests.BusinessUseCases +{ + [TestClass] + public class ProcessFollowUserTests + { + [TestMethod] + public async Task ExecuteAsync_UserDontExists_TwitterDontExists_Test() + { + #region Stubs + var username = "testest"; + var domain = "m.s"; + var twitterName = "handle"; + var followerInbox = "/user/testest"; + var inbox = "/inbox"; + + var follower = new Follower + { + Id = 1, + Acct = username, + Host = domain, + SharedInboxRoute = followerInbox, + InboxRoute = inbox, + Followings = new List(), + FollowingsSyncStatus = new Dictionary() + }; + + var twitterUser = new SyncTwitterUser + { + Id = 2, + Acct = twitterName, + LastTweetPostedId = -1, + LastTweetSynchronizedForAllFollowersId = -1 + }; + #endregion + + #region Mocks + var followersDalMock = new Mock(MockBehavior.Strict); + followersDalMock + .SetupSequence(x => x.GetFollowerAsync(username, domain)) + .ReturnsAsync((Follower)null) + .ReturnsAsync(follower); + + followersDalMock + .Setup(x => x.CreateFollowerAsync( + It.Is(y => y == username), + It.Is(y => y == domain), + It.Is(y => y == followerInbox), + It.Is(y => y == inbox), + null, + null)) + .Returns(Task.CompletedTask); + + followersDalMock + .Setup(x => x.UpdateFollowerAsync( + It.Is(y => y.Followings.Contains(twitterUser.Id) + && y.FollowingsSyncStatus[twitterUser.Id] == -1) + )) + .Returns(Task.CompletedTask); + + var twitterUserDalMock = new Mock(MockBehavior.Strict); + twitterUserDalMock + .SetupSequence(x => x.GetTwitterUserAsync(twitterName)) + .ReturnsAsync((SyncTwitterUser)null) + .ReturnsAsync(twitterUser); + + twitterUserDalMock + .Setup(x => x.CreateTwitterUserAsync( + It.Is(y => y == twitterName), + It.Is(y => y == -1))) + .Returns(Task.CompletedTask); + #endregion + + var action = new ProcessFollowUser(followersDalMock.Object, twitterUserDalMock.Object); + await action.ExecuteAsync(username, domain, twitterName, followerInbox, inbox); + + #region Validations + followersDalMock.VerifyAll(); + twitterUserDalMock.VerifyAll(); + #endregion + } + + [TestMethod] + public async Task ExecuteAsync_UserExists_TwitterExists_Test() + { + #region Stubs + var username = "testest"; + var domain = "m.s"; + var twitterName = "handle"; + var followerInbox = "/user/testest"; + var inbox = "/inbox"; + + var follower = new Follower + { + Id = 1, + Acct = username, + Host = domain, + SharedInboxRoute = followerInbox, + InboxRoute = inbox, + Followings = new List(), + FollowingsSyncStatus = new Dictionary() + }; + + var twitterUser = new SyncTwitterUser + { + Id = 2, + Acct = twitterName, + LastTweetPostedId = -1, + LastTweetSynchronizedForAllFollowersId = -1 + }; + #endregion + + #region Mocks + var followersDalMock = new Mock(MockBehavior.Strict); + followersDalMock + .Setup(x => x.GetFollowerAsync(username, domain)) + .ReturnsAsync(follower); + + followersDalMock + .Setup(x => x.UpdateFollowerAsync( + It.Is(y => y.Followings.Contains(twitterUser.Id) + && y.FollowingsSyncStatus[twitterUser.Id] == -1) + )) + .Returns(Task.CompletedTask); + + var twitterUserDalMock = new Mock(MockBehavior.Strict); + twitterUserDalMock + .Setup(x => x.GetTwitterUserAsync(twitterName)) + .ReturnsAsync(twitterUser); + #endregion + + var action = new ProcessFollowUser(followersDalMock.Object, twitterUserDalMock.Object); + await action.ExecuteAsync(username, domain, twitterName, followerInbox, inbox); + + #region Validations + followersDalMock.VerifyAll(); + twitterUserDalMock.VerifyAll(); + #endregion + } + } +} \ No newline at end of file