public void WhenInvokedShouldCallUpdateTasksOnlyOnceRegardlessTheNumberOfTasks() { //Arrange var category = new Category("Dummy"); var tasks = new List <ToDoTask> { new ToDoTask(1, "Task 1", category, new DateTime(2019, 9, 28), null, ToDoTaskStatus.Created), new ToDoTask(2, "Task 2", category, new DateTime(2019, 8, 12), null, ToDoTaskStatus.Pending), new ToDoTask(3, "Task 3", category, new DateTime(2019, 7, 19), null, ToDoTaskStatus.Created), }; var mock = new Mock <IToDoTaskRepository>(); mock.Setup(r => r.GetTasks(It.IsAny <Func <ToDoTask, bool> >())) .Returns(tasks); var repository = mock.Object; var command = new ToDoTaskDeadlineManager(new DateTime(2020, 1, 1)); var handler = new ToDoTaskDeadlineManagerHandler(repository); //Act handler.Execute(command); //Assert mock.Verify(r => r.UpdateTasks(It.IsAny <ToDoTask[]>()), Times.Once()); }
public void Execute(ToDoTaskDeadlineManager command) { var now = command.DateTimeNow; //pegar todas as tarefas não concluídas que passaram do prazo var tasks = _repository .GetTasks(t => t.Deadline <= now && t.Status != ToDoTaskStatus.Completed) .ToList(); //atualizá-las com status Atrasada tasks.ForEach(t => t.Status = ToDoTaskStatus.Delayed); //salvar tarefas _repository.UpdateTasks(tasks.ToArray()); }
public void WhenToDoTasksAreDelayedShouldChangeStatus() { //Arrange var category1 = new Category("Category1"); var category2 = new Category("Category2"); var category3 = new Category("Category3"); var category4 = new Category("Category4"); var category5 = new Category("Category5"); var tasks = new List <ToDoTask> { //Atrasadas new ToDoTask(10, "Task 1", category1, new DateTime(2019, 9, 28), null, ToDoTaskStatus.Created), new ToDoTask(2, "Task 2", category2, new DateTime(2019, 8, 12), null, ToDoTaskStatus.Pending), new ToDoTask(3, "Task 3", category3, new DateTime(2019, 7, 19), null, ToDoTaskStatus.Created), new ToDoTask(4, "Task 4", category4, new DateTime(2019, 6, 6), null, ToDoTaskStatus.Pending), //Dentro do prazo new ToDoTask(5, "Task 5", category5, new DateTime(2019, 5, 30), null, ToDoTaskStatus.Completed), new ToDoTask(6, "Task 6", category1, new DateTime(2020, 10, 21), null, ToDoTaskStatus.Created), new ToDoTask(7, "Task 7", category2, new DateTime(2020, 6, 10), null, ToDoTaskStatus.Created), new ToDoTask(8, "Task 8", category3, new DateTime(2020, 10, 12), null, ToDoTaskStatus.Pending), new ToDoTask(9, "Task 9", category4, new DateTime(2020, 1, 14), null, ToDoTaskStatus.Created) }; var options = new DbContextOptionsBuilder <DbToDoTasksContext>() .UseInMemoryDatabase("DbToDoTaskContext") .Options; var context = new DbToDoTasksContext(options); var repository = new ToDoTaskRepository(context); repository.InsertTasks(tasks.ToArray()); var command = new ToDoTaskDeadlineManager(new DateTime(2020, 1, 1)); var handler = new ToDoTaskDeadlineManagerHandler(repository); //Act handler.Execute(command); //Assert var delayedTasks = repository.GetTasks(t => t.Status == ToDoTaskStatus.Delayed); Assert.Equal(4, delayedTasks.Count()); }