public void ProcessPostRiskAssessment(BIPostNeedsRiskAssessmentEvent ev, bool risky) { DateTime startTime = DateTime.Now; using (IDnaDataReader reader = TheGuideDataReaderCreator.CreateDnaDataReader("riskmod_processriskassessmentforthreadentry")) { reader.AddParameter("riskmodthreadentryqueueid", ev.RiskModThreadEntryQueueId); reader.AddParameter("risky", risky); reader.Execute(); // Read through all result sets to find an OuterErrorCode. If found, throw an exception // The reason is that the proc calls other procs, which may or may not generate their own result sets // We're not interested in any results, except for the error result set created by the outer query do { while (reader.Read()) { if (reader.DoesFieldExist("OuterErrorCode")) { string msg = string.Format("ProcessPostRiskAssessment: SP Error from riskmod_processriskassessmentforthreadentry ({0}): {1}", reader.GetInt32("OuterErrorCode"), reader.GetString("OuterErrorMessage")); throw new Exception(msg); } } } while (reader.NextResult()); } BIEventProcessor.BIEventLogger.Log(TraceEventType.Verbose, "ProcessPostRiskAssessment() end", startTime, "RiskModThreadEntryQueueId", ev.RiskModThreadEntryQueueId); }
public static BIEvent CreateBiEvent(IDnaDataReader reader, ITheGuideSystem theGuideSys, IRiskModSystem riskModSys) { EventTypes et = (EventTypes)reader.GetInt32("EventType"); BIEvent be = null; switch (et) { case EventTypes.ET_POSTNEEDSRISKASSESSMENT: be = new BIPostNeedsRiskAssessmentEvent(theGuideSys, riskModSys); break; case EventTypes.ET_POSTTOFORUM: be = new BIPostToForumEvent(riskModSys); break; case EventTypes.ET_MODERATIONDECISION_POST: be = new BIPostModerationDecisionEvent(riskModSys); break; default: throw new InvalidOperationException("Event Type " + et.ToString() + " not supported"); } be.SetProperties(reader); return be; }
public bool IsRisky(BIPostNeedsRiskAssessmentEvent ev) { // When disabled, always assume it's risky if (Disabled) return true; try { DateTime startTime = DateTime.Now; using (IDnaDataReader reader = RiskModDataReaderCreator.CreateDnaDataReader("predict_withoutentryid")) { reader.AddParameter("isArticle", 0); reader.AddParameter("ModClassId", ev.ModClassId); reader.AddParameter("SiteID", ev.SiteId); reader.AddParameter("ForumId", ev.ForumId); reader.AddParameter("ThreadID", ev.ThreadId); reader.AddParameter("UserID", ev.UserId); reader.AddParameter("DatePosted", ev.DatePosted); reader.AddParameter("text", ev.Text); reader.AddIntOutputParameter("moderation"); reader.AddIntReturnValue(); reader.Execute(); int moderationResult = reader.GetIntReturnValue(); BIEventProcessor.BIEventLogger.Log(TraceEventType.Verbose, "IsRisky() end", startTime, "RiskModThreadEntryQueueId", ev.RiskModThreadEntryQueueId, "Result", moderationResult); return moderationResult > 0; } } catch (Exception ex) { // If there is a problem getting a risk assessment, assume it's risky BIEventProcessor.BIEventLogger.LogException(ex); return true; } }
public void RiskModSystem_When_Disabled_Check_IsRisky_Returns_True() { // Create with "Disabled" is true var rm = new RiskModSystem(null, true); var postAssessEvent = new BIPostNeedsRiskAssessmentEvent(null, null); bool risky = rm.IsRisky(postAssessEvent); Assert.IsTrue(risky); }
public void BIPostNeedsRiskAssessmentEvent_Process_IsNotRisky() { var m = new MockRepository(); var mockITheGuideSystem = m.Stub<ITheGuideSystem>(); mockITheGuideSystem.Stub(x => x.ProcessPostRiskAssessment(null, true)).IgnoreArguments(); var mockIRiskModSystem = m.Stub<IRiskModSystem>(); mockIRiskModSystem.Stub(x => x.IsRisky(null)).Return(false).IgnoreArguments(); m.ReplayAll(); var ev = new BIPostNeedsRiskAssessmentEvent(mockITheGuideSystem, mockIRiskModSystem); ev.Process(); mockIRiskModSystem.AssertWasCalled(x => x.IsRisky(ev)); mockITheGuideSystem.AssertWasCalled(x => x.ProcessPostRiskAssessment(ev, false)); }