using BirdsiteLive.Domain.Repository;
using BirdsiteLive.Domain.Tools;

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace BirdsiteLive.Domain.Tests.Tools
{
    [TestClass]
    public class ModerationRegexParserTests
    {
        [TestMethod]
        public void Parse_TwitterAccount_Simple_Test()
        {
            #region Stubs
            var pattern = "handle";
            #endregion

            var regex = ModerationRegexParser.Parse(
                ModerationEntityTypeEnum.TwitterAccount,
                pattern
            );

            #region Validations
            Assert.IsTrue(regex.IsMatch(pattern));
            Assert.IsFalse(regex.IsMatch("handles"));
            Assert.IsFalse(regex.IsMatch("andle"));
            #endregion
        }

        [TestMethod]
        public void Parse_Follower_Handle_Test()
        {
            #region Stubs
            var pattern = "@handle@domain.ext";
            #endregion

            var regex = ModerationRegexParser.Parse(ModerationEntityTypeEnum.Follower, pattern);

            #region Validations
            Assert.IsTrue(regex.IsMatch(pattern));
            Assert.IsFalse(regex.IsMatch("@handle2@domain.ext"));
            Assert.IsFalse(regex.IsMatch("@handle@seb.domain.ext"));
            #endregion
        }

        [TestMethod]
        public void Parse_Follower_Domain_Test()
        {
            #region Stubs
            var pattern = "domain.ext";
            #endregion

            var regex = ModerationRegexParser.Parse(ModerationEntityTypeEnum.Follower, pattern);

            #region Validations
            Assert.IsTrue(regex.IsMatch("@handle@domain.ext"));
            Assert.IsTrue(regex.IsMatch("@handle2@domain.ext"));
            Assert.IsFalse(regex.IsMatch("@handle2@domain2.ext"));
            Assert.IsFalse(regex.IsMatch("@handle@seb.domain.ext"));
            #endregion
        }

        [TestMethod]
        public void Parse_Follower_SubDomains_Test()
        {
            #region Stubs
            var pattern = "*.domain.ext";
            #endregion

            var regex = ModerationRegexParser.Parse(ModerationEntityTypeEnum.Follower, pattern);

            #region Validations
            Assert.IsTrue(regex.IsMatch("@handle2@sub.domain.ext"));
            Assert.IsTrue(regex.IsMatch("@han@sub3.domain.ext"));
            Assert.IsFalse(regex.IsMatch("@handle@domain.ext"));
            Assert.IsFalse(regex.IsMatch("@handle2@.domain.ext"));
            Assert.IsFalse(regex.IsMatch("@handle2@domain2.ext"));
            Assert.IsFalse(regex.IsMatch("@handle@seb.domain2.ext"));
            #endregion
        }
    }
}
