Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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());
        }