Esempio n. 1
0
        public void UpdateTermsInDatabase_WithoutUser_ReturnsCorrectError()
        {
            var cacheManager = Mocks.DynamicMock<ICacheManager>();
            var historyReader = Mocks.DynamicMock<IDnaDataReader>();
            historyReader.Stub(x => x.GetInt32NullAsZero("historyId")).Return(1);
            historyReader.Stub(x => x.Read()).Return(true).Repeat.Once();
            var creator = Mocks.DynamicMock<IDnaDataReaderCreator>();
            creator.Stub(x => x.CreateDnaDataReader("addtermsfilterterm")).Return(Mocks.DynamicMock<IDnaDataReader>());
            creator.Stub(x => x.CreateDnaDataReader("addtermsfilterupdate")).Return(historyReader);
            var getTermsReader = Mocks.DynamicMock<IDnaDataReader>();
            getTermsReader.Stub(x => x.Read()).Return(false);
            creator.Stub(x => x.CreateDnaDataReader("gettermsbymodclassid")).Return(getTermsReader);

            Mocks.ReplayAll();
            string reason = "a reason";
            int userId = 0;
            Error expected = new Error { Type = "UpdateTermsInDatabase", ErrorMessage = "Valid user must be supplied" };

            TermsLists target = new TermsLists();
            target.Termslist.Add(TermsListTest.GetTermsList());
            Error actual = target.UpdateTermsInDatabase(creator, cacheManager, reason, userId, true);

            Assert.AreEqual(expected.ErrorMessage, actual.ErrorMessage);
            Assert.AreEqual(expected.Type, actual.Type);

            creator.AssertWasNotCalled(x => x.CreateDnaDataReader("addtermsfilterterm"));
            creator.AssertWasNotCalled(x => x.CreateDnaDataReader("addtermsfilterupdate"));
        }
Esempio n. 2
0
 public void IsUpToDate_AlwaysReturnsTrue()
 {
     var target = new TermsLists(); 
     Assert.IsFalse(target.IsUpToDate(null));
 }
Esempio n. 3
0
        public void FilterListByTermIdTest()
        {
            var term = new TermDetails(){Id=1};
            var termsList = new TermsList(1);
            termsList.Terms.Add(term);

            var target = new TermsLists();
            target.Termslist.Add(TermsListTest.GetTermsList());
            target.Termslist.Add(termsList);
            
            target.FilterListByTermId(1);
            Assert.AreEqual(1, target.Termslist.Count);

        }
Esempio n. 4
0
        public void UpdateTermsInDatabase_InvalidTerms_ReturnsCorrectError()
        {
            var cacheManager = Mocks.DynamicMock<ICacheManager>();
            var historyReader = Mocks.DynamicMock<IDnaDataReader>();
            historyReader.Stub(x => x.GetInt32NullAsZero("historyId")).Return(1);
            historyReader.Stub(x => x.Read()).Return(true).Repeat.Once();
            var creator = Mocks.DynamicMock<IDnaDataReaderCreator>();
            creator.Stub(x => x.CreateDnaDataReader("addtermsfilterterm")).Return(Mocks.DynamicMock<IDnaDataReader>());
            creator.Stub(x => x.CreateDnaDataReader("addtermsfilterupdate")).Return(historyReader);
            var getTermsReader = Mocks.DynamicMock<IDnaDataReader>();
            getTermsReader.Stub(x => x.Read()).Return(false);
            creator.Stub(x => x.CreateDnaDataReader("gettermsbymodclassid")).Return(getTermsReader);

            Mocks.ReplayAll();
            string reason = "a reason";
            int userId = 1;
            Error expected = new Error { Type = "UpdateTermForModClassId", ErrorMessage = "Term value cannot be empty./r/nTerm value cannot be empty." };

            var termsList = new TermsList(1);
            termsList.Terms.Add(new TermDetails());
            TermsLists target = new TermsLists();
            target.Termslist.Add(termsList);
            target.Termslist.Add(termsList);
            Error actual = target.UpdateTermsInDatabase(creator, cacheManager, reason, userId, true);

            Assert.AreEqual(expected.ErrorMessage, actual.ErrorMessage);
            Assert.AreEqual(expected.Type, actual.Type);

            creator.AssertWasNotCalled(x => x.CreateDnaDataReader("addtermsfilterterm"));
            creator.AssertWasCalled(x => x.CreateDnaDataReader("addtermsfilterupdate"));
        }
