public async Task <IActionResult> AddComplaint([FromRoute] string feedId, [FromBody] AddComplaintDTO model)
        {
            var result = await _complaintsServices.AddComplaint(feedId, model);

            if (result.Success)
            {
                return(Created("", result));
            }
            return(BadRequest(result));
        }
 public static Complaint FromAddComplaintDTO(AddComplaintDTO complaint)
 {
     return(new Complaint
     {
         Type = complaint.Type,
         Image = complaint.Image,
         IsTask = complaint.IsTask,
         Question = complaint.Question,
         UserId = complaint.UserId
     });
 }
        public async Task FailWhenCategoryNotFound()
        {
            //Arrange
            MockUp(null);
            var complaintServices = new ComplaintServices(_serviceProvider);
            var feedId            = "";
            var complaint         = new AddComplaintDTO();

            //Act
            var actual = await complaintServices.AddComplaint(feedId, complaint);

            //Assert
            Assert.IsNull(actual.Data);
        }
        public async Task ReturnValidResponse()
        {
            //Arrange
            MockUp(new Category());
            var complaintServices = new ComplaintServices(_serviceProvider);
            var feedId            = "";
            var complaint         = new AddComplaintDTO();

            //Act
            var actual = await complaintServices.AddComplaint(feedId, complaint);

            //Assert
            Assert.IsNotNull(actual.Data);
        }
        public async Task BadRequestResponse()
        {
            //Arrange
            MockUp(false);
            var feedController = new FeedController(_serviceProvider);
            var complaintDTO   = new AddComplaintDTO();
            var expected       = 400;

            //ACT
            var actual = await feedController.AddComplaint("", complaintDTO) as BadRequestObjectResult;

            //Assert
            Assert.IsNotNull(actual);
            Assert.AreEqual(expected, actual.StatusCode);
        }
        /// <summary>
        /// Adds a complaint to an existing feed
        /// </summary>
        /// <param name="feedId"></param>
        /// <param name="complaint"></param>
        /// <returns></returns>
        public async Task <Response <ComplaintResponseDTO> > AddComplaint(string feedId, AddComplaintDTO complaint)
        {
            var response = new Response <ComplaintResponseDTO>();
            var feed     = await _feedRepo.GetById(feedId);

            //ends the process if the feed cannot be found
            if (feed == null)
            {
                response.Message = "Feed not found";
                response.Success = false;
                return(response);
            }

            //map values of the DTO to the actual object
            var newComplaint = ComplaintMapper.FromAddComplaintDTO(complaint);

            //updates the feedId in the categoryId property
            newComplaint.CategoryId = feedId;
            var result = await _complaintsRepo.Add(newComplaint);

            response.Success = result;

            response.Message = !response.Success ? "Error occured while updating your entry" : "Updated successfully";
            response.Data    = ComplaintMapper.ToComplaintResponseDTO(newComplaint);

            //returns the complaint added and the related field
            return(response);
        }