public void AddRecentSearchTests() { string rootPath = TestConfig.GetConfig().GetRipleyServerPath(); BBC.Dna.AppContext.OnDnaStartup(rootPath); Console.WriteLine("Before RecentSearch - AddRecentSearchTests"); //Create the mocked inputcontext Mockery mock = new Mockery(); IInputContext context = DnaMockery.CreateDatabaseInputContext(); Stub.On(context).Method("GetParamIntOrZero").WithAnyArguments().Will(Return.Value(0)); // Create a mocked site for the context ISite mockedSite = DnaMockery.CreateMockedSite(context, 70, "mbiplayer", "mbiplayer", true, "comment");//changed to miss cache Stub.On(context).GetProperty("CurrentSite").Will(Return.Value(mockedSite)); Stub.On(context).Method("DoesParamExist").With("forumid", "forumid").Will(Return.Value(false)); Stub.On(mockedSite).GetProperty("ModClassID").Will(Return.Value(1)); BBC.Dna.User user = new BBC.Dna.User(context); Stub.On(context).GetProperty("ViewingUser").Will(Return.Value(user)); Stub.On(context).GetProperty("CurrentSite").Will(Return.Value(mockedSite)); // Initialise the profanities object var p = new ProfanityFilter(DnaMockery.CreateDatabaseReaderCreator(), DnaDiagnostics.Default, CacheFactory.GetCacheManager(), null, null); RecentSearch recentsearch = new RecentSearch(context); Assert.IsTrue(recentsearch.AddSearchTerm("test article", RecentSearch.SEARCHTYPE.ARTICLE),"Adding valid artical search"); Assert.IsTrue(recentsearch.AddSearchTerm("test forum", RecentSearch.SEARCHTYPE.FORUM), "Adding valid forum search"); Assert.IsFalse(recentsearch.AddSearchTerm("This contains the profanity f**k", RecentSearch.SEARCHTYPE.ARTICLE), "Failing to add search term with profanity"); Assert.IsFalse(recentsearch.AddSearchTerm("This contains the an email - [email protected]", RecentSearch.SEARCHTYPE.ARTICLE), "Failing to add search term with email"); recentsearch.ProcessRequest(); XmlElement xml = recentsearch.RootElement; Assert.IsTrue(xml.SelectSingleNode("RECENTSEARCHES") != null, "The xml is not generated correctly!!!"); DnaXmlValidator validator = new DnaXmlValidator(xml.InnerXml, _schemaUri); validator.Validate(); Console.WriteLine("after RecentSearch - AddRecentSearchTests"); }
/// <summary> /// Used to process the current request. /// </summary> public override void ProcessRequest() { string searchQuery = InputContext.GetParamStringOrEmpty("searchstring","searchstring"); // Show Options. bool showApproved = InputContext.GetParamIntOrZero("showapproved", "showapproved") != 0; bool showNormal = InputContext.GetParamIntOrZero("shownormal","shownormal") != 0; bool showSubmitted = InputContext.GetParamIntOrZero("showsubmitted","showsubmitted") != 0; if (showApproved == showNormal == showSubmitted == false) { showApproved = true; showNormal = true; showSubmitted = true; } bool showContentRating = InputContext.GetParamIntOrZero("showcontentratingdata","showcontentratingdata") != 0; bool showPhrases = InputContext.GetParamIntOrZero("showphrases","showphrases") != 0; //Skip and Show. int show = InputContext.GetSiteOptionValueInt("ArticleSearch", "DefaultShow"); if (InputContext.DoesParamExist("show", "show")) { show = InputContext.GetParamIntOrZero("show", "show"); } int skip = InputContext.GetParamIntOrZero("skip","skip"); //Get use groups filter as a comma separated string. string userGroups = string.Empty; for ( int count = 0; count < InputContext.GetParamCountOrZero("usergroups","usergroups"); ++count ) { if ( userGroups != string.Empty ) { userGroups += ","; } userGroups += InputContext.GetParamStringOrEmpty("usergroup",count,"usergroup"); } int nodeId = InputContext.GetParamIntOrZero("category","category"); //Support for GOOSearch. string searchtype = InputContext.GetParamStringOrEmpty("searchtype","searchtype"); if ( searchtype == "GOOSEARCH") { if (searchQuery.Contains("@")) { searchtype = "USER"; } else { searchtype = "ARTICLE"; } } int forumid = 0; if (InputContext.DoesParamExist("forumid", "forumid")) { forumid = InputContext.GetParamIntOrZero("forumid", "forumid"); } string failed = string.Empty; List<Term> terms = null; ProfanityFilter.FilterState state = ProfanityFilter.CheckForProfanities(InputContext.CurrentSite.ModClassID, searchQuery, out failed, out terms, forumid); if ( state == ProfanityFilter.FilterState.FailBlock && !InputContext.ViewingUser.IsEditor ) { //Error - search query failed profanity check. //TODO: Need to insert profanity error. return; } //set up recent search object RecentSearch recentsearch = new RecentSearch(InputContext); //Article Search if ( InputContext.GetParamIntOrZero("article","article") == 1 || searchtype.ToUpper() == "ARTICLE") { bool useFreeTextSearch = InputContext.GetParamIntOrZero("usefreetextsearch", "UseFreeTextSearch") == 1; int articleType = InputContext.GetParamIntOrZero("articletype","articletype"); bool bResults = ArticleSearch(searchQuery, showApproved, showNormal, showSubmitted, showContentRating, showPhrases, userGroups, skip, show,nodeId, articleType, useFreeTextSearch ); //add recent search values recentsearch.AddSearchTerm(searchQuery, RecentSearch.SEARCHTYPE.ARTICLE); } //User Search. if ( InputContext.GetParamIntOrZero("user","user") == 1 || searchtype.ToUpper() == "USER" ) { bool currentSiteOnly = InputContext.GetParamIntOrZero("thissite","current site only") == 1; UserSearch(searchQuery,skip,show,currentSiteOnly); //add recent search values recentsearch.AddSearchTerm(searchQuery, RecentSearch.SEARCHTYPE.USER); } if (InputContext.GetParamIntOrZero("hierarchy", "hierarchy") == 1 || searchtype.ToUpper() == "HIERARCHY" ) { HierarchySearch(searchQuery, skip, show); //add recent search values recentsearch.AddSearchTerm(searchQuery, RecentSearch.SEARCHTYPE.HIERARCHY); } if (InputContext.GetParamIntOrZero("forum", "forum") == 1 || searchtype.ToUpper() == "FORUM") { int threadId = InputContext.GetParamIntOrZero("forumid","forumid"); int forumId = InputContext.GetParamIntOrZero("threadid","threadid"); ForumSearch(searchQuery, skip, show, userGroups, nodeId, threadId, forumId); //add recent search values recentsearch.AddSearchTerm(searchQuery, RecentSearch.SEARCHTYPE.FORUM); } //Add All User Groups. XmlElement groups = UserGroupsHelper.GetSiteGroupsElement(InputContext.CurrentSite.SiteID, InputContext); RootElement.AppendChild(ImportNode(groups)); //Add Functionality / Parameters for each search type. /*XmlElement functionality = AddElementTag(RootElement, "FUNCTIONALITY"); XmlElement searchArticles = AddElementTag(functionality, "SEARCHARTICLES"); if (InputContext.GetParamIntOrZero("article", "article") == 1) { AddAttribute(searchArticles, "SELECTED", 1); } AddElementTag(searchArticles, "SHOWAPPROVED"); AddElementTag(searchArticles, "SHOWNORMAL"); AddElementTag(searchArticles, "SHOWSUBMITTED"); XmlElement searchUsers = AddElementTag(functionality, "SEARCHUSERS"); if (InputContext.GetParamIntOrZero("users", "users") == 1) { AddAttribute(searchUsers, "SELECTED", 1); } XmlElement searchForums = AddElementTag(functionality, "SEARCHFORUMS"); if (InputContext.GetParamIntOrZero("forums", "forums") == 1) { AddAttribute(searchForums, "SELECTED", 1); }*/ }