Esempio n. 5
0
        public void UpdateTermsInDatabase_CorrectValue_ReturnsNullError()
        {
            var cacheManager = Mocks.DynamicMock<ICacheManager>();
            var historyReader = Mocks.DynamicMock<IDnaDataReader>();
            historyReader.Stub(x => x.GetInt32NullAsZero("historyId")).Return(1);
            historyReader.Stub(x => x.Read()).Return(true).Repeat.Once();
            var creator = Mocks.DynamicMock<IDnaDataReaderCreator>();
            creator.Stub(x => x.CreateDnaDataReader("addtermsfilterterm")).Return(Mocks.DynamicMock<IDnaDataReader>());
            creator.Stub(x => x.CreateDnaDataReader("addtermsfilterupdate")).Return(historyReader);
            var getTermsReader = Mocks.DynamicMock<IDnaDataReader>();
            getTermsReader.Stub(x => x.Read()).Return(false);
            creator.Stub(x => x.CreateDnaDataReader("gettermsbymodclassid")).Return(getTermsReader);

            Mocks.ReplayAll();
            string reason = "a reason";
            int userId = 1;
            Error expected = new Error { Type = "UpdateTermsInDatabase", ErrorMessage = "Unable to get history id" };

            TermsLists target = new TermsLists();
            target.Termslist.Add(TermsListTest.GetTermsList());
            Error actual = target.UpdateTermsInDatabase(creator, cacheManager, reason, userId, true);

            Assert.IsNull(actual);

            creator.AssertWasCalled(x => x.CreateDnaDataReader("addtermsfilterterm"));
            creator.AssertWasCalled(x => x.CreateDnaDataReader("addtermsfilterupdate"));
        }
