diff --git a/src/BirdsiteLive.Domain/Tools/ModerationParser.cs b/src/BirdsiteLive.Domain/Tools/ModerationParser.cs
index 888fe64..a338b20 100644
--- a/src/BirdsiteLive.Domain/Tools/ModerationParser.cs
+++ b/src/BirdsiteLive.Domain/Tools/ModerationParser.cs
@@ -7,6 +7,8 @@ namespace BirdsiteLive.Domain.Tools
{
public static string[] Parse(string entry)
{
+ if (string.IsNullOrWhiteSpace(entry)) return new string[0];
+
var separationChar = '|';
if (entry.Contains(";")) separationChar = ';';
else if (entry.Contains(",")) separationChar = ',';
diff --git a/src/Tests/BirdsiteLive.Domain.Tests/BirdsiteLive.Domain.Tests.csproj b/src/Tests/BirdsiteLive.Domain.Tests/BirdsiteLive.Domain.Tests.csproj
index 72a94c9..626c941 100644
--- a/src/Tests/BirdsiteLive.Domain.Tests/BirdsiteLive.Domain.Tests.csproj
+++ b/src/Tests/BirdsiteLive.Domain.Tests/BirdsiteLive.Domain.Tests.csproj
@@ -18,4 +18,8 @@
+
+
+
+
diff --git a/src/Tests/BirdsiteLive.Domain.Tests/Repository/ModerationRepositoryTests.cs b/src/Tests/BirdsiteLive.Domain.Tests/Repository/ModerationRepositoryTests.cs
new file mode 100644
index 0000000..30ffb8e
--- /dev/null
+++ b/src/Tests/BirdsiteLive.Domain.Tests/Repository/ModerationRepositoryTests.cs
@@ -0,0 +1,347 @@
+using BirdsiteLive.Common.Settings;
+using BirdsiteLive.Domain.Repository;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace BirdsiteLive.Domain.Tests.Repository
+{
+ [TestClass]
+ public class ModerationRepositoryTests
+ {
+ #region GetModerationType
+ [TestMethod]
+ public void GetModerationType_Follower_WhiteListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ FollowersWhiteListing = "@me@domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModerationTypeEnum.WhiteListing ,repo.GetModerationType(ModerationEntityTypeEnum.Follower));
+ Assert.AreEqual(ModerationTypeEnum.None, repo.GetModerationType(ModerationEntityTypeEnum.TwitterAccount));
+ #endregion
+ }
+
+ [TestMethod]
+ public void GetModerationType_TwitterAccount_WhiteListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ TwitterAccountsWhiteListing = "@me@domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModerationTypeEnum.None, repo.GetModerationType(ModerationEntityTypeEnum.Follower));
+ Assert.AreEqual(ModerationTypeEnum.WhiteListing, repo.GetModerationType(ModerationEntityTypeEnum.TwitterAccount));
+ #endregion
+ }
+
+ [TestMethod]
+ public void GetModerationType_FollowerTwitterAccount_WhiteListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ FollowersWhiteListing = "@me@domain.ext",
+ TwitterAccountsWhiteListing = "@me@domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModerationTypeEnum.WhiteListing, repo.GetModerationType(ModerationEntityTypeEnum.Follower));
+ Assert.AreEqual(ModerationTypeEnum.WhiteListing, repo.GetModerationType(ModerationEntityTypeEnum.TwitterAccount));
+ #endregion
+ }
+
+ [TestMethod]
+ public void GetModerationType_Follower_BlackListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ FollowersBlackListing = "@me@domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModerationTypeEnum.BlackListing, repo.GetModerationType(ModerationEntityTypeEnum.Follower));
+ Assert.AreEqual(ModerationTypeEnum.None, repo.GetModerationType(ModerationEntityTypeEnum.TwitterAccount));
+ #endregion
+ }
+
+ [TestMethod]
+ public void GetModerationType_TwitterAccount_BlackListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ TwitterAccountsBlackListing = "@me@domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModerationTypeEnum.None, repo.GetModerationType(ModerationEntityTypeEnum.Follower));
+ Assert.AreEqual(ModerationTypeEnum.BlackListing, repo.GetModerationType(ModerationEntityTypeEnum.TwitterAccount));
+ #endregion
+ }
+
+ [TestMethod]
+ public void GetModerationType_FollowerTwitterAccount_BlackListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ FollowersBlackListing = "@me@domain.ext",
+ TwitterAccountsBlackListing = "@me@domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModerationTypeEnum.BlackListing, repo.GetModerationType(ModerationEntityTypeEnum.Follower));
+ Assert.AreEqual(ModerationTypeEnum.BlackListing, repo.GetModerationType(ModerationEntityTypeEnum.TwitterAccount));
+ #endregion
+ }
+
+ [TestMethod]
+ public void GetModerationType_Follower_BothListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ FollowersBlackListing = "@me@domain.ext",
+ FollowersWhiteListing = "@me@domain.ext",
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModerationTypeEnum.WhiteListing, repo.GetModerationType(ModerationEntityTypeEnum.Follower));
+ Assert.AreEqual(ModerationTypeEnum.None, repo.GetModerationType(ModerationEntityTypeEnum.TwitterAccount));
+ #endregion
+ }
+
+ [TestMethod]
+ public void GetModerationType_TwitterAccount_BothListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ TwitterAccountsBlackListing = "@me@domain.ext",
+ TwitterAccountsWhiteListing = "@me@domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModerationTypeEnum.None, repo.GetModerationType(ModerationEntityTypeEnum.Follower));
+ Assert.AreEqual(ModerationTypeEnum.WhiteListing, repo.GetModerationType(ModerationEntityTypeEnum.TwitterAccount));
+ #endregion
+ }
+
+ [TestMethod]
+ public void GetModerationType_FollowerTwitterAccount_BothListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ FollowersBlackListing = "@me@domain.ext",
+ FollowersWhiteListing = "@me@domain.ext",
+ TwitterAccountsBlackListing = "@me@domain.ext",
+ TwitterAccountsWhiteListing = "@me@domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModerationTypeEnum.WhiteListing, repo.GetModerationType(ModerationEntityTypeEnum.Follower));
+ Assert.AreEqual(ModerationTypeEnum.WhiteListing, repo.GetModerationType(ModerationEntityTypeEnum.TwitterAccount));
+ #endregion
+ }
+ #endregion
+
+ #region CheckStatus
+ [TestMethod]
+ public void CheckStatus_Follower_WhiteListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ FollowersWhiteListing = "@me@domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModeratedTypeEnum.WhiteListed, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me@domain.ext"));
+ Assert.AreEqual(ModeratedTypeEnum.None, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me2@domain.ext"));
+ #endregion
+ }
+
+ [TestMethod]
+ public void CheckStatus_Follower_WhiteListing_Instance_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ FollowersWhiteListing = "domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModeratedTypeEnum.WhiteListed, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me@domain.ext"));
+ Assert.AreEqual(ModeratedTypeEnum.WhiteListed, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me2@domain.ext"));
+ Assert.AreEqual(ModeratedTypeEnum.None, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me2@domain2.ext"));
+ #endregion
+ }
+
+ [TestMethod]
+ public void CheckStatus_Follower_WhiteListing_SubDomain_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ FollowersWhiteListing = "*.domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModeratedTypeEnum.WhiteListed, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me@s.domain.ext"));
+ Assert.AreEqual(ModeratedTypeEnum.WhiteListed, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me2@s2.domain.ext"));
+ Assert.AreEqual(ModeratedTypeEnum.None, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me2@domain.ext"));
+ Assert.AreEqual(ModeratedTypeEnum.None, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me2@domain2.ext"));
+ #endregion
+ }
+
+ [TestMethod]
+ public void CheckStatus_TwitterAccount_WhiteListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ TwitterAccountsWhiteListing = "handle"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModeratedTypeEnum.WhiteListed, repo.CheckStatus(ModerationEntityTypeEnum.TwitterAccount, "handle"));
+ Assert.AreEqual(ModeratedTypeEnum.None, repo.CheckStatus(ModerationEntityTypeEnum.TwitterAccount, "handle2"));
+ #endregion
+ }
+
+ [TestMethod]
+ public void CheckStatus_Follower_BlackListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ FollowersBlackListing = "@me@domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModeratedTypeEnum.BlackListed, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me@domain.ext"));
+ Assert.AreEqual(ModeratedTypeEnum.None, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me2@domain.ext"));
+ #endregion
+ }
+
+ [TestMethod]
+ public void CheckStatus_TwitterAccount_BlackListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ TwitterAccountsBlackListing = "handle"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModeratedTypeEnum.BlackListed, repo.CheckStatus(ModerationEntityTypeEnum.TwitterAccount, "handle"));
+ Assert.AreEqual(ModeratedTypeEnum.None, repo.CheckStatus(ModerationEntityTypeEnum.TwitterAccount, "handle2"));
+ #endregion
+ }
+
+ [TestMethod]
+ public void CheckStatus_Follower_BothListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ FollowersWhiteListing = "@me@domain.ext",
+ FollowersBlackListing = "@me@domain.ext"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModeratedTypeEnum.WhiteListed, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me@domain.ext"));
+ Assert.AreEqual(ModeratedTypeEnum.None, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@me2@domain.ext"));
+ #endregion
+ }
+
+ [TestMethod]
+ public void CheckStatus_TwitterAccount_BothListing_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings
+ {
+ TwitterAccountsWhiteListing = "handle",
+ TwitterAccountsBlackListing = "handle"
+ };
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModeratedTypeEnum.WhiteListed, repo.CheckStatus(ModerationEntityTypeEnum.TwitterAccount, "handle"));
+ Assert.AreEqual(ModeratedTypeEnum.None, repo.CheckStatus(ModerationEntityTypeEnum.TwitterAccount, "handle2"));
+ #endregion
+ }
+
+ [TestMethod]
+ public void CheckStatus_None_Test()
+ {
+ #region Stubs
+ var settings = new ModerationSettings();
+ #endregion
+
+ var repo = new ModerationRepository(settings);
+
+ #region Validations
+ Assert.AreEqual(ModeratedTypeEnum.None, repo.CheckStatus(ModerationEntityTypeEnum.Follower, "@handle@domain.ext"));
+ Assert.AreEqual(ModeratedTypeEnum.None, repo.CheckStatus(ModerationEntityTypeEnum.TwitterAccount, "handle"));
+ #endregion
+ }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Tests/BirdsiteLive.Domain.Tests/Tools/ModerationParserTests.cs b/src/Tests/BirdsiteLive.Domain.Tests/Tools/ModerationParserTests.cs
index 8284a1b..59030fa 100644
--- a/src/Tests/BirdsiteLive.Domain.Tests/Tools/ModerationParserTests.cs
+++ b/src/Tests/BirdsiteLive.Domain.Tests/Tools/ModerationParserTests.cs
@@ -22,6 +22,34 @@ namespace BirdsiteLive.Domain.Tests.Tools
#endregion
}
+ [TestMethod]
+ public void Parse_Null_Test()
+ {
+ #region Stubs
+ string entry = null;
+ #endregion
+
+ var result = ModerationParser.Parse(entry);
+
+ #region Validations
+ Assert.AreEqual(0, result.Length);
+ #endregion
+ }
+
+ [TestMethod]
+ public void Parse_WhiteSpace_Test()
+ {
+ #region Stubs
+ var entry = " ";
+ #endregion
+
+ var result = ModerationParser.Parse(entry);
+
+ #region Validations
+ Assert.AreEqual(0, result.Length);
+ #endregion
+ }
+
[TestMethod]
public void Parse_PipeSeparator_Test()
{