public async System.Threading.Tasks.Task TaskCreationUpdate() { var customerATask = new Task { name = "Customer A", uuid = Guid.NewGuid().ToString(), bookable = false, billable = true }; var addedTasks = new List <Task>(); var updatedTasks = new List <Task>(); var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().SetMinimumLevel(LogLevel.Debug)); var taskServiceMock = new Mock <ITaskService>(MockBehavior.Strict); taskServiceMock .Setup(service => service.GetTaskHierarchy()) .ReturnsAsync(new List <Task> { customerATask }); taskServiceMock .Setup(service => service.FlattenTasks(It.IsAny <IEnumerable <Task> >())) .Returns((IEnumerable <Task> tasks) => TaskService.FlattenTasks(tasks)); taskServiceMock .Setup(service => service.AddTask(It.IsAny <Task>())) .Callback((Task task) => addedTasks.Add(task)) .Returns(System.Threading.Tasks.Task.CompletedTask); taskServiceMock .Setup(service => service.UpdateTask(It.IsAny <Task>())) .Callback((Task task) => updatedTasks.Add(task)) .Returns(System.Threading.Tasks.Task.CompletedTask); taskServiceMock .Setup(service => service.SynchronizeTasksByExternalId(It.IsAny <IDictionary <string, Task> >(), It.IsAny <List <Task> >(), It.IsAny <bool>(), It.IsAny <bool>(), It.IsAny <IEqualityComparer <Task> >())) .Callback((IDictionary <string, Task> _, IList <Task> t, bool u, bool d, IEqualityComparer <Task> e) => addedTasks.AddRange(t)) .Returns(System.Threading.Tasks.Task.CompletedTask); var importAction = new TaskImportAction(loggerFactory, "data/tasks.csv", false, taskServiceMock.Object); await importAction.Execute(); Assert.AreEqual(1, updatedTasks.Count); { var task = updatedTasks[0]; Assert.AreEqual("Customer A", task.name); Assert.AreEqual("Customer A", task.externalId); Assert.IsNull(task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(false, task.bookable); Assert.AreEqual(true, task.billable); Assert.IsNull(task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); } Assert.AreEqual(4, addedTasks.Count); { var task = addedTasks[0]; Assert.AreEqual("Project1", task.name); Assert.AreEqual("Customer A|Project1", task.externalId); Assert.AreEqual("Customer A", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(false, task.bookable); Assert.AreEqual(false, task.billable); Assert.IsNull(task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); } { var task = addedTasks[1]; Assert.AreEqual("Task1", task.name); Assert.AreEqual("Customer A|Project1|Task1", task.externalId); Assert.AreEqual("Customer A|Project1", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(true, task.bookable); Assert.AreEqual(false, task.billable); Assert.AreEqual("Awesome", task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); } { // same as task[0] - but update will be performed var task = addedTasks[2]; Assert.AreEqual("Project1", task.name); Assert.AreEqual("Customer A|Project1", task.externalId); Assert.AreEqual("Customer A", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(true, task.bookable); Assert.AreEqual(true, task.billable); Assert.IsTrue(String.IsNullOrEmpty(task.description)); Assert.IsNull(task.start); Assert.IsNull(task.end); } { var task = addedTasks[3]; Assert.AreEqual("Project2", task.name); Assert.AreEqual("Customer A|Project2", task.externalId); Assert.AreEqual("Customer A", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(false, task.bookable); Assert.AreEqual(true, task.billable); Assert.IsTrue(String.IsNullOrEmpty(task.description), "String.IsNullOrEmpty(task.description)"); Assert.AreEqual(new DateTime(2019, 05, 16, 0, 0, 0), task.start); Assert.IsNull(task.end); } }
public async System.Threading.Tasks.Task TaskCreationWithSubtasks() { var addTasks = new List <Task>(); var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().SetMinimumLevel(LogLevel.Debug)); var timrSyncMock = new Mock <TimrSync>(MockBehavior.Strict); timrSyncMock .Setup(timrSync => timrSync.GetTasksAsync(It.IsAny <GetTasksRequest1>())) .ReturnsAsync(new GetTasksResponse(new Task[0])); timrSyncMock .Setup(timrSync => timrSync.AddTaskAsync(It.IsAny <AddTaskRequest>())) .Callback <AddTaskRequest>(addTaskRequest => addTasks.Add(addTaskRequest.AddTaskRequest1)) .ReturnsAsync(new AddTaskResponse()); var taskService = new TaskService(loggerFactory.CreateLogger <TaskService>(), loggerFactory, timrSyncMock.Object); var importAction = new TaskImportAction(loggerFactory, "data/tasks_with_subtasks.csv", false, taskService); await importAction.Execute(); Assert.AreEqual(10, addTasks.Count); { var task = addTasks[0]; Assert.AreEqual("Customer A", task.name); Assert.AreEqual("Customer A", task.externalId); Assert.IsNull(task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(false, task.bookable); Assert.AreEqual(false, task.billable); Assert.IsNull(task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); Assert.IsNull(task.customField1); Assert.IsNull(task.customField2); Assert.IsNull(task.customField3); } { var task = addTasks[1]; Assert.AreEqual("Project1", task.name); Assert.AreEqual("Customer A|Project1", task.externalId); Assert.AreEqual(expected: "Customer A", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(false, task.bookable); Assert.AreEqual(false, task.billable); Assert.IsNull(task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); Assert.IsNull(task.customField1); Assert.IsNull(task.customField2); Assert.IsNull(task.customField3); } { var task = addTasks[2]; Assert.AreEqual("Task1", task.name); Assert.AreEqual("Customer A|Project1|Task1", task.externalId); Assert.AreEqual("Customer A|Project1", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(true, task.bookable); Assert.AreEqual(false, task.billable); Assert.AreEqual("Awesome", task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); Assert.AreEqual("test", task.customField1); Assert.IsNull(task.customField2); Assert.IsNull(task.customField3); } { var task = addTasks[3]; Assert.AreEqual("Support", task.name); Assert.AreEqual("Customer A|Project1|Task1|Support", task.externalId); Assert.AreEqual("Customer A|Project1|Task1", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(true, task.bookable); Assert.AreEqual(false, task.billable); Assert.IsNull(task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); Assert.IsNull(task.customField1); Assert.IsNull(task.customField2); Assert.IsNull(task.customField3); } { var task = addTasks[4]; Assert.AreEqual("Sales", task.name); Assert.AreEqual("Customer A|Project1|Task1|Sales", task.externalId); Assert.AreEqual("Customer A|Project1|Task1", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(true, task.bookable); Assert.AreEqual(false, task.billable); Assert.IsNull(task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); Assert.IsNull(task.customField1); Assert.IsNull(task.customField2); Assert.IsNull(task.customField3); } // Skip 3 because is it was created by AddTask { var task = addTasks[6]; Assert.AreEqual("Subtask1", task.name); Assert.AreEqual("Customer A|Project1|Subtask1", task.externalId); Assert.AreEqual("Customer A|Project1", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(true, task.bookable); Assert.AreEqual(true, task.billable); Assert.IsNull(task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); Assert.IsNull(task.customField1); Assert.IsNull(task.customField2); Assert.IsNull(task.customField3); } { var task = addTasks[7]; Assert.AreEqual("Project3", task.name); Assert.AreEqual("Customer A|Project3", task.externalId); Assert.AreEqual("Customer A", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(true, task.bookable); Assert.AreEqual(true, task.billable); Assert.AreEqual("", task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); Assert.AreEqual("", task.customField1); Assert.IsNull(task.customField2); Assert.IsNull(task.customField3); } { var task = addTasks[8]; Assert.AreEqual("Subtask3", task.name); Assert.AreEqual("Customer A|Project3|Subtask3", task.externalId); Assert.AreEqual("Customer A|Project3", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(true, task.bookable); Assert.AreEqual(true, task.billable); Assert.IsNull(task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); Assert.IsNull(task.customField1); Assert.IsNull(task.customField2); Assert.IsNull(task.customField3); } { var task = addTasks[9]; Assert.AreEqual("Project2", task.name); Assert.AreEqual("Customer A|Project2", task.externalId); Assert.AreEqual("Customer A", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(false, task.bookable); Assert.AreEqual(true, task.billable); Assert.AreEqual("", task.description); Assert.AreEqual(new DateTime(2019, 05, 16, 0, 0, 0), task.start); Assert.IsNull(task.end); Assert.AreEqual("1", task.customField1); Assert.IsNull(task.customField2); Assert.IsNull(task.customField3); } }
public async System.Threading.Tasks.Task TaskCreationNoUpdateCustomFields() { var tasks = new List <Task>(); var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().SetMinimumLevel(LogLevel.Debug)); var taskServiceMock = new Mock <ITaskService>(MockBehavior.Loose); taskServiceMock .Setup(service => service.GetTaskHierarchy()).ReturnsAsync(new List <Task>()); taskServiceMock .Setup(service => service.FlattenTasks(It.IsAny <IEnumerable <Task> >())).Returns((IEnumerable <Task> tasks) => TaskService.FlattenTasks(tasks)); taskServiceMock .Setup(service => service.CreateExternalIdDictionary(It.IsAny <IEnumerable <Task> >(), It.IsAny <Func <Task, string> >())).ReturnsAsync(new Dictionary <string, Task>()); taskServiceMock .Setup(service => service.AddTask(It.IsAny <Task>())) .Callback((Task task) => tasks.Add(task)); taskServiceMock .Setup(service => service.SynchronizeTasksByExternalId(It.IsAny <IDictionary <string, Task> >(), It.IsAny <List <Task> >(), It.IsAny <bool>(), It.IsAny <bool>(), It.IsAny <IEqualityComparer <Task> >())) .Callback((IDictionary <string, Task> _, IList <Task> t, bool u, bool d, IEqualityComparer <Task> e) => tasks.AddRange(t)); var importAction = new TaskImportAction(loggerFactory, "data/tasks_customfields.csv", false, taskServiceMock.Object); await importAction.Execute(); Assert.AreEqual(5, tasks.Count); var taskDictionary = tasks.GroupBy(task => task.uuid).ToDictionary(group => group.Last().externalId, group => group.Last()); { var task = tasks[0]; Assert.AreEqual("Customer A", task.name); Assert.AreEqual("Customer A", task.externalId); Assert.IsNull(task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(false, task.bookable); Assert.AreEqual(false, task.billable); Assert.IsNull(task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); Assert.IsNull(task.customField1); Assert.IsNull(task.customField2); Assert.IsNull(task.customField3); } { var task = tasks[1]; Assert.AreEqual("Project1", task.name); Assert.AreEqual("Customer A|Project1", task.externalId); Assert.AreEqual("Customer A", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(false, task.bookable); Assert.AreEqual(false, task.billable); Assert.IsNull(task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); Assert.IsNull(task.customField1); Assert.IsNull(task.customField2); Assert.IsNull(task.customField3); } { var task = tasks[2]; Assert.AreEqual("Task1", task.name); Assert.AreEqual("Customer A|Project1|Task1", task.externalId); Assert.AreEqual("Customer A|Project1", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(true, task.bookable); Assert.AreEqual(false, task.billable); Assert.AreEqual("Awesome", task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); Assert.IsEmpty(task.customField1); Assert.AreEqual("2", task.customField2); Assert.AreEqual("Feld3", task.customField3); } { // same as task[1] - but update will be performed var task = tasks[3]; Assert.AreEqual("Project1", task.name); Assert.AreEqual("Customer A|Project1", task.externalId); Assert.AreEqual("Customer A", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(true, task.bookable); Assert.AreEqual(true, task.billable); Assert.IsTrue(String.IsNullOrEmpty(task.description)); Assert.IsNull(task.start); Assert.IsNull(task.end); Assert.IsEmpty(task.customField1); Assert.IsEmpty(task.customField2); Assert.IsEmpty(task.customField3); } { var task = tasks[4]; Assert.AreEqual("Project2", task.name); Assert.AreEqual("Customer A|Project2", task.externalId); Assert.AreEqual("Customer A", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(false, task.bookable); Assert.AreEqual(true, task.billable); Assert.IsTrue(String.IsNullOrEmpty(task.description)); Assert.AreEqual(new DateTime(2019, 05, 16, 0, 0, 0), task.start); Assert.IsNull(task.end); Assert.AreEqual("1", task.customField1); Assert.IsEmpty(task.customField2); Assert.IsEmpty(task.customField3); } }
public async System.Threading.Tasks.Task TaskCreationUpdate() { var customerATask = new Task { name = "Customer A", uuid = Guid.NewGuid().ToString(), bookable = false, billable = true }; var addedTasks = new List <Task>(); var updatedTasks = new List <Task>(); var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().SetMinimumLevel(LogLevel.Debug)); var timrSyncMock = new Mock <TimrSync>(MockBehavior.Strict); timrSyncMock .Setup(timrSync => timrSync.GetTasksAsync(It.IsAny <GetTasksRequest1>())) .ReturnsAsync(new GetTasksResponse(new[] { customerATask })); timrSyncMock .Setup(timrSync => timrSync.AddTaskAsync(It.IsAny <AddTaskRequest>())) .Callback <AddTaskRequest>(addTaskRequest => addedTasks.Add(addTaskRequest.AddTaskRequest1)) .ReturnsAsync(new AddTaskResponse()); timrSyncMock .Setup(timrSync => timrSync.UpdateTaskAsync(It.IsAny <UpdateTaskRequest>())) .Callback <UpdateTaskRequest>(request => updatedTasks.Add(request.UpdateTaskRequest1)) .ReturnsAsync(new UpdateTaskResponse()); var taskService = new TaskService(loggerFactory.CreateLogger <TaskService>(), loggerFactory, timrSyncMock.Object); var importAction = new TaskImportAction(loggerFactory, "data/tasks.csv", false, taskService); await importAction.Execute(); Assert.AreEqual(1, updatedTasks.Count); { var task = updatedTasks[0]; Assert.AreEqual("Customer A", task.name); Assert.AreEqual("Customer A", task.externalId); Assert.IsNull(task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(false, task.bookable); Assert.AreEqual(true, task.billable); Assert.IsNull(task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); } Assert.AreEqual(4, addedTasks.Count); { var task = addedTasks[0]; Assert.AreEqual("Project1", task.name); Assert.AreEqual("Customer A|Project1", task.externalId); Assert.AreEqual("Customer A", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(false, task.bookable); Assert.AreEqual(false, task.billable); Assert.IsNull(task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); } { var task = addedTasks[1]; Assert.AreEqual("Task1", task.name); Assert.AreEqual("Customer A|Project1|Task1", task.externalId); Assert.AreEqual("Customer A|Project1", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(true, task.bookable); Assert.AreEqual(false, task.billable); Assert.AreEqual("Awesome", task.description); Assert.IsNull(task.start); Assert.IsNull(task.end); } { // same as task[0] - but update will be performed var task = addedTasks[2]; Assert.AreEqual("Project1", task.name); Assert.AreEqual("Customer A|Project1", task.externalId); Assert.AreEqual("Customer A", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(true, task.bookable); Assert.AreEqual(true, task.billable); Assert.IsTrue(String.IsNullOrEmpty(task.description)); Assert.IsNull(task.start); Assert.IsNull(task.end); } { var task = addedTasks[3]; Assert.AreEqual("Project2", task.name); Assert.AreEqual("Customer A|Project2", task.externalId); Assert.AreEqual("Customer A", task.parentExternalId); Assert.IsNull(task.parentUuid); Assert.AreEqual(false, task.bookable); Assert.AreEqual(true, task.billable); Assert.IsTrue(String.IsNullOrEmpty(task.description), "String.IsNullOrEmpty(task.description)"); Assert.AreEqual(new DateTime(2019, 05, 16, 0, 0, 0), task.start); Assert.IsNull(task.end); } }