Exemplo n.º 1
0
        public void GetItemsReturnsListOfValidToDoItemViewModel()
        {
            var toDoItemEntityList = new List <EntityModel.ToDoItem>
            {
                new EntityModel.ToDoItem
                {
                    ItemId      = 1,
                    Title       = "Item 1",
                    DueDate     = DateTime.Now,
                    IsCompleted = false
                },
                new EntityModel.ToDoItem
                {
                    ItemId      = 2,
                    Title       = "Item 2",
                    DueDate     = DateTime.Now,
                    IsCompleted = true
                }
            };

            var mockToDoDbSet = GetMockedDbSet(toDoItemEntityList);

            var mockContext = new Mock <IToDoContext>();

            mockContext.Setup(context => context.ToDoItems).Returns(mockToDoDbSet);

            var repository = new ToDoItemsRepository(mockContext.Object);

            var result = repository.GetItems().Result;

            Assert.IsNotNull(result);
            Assert.AreEqual(toDoItemEntityList[0].Title, result.FirstOrDefault()?.Title);
            Assert.AreEqual(toDoItemEntityList[0].ItemId, result.FirstOrDefault()?.ItemId);
            Assert.AreEqual(toDoItemEntityList[0].DueDate, result.FirstOrDefault()?.DueDate);
        }
Exemplo n.º 2
0
        public void UpdateItemSavesItemAndReturnsValidModel()
        {
            var itemToUpdate = new ToDoItem
            {
                ItemId  = 1,
                Title   = "Updated Item",
                DueDate = DateTime.Now,
                IsDone  = false
            };

            var existingEntityItem = new EntityModel.ToDoItem
            {
                ItemId      = itemToUpdate.ItemId,
                Title       = "Old Title",
                DueDate     = itemToUpdate.DueDate,
                IsCompleted = itemToUpdate.IsDone
            };

            var mockToDoDbSet = GetMockedDbSet(new [] { existingEntityItem });

            var mockContext = new Mock <IToDoContext>();

            mockContext.Setup(context => context.ToDoItems).Returns(mockToDoDbSet);

            var repository = new ToDoItemsRepository(mockContext.Object);

            var result = repository.UpdateItem(itemToUpdate).Result;

            mockContext.Verify(context => context.SaveChangesAsync(), Times.Once);
            Assert.AreEqual(itemToUpdate.Title, result.Title);
            Assert.AreEqual(itemToUpdate.DueDate, result.DueDate);
            Assert.AreEqual(itemToUpdate.IsDone, result.IsDone);
        }
Exemplo n.º 3
0
        public virtual async Task <ToDoItemDto> UpdateToDoItem(Guid key, ToDoItemDto toDoItem, CancellationToken cancellationToken)
        {
            if (toDoItem == null)
            {
                throw new BadRequestException("ToDoItemCouldNotBeNull");
            }

            Guid userId = Guid.Parse(UserInformationProvider.GetCurrentUserId());

            ToDoItem toDoItemToBeModified = await ToDoItemsRepository.GetByIdAsync(cancellationToken, key);

            if (toDoItemToBeModified == null)
            {
                throw new ResourceNotFoundException("ToDoItemCouldNotBeFound");
            }

            ToDoItemOptions toDoItemOptionsToBeModified = await ToDoItemOptionsListRepository.GetAll()
                                                          .FirstAsync(tdio => tdio.UserId == userId && tdio.ToDoItemId == key, cancellationToken);

            if (toDoItemOptionsToBeModified == null)
            {
                throw new ResourceNotFoundException("ToDoItemCouldNotBeFound");
            }

            if (toDoItem.ToDoGroupId != toDoItemToBeModified.ToDoGroupId)
            {
                throw new BadRequestException("ChangingToDoGroupIdIsNotSupportedAtTheMoment");
            }

            toDoItemToBeModified.Title       = toDoItem.Title;
            toDoItemToBeModified.IsImportant = toDoItem.IsImportant;
            toDoItemToBeModified.Notes       = toDoItem.Notes;
            toDoItemToBeModified.DueDate     = toDoItem.DueDate;

            toDoItemToBeModified.ModifiedOn = DateTimeProvider.GetCurrentUtcDateTime();

            if (toDoItemToBeModified.IsCompleted == false && toDoItem.IsCompleted == true)
            {
                toDoItemToBeModified.IsCompleted   = true;
                toDoItemToBeModified.CompletedById = userId;
            }
            else if (toDoItemToBeModified.IsCompleted == true && toDoItem.IsCompleted == false)
            {
                toDoItemToBeModified.IsCompleted   = false;
                toDoItemToBeModified.CompletedById = null;
            }

            toDoItemOptionsToBeModified.RemindOn      = toDoItem.RemindOn;
            toDoItemOptionsToBeModified.ShowInMyDayOn = toDoItem.ShowInMyDay == true ? (DateTimeOffset?)DateTimeProvider.GetCurrentUtcDateTime() : null;

            await ToDoItemsRepository.UpdateAsync(toDoItemToBeModified, cancellationToken);

            await ToDoItemOptionsListRepository.UpdateAsync(toDoItemOptionsToBeModified, cancellationToken);

            return(await GetMyToDoItems()
                   .FirstAsync(tdi => tdi.Id == key, cancellationToken));
        }
