public void OnVerifiablePayload_MassTerminationHandler_Should_Process() { Commands.DataloadRequest message = GetPayload(); var result = handler.HandleAsync(message, "TrackingId"); this.MassTerminateService.Verify(m => m.ProcessPayload(It.IsAny <Commands.DataloadRequest>(), It.IsAny <IDataFactory>())); }
public void OnException_MassTerminationHandler_ShouldReturn_Fatal() { this.MassTerminateService.Setup(x => x.ProcessPayload(It.IsAny <Commands.DataloadRequest>(), It.IsAny <IDataFactory>())).Throws(new Exception()); Commands.DataloadRequest message = GetPayload(); var result = handler.HandleAsync(message, "TrackingId"); Assert.IsTrue(result.Result == MessageHandlerResult.Fatal); }
public bool ProcessMassTerminate(MassTerminationModelSerialized employee, Commands.DataloadRequest payload) { int groupID = int.Parse(payload.OrganisationId); Logger.InfoFormat("Validating a given employee number"); using (var context = _contextFactory.GetPortalDBContextAsync(groupID)) { try { var command = "sprc_DL_ProcessMassTermination"; using (var sqlConnection = new SqlConnection(context.Result.Database.Connection.ConnectionString)) { sqlConnection.Open(); var cmd = sqlConnection.CreateCommand(); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.CommandText = command; cmd.Parameters.Add(new SqlParameter("@BatchID", employee.DataLoadBatchId)); cmd.Parameters.Add(new SqlParameter("@JobID", employee.DataLoadJobId)); cmd.Parameters.Add(new SqlParameter("@EmployeeNumber", employee.EmployeeNumber)); cmd.Parameters.Add(new SqlParameter("@TerminationReason", employee.TerminationReason)); cmd.Parameters.Add(new SqlParameter("@TerminationDate", employee.TerminationDate)); cmd.Parameters.Add(new SqlParameter("@UploadedBy", employee.DataLoadBatchId)); var result = cmd.ExecuteScalar(); if (result.GetType() != typeof(DBNull)) { if ((int?)result == 1) { Logger.InfoFormat("No Error reported for EmployeeNumber: {0} for GroupID: {1}", new object[] { employee, groupID }); return(true); } else { Logger.ErrorFormat("Error in processing Mass Terminate for EmployeeNumber: {0} for GroupID: {1}", new object[] { employee, groupID }); return(false); } } } } catch (Exception e) { Logger.FatalFormat("Error in processing Mass Terminate, " + "Exception Message: {0}, Inner Exception Message: {1}", e.Message, e.InnerException == null ? "null" : e.InnerException.Message); return(false); } } return(true); }
public bool CopyDataloadBatchToPortal(Commands.DataloadRequest payload) { int groupID = int.Parse(payload.OrganisationId); using (var context = _contextFactory.GetPortalDBContextAsync(groupID)) { var command = "dbo.sprc_DL_InsertPayload"; using (var sqlConnection = new SqlConnection(context.Result.Database.Connection.ConnectionString)) { try { var spParam = new DynamicParameters(); spParam.Add("@BatchID", payload.BatchID); spParam.Add("@JobID", payload.JobID); spParam.Add("@DataloadTypeID", payload.Dataload); spParam.Add("@DateUploaded", DateTime.Now); spParam.Add("@UploadedBy", payload.RequestedBy); spParam.Add("@ReturnedVal", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue); var result = sqlConnection.ExecuteScalar(command, spParam, commandType: CommandType.StoredProcedure); if (result.GetType() != typeof(DBNull)) { if ((int?)result == 1) { Logger.InfoFormat("No Error reported for BatchNumber: {0} ", new object[] { payload.BatchID }); return(true); } else { Logger.ErrorFormat("Error reported for inside the proc {0} BatchNumber: {1} ", new object[] { command, payload.BatchID }); return(false); } } return(false); } catch (Exception e) { Logger.FatalFormat("Error in processing payload insert, " + "Exception Message: {0}, Inner Exception Message: {1}", e.Message, e.InnerException == null ? "null" : e.InnerException.Message); return(false); } } } }
public void CopyTerminationStagingErrorsToPortal(Commands.DataloadRequest payload) { int groupID = int.Parse(payload.OrganisationId); Logger.InfoFormat("Validating a given employee number"); using (var context = _contextFactory.GetPortalDBContextAsync(groupID)) { using (var stagingContext = _contextFactory.GetStagingDBContext()) { var errors = (from err in stagingContext.DataLoadErrors where (err.DataLoadBatchRefId.ToString() == payload.BatchID) select err) .AsEnumerable() .Select(x => new { MassTerminationId = "", DataLoadJobRefId = x.DataLoadJobRefId, DataLoadBatchRefId = x.DataLoadBatchRefId, ClientID = 0, EmployeeNumber = GetParam(x.ErrRecord, "EmployeeNumber"), TerminationDate = GetParam(x.ErrRecord, "TerminationDate"), TerminationReason = GetParam(x.ErrRecord, "TerminationReason"), ErrorStatus = 2, ErrorDescription = x.ErrDescription }); using (var sqlConnection = new SqlConnection(context.Result.Database.Connection.ConnectionString)) { using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnection)) { bulkCopy.DestinationTableName = "dbo.t_DL_MassTermination"; try { sqlConnection.Open(); var bulk = ConvertToDataTable(errors.ToList()); bulkCopy.WriteToServer(bulk); } catch (Exception e) { Logger.FatalFormat("Error doing bulk upload into t_MassTermination with message {0}", e.Message); } finally { sqlConnection.Close(); } } } } } }
public void OnsqlExceptionWithGeneralNetworkErrorCode_MassTerminationHandler_Should_Retry() { var sqlException = new ExceptionHelper().WithErrorCode((int)SqlErrorCodes.GeneralNetworkError) .WithErrorMessage("Database exception occured...") .Build(); this.MassTerminateService.Setup(x => x.ProcessPayload(It.IsAny <Commands.DataloadRequest>(), It.IsAny <IDataFactory>())).Throws(sqlException); Commands.DataloadRequest message = GetPayload(); var result = handler.HandleAsync(message, "TrackingId"); Assert.IsTrue(result.Result == MessageHandlerResult.Retry); }