public void ShouldPatch_ToDoItemStatus_When_ToDoItemIsFoundForStatusPatch()
        {
            // set up
            ToDoStatuses itemStatusToPatch = ToDoStatuses.InProgress;

            var toDoItemOne = new ToDoItem
            {
                ItemId     = 1,
                ItemTitle  = "Test To Do Item One",
                ItemStatus = ToDoStatuses.ToDo,
                ItemDueOn  = DateTimeOffset.Now.AddHours(1),
                UserId     = Guid.Parse(_testUser.Id)
            };

            var mockDatabaseContext = new ToDoDbContextBuilder().UseInMemorySqlite()
                                      .WithToDoItem(toDoItemOne.ItemId, toDoItemOne.ItemTitle, toDoItemOne.ItemStatus, toDoItemOne.ItemDueOn, toDoItemOne.UserId)
                                      .Build();

            var messageSender = new Mock <IMessageSender>();

            new Mock <IMessageSender>().Setup(i => i.SendMessage(It.IsAny <string>())).Returns(It.IsAny <Task>());

            this._toDoService = new ToDoService(mockDatabaseContext, messageSender.Object);

            // test
            var toDoItem = this._toDoService.PatchItemStatus(_testUser, toDoItemOne.ItemId, itemStatusToPatch).Result;

            // assert
            Assert.IsNotNull(toDoItem);

            Assert.AreEqual(itemStatusToPatch, toDoItem.ItemStatus);

            // messageSender.Verify(mock => mock.SendMessage(It.IsAny<string>()), Times.Once);
        }
Beispiel #2
0
 public async Task <List <ToDoItem> > GetItemsByStatus(ApplicationUser user, ToDoStatuses itemStatus)
 {
     try
     {
         return(await this._toDoDbContext.ToDoItems.Where(td => td.UserId.Equals(Guid.Parse(user.Id)))
                .Where(td => td.ItemStatus.Equals(itemStatus)).AsNoTracking().ToListAsync(CancellationToken.None));
     }
     catch (Exception exception)
     {
         throw new Exception(
                   $"Something went wrong while getting your ToDo Items by status '{itemStatus.ToStringValue()}': {exception}");
     }
 }
        public ToDoDbContextBuilder WithToDoItem(int itemId, string itemTitle, ToDoStatuses itemStatus,
                                                 DateTimeOffset?itemDueOn, Guid userId)
        {
            var toDoItem = new ToDoItem
            {
                ItemId     = itemId,
                ItemTitle  = itemTitle,
                ItemStatus = itemStatus,
                ItemDueOn  = itemDueOn,
                UserId     = userId
            };

            this._toDoItems.Add(toDoItem);
            return(this);
        }
Beispiel #4
0
        public async Task <IActionResult> GetByItemStatus(ToDoStatuses itemStatus)
        {
            var currentUser = await _userManager.GetUserAsync(HttpContext.User);

            //if (currentUser == null)
            //    return Unauthorized();

            try
            {
                var result = await _todoService.GetItemsByStatus(currentUser, itemStatus);

                return(Ok(result));
            }
            catch (Exception)
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError,
                                  $"Something went wrong while getting all the to-do items for {currentUser.UserName} by status {itemStatus}. Please try again in a while."));
            }
        }
Beispiel #5
0
        public async Task <IActionResult> PatchStatus([Required] int itemId, [Required] ToDoStatuses itemStatus)
        {
            var currentUser = await _userManager.GetUserAsync(HttpContext.User);

            //if (currentUser == null)
            //    return Unauthorized();

            try
            {
                var result =
                    await this._todoService.PatchItemStatus(currentUser, itemId, itemStatus);

                return(Ok(result));
            }
            catch
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError,
                                  $"Something went wrong while updating status of a To-Do item for {currentUser.UserName} to {itemStatus}. Please try again in a while."));
            }
        }
Beispiel #6
0
        public async Task <ToDoItem> PatchItemStatus(ApplicationUser user, int itemId, ToDoStatuses itemStatus)
        {
            try
            {
                #region Patch ToDo Item Status

                var itemToPatch =
                    this._toDoDbContext.ToDoItems.SingleOrDefault(
                        td => td.UserId.Equals(Guid.Parse(user.Id)) && td.ItemId.Equals(itemId));

                if (itemToPatch == null)
                {
                    return(null);
                }

                itemToPatch.ItemStatus = itemStatus;

                await this._toDoDbContext.SaveChangesAsync(true, CancellationToken.None);

                #endregion

                #region Push Message to Azure Service Bus

                var patchedEvent = new Event
                {
                    EventId             = Guid.NewGuid(),
                    EventType           = "ItemPatched",
                    AggregateId         = Guid.Parse(user.Id),
                    AggregateName       = "ToDoItem",
                    EventCreateDateTime = DateTime.Now,
                    EventPayLoad        = $"{{ItemStatus: {itemStatus}}}"
                };
                //await this._messageSender.SendMessage(patchedEvent.ObjectToJson());

                #endregion

                return(itemToPatch);
            }
            catch (DbUpdateException exception)
            {
                throw new Exception($"Something went wrong on the Database while updating a ToDo Item Status: {exception.Message}");
            }
            catch (Exception exception)
            {
                throw new Exception($"Something went wrong while updating a ToDo Item Status: {exception.Message}");
            }
        }