public void WillPostCommentToCard()
		{
			Board board = GetSampleBoard();

			_apiMock.Expect(x => x.GetBoard(1)).Return(board);
			_apiMock.Expect(x => x.CheckForUpdates(1, 0)).Return(new BoardUpdates
			{
				HasUpdates = true,
				AffectedLanes = new List<Lane>
				{
					new Lane
					{
						Id = 1,
						Title = "Lane 1",
						Cards = new List<CardView>
						{
							new CardView
							{
								Id = 1,
								Title = "Card 1",
								LaneId = 1,
								Comments =
									new List<Comment>
									{
										new Comment
										{
											Id = 1,
											PostDate =
												DateTime.Now.
													ToShortDateString(),
											PostedById = 1,
											Text = "Hello, All"
										}
									},
								Description = "some desc 1",
								Type =
									new CardType
									{
										Id = 1,
										Name = "Card type 1",
										IconPath = @"C:\"
									}
							},
							new CardView
							{
								Id = 2,
								Title = "Card 2",
								LaneId = 1,
								Description = "some desc 2",
								Type =
									new CardType
									{
										Id = 1,
										Name = "Card type 1",
										IconPath = @"C:\"
									}
							},
						},
					}
				},
				CurrentBoardVersion = 3,
				Events = new List<BoardHistoryEvent>
				{
					new BoardHistoryEvent
					{
						CardId = 1,
						ToLaneId = 1,
						UserId = 1,
						EventType = "LeanKit.Core.Events.CommentPostEvent"
					},
				}
			});

			_integration = new LeanKitIntegration(1, _apiMock);
			_integration.ShouldContinue = false;
			_integration.BoardChanged += ((object sender, BoardChangedEventArgs eventArgs) =>
			{
				Assert.NotNull(eventArgs);
				Assert.AreEqual(1, eventArgs.PostedComments.Count);
			});

			_integration.StartWatching();
			var affectedBoard = _integration.GetBoard();
			Assert.IsNotEmpty(affectedBoard.GetLaneById(1).Cards.First(x => x.Id == 1).Comments);
			Assert.IsNotNull(affectedBoard.GetLaneById(1).Cards.First(x => x.Id == 1).Comments.FirstOrDefault(x => x.Id == 1));
		}
		public void WillCreateCard()
		{
			Board board = GetSampleBoard();
			_apiMock.Expect(x => x.GetBoard(1)).Return(board);
			_apiMock.Expect(x => x.CheckForUpdates(1, 0)).Return(new BoardUpdates
			{
				HasUpdates = true,
				AffectedLanes = new List<Lane>
				{
					new Lane
					{
						Id = 1,
						Title = "Lane 1",
						Cards = new List<CardView>
						{
							new CardView
							{
								Id = 1,
								Title = "Card 1",
								LaneId = 1,
								Description = "some desc 1",
								Type =
									new CardType
									{
										Id = 1,
										Name = "Card type 1",
										IconPath = @"C:\"
									}
							},
							new CardView
							{
								Id = 2,
								Title = "Card 2",
								LaneId = 1,
								Description = "some desc 2",
								Type =
									new CardType
									{
										Id = 1,
										Name = "Card type 1",
										IconPath = @"C:\"
									}
							},
							new CardView
							{
								Id = 4,
								Title = "Card 4",
								LaneId = 1,
								Description = "some desc 4",
								Type =
									new CardType
									{
										Id = 1,
										Name = "Card type 1",
										IconPath = @"C:\"
									}
							}
						},
					}
				},
				CurrentBoardVersion = 3,
				Events = new List<BoardHistoryEvent>
				{
					new BoardHistoryEvent
					{
						CardId = 4,
						ToLaneId = 1,
						UserId = 1,
						EventType = "LeanKit.Core.Events.CardCreationEvent"
					},
				}
			});

			_integration = new LeanKitIntegration(1, _apiMock);
			_integration.ShouldContinue = false;
			_integration.BoardChanged += ((object sender, BoardChangedEventArgs eventArgs) =>
			{
				Assert.NotNull(eventArgs);
				Assert.AreEqual(1, eventArgs.AddedCards.Count);
				Assert.AreEqual(0, eventArgs.MovedCards.Count);
				var affectedBoard = _integration.GetBoard();
				Assert.NotNull(affectedBoard.GetLaneById(1).Cards.First(x => x.Id == 4));
			});
			_integration.StartWatching();
		}
		public void WillUnAssignUserFromCard()
		{
			Board board = GetSampleBoard();

			board.Lanes[0].Cards[0].AssignedUsers = new List<AssignedUserInfo>
			{new AssignedUserInfo {AssignedUserId = 1, AssignedUserName = "******", GravatarLink = "", SmallGravatarLink = ""}};

			_apiMock.Expect(x => x.GetBoard(1)).Return(board);
			_apiMock.Expect(x => x.CheckForUpdates(1, 0)).Return(new BoardUpdates
			{
				HasUpdates = true,
				AffectedLanes = new List<Lane>
				{
					new Lane
					{
						Id = 1,
						Title = "Lane 1",
						Cards = new List<CardView>
						{
							new CardView
							{
								Id = 1,
								Title = "Card 1",
								LaneId = 1,
								Description = "some desc 1",
								Type =
									new CardType
									{
										Id = 1,
										Name = "Card type 1",
										IconPath = @"C:\"
									}
							},
							new CardView
							{
								Id = 2,
								Title = "Card 2",
								LaneId = 1,
								Description = "some desc 2",
								Type =
									new CardType
									{
										Id = 1,
										Name = "Card type 1",
										IconPath = @"C:\"
									}
							},
						},
					}
				},
				CurrentBoardVersion = 3,
				Events = new List<BoardHistoryEvent>
				{
					new BoardHistoryEvent
					{
						CardId = 1,
						ToLaneId = 1,
						AssignedUserId = 1,
						IsUnassigning = true,
						UserId = 1,
						EventType = "LeanKit.Core.Events.UserAssignmentEvent"
					},
				}
			});

			_integration = new LeanKitIntegration(1, _apiMock);
			_integration.ShouldContinue = false;
			_integration.BoardChanged += ((object sender, BoardChangedEventArgs eventArgs) =>
			{
				Assert.NotNull(eventArgs);
				Assert.AreEqual(1, eventArgs.UnAssignedUsers.Count);
			});

			_integration.StartWatching();
			var affectedBoard = _integration.GetBoard();
			Assert.NotNull(affectedBoard.GetLaneById(1).Cards.First(x => x.Id == 1));
			Assert.IsNull(affectedBoard.GetLaneById(1).Cards.First(x => x.Id == 1).AssignedUsers);
		}
		public void WillMoveCardByEvent()
		{
			_apiMock.Expect(x => x.GetBoard(1)).Return(GetSampleBoard());
			_apiMock.Expect(x => x.CheckForUpdates(1, 0)).Return(new BoardUpdates
			{
				HasUpdates = true,
				AffectedLanes = new List<Lane>
				{
					new Lane
					{
						Id = 1,
						Title = "Lane 1",
						Cards = new List<CardView>
						{
							new CardView
							{
								Id = 2,
								Title = "Card 2",
								LaneId = 2,
								Description = "some desc 2"
							}
						},
					},
					new Lane
					{
						Id = 2,
						Title = "Lane 2",
						Cards = new List<CardView>
						{
							new CardView
							{
								Id = 1,
								Title = "Card 1",
								LaneId = 2,
								Description = "some desc 1"
							},
							new CardView
							{
								Id = 3,
								Title = "Card 3",
								LaneId = 2,
								Description = "some desc 3"
							}
						}
					}
				},
				CurrentBoardVersion = 2,
				Events = new List<BoardHistoryEvent>
				{
					new BoardHistoryEvent
					{
						CardId = 1,
						ToLaneId = 2,
						FromLaneId = 1,
						UserId = 1,
						EventType = "LeanKit.Core.Events.CardMoveEvent"
					}
				}
			});

			_integration = new LeanKitIntegration(1, _apiMock);
			_integration.ShouldContinue = false;
			_integration.BoardChanged += ((object sender, BoardChangedEventArgs eventArgs) =>
			{
				Assert.NotNull(eventArgs);
				Assert.AreEqual(1, eventArgs.MovedCards.Count);
			});

			_integration.StartWatching();
			var affectedBoard = _integration.GetBoard();
			Assert.Null(affectedBoard.GetLaneById(1).Cards.FirstOrDefault(x => x.Id == 1));
			Assert.NotNull(affectedBoard.GetLaneById(2).Cards.First(x => x.Id == 1));
		}