using System; using System.Threading.Tasks; using BirdsiteLive.Domain.Repository; using BirdsiteLive.Moderation.Processors; using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; namespace BirdsiteLive.Moderation.Tests { [TestClass] public class ModerationPipelineTests { [TestMethod] public async Task ApplyModerationSettingsAsync_None() { #region Mocks var moderationRepositoryMock = new Mock(MockBehavior.Strict); moderationRepositoryMock .Setup(x => x.GetModerationType(ModerationEntityTypeEnum.Follower)) .Returns(ModerationTypeEnum.None); moderationRepositoryMock .Setup(x => x.GetModerationType(ModerationEntityTypeEnum.TwitterAccount)) .Returns(ModerationTypeEnum.None); var followerModerationProcessorMock = new Mock(MockBehavior.Strict); var twitterAccountModerationProcessorMock = new Mock(MockBehavior.Strict); var loggerMock = new Mock>(MockBehavior.Strict); #endregion var pipeline = new ModerationPipeline(moderationRepositoryMock.Object, followerModerationProcessorMock.Object, twitterAccountModerationProcessorMock.Object, loggerMock.Object); await pipeline.ApplyModerationSettingsAsync(); #region Validations moderationRepositoryMock.VerifyAll(); followerModerationProcessorMock.VerifyAll(); twitterAccountModerationProcessorMock.VerifyAll(); loggerMock.VerifyAll(); #endregion } [TestMethod] public async Task ApplyModerationSettingsAsync_Process() { #region Mocks var moderationRepositoryMock = new Mock(MockBehavior.Strict); moderationRepositoryMock .Setup(x => x.GetModerationType(ModerationEntityTypeEnum.Follower)) .Returns(ModerationTypeEnum.WhiteListing); moderationRepositoryMock .Setup(x => x.GetModerationType(ModerationEntityTypeEnum.TwitterAccount)) .Returns(ModerationTypeEnum.BlackListing); var followerModerationProcessorMock = new Mock(MockBehavior.Strict); followerModerationProcessorMock .Setup(x => x.ProcessAsync( It.Is(y => y == ModerationTypeEnum.WhiteListing))) .Returns(Task.CompletedTask); var twitterAccountModerationProcessorMock = new Mock(MockBehavior.Strict); twitterAccountModerationProcessorMock .Setup(x => x.ProcessAsync( It.Is(y => y == ModerationTypeEnum.BlackListing))) .Returns(Task.CompletedTask); var loggerMock = new Mock>(MockBehavior.Strict); #endregion var pipeline = new ModerationPipeline(moderationRepositoryMock.Object, followerModerationProcessorMock.Object, twitterAccountModerationProcessorMock.Object, loggerMock.Object); await pipeline.ApplyModerationSettingsAsync(); #region Validations moderationRepositoryMock.VerifyAll(); followerModerationProcessorMock.VerifyAll(); twitterAccountModerationProcessorMock.VerifyAll(); loggerMock.VerifyAll(); #endregion } [TestMethod] public async Task ApplyModerationSettingsAsync_Exception() { #region Mocks var moderationRepositoryMock = new Mock(MockBehavior.Strict); moderationRepositoryMock .Setup(x => x.GetModerationType(ModerationEntityTypeEnum.Follower)) .Throws(new Exception()); var followerModerationProcessorMock = new Mock(MockBehavior.Strict); var twitterAccountModerationProcessorMock = new Mock(MockBehavior.Strict); var loggerMock = new Mock>(); #endregion var pipeline = new ModerationPipeline(moderationRepositoryMock.Object, followerModerationProcessorMock.Object, twitterAccountModerationProcessorMock.Object, loggerMock.Object); await pipeline.ApplyModerationSettingsAsync(); #region Validations moderationRepositoryMock.VerifyAll(); followerModerationProcessorMock.VerifyAll(); twitterAccountModerationProcessorMock.VerifyAll(); loggerMock.VerifyAll(); #endregion } } }