public IQueryable <Models.DTOs.Message.Get> Search(Models.DTOs.Message.Search sch) { if (sch == null) { throw new ArgumentNullException("Views.Message.Search"); } if (string.IsNullOrEmpty(sch.Text) && !sch.MessageTypeId.HasValue && !sch.StartDate.HasValue && !sch.EndDate.HasValue) { throw new ArgumentOutOfRangeException("Views.Message.Search"); } var ret = (from msg in _context.Messages.Include("Models.MessageType") where (!string.IsNullOrEmpty(sch.Text)? (msg.Text.ToLower().Contains(sch.Text.ToLower())) : true) && (sch.MessageTypeId.HasValue?(msg.MessageTypeId == sch.MessageTypeId):true) && (sch.StartDate.HasValue?(msg.InsertDate >= sch.StartDate.Value):true) && (sch.EndDate.HasValue?(msg.InsertDate <= sch.EndDate.Value):true) select new Models.DTOs.Message.Get() { Id = msg.Id, InsertDate = msg.InsertDate, MessageType = new Models.DTOs.MessageType.Get() { Id = msg.MessageType.Id, Name = msg.MessageType.Name }, Text = msg.Text }); return(ret); }
public async Task <IHttpActionResult> Search([FromBody] Models.DTOs.Message.Search search) { if (!ModelState.IsValid) { return(base.ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState))); } var task1 = Task.Run(() => _message.Search(search)); try{ await Task.WhenAll(task1); }catch (ArgumentNullException) { return(BadRequest(Events.MissingParameter.ToString())); }catch (ArgumentOutOfRangeException) { return(BadRequest(Events.MissingObject.ToString())); }catch (AggregateException ae) { var ex = ae.Flatten().InnerException; _logger.Error(String.Format("Error searching log messages [{0}]", Events.GetError), ex); return(StatusCode(HttpStatusCode.InternalServerError)); } if (task1.Status != TaskStatus.RanToCompletion) { _logger.Error(String.Format("Search log messages task did not complet [{0}]", Events.SearchError), task1.Exception); return(StatusCode(HttpStatusCode.InternalServerError)); } return(Ok(task1.Result)); }
public void SearchMessageStartAndEndDate_Success() { // Arrange long oneMinuteAgo = now(); System.Threading.Thread.Sleep(200); message.Add(TestInfoMessage, (long)Constants.MessageType.Info); message.Add(TestInfoMessage, (long)Constants.MessageType.Info); System.Threading.Thread.Sleep(200); long here = now(); System.Threading.Thread.Sleep(200); message.Add(TestInfoMessage, (long)Constants.MessageType.Info); message.Add(TestErrorMessage, (long)Constants.MessageType.Error); message.Add(TestErrorMessage, (long)Constants.MessageType.Error); // Act Models.DTOs.Message.Search search = new Models.DTOs.Message.Search(null, null, oneMinuteAgo, here); var result = message.Search(search); // Assert Assert.NotNull(result); Assert.IsAssignableFrom <IEnumerable <Models.DTOs.Message.Get> >(result); Assert.Equal(2, result.Count()); }
public void SearchMessageNoCriteria_Error() { // Arrange message.Add(TestInfoMessage, (long)Constants.MessageType.Info); message.Add(TestInfoMessage, (long)Constants.MessageType.Info); message.Add(TestInfoMessage, (long)Constants.MessageType.Info); message.Add(TestErrorMessage, (long)Constants.MessageType.Error); message.Add(TestErrorMessage, (long)Constants.MessageType.Error); // Act Models.DTOs.Message.Search search = new Models.DTOs.Message.Search("", null, null, null); var exception = Record.Exception(() => message.Search(search)); // Assert Assert.NotNull(exception); Assert.IsType <ArgumentOutOfRangeException>(exception); }
public void SearchMessageByPartialText_Empty() { // Arrange message.Add(TestInfoMessage, (long)Constants.MessageType.Info); message.Add(TestInfoMessage, (long)Constants.MessageType.Info); message.Add(TestInfoMessage, (long)Constants.MessageType.Info); message.Add(TestErrorMessage, (long)Constants.MessageType.Error); message.Add(TestErrorMessage, (long)Constants.MessageType.Error); // Act Models.DTOs.Message.Search search = new Models.DTOs.Message.Search("no in there"); var result = message.Search(search); // Assert Assert.NotNull(result); Assert.IsAssignableFrom <IEnumerable <Models.DTOs.Message.Get> >(result); Assert.Equal(0, result.Count()); }
public void SearchMessageByExactText_Success() { // Arrange message.Add(TestInfoMessage, (long)Constants.MessageType.Info); message.Add(TestInfoMessage, (long)Constants.MessageType.Info); message.Add(TestInfoMessage, (long)Constants.MessageType.Info); message.Add(TestErrorMessage, (long)Constants.MessageType.Error); message.Add(TestErrorMessage, (long)Constants.MessageType.Error); // Act Models.DTOs.Message.Search search = new Models.DTOs.Message.Search(TestErrorMessage.Text); var result = message.Search(search); // Assert Assert.NotNull(result); Assert.IsAssignableFrom <IEnumerable <Models.DTOs.Message.Get> >(result); Assert.Equal(2, result.Count()); }