Exemplo n.º 4
0
        public virtual async Task DeleteToDoItem(Guid key, CancellationToken cancellationToken)
        {
            Guid userId = Guid.Parse(UserInformationProvider.GetCurrentUserId());

            ToDoItem toDoItemToBeDeleted = await ToDoItemsRepository.GetByIdAsync(cancellationToken, key);

            if (toDoItemToBeDeleted == null)
            {
                throw new ResourceNotFoundException("ToDoItemCouldNotBeFound");
            }

            await ToDoItemsRepository.DeleteAsync(toDoItemToBeDeleted, cancellationToken);
        }
Exemplo n.º 5
0
        public virtual async Task <ToDoItemDto> CreateToDoItem(ToDoItemDto toDoItem, CancellationToken cancellationToken)
        {
            if (toDoItem == null)
            {
                throw new BadRequestException("ToDoItemMayNotBeNull");
            }

            Guid userId = Guid.Parse(UserInformationProvider.GetCurrentUserId());

            List <ToDoItemOptions> optionsList = new List <ToDoItemOptions> {
            };

            List <Guid> usersOfThisToDoGroup = toDoItem.ToDoGroupId == null ? (new List <Guid> {
                userId
            } /*ToDoItem has no to do group*/) : (await ToDoGroupOptionsListRepository
                                                  .GetAll()
                                                  .Where(tdgo => tdgo.ToDoGroupId == toDoItem.ToDoGroupId)
                                                  .Select(tdgo => tdgo.UserId)
                                                  .ToListAsync(cancellationToken));

            foreach (Guid otherUserId in usersOfThisToDoGroup)
            {
                ToDoItemOptions options = new ToDoItemOptions
                {
                    Id     = Guid.NewGuid(),
                    UserId = otherUserId
                };

                if (options.UserId == userId) /* For current user only */
                {
                    options.ShowInMyDayOn = toDoItem.ShowInMyDay == true ? (DateTimeOffset?)DateTimeProvider.GetCurrentUtcDateTime() : null;
                }

                optionsList.Add(options);
            }

            ToDoItem addedToDoItem = await ToDoItemsRepository.AddAsync(new ToDoItem
            {
                Id          = Guid.NewGuid(),
                CreatedById = userId,
                CreatedOn   = DateTimeProvider.GetCurrentUtcDateTime(),
                ModifiedOn  = DateTimeProvider.GetCurrentUtcDateTime(),
                Notes       = toDoItem.Notes,
                Title       = toDoItem.Title,
                ToDoGroupId = toDoItem.ToDoGroupId,
                Options     = optionsList
            }, cancellationToken);

            return(await GetMyToDoItems()
                   .FirstAsync(tdi => tdi.Id == addedToDoItem.Id, cancellationToken));
        }
