public Conversation CreateConversation(string userId, string addresseeId)
		{
			var conversation = new Conversation();
			conversation.Users.Add(new UserToConversation { Conversation = conversation, UserId = userId });
			conversation.Users.Add(new UserToConversation { Conversation = conversation, UserId = addresseeId });

			this.dbContext.Conversation.Add(conversation);
			this.dbContext.SaveChanges();

			return conversation;
		}
		public void SaveMessage_CorrectSaveEntityAndReturnIt_WithNavigationProperty_Author()
		{
			//Arrange
			var firstUser = new ApplicationUser { UserName = "******" };
			var conversation = new Conversation();
			conversation.Users.Add(new UserToConversation { Conversation = conversation, User = firstUser });
			this.fixture.DbContext.Conversation.Add(conversation);
			this.fixture.DbContext.SaveChanges();
			var chatMessageToSave = new ChatMessage { AuthorId = firstUser.Id, ConversationId = conversation.ConversationId, Received = true };

			//Act
			var savedChatMessage = serviceUnderTest.SaveMessage(chatMessageToSave);

			//Assert
			Assert.NotNull(savedChatMessage);
			Assert.NotNull(savedChatMessage.Author);
			Assert.Equal(firstUser.UserName, savedChatMessage.Author.UserName);
			Assert.True(savedChatMessage.AuthorId == firstUser.Id);
			Assert.True(savedChatMessage.Received);
		}
		public void GetConversationByUsers_ReturnConversationBetweenUsers_ByTheirIds()
		{
			//Arrange
			var firstUser = new ApplicationUser { UserName = "******" };
			var secondUser = new ApplicationUser { UserName = "******" };
			this.fixture.DbContext.ApplicationUser.Add(firstUser);
			this.fixture.DbContext.Add(secondUser);

			var conversation = new Conversation();
			conversation.Users.Add(new UserToConversation { Conversation = conversation, UserId = firstUser.Id });
			conversation.Users.Add(new UserToConversation { Conversation = conversation, UserId = secondUser.Id });
			this.fixture.DbContext.Conversation.Add(conversation);
			this.fixture.DbContext.SaveChanges();

			//Act
			var conversationResult = this.serviceUnderTest.GetConversationByUsers(firstUser.Id, secondUser.Id);

			//Assert
			Assert.NotNull(conversationResult);
			Assert.Equal(conversation.ConversationId, conversationResult.ConversationId);
			Assert.Equal(2, conversationResult.Users.Count);
		}
		public void GetMessagesInConversation_ReturnedMessagesHasIncludedAuthor()
		{
			//Arrange
			var pageNumber = 0;
			var user = new ApplicationUser { UserName = "******" };
			this.fixture.DbContext.ApplicationUser.Add(user);
			var messageDate = new DateTime(2000, 01, 01);
			var conversation = new Conversation();
			conversation.Messages.Add(new ChatMessage { Author = user, Date = messageDate });
			this.fixture.DbContext.Conversation.Add(conversation);
			this.fixture.DbContext.SaveChanges();

			//Act
			var messages = this.serviceUnderTest.GetMessagesInConversation(conversation.ConversationId, pageNumber);

			//Assert
			Assert.NotNull(messages[0].Author);
			Assert.Equal(user.Id, messages[0].Author.Id);
		}
		public void GetMessagesInConversation_PageNumberIs1_Skip20MessagesAndReturn20NextOnesNewestMessages()
		{
			//Arrange
			var pageNumber = 1;
			var user = new ApplicationUser { UserName = "******" };
			this.fixture.DbContext.ApplicationUser.Add(user);
			var messageDate = new DateTime(2000, 01, 01);
			var conversation = new Conversation();
			for (int i = 0; i < 40; i++)
			{
				conversation.Messages.Add(new ChatMessage { Author = user, Date = messageDate.AddDays(i) });
			}
			this.fixture.DbContext.Conversation.Add(conversation);
			this.fixture.DbContext.SaveChanges();

			//Act
			var messages = this.serviceUnderTest.GetMessagesInConversation(conversation.ConversationId, pageNumber);

			//Assert
			Assert.Equal(20, messages.Count);
			Assert.Equal(new DateTime(2000, 01, 20), messages[0].Date);
			Assert.Equal(new DateTime(2000, 01, 01), messages[19].Date);
		}