public IActionResult UpdateUpdateQueueItemStatus([FromRoute] int id, [FromBody] UpdateQueueItemStatusRequest request) { try { var facade = new QueueFacade(); var response = facade.UpdateQueueItemStatus(id, request); switch (response.Status) { case HttpStatusCode.OK: return(Ok()); case HttpStatusCode.BadRequest: return(BadRequest(BuildBadRequestMessage(response))); case HttpStatusCode.NotFound: return(NotFound()); case HttpStatusCode.InternalServerError: return(StatusCode(StatusCodes.Status500InternalServerError)); } s_logger.Fatal("This code should be unreachable, unknown result has occured."); } catch (Exception ex) { s_logger.Error(ex, "Unable to update queue item status."); } return(StatusCode(StatusCodes.Status500InternalServerError)); }
public void UpdateQueueItemStatusBothTimesNull() { var request = new UpdateQueueItemStatusRequest { TimeHelped = null, TimeRemoved = null }; var queueFacade = new QueueFacade(); var response = queueFacade.UpdateQueueItemStatus(-1, request); // Check that a request containing both TimeHelped and TimeRemoved is rejected. Assert.AreEqual(HttpStatusCode.BadRequest, response.Status); }
public void UpdateQueueItemStatusBothTimesNotNull() { DateTime timeHelped = DateTime.Now; DateTime timeRemoved = timeHelped.AddMinutes(1); var request = new UpdateQueueItemStatusRequest { TimeHelped = timeHelped, TimeRemoved = timeRemoved }; var queueFacade = new QueueFacade(); var response = queueFacade.UpdateQueueItemStatus(-1, request); // Check that a request containing both TimeHelped and TimeRemoved is rejected. Assert.AreEqual(HttpStatusCode.BadRequest, response.Status); }
public void UpdateQueueItemStatusDoesNotExist() { DateTime timeHelped = DateTime.Now; var request = new UpdateQueueItemStatusRequest { TimeHelped = timeHelped, TimeRemoved = null }; var queueFacade = new QueueFacade(); var response = queueFacade.UpdateQueueItemStatus(-1, request); // Check that a request containing both TimeHelped and TimeRemoved is rejected. Assert.AreEqual(HttpStatusCode.NotFound, response.Status); }
/// <summary> /// This method is used to check a check in item out of the helpdesk system /// </summary> /// <param name="id">Specified CheckInID</param> /// <returns>A response indicating success or failure</returns> public CheckOutResponse CheckOut(CheckOutRequest request, int id) { CheckOutResponse response = new CheckOutResponse(); try { CheckInDataLayer dataLayer = new CheckInDataLayer(); bool result = dataLayer.CheckOut(request, id); if (result == false) { throw new NotFoundException("Unable to find check in item!"); } QueueDataLayer queueDataLayer = new QueueDataLayer(); var queueItems = queueDataLayer.GetQueueItemsByCheckIn(id); UpdateQueueItemStatusRequest removeRequest = new UpdateQueueItemStatusRequest() { TimeRemoved = DateTime.Now }; foreach (var item in queueItems) { queueDataLayer.UpdateQueueItemStatus(item.ItemId, removeRequest); } response.Result = result; response.Status = HttpStatusCode.OK; } catch (NotFoundException ex) { s_logger.Warn(ex, "Unable to find check out item"); response.Status = HttpStatusCode.NotFound; response.StatusMessages.Add(new StatusMessage(HttpStatusCode.NotFound, "Unable to find check out item")); } catch (Exception ex) { s_logger.Error(ex, "Unable to check out"); response.Status = HttpStatusCode.InternalServerError; response.StatusMessages.Add(new StatusMessage(HttpStatusCode.InternalServerError, "Unable to check out")); } return(response); }
/// <summary> /// This method is used to update a queue item's status /// </summary> /// <param name="id">ID of the specific queue item to be updated</param> /// <param name="request">Request which contains the new queue item status</param> /// <returns>Response which indicates success or failure</returns> public UpdateQueueItemStatusResponse UpdateQueueItemStatus(int id, UpdateQueueItemStatusRequest request) { UpdateQueueItemStatusResponse response = new UpdateQueueItemStatusResponse(); try { response = (UpdateQueueItemStatusResponse)request.CheckValidation(response); if (response.Status == HttpStatusCode.BadRequest) { return(response); } QueueDataLayer dataLayer = new QueueDataLayer(); bool result = dataLayer.UpdateQueueItemStatus(id, request); if (result) { response.Status = HttpStatusCode.OK; response.Result = true; } else { response.Status = HttpStatusCode.BadRequest; response.StatusMessages.Add(new StatusMessage(HttpStatusCode.BadRequest, "Unable to update queue item status.")); } } catch (NotFoundException ex) { s_logger.Warn(ex, "Unable to update queue item status"); response.Status = HttpStatusCode.NotFound; response.StatusMessages.Add(new StatusMessage(HttpStatusCode.NotFound, "Unable to update queue item status")); } catch (Exception ex) { s_logger.Error(ex, "Unable to update queue item status."); response.Status = HttpStatusCode.InternalServerError; response.StatusMessages.Add(new StatusMessage(HttpStatusCode.InternalServerError, "Unable to update queue item status.")); } return(response); }
/// <summary> /// Used to update a queue item status in the database. /// </summary> /// <param name="request"></param> /// <returns></returns> public bool UpdateQueueItemStatus(int id, UpdateQueueItemStatusRequest request) { using (helpdesksystemContext context = new helpdesksystemContext()) { Queueitem item = context.Queueitem.FirstOrDefault(p => p.ItemId == id); if (item == null) { throw new NotFoundException($"Unable to find queue item with id [{id}]"); } if (request.TimeHelped != null && request.TimeRemoved == null && item.TimeHelped == null) { // Update TimeHelped item.TimeHelped = request.TimeHelped; context.SaveChanges(); return(true); } if (request.TimeRemoved != null && request.TimeHelped == null && item.TimeRemoved == null) { if (request.TimeRemoved <= item.TimeHelped) { // TimeRemoved date is earlier than TimeHelped date - this can not happen. return(false); } // Update TimeRemoved item.TimeRemoved = request.TimeRemoved; context.SaveChanges(); return(true); } // something went wrong. Shouldn't happen if the facade validation did its job. // Means both Helped and Removed values are assigned or null. // Could also mean a TimeHelped or TimeRemoved was provided twice. // E.g. you tried to provide TimeHelped when TimeHelped was alrady set for that queue item. return(false); } }
public void UpdateQueueItemStatusInvalidTimeRemoved() { // Fill empty string parameters "" with auto-generated string. testEntityFactory.PopulateEmptyStrings = true; // Add test helpdesk. TestDataHelpdesk helpdeskData = testEntityFactory.AddHelpdesk(); // Check that helpdesk was created successfully. Assert.AreEqual(HttpStatusCode.OK, helpdeskData.Response.Status); Assert.IsTrue(helpdeskData.Response.HelpdeskID > 0); // Create a unit. ID provided is 0, which will indicates creation of new helpdesk. List <string> topics = new List <string>(new string[] { "Layouts", "Lifecycle" }); TestDataUnit unitData = testEntityFactory.AddUpdateUnit(0, helpdeskData.Response.HelpdeskID, "", "", false, topics); // Check that unit was created successfully. Assert.AreEqual(HttpStatusCode.OK, unitData.Response.Status); Assert.IsTrue(unitData.Response.UnitID > 0); // Get topics for the unit that was just created. TopicsFacade topicsFacade = new TopicsFacade(); GetTopicsByUnitIDResponse topicResponse = topicsFacade.GetTopicsByUnitID(unitData.Response.UnitID); // Check that there are two units in the response (Layouts, Lifecycle). Assert.IsTrue(topicResponse.Topics.Count() == 3); // Add test queue item, pass in topic [0]. TestDataQueue queueData = testEntityFactory.AddQueueItem(null, topicResponse.Topics[0].TopicId); // Check that queue item was created successfully. Assert.AreEqual(HttpStatusCode.OK, queueData.Response.Status); // Create update request for TimeHelped. var queueUpdateRequest = new UpdateQueueItemStatusRequest { TimeHelped = DateTime.Now, TimeRemoved = null }; // Update queue item TimeHelped. var queueUpdateResponse = testEntityFactory.QueueFacade.UpdateQueueItemStatus(queueData.Response.ItemId, queueUpdateRequest); // Check that queue item was updated successfully. Assert.AreEqual(HttpStatusCode.OK, queueData.Response.Status); Assert.IsTrue(queueUpdateResponse.Result == true); // Create update request for TimeRemoved. // NOTICE we're providing a TimedRemoved time that precedes TimeHelped. This should fail. DateTime timeRemoved = queueUpdateRequest.TimeHelped.Value.AddMinutes(-1); queueUpdateRequest = new UpdateQueueItemStatusRequest { TimeHelped = null, TimeRemoved = timeRemoved }; // Update queue item TimeRemoved. queueUpdateResponse = testEntityFactory.QueueFacade.UpdateQueueItemStatus(queueData.Response.ItemId, queueUpdateRequest); // Check that queue item was updated successfully. Assert.AreEqual(HttpStatusCode.BadRequest, queueUpdateResponse.Status); Assert.IsTrue(queueUpdateResponse.Result == false); }