public async Task Create_ThrowsExeption_DuplicateName()
        {
            ITodoItemProvider provider = new TodoItemProvider(mockContext.Object);
            var item = new TodoItemDAO {
                Id = 22, Name = "TestItem1"
            };

            await Assert.ThrowsAsync <ArgumentException>(() => provider.Create(item));
        }
        public async Task Create_ThrowsExeption_PriorityOutOf1to5Range()
        {
            ITodoItemProvider provider = new TodoItemProvider(mockContext.Object);
            var item = new TodoItemDAO
            {
                Id       = 22,
                Priority = 10
            };

            await Assert.ThrowsAsync <ArgumentException>(() => provider.Create(item));
        }
        public async Task Create_ThrowsExeption_InvalidDeadlineDate()
        {
            ITodoItemProvider provider = new TodoItemProvider(mockContext.Object);
            var item = new TodoItemDAO
            {
                Id           = 22,
                Name         = "TestItem1",
                DeadLineDate = DateTime.UtcNow.Subtract(new TimeSpan(1, 0, 0))
            };

            await Assert.ThrowsAsync <ArgumentException>(() => provider.Create(item));
        }
        public async Task Create_Returns_createdIdAndAddsTodoItem()
        {
            ITodoItemProvider provider = new TodoItemProvider(mockContext.Object);
            var item = new TodoItemDAO {
                Id = 22, Name = "TestTodoItem"
            };

            var addedItemId = await provider.Create(item);

            mockSet.Verify(set => set.Add(It.IsAny <TodoItemDAO>()), Times.Once);
            mockContext.Verify(context => context.SaveChangesAsync(new CancellationToken()), Times.Once);
            Assert.Equal(item.Id, addedItemId);
        }
        public async Task Update_Updates_TodoItem()
        {
            ITodoItemProvider provider = new TodoItemProvider(mockContext.Object);
            var item = new TodoItemDAO {
                Id = 1, Name = "TestUpdateTodoItem"
            };

            await provider.Update(item);

            var updatedTodoItem = await provider.Get(item.Id);

            Assert.Equal("TestUpdateTodoItem", updatedTodoItem.Name);
        }
        public async Task Update(TodoItemDAO data)
        {
            if (await IsDuplicate(data))
            {
                throw new ArgumentException(String.Format("Item with the name {0} already exists", data.Name));
            }
            TodoItemDAO item = await _context.TodoItems.FirstOrDefaultAsync(value => value.Id == data.Id);

            item.Name         = data.Name;
            item.Description  = data.Description;
            item.Priority     = data.Priority;
            item.CategoryId   = data.CategoryId;
            item.Status       = data.Status;
            item.DeadLineDate = data.DeadLineDate;
            await _context.SaveChangesAsync();
        }
        public async Task <int> Create(TodoItemDAO data)
        {
            data.CreationDate = DateTime.UtcNow;
            if (data.CreationDate >= data.DeadLineDate)
            {
                throw new ArgumentException("Deadline date must be after the creation date");
            }
            if (await IsDuplicate(data))
            {
                throw new ArgumentException(String.Format("Item with the name {0} already exists", data.Name));
            }
            if (data.Priority > 5 || data.Priority < 1)
            {
                throw new ArgumentException("Priority value falls out of 1 to 5 range");
            }
            _context.TodoItems.Add(data);
            await _context.SaveChangesAsync();

            return(data.Id);
        }
 public async Task <bool> IsDuplicate(TodoItemDAO data)
 {
     return(await _context.TodoItems.AnyAsync(item => item.Name == data.Name));
 }