Esempio n. 6
0
        /// <summary>
        /// Checks the term is in the db correctly
        /// </summary>
        /// <param name="termStr"></param>
        private void CheckTermsInDB(string termStr)
        {
            var threadModId = 0;
            var modClassId = 0;
            var userId = 6;
            var termId = 0;
            using (FullInputContext inputcontext = new FullInputContext(""))
            {
                using (IDnaDataReader reader = inputcontext.CreateDnaDataReader(""))
                {
                    reader.ExecuteDEBUGONLY("select * from threadmod where modid = (select max(modid) from threadmod)");
                    Assert.IsTrue(reader.Read());
                    Assert.AreEqual("Filtered terms: " + termStr, reader.GetStringNullAsEmpty("notes"));

                    reader.ExecuteDEBUGONLY("select ID from TermsLookUp where term='" + termStr + "'");
                    Assert.IsTrue(reader.Read());
                    termId = reader.GetInt32("ID");

                    reader.ExecuteDEBUGONLY("select * from ForumModTermMapping where threadmodid = (select max(modid) from threadmod)");
                    Assert.IsTrue(reader.Read());
                    Assert.AreEqual(termId, reader.GetInt32("TermID"));

                    threadModId = reader.GetInt32("ThreadModID");

                    reader.ExecuteDEBUGONLY("SELECT s.modclassid AS ModClassID FROM threadmod TM INNER JOIN sites S ON TM.SiteID = S.SiteID WHERE modid = (select max(modid) from threadmod) ");
                    Assert.IsTrue(reader.Read());
                    modClassId = reader.GetInt32("ModClassID");
                }
            }

            //ensure an update so that there is a reson in db
            var reason = "test reason";
            IDnaDataReaderCreator creator = DnaMockery.CreateDatabaseReaderCreator();

            var termsLists = new TermsLists();

            var term = new TermDetails() { Value = termStr, Action = TermAction.Refer };
            var termsList = new TermsList(modClassId);
            termsList.Terms.Add(term);

            termsLists.Termslist.Add(termsList);

            termsLists.UpdateTermsInDatabase(creator, CacheFactory.GetCacheManager(), reason, userId, true);

            //check reason is valid in output
            termsList = TermsList.GetTermsListByThreadModIdFromThreadModDB(creator, threadModId, true);
            Assert.AreEqual(termStr, termsList.Terms[0].Value);
            Assert.AreEqual(reason, termsList.Terms[0].Reason);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <param name="reason"></param>
        /// <param name="termsLists"></param>
        /// <returns></returns>
        private TermsLists ValidateHistory(DnaTestURLRequest request, string reason, TermsLists termsLists)
        {
            IInputContext context = DnaMockery.CreateDatabaseInputContext();
            using (IDnaDataReader reader = context.CreateDnaDataReader(""))
            {
                foreach (var termsList in termsLists.Termslist)
                {
                    foreach(var term in termsList.Terms)
                    {
                        reader.ExecuteDEBUGONLY("select id from termslookup where term='" + term.Value + "'");
                        if (reader.Read())
                        {
                            term.Id = reader.GetInt32NullAsZero("id");
                        }
                        Assert.AreNotEqual(0, term.Id);
                    }
                }

                var historyId = 0;
                reader.ExecuteDEBUGONLY("select top 1 * from TermsUpdateHistory order by updatedate desc");
                if (reader.Read())
                {
                    historyId = reader.GetInt32NullAsZero("id");
                    Assert.AreNotEqual(0, historyId);
                    Assert.AreEqual(reason, reader.GetStringNullAsEmpty("notes"));
                    Assert.AreEqual(request.CurrentUserID, reader.GetInt32NullAsZero("userid"));
                }


                var termsListsClone = (TermsLists)termsLists.Clone();
                reader.ExecuteDEBUGONLY("select * from TermsByModClassHistory where updateid=" + historyId + " order by modclassid");
                while (reader.Read())
                {
                    //remove items from lists if in db
                    var termsListFound = 
                        termsListsClone.Termslist.FirstOrDefault(x => x.ModClassId == reader.GetInt32NullAsZero("modclassid"));

                    Assert.IsNotNull(termsListFound);
                    var termFound = termsListFound.Terms.FirstOrDefault(x => x.Id == reader.GetInt32NullAsZero("termid")
                        && (byte)x.Action == reader.GetTinyIntAsInt("actionid"));

                    Assert.IsTrue(termsListFound.Terms.Remove(termFound));

                    if(termsListFound.Terms.Count == 0)
                    {
                        Assert.IsTrue(termsListsClone.Termslist.Remove(termsListFound));
                    }

                }
                Assert.AreEqual(0, termsListsClone.Termslist.Count);

            }
            return termsLists;
        }
Esempio n. 8
0
        public void PostToForum_ReferredForumTermsInPost_CorrectModeratedPost()
        {
            var forumTerm = "humbug123";
            var processPreMod = false;
            var siteStatus = ModerationStatus.SiteStatus.UnMod;
            var forumStatus = ModerationStatus.ForumStatus.Reactive;
            var threadStatus = ModerationStatus.ForumStatus.Reactive;
            var userStatus = ModerationStatus.UserStatus.Standard;
            var expectedPostStatus = ModerationStatus.ForumStatus.PostMod;

            SetPermissions(siteStatus, forumStatus, threadStatus, userStatus, processPreMod);

            DnaTestURLRequest request = new DnaTestURLRequest(_siteName);
            //request.SetCurrentUserNormal();

            //Add the terms to the terms update history

            ICacheManager _cache = CacheFactory.GetCacheManager();
            IDnaDataReaderCreator creator = DnaMockery.CreateDatabaseReaderCreator();

            var termsLists = new TermsLists();

            var termList = new TermsList(_forumId, false, true);
            termList.Terms.Add(new TermDetails { Value = forumTerm, Action = TermAction.Refer });

            termsLists.Termslist.Add(termList);

            Error error = termsLists.UpdateTermsInDatabase(creator, _cache, "Testing humbug123", 6, false);
            SendTermsSignal();

            request = PostToForumWithException(request, "Testing terms with refferred item " + forumTerm + " post", DnaTestURLRequest.usertype.NORMALUSER);

            var xml = request.GetLastResponseAsXML();

            CheckPostInModQueue(xml, expectedPostStatus, processPreMod);
            CheckPostInThread(xml, expectedPostStatus, processPreMod);

            CheckModerationTerms(forumTerm, creator);

        }
        public void TermsFilterImportPage_AddMultipleTermsWithErrors_ReturnsErrors()
        {
            var term1 = Guid.NewGuid().ToString();
            var term2 = Guid.NewGuid().ToString();
            //set up data
            var reason = "this has a reason";
            var termsLists = new TermsLists();
            var termsList = new TermsList(1);
            termsList.Terms.Add(new TermDetails { Action = TermAction.Refer, Value = term1 });
            termsList.Terms.Add(new TermDetails { Action = TermAction.Refer, Value = term2 });
            termsLists.Termslist.Add(termsList);
            termsList = new TermsList(2);
            termsList.Terms.Add(new TermDetails { Action = TermAction.ReEdit, Value = term1 });
            termsList.Terms.Add(new TermDetails { Action = TermAction.ReEdit, Value = term2 });
            termsLists.Termslist.Add(termsList);

            string postText = termsLists.Termslist.Aggregate("", (current1, tmpTermsList) => tmpTermsList.Terms.Aggregate(current1, (current, term) => current + (term.Value + "\n")));

            var postParams = new Queue<KeyValuePair<string, string>>();
            postParams.Enqueue(new KeyValuePair<string, string>("reason", reason));
            postParams.Enqueue(new KeyValuePair<string, string>("termtext", postText));
            foreach (var tempTermsList in termsLists.Termslist)
            {
                postParams.Enqueue(new KeyValuePair<string, string>("action_modclassid_" + tempTermsList.ModClassId, (tempTermsList.Terms[0].Action).ToString()));
            }

            postParams.Enqueue(new KeyValuePair<string, string>("action_modclassid_" + 3, "100"));//invalid action

            var request = new DnaTestURLRequest(SiteName) { UseEditorAuthentication = true };
            request.SetCurrentUserSuperUser();
            request.RequestPage("termsfilterimport?action=UPDATETERMS&skin=purexml&ignorecache=1", postParams);

            //check correct error message returned
            ValidateError(request, "UPDATETERMINVALIDACTION", "Terms action invalid.");
        }
        public void TermsFilterImportPage_AddMultipleTerms_PassesValidation()
        {
            var term1 = Guid.NewGuid().ToString();
            var term2 = Guid.NewGuid().ToString();
            //set up data
            var reason = "this has a reason";
            var termsLists = new TermsLists();
            var termsList = new TermsList(1);
            termsList.Terms.Add(new TermDetails { Action = TermAction.Refer, Value = term1 });
            termsList.Terms.Add(new TermDetails { Action = TermAction.Refer, Value = term2 });
            termsLists.Termslist.Add(termsList);
            termsList = new TermsList(2);
            termsList.Terms.Add(new TermDetails { Action = TermAction.ReEdit, Value = term1 });
            termsList.Terms.Add(new TermDetails { Action = TermAction.ReEdit, Value = term2 });
            termsLists.Termslist.Add(termsList);

            string postText = termsLists.Termslist.Aggregate("", (current1, tmpTermsList) => tmpTermsList.Terms.Aggregate(current1, (current, term) => current + (term.Value + "\n")));

            var postParams = new Queue<KeyValuePair<string, string>>();
            postParams.Enqueue(new KeyValuePair<string, string>("reason", reason));
            postParams.Enqueue(new KeyValuePair<string, string>("termtext", postText));
            foreach (var tempTermsList in termsLists.Termslist)
            {
                postParams.Enqueue(new KeyValuePair<string, string>("action_modclassid_" + tempTermsList.ModClassId, (tempTermsList.Terms[0].Action).ToString()));
            }


            var request = new DnaTestURLRequest(SiteName) { UseEditorAuthentication = true };
            request.SetCurrentUserSuperUser();
            request.RequestPage("termsfilterimport?action=UPDATETERMS&skin=purexml&ignorecache=1", postParams);
            ValidateResponse(request);

            //check correct error message returned
            ValidateOkResult(request, "TermsUpdateSuccess", "Terms updated successfully.");
            //check history table
            termsLists = ValidateHistory(request, reason, termsLists);
            //Check that all terms are actually associated
            ValidateTermAssociations(request, termsLists);
        }
        public void TermsFilterImportPage_AddSingleTermWithoutTerms_ReturnsCorrectError()
        {
            //set up data
            var reason = "Not Empty";//empty for test
            var termsLists = new TermsLists();
            var termsList = new TermsList(1);
            termsList.Terms.Add(new TermDetails { Action = TermAction.ReEdit, Value = "bollocks" });
            termsLists.Termslist.Add(termsList);
            termsList = new TermsList(2);
            termsList.Terms.Add(new TermDetails { Action = TermAction.Refer, Value = "bollocks" });
            termsLists.Termslist.Add(termsList);

            string postText = "";//breaks test

            var postParams = new Queue<KeyValuePair<string, string>>();
            postParams.Enqueue(new KeyValuePair<string, string>("reason", reason));
            postParams.Enqueue(new KeyValuePair<string, string>("termtext", postText));
            foreach (var tempTermsList in termsLists.Termslist)
            {
                postParams.Enqueue(new KeyValuePair<string, string>("action_modclassid_" + tempTermsList.ModClassId, (tempTermsList.Terms[0].Action).ToString()));
            }


            var request = new DnaTestURLRequest(SiteName) { UseEditorAuthentication = true };
            request.SetCurrentUserSuperUser();
            request.RequestPage("termsfilterimport?action=UPDATETERMS&skin=purexml", postParams);
            ValidateError(request, "UPDATETERMMISSINGTERM", "Terms text must contain newline delimited terms.");
        }
        public void TermsFilterImportPage_AddSingleTermWithoutReason_ReturnsCorrectError()
        {
            //set up data
            var reason = "";//empty for test
            var termsLists = new TermsLists();
            var termsList = new TermsList(1);
            termsList.Terms.Add(new TermDetails { Action = TermAction.ReEdit, Value = "bollocks" });
            termsLists.Termslist.Add(termsList);
            termsList = new TermsList(2);
            termsList.Terms.Add(new TermDetails { Action = TermAction.Refer, Value = "bollocks" });
            termsLists.Termslist.Add(termsList);

            string postText = termsLists.Termslist.Aggregate("", (current1, tmpTermsList) => tmpTermsList.Terms.Aggregate(current1, (current, term) => current + (term.Value + "\n")));

            var postParams = new Queue<KeyValuePair<string, string>>();
            postParams.Enqueue(new KeyValuePair<string, string>("reason", reason));
            postParams.Enqueue(new KeyValuePair<string, string>("termtext", postText));
            foreach (var tempTermsList in termsLists.Termslist)
            {
                postParams.Enqueue(new KeyValuePair<string, string>("action_modclassid_" + tempTermsList.ModClassId, (tempTermsList.Terms[0].Action).ToString()));
            }


            var request = new DnaTestURLRequest(SiteName) { UseEditorAuthentication = true };
            request.SetCurrentUserSuperUser();
            request.RequestPage("termsfilterimport?action=UPDATETERMS&skin=purexml", postParams);
            ValidateError(request, "UPDATETERMMISSINGDESCRIPTION", "The import description cannot be empty.");
        }
        public void TermsFilterImportPage_AddSingleReferTermToAll_PassesValidation()
        {
            //refresh mod classes
            SendSignal();

            //set up data
            var reason = "this has a reason";
            var term = "potato";
            var action = TermAction.Refer;

            var moderationClasses = new ModerationClassListCache(DnaMockery.CreateDatabaseReaderCreator(), DnaDiagnostics.Default, CacheFactory.GetCacheManager(), null, null);


            var moderationClassList = moderationClasses.GetObjectFromCache();

            var termsLists = new TermsLists();
            foreach (var modClass in moderationClassList.ModClassList)
            {
                var termsList = new TermsList { ModClassId = modClass.ClassId };
                termsList.Terms.Add(new TermDetails { Value = term, Action = action });
                termsLists.Termslist.Add(termsList);
            }
            Assert.AreNotEqual(0, termsLists.Termslist.Count);

            var postParams = new Queue<KeyValuePair<string, string>>();
            postParams.Enqueue(new KeyValuePair<string, string>("reason", reason));
            postParams.Enqueue(new KeyValuePair<string, string>("termtext", term));
            postParams.Enqueue(new KeyValuePair<string, string>("action_modclassid_all", action.ToString()));



            var request = new DnaTestURLRequest(SiteName) { UseEditorAuthentication = true };
            request.SetCurrentUserSuperUser();
            request.RequestPage("termsfilterimport?action=UPDATETERMS&skin=purexml", postParams);
            ValidateResponse(request);

            //check correct error message returned
            ValidateOkResult(request, "TermsUpdateSuccess", "Term updated successfully.");
            //check history table
            termsLists = ValidateHistory(request, reason, termsLists);
            //Check that all terms are actually associated
            ValidateTermAssociations(request, termsLists);

        }
Esempio n. 14
0
        public void PostToForum_BlockedForumTermsInPost_CorrectModeratedPost()
        {
            var forumTerm = "bum1234";
            var processPreMod = false;
            var siteStatus = ModerationStatus.SiteStatus.UnMod;
            var forumStatus = ModerationStatus.ForumStatus.Reactive;
            var threadStatus = ModerationStatus.ForumStatus.Reactive;
            var userStatus = ModerationStatus.UserStatus.Standard;
            //var expectedPostStatus = ModerationStatus.ForumStatus.PostMod;

            SetPermissions(siteStatus, forumStatus, threadStatus, userStatus, processPreMod);

            DnaTestURLRequest request = new DnaTestURLRequest(_siteName);
            //request.SetCurrentUserNormal();

            //Add the terms to the terms update history

            ICacheManager _cache = CacheFactory.GetCacheManager();
            IDnaDataReaderCreator creator = DnaMockery.CreateDatabaseReaderCreator();

            var termsLists = new TermsLists();

            var termList = new TermsList(_forumId, false, true);
            termList.Terms.Add(new TermDetails { Value = forumTerm, Action = TermAction.ReEdit });

            termsLists.Termslist.Add(termList);

            Error error = termsLists.UpdateTermsInDatabase(creator, _cache, "Testing bum1234", 6, false);
            SendTermsSignal();

            request = PostToForumWithException(request, "Testing terms with refferred item " + forumTerm + " post", DnaTestURLRequest.usertype.NORMALUSER);

            var xml = request.GetLastResponseAsXML();

            IInputContext context = DnaMockery.CreateDatabaseInputContext();
            using (IDnaDataReader dataReader = context.CreateDnaDataReader(""))
            {
                dataReader.ExecuteDEBUGONLY("select * from ForumModTermMapping where ThreadModID = (select max(modid) from threadmod where notes like '%" + forumTerm + "%')");
                Assert.IsFalse(dataReader.Read());
            }
        }
Esempio n. 15
0
        public void PostToForum_ReferredForumReferredModClassTermsInPost_CorrectModeratedPost()
        {
            var forumTerm = "potato";
            var processPreMod = false;
            var siteStatus = ModerationStatus.SiteStatus.UnMod;
            var forumStatus = ModerationStatus.ForumStatus.Reactive;
            var threadStatus = ModerationStatus.ForumStatus.Reactive;
            var userStatus = ModerationStatus.UserStatus.Standard;
            var expectedPostStatus = ModerationStatus.ForumStatus.PostMod;

            SetPermissions(siteStatus, forumStatus, threadStatus, userStatus, processPreMod);

            DnaTestURLRequest request = new DnaTestURLRequest(_siteName);
            //request.SetCurrentUserNormal();

            new TermsFilterImportPageTests().TermsFilterImportPage_AddSingleReferTermToAll_PassesValidation();
            SendTermsSignal();
            //Add the terms to the terms update history

            ICacheManager _cache = CacheFactory.GetCacheManager();
            IDnaDataReaderCreator creator = DnaMockery.CreateDatabaseReaderCreator();

            var termsLists = new TermsLists();

            var termList = new TermsList(_forumId, false, true);
            termList.Terms.Add(new TermDetails { Value = forumTerm, Action = TermAction.Refer });

            termsLists.Termslist.Add(termList);

            Error error = termsLists.UpdateTermsInDatabase(creator, _cache, "Testing potato", 6, false);
            SendTermsSignal();

            request = PostToForumWithException(request, "Testing terms with refferred item " + forumTerm + " post", DnaTestURLRequest.usertype.NORMALUSER);

            var xml = request.GetLastResponseAsXML();

            CheckPostInModQueue(xml, expectedPostStatus, processPreMod);
            CheckPostInThread(xml, expectedPostStatus, processPreMod);

            var termId = 0;
            var threadModId = 0;

            IInputContext context = DnaMockery.CreateDatabaseInputContext();
            using (IDnaDataReader dataReader = context.CreateDnaDataReader(""))
            {
                dataReader.ExecuteDEBUGONLY("select ID from TermsLookUp where term = '" + forumTerm + "'");
                Assert.IsTrue(dataReader.Read());
                termId = dataReader.GetInt32("ID");

                dataReader.ExecuteDEBUGONLY("select * from ForumModTermMapping where ThreadModID = (select max(modid) from threadmod)");
                Assert.IsTrue(dataReader.Read());
                Assert.AreEqual(termId, dataReader.GetInt32("TermID"));
                threadModId = dataReader.GetInt32("ThreadModID");
            }

            var terms = TermsList.GetTermsListByThreadModIdFromThreadModDB(creator, threadModId, true);
            Assert.AreEqual(forumTerm, terms.Terms[0].Value);
            Assert.AreEqual("this has a reason", terms.Terms[0].Reason);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <param name="termsLists"></param>
        private void ValidateTermAssociations(DnaTestURLRequest request, TermsLists termsLists)
        {
            XmlDocument doc;
            var termIds = new List<int>();
            foreach (var tmpList in termsLists.Termslist)
            {
                termIds.AddRange(tmpList.Terms.Select(term => term.Id));
            }
            //strip duplicates
            termIds = termIds.Distinct().ToList();


            //check the term association
            foreach (var id in termIds)
            {
                var termsListsClone = (TermsLists)termsLists.Clone();
                termsListsClone.FilterListByTermId(id);
                request.RequestPage(String.Format("termsfilterimport?s_termid={0}&skin=purexml&ignorecache=1", id));
                doc = request.GetLastResponseAsXML();

                ValidateResponse(request);

                var termsListNodes = doc.SelectNodes("//H2G2/TERMSLISTS/TERMSLIST");
                Assert.IsNotNull(termsListNodes);
                foreach(XmlNode termsListNode in termsListNodes)
                {
                    var termsList =
                        termsListsClone.Termslist.FirstOrDefault(
                            x => x.ModClassId == Int32.Parse(termsListNode.Attributes["MODCLASSID"].Value));
                    Assert.IsNotNull(termsList);
                    Assert.AreEqual(id, termsList.Terms[0].Id);

                    termsListsClone.Termslist.Remove(termsList);
                }
                //check if all elements removed
                Assert.AreEqual(0, termsListsClone.Termslist.Count);
            }
        }
Esempio n. 17
0
        /// <summary>
        /// Checks the parameters and updates the term passed in
        /// </summary>
        /// <returns></returns>
        private BaseResult UpdateTerm()
        {
            var forumId = InputContext.GetParamIntOrZero("forumid", "Forum ID");
            if (forumId == 0)   
            {
                return new Error { Type = "UPDATETERM", ErrorMessage = "Forum ID cannot be 0." };
            }
            var termText = InputContext.GetParamStringOrEmpty("termtext", "the text of the term");
            string[] terms = termText.Split('\n');
            terms = terms.Where(x => x != String.Empty).Distinct().ToArray();
            if (terms.Length == 0)
            {
                return new Error { Type = "UPDATETERMMISSINGTERM", ErrorMessage = "Terms text must contain newline delimited terms." };
            }
            var termReason = InputContext.GetParamStringOrEmpty("reason", "Reason for the term added.").Trim();
            if (string.IsNullOrEmpty(termReason))
            {
                return new Error { Type = "UPDATETERMMISSINGDESCRIPTION", ErrorMessage = "Term reason cannot be empty." };
            }
            string actionParam = string.Format("action_forumid_all");
            TermAction termAction;
            if (Enum.IsDefined(typeof(TermAction), InputContext.GetParamStringOrEmpty(actionParam, "Forum action value")))
            {
                termAction = (TermAction)Enum.Parse(typeof(TermAction), InputContext.GetParamStringOrEmpty(actionParam, "Forum action value"));
            }
            else
            {
                return new Error { Type = "UPDATETERMINVALIDACTION", ErrorMessage = "Terms action invalid." };
            }
            var termsLists = new TermsLists();
            var termList = new TermsList(forumId, false, true);
            foreach (var term in terms)
            {
                termList.Terms.Add(new TermDetails { Value = term, Action = termAction });
            }
            termsLists.Termslist.Add(termList);
            BaseResult error = termsLists.UpdateTermsInDatabase(InputContext.CreateDnaDataReaderCreator(), _cache, termReason.Trim(),
                                           InputContext.ViewingUser.UserID, false);

            if (error == null)
            {
                //Send email to the distribution list
                SendTermUpdateEmail(terms, forumId, termReason.Trim(), termAction, InputContext.ViewingUser.UserID);

                return new Result("TermsUpdateSuccess", String.Format("{0} updated successfully.", terms.Length == 1 ? "Term" : "Terms"));
            }

            return error;
        }
        /// <summary>
        /// Checks the parameters and updates the term passed in
        /// </summary>
        /// <returns></returns>
        private BaseResult UpdateTerms()
        {
            string reason = InputContext.GetParamStringOrEmpty("reason", "The reason for the change");
            if (reason == string.Empty)
            {
                return new Error {Type = "UPDATETERMMISSINGDESCRIPTION", ErrorMessage = "The import description cannot be empty."};
            }
            string termText = InputContext.GetParamStringOrEmpty("termtext", "the text of the term");
            string[] terms = termText.Split('\n');
            terms = terms.Where(x => x != String.Empty).Distinct().ToArray();
            
            if (terms.Length == 0)
            {
                return new Error
                           {Type = "UPDATETERMMISSINGTERM", ErrorMessage = "Terms text must contain newline delimited terms."};
            }

            var moderationClassList =
                ModerationClassListCache.GetObject();


            var termsLists = new TermsLists();
            
            foreach (var modClass in moderationClassList.ModClassList)
            {
                //get all action or just the one for the specific mod class
                string actionParam = string.Format("action_modclassid_all");
                if(!InputContext.DoesParamExist(actionParam, "Modclass action value"))
                {
                    actionParam = string.Format("action_modclassid_{0}", modClass.ClassId);
                    if (!InputContext.DoesParamExist(actionParam, "Modclass action value")) continue;
                }

                //parse term id
                TermAction termAction;
                if (Enum.IsDefined(typeof(TermAction), InputContext.GetParamStringOrEmpty(actionParam, "Modclass action value")))
                {
                    termAction =
                        (TermAction)
                        Enum.Parse(typeof(TermAction),
                                   InputContext.GetParamStringOrEmpty(actionParam, "Modclass action value"));
                }
                else
                {
                    return new Error {Type = "UPDATETERMINVALIDACTION", ErrorMessage = "Terms action invalid."};
                }

                var termsList = new TermsList(modClass.ClassId);
                foreach (var term in terms)
                {
                    termsList.Terms.Add(new TermDetails { Value = term, Action = termAction });
                }
                termsLists.Termslist.Add(termsList);
            }
            BaseResult error = termsLists.UpdateTermsInDatabase(AppContext.ReaderCreator, _cache, reason,
                                                                InputContext.ViewingUser.UserID, true);

            if (error == null)
            {
                return new Result("TermsUpdateSuccess", String.Format("{0} updated successfully.", terms.Length==1?"Term":"Terms"));
            }
            return error;
        }