public async Task When_getting_history_events_and_there_is_an_invalid_event()
        {
            var historyEventList = new List <JsonTaskItem>
            {
                new JsonTaskItem
                {
                    taskid         = 1,
                    historydetails = new HistoryDetails
                    {
                        item = new List <JsonHistoryEvent>
                        {
                            new JsonHistoryEvent
                            {
                                historyid    = 1,
                                author       = "Charles",
                                entrydate    = DateTimeOffset.Now.Date.AddDays(-5),
                                historyevent = "Task moved",
                            },
                            new JsonHistoryEvent
                            {
                                historyid = 2,
                                details   = "from 'ColumnName' to 'Released to Prod this week'",
                                entrydate = DateTimeOffset.Now.Date.AddDays(-3),
                                taskid    = 1
                            }
                        }
                    }
                }
            };
            var taskItem1 = new TaskItem
            {
                Id = 1
            };

            var taskItemDictionary = new Dictionary <int, TaskItem>
            {
                {
                    1, taskItem1
                }
            };
            var historyEventJson = JToken.Parse(JsonConvert.SerializeObject(historyEventList));

            var kanbanizeHistoryEventDeserializer = new KanbanizeHistoryEventDeserializer();
            var result =
                await kanbanizeHistoryEventDeserializer.DeserializeHistoryEventsAsync(historyEventJson,
                                                                                      taskItemDictionary);

            Assert.That(result[1].HistoryEvents.Count, Is.EqualTo(0));
        }
        public async Task When_deserializing_history_events_and_there_is_only_one_event()
        {
            var historyEventList = new List <SingleEventJsonTaskItem>
            {
                new SingleEventJsonTaskItem
                {
                    taskid         = 1,
                    historydetails = new SingleEventHistoryDetails
                    {
                        item = new JsonHistoryEvent
                        {
                            historyid    = 2,
                            author       = "Jon",
                            details      = "from 'ColumnName' to 'Released to Prod this week'",
                            entrydate    = DateTimeOffset.Now.Date.AddDays(-3),
                            historyevent = "Task moved",
                            taskid       = 1
                        }
                    }
                }
            };
            var taskItem1 = new TaskItem
            {
                Id = 1
            };

            var taskItemDictionary = new Dictionary <int, TaskItem>
            {
                { 1, taskItem1 }
            };

            var historyEventJson = JToken.Parse(JsonConvert.SerializeObject(historyEventList));

            var mockKanbanizeTaskItemDeserializer = new Mock <KanbanizeTaskItemDeserializer>();

            mockKanbanizeTaskItemDeserializer.Setup(x =>
                                                    x.FillInTaskItemStateDetailsAsync(It.IsAny <HistoryEvent>(), It.IsAny <TaskItem>()))
            .ReturnsAsync(taskItem1);

            var kanbanizeHistoryEventDeserializer = new KanbanizeHistoryEventDeserializer();
            var result =
                await kanbanizeHistoryEventDeserializer.DeserializeHistoryEventsAsync(historyEventJson,
                                                                                      taskItemDictionary);

            Assert.That(result[1].HistoryEvents.Count, Is.EqualTo(1));
            Assert.That(result[1].Id, Is.EqualTo(1));
            Assert.That(result[1].LastChangedBy.Name, Is.EqualTo(historyEventList[0].historydetails.item.author));

            Assert.That(result[1].HistoryEvents[0].Author,
                        Is.EqualTo(historyEventList[0].historydetails.item.author));
            Assert.That(result[1].HistoryEvents[0].EventDate,
                        Is.EqualTo(historyEventList[0].historydetails.item.entrydate));
            Assert.That(result[1].HistoryEvents[0].EventType,
                        Is.EqualTo(historyEventList[0].historydetails.item.historyevent));
            Assert.That(result[1].HistoryEvents[0].Id,
                        Is.EqualTo(historyEventList[0].historydetails.item.historyid));
            Assert.That(result[1].HistoryEvents[0].TaskId,
                        Is.EqualTo(historyEventList[0].historydetails.item.taskid));
            Assert.That(result[1].HistoryEvents[0].TaskItemColumn, Is.EqualTo(BoardColumn.ReleasedToProdThisWeek));
            Assert.That(result[1].HistoryEvents[0].TaskItemState, Is.EqualTo(TaskItemState.Released));
        }
        public async Task When_deserializing_history_events_and_the_task_item_was_not_created_in_the_backlog()
        {
            var historyEventList = new List <JsonTaskItem>
            {
                new JsonTaskItem
                {
                    taskid         = 1,
                    historydetails = new HistoryDetails
                    {
                        item = new List <JsonHistoryEvent>
                        {
                            new JsonHistoryEvent
                            {
                                historyid    = 2,
                                author       = "Jon",
                                details      = "from 'ColumnName' to 'Released to Prod this week'",
                                entrydate    = DateTimeOffset.Now.Date.AddDays(-3),
                                historyevent = "Task moved",
                                taskid       = 1
                            },
                            new JsonHistoryEvent
                            {
                                historyid    = 1,
                                author       = "Charles",
                                details      = "from 'ColumnName' to 'In Process.Working'",
                                entrydate    = DateTimeOffset.Now.Date.AddDays(-5),
                                historyevent = "Task moved",
                                taskid       = 1
                            }
                        }
                    }
                }
            };
            var taskItem1 = new TaskItem
            {
                Id                 = 1,
                CreatedOn          = DateTimeOffset.Now.Date.AddDays(-5),
                CurrentBoardColumn = BoardColumn.InProcessWorking
            };

            var taskItemDictionary = new Dictionary <int, TaskItem>
            {
                {
                    1, taskItem1
                }
            };

            var historyEventJson = JToken.Parse(JsonConvert.SerializeObject(historyEventList));

            var mockKanbanizeTaskItemDeserializer = new Mock <KanbanizeTaskItemDeserializer>();

            mockKanbanizeTaskItemDeserializer.Setup(x =>
                                                    x.FillInTaskItemStateDetailsAsync(It.IsAny <HistoryEvent>(), It.IsAny <TaskItem>()))
            .ReturnsAsync(taskItem1);

            var kanbanizeHistoryEventDeserializer = new KanbanizeHistoryEventDeserializer();
            var result =
                await kanbanizeHistoryEventDeserializer.DeserializeHistoryEventsAsync(historyEventJson,
                                                                                      taskItemDictionary);

            Assert.That(result[1].CreatedOn, Is.EqualTo(historyEventList[0].historydetails.item[1].entrydate));
            Assert.That(result[1].HistoryEvents.Count, Is.EqualTo(2));
            Assert.That(result[1].Id, Is.EqualTo(1));
            Assert.That(result[1].LastChangedBy.Name, Is.EqualTo(historyEventList[0].historydetails.item[0].author));

            Assert.That(result[1].HistoryEvents[0].Author,
                        Is.EqualTo(historyEventList[0].historydetails.item[1].author));
            Assert.That(result[1].HistoryEvents[0].EventDate,
                        Is.EqualTo(historyEventList[0].historydetails.item[1].entrydate));
            Assert.That(result[1].HistoryEvents[0].EventType,
                        Is.EqualTo(historyEventList[0].historydetails.item[1].historyevent));
            Assert.That(result[1].HistoryEvents[0].Id,
                        Is.EqualTo(historyEventList[0].historydetails.item[1].historyid));
            Assert.That(result[1].HistoryEvents[0].TaskId,
                        Is.EqualTo(historyEventList[0].historydetails.item[1].taskid));
            Assert.That(result[1].HistoryEvents[0].TaskItemColumn, Is.EqualTo(BoardColumn.InProcessWorking));
            Assert.That(result[1].HistoryEvents[0].TaskItemState, Is.EqualTo(TaskItemState.InProcess));

            Assert.That(result[1].HistoryEvents[1].Author,
                        Is.EqualTo(historyEventList[0].historydetails.item[0].author));
            Assert.That(result[1].HistoryEvents[1].EventDate,
                        Is.EqualTo(historyEventList[0].historydetails.item[0].entrydate));
            Assert.That(result[1].HistoryEvents[1].EventType,
                        Is.EqualTo(historyEventList[0].historydetails.item[0].historyevent));
            Assert.That(result[1].HistoryEvents[1].Id,
                        Is.EqualTo(historyEventList[0].historydetails.item[0].historyid));
            Assert.That(result[1].HistoryEvents[1].TaskId,
                        Is.EqualTo(historyEventList[0].historydetails.item[0].taskid));
            Assert.That(result[1].HistoryEvents[1].TaskItemColumn, Is.EqualTo(BoardColumn.ReleasedToProdThisWeek));
            Assert.That(result[1].HistoryEvents[1].TaskItemState, Is.EqualTo(TaskItemState.Released));
        }