using System.Collections.Generic; using System.Threading.Tasks; using BirdsiteLive.DAL.Contracts; using BirdsiteLive.DAL.Models; using BirdsiteLive.Domain.Repository; using BirdsiteLive.Moderation.Actions; using BirdsiteLive.Moderation.Processors; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; namespace BirdsiteLive.Moderation.Tests.Processors { [TestClass] public class TwitterAccountModerationProcessorTests { [TestMethod] public async Task ProcessAsync_None() { #region Mocks var twitterUserDalMock = new Mock(MockBehavior.Strict); var moderationRepositoryMock = new Mock(MockBehavior.Strict); var removeTwitterAccountActionMock = new Mock(MockBehavior.Strict); #endregion var processor = new TwitterAccountModerationProcessor(twitterUserDalMock.Object, moderationRepositoryMock.Object, removeTwitterAccountActionMock.Object); await processor.ProcessAsync(ModerationTypeEnum.None); #region Validations twitterUserDalMock.VerifyAll(); moderationRepositoryMock.VerifyAll(); removeTwitterAccountActionMock.VerifyAll(); #endregion } [TestMethod] public async Task ProcessAsync_WhiteListing_WhiteListed() { #region Stubs var allUsers = new List { new SyncTwitterUser { Acct = "acct" } }; #endregion #region Mocks var twitterUserDalMock = new Mock(MockBehavior.Strict); twitterUserDalMock .Setup(x => x.GetAllTwitterUsersAsync(It.Is(y => y == false))) .ReturnsAsync(allUsers.ToArray()); var moderationRepositoryMock = new Mock(MockBehavior.Strict); moderationRepositoryMock .Setup(x => x.CheckStatus( It.Is(y => y == ModerationEntityTypeEnum.TwitterAccount), It.Is(y => y == "acct"))) .Returns(ModeratedTypeEnum.WhiteListed); var removeTwitterAccountActionMock = new Mock(MockBehavior.Strict); #endregion var processor = new TwitterAccountModerationProcessor(twitterUserDalMock.Object, moderationRepositoryMock.Object, removeTwitterAccountActionMock.Object); await processor.ProcessAsync(ModerationTypeEnum.WhiteListing); #region Validations twitterUserDalMock.VerifyAll(); moderationRepositoryMock.VerifyAll(); removeTwitterAccountActionMock.VerifyAll(); #endregion } [TestMethod] public async Task ProcessAsync_WhiteListing_NotWhiteListed() { #region Stubs var allUsers = new List { new SyncTwitterUser { Acct = "acct" } }; #endregion #region Mocks var twitterUserDalMock = new Mock(MockBehavior.Strict); twitterUserDalMock .Setup(x => x.GetAllTwitterUsersAsync(It.Is(y => y == false))) .ReturnsAsync(allUsers.ToArray()); var moderationRepositoryMock = new Mock(MockBehavior.Strict); moderationRepositoryMock .Setup(x => x.CheckStatus( It.Is(y => y == ModerationEntityTypeEnum.TwitterAccount), It.Is(y => y == "acct"))) .Returns(ModeratedTypeEnum.None); var removeTwitterAccountActionMock = new Mock(MockBehavior.Strict); removeTwitterAccountActionMock .Setup(x => x.ProcessAsync( It.Is(y => y.Acct == "acct"))) .Returns(Task.CompletedTask); #endregion var processor = new TwitterAccountModerationProcessor(twitterUserDalMock.Object, moderationRepositoryMock.Object, removeTwitterAccountActionMock.Object); await processor.ProcessAsync(ModerationTypeEnum.WhiteListing); #region Validations twitterUserDalMock.VerifyAll(); moderationRepositoryMock.VerifyAll(); removeTwitterAccountActionMock.VerifyAll(); #endregion } [TestMethod] public async Task ProcessAsync_BlackListing_BlackListed() { #region Stubs var allUsers = new List { new SyncTwitterUser { Acct = "acct" } }; #endregion #region Mocks var twitterUserDalMock = new Mock(MockBehavior.Strict); twitterUserDalMock .Setup(x => x.GetAllTwitterUsersAsync(It.Is(y => y == false))) .ReturnsAsync(allUsers.ToArray()); var moderationRepositoryMock = new Mock(MockBehavior.Strict); moderationRepositoryMock .Setup(x => x.CheckStatus( It.Is(y => y == ModerationEntityTypeEnum.TwitterAccount), It.Is(y => y == "acct"))) .Returns(ModeratedTypeEnum.BlackListed); var removeTwitterAccountActionMock = new Mock(MockBehavior.Strict); removeTwitterAccountActionMock .Setup(x => x.ProcessAsync( It.Is(y => y.Acct == "acct"))) .Returns(Task.CompletedTask); #endregion var processor = new TwitterAccountModerationProcessor(twitterUserDalMock.Object, moderationRepositoryMock.Object, removeTwitterAccountActionMock.Object); await processor.ProcessAsync(ModerationTypeEnum.BlackListing); #region Validations twitterUserDalMock.VerifyAll(); moderationRepositoryMock.VerifyAll(); removeTwitterAccountActionMock.VerifyAll(); #endregion } [TestMethod] public async Task ProcessAsync_BlackListing_NotBlackListed() { #region Stubs var allUsers = new List { new SyncTwitterUser { Acct = "acct" } }; #endregion #region Mocks var twitterUserDalMock = new Mock(MockBehavior.Strict); twitterUserDalMock .Setup(x => x.GetAllTwitterUsersAsync(It.Is(y => y == false))) .ReturnsAsync(allUsers.ToArray()); var moderationRepositoryMock = new Mock(MockBehavior.Strict); moderationRepositoryMock .Setup(x => x.CheckStatus( It.Is(y => y == ModerationEntityTypeEnum.TwitterAccount), It.Is(y => y == "acct"))) .Returns(ModeratedTypeEnum.None); var removeTwitterAccountActionMock = new Mock(MockBehavior.Strict); #endregion var processor = new TwitterAccountModerationProcessor(twitterUserDalMock.Object, moderationRepositoryMock.Object, removeTwitterAccountActionMock.Object); await processor.ProcessAsync(ModerationTypeEnum.BlackListing); #region Validations twitterUserDalMock.VerifyAll(); moderationRepositoryMock.VerifyAll(); removeTwitterAccountActionMock.VerifyAll(); #endregion } } }