Exemplo n.º 6
0
        public void DeleteItemRemovesItem()
        {
            var existingEntityItem = new EntityModel.ToDoItem
            {
                ItemId      = 1,
                Title       = "Item 1",
                DueDate     = DateTime.Now,
                IsCompleted = false,
            };

            var mockToDoDbSet = GetMockedDbSet(new[] { existingEntityItem });

            var mockContext = new Mock <IToDoContext>();

            mockContext.Setup(context => context.ToDoItems).Returns(mockToDoDbSet);

            var repository = new ToDoItemsRepository(mockContext.Object);

            var result = repository.DeleteItem(existingEntityItem.ItemId);

            mockContext.Verify(context => context.SaveChangesAsync(), Times.Once);
        }
Exemplo n.º 7
0
        public void AddItemSetsItemAsOverDueIfDueDateIsBeforeToday()
        {
            var itemToAdd = new ToDoItem
            {
                Title   = "New Item",
                DueDate = new DateTime(1900, 12, 30),
            };

            var mockContext = new Mock <IToDoContext>();

            mockContext.Setup(context => context.ToDoItems.Add(It.IsAny <EntityModel.ToDoItem>()))
            .Returns(new EntityModel.ToDoItem());

            var repository = new ToDoItemsRepository(mockContext.Object);

            var result = repository.AddItem(itemToAdd).Result;

            mockContext.Verify(context => context.ToDoItems.Add(It.IsAny <EntityModel.ToDoItem>()), Times.Once);
            mockContext.Verify(context => context.SaveChangesAsync(), Times.Once);

            Assert.IsFalse(result.IsDone);
            Assert.IsTrue(result.IsOverDue);
        }
Exemplo n.º 8
0
        public void UpdateItemStateSetsDoneStateCorrectlyOnItem()
        {
            var existingEntityItem = new EntityModel.ToDoItem
            {
                ItemId      = 1,
                Title       = "Item 1",
                DueDate     = DateTime.Now,
                IsCompleted = false,
            };

            var mockToDoDbSet = GetMockedDbSet(new[] { existingEntityItem });

            var mockContext = new Mock <IToDoContext>();

            mockContext.Setup(context => context.ToDoItems).Returns(mockToDoDbSet);

            var repository = new ToDoItemsRepository(mockContext.Object);

            var result = repository.UpdateItemState(existingEntityItem.ItemId).Result;

            mockContext.Verify(context => context.SaveChangesAsync(), Times.Once);
            Assert.AreNotSame(existingEntityItem.IsCompleted, result.IsDone);
        }
Exemplo n.º 9
0
        public void AddItemSavesItemAndReturnsValidModel()
        {
            var itemToAdd = new ToDoItem
            {
                Title   = "New Item",
                DueDate = new DateTime(2020, 12, 30),
            };

            var mockContext = new Mock <IToDoContext>();

            mockContext.Setup(context => context.ToDoItems.Add(It.IsAny <EntityModel.ToDoItem>()))
            .Returns(new EntityModel.ToDoItem());

            var repository = new ToDoItemsRepository(mockContext.Object);

            var result = repository.AddItem(itemToAdd).Result;

            mockContext.Verify(context => context.ToDoItems.Add(It.IsAny <EntityModel.ToDoItem>()), Times.Once);
            mockContext.Verify(context => context.SaveChangesAsync(), Times.Once);
            Assert.AreEqual(itemToAdd.Title, result.Title);
            Assert.AreEqual(itemToAdd.DueDate, result.DueDate);
            Assert.IsFalse(result.IsDone);
            Assert.IsFalse(result.IsOverDue);
        }
Exemplo n.º 10
0
 public HomeController(ToDoItemsRepository repo)
 {
     this.repo = repo;
 }