public void GetMessages_ShouldReturnListWithOneMessage_WithAllProperties_UserWasSender()
		{
			//Arrange
			var pageNumber = 0;
			var messageId = 1;
			var conversationId = 2;
			var userId = "1234";
			var userName = "******";
			var dbMessage = new ChatMessage();
			var content = "bla bla bla";
			dbMessage.Content = content;
			dbMessage.Author = new ApplicationUser { Id = userId, UserName = userName };
			dbMessage.AuthorId = userId;
			dbMessage.Date = new DateTime(2016, 06, 21, 15, 22, 05);
			dbMessage.ChatMessageId = messageId;
			dbMessage.ConversationId = conversationId;
			this.conversationDbService.Setup(s => s.GetMessagesInConversation(conversationId, pageNumber)).Returns(new List<ChatMessage> { dbMessage });

			//Act
			var result = serviceUnderTest.GetMessages(userId, conversationId, pageNumber);

			//Assert
			Assert.Equal(1, result.Count);
			Assert.Equal(messageId, result[0].Id);
			Assert.Equal(conversationId, result[0].ConversationId);
			Assert.Equal(content, result[0].MessageContent);
			Assert.Equal("ja, 21.06.2016 15:22:05", result[0].MessageHeader);
			Assert.True(result[0].UserWasSender);
		}
		public void AddMessageToConversation_ReturnCorrectMappedReadModel_WhereUserWhoAreGoingToReceiveThisMessage_WasNotSender()
		{
			//Arrange
			var saveModel = new ChatMessageSaveModel
			{
				AddresseeId = "addresseeTestId",
				AddresseeCanReceiveMessage = true,
				SenderId = "senderTestId",
				Content = "test content",
			};

			var date = new DateTime(2016, 07, 06);
			var savedMessageDbModel = new ChatMessage
			{
				Author = new ApplicationUser { Id = saveModel.SenderId, UserName = saveModel.SenderId },
				Date = date,
				Content = saveModel.Content
			};

			this.conversationDbService.Setup(s => s.SaveMessage(It.IsAny<ChatMessage>())).Returns(savedMessageDbModel);

			//Act
			var messageReadModel = this.serviceUnderTest.AddMessageToConversation(saveModel);

			//Assert
			Assert.NotNull(messageReadModel);
			Assert.False(messageReadModel.UserWasSender);
			Assert.NotEmpty(messageReadModel.MessageContent);
			Assert.NotEmpty(messageReadModel.MessageHeader);
		}
		private ChatMessageReadModel MapChatMessageToReadModel(string userId, ChatMessage message)
		{
			var messageViewModel = new ChatMessageReadModel();
			messageViewModel.Id = message.ChatMessageId;
			messageViewModel.ConversationId = message.ConversationId;
			messageViewModel.MessageHeader = GetMessageHeader(userId, message);
			messageViewModel.MessageContent = message.Content;
			messageViewModel.UserWasSender = userId == message.AuthorId;
			return messageViewModel;
		}
		/// <summary>
		/// Saves message in db and returns message read model
		/// </summary>
		/// <param name="chatMessageSaveModel">Model with message parameters</param>
		/// <returns>Message read model</returns>
		public ChatMessageReadModel AddMessageToConversation(ChatMessageSaveModel chatMessageSaveModel)
		{
			var messageDbModel = new ChatMessage();
			messageDbModel.AuthorId = chatMessageSaveModel.SenderId;
			messageDbModel.Content = chatMessageSaveModel.Content;
			messageDbModel.ConversationId = chatMessageSaveModel.ConversationId;
			messageDbModel.Date = DateTime.Now;
			messageDbModel.Received = chatMessageSaveModel.AddresseeCanReceiveMessage;

			messageDbModel = this.conversationDbService.SaveMessage(messageDbModel);

			return MapChatMessageToReadModel(chatMessageSaveModel.AddresseeId, messageDbModel);
		}
		public ChatMessage SaveMessage(ChatMessage messageDbModel)
		{
			if (messageDbModel.ChatMessageId > 0)
			{
				this.dbContext.Entry(messageDbModel).State = EntityState.Modified;
			}
			else
			{
				this.dbContext.Add(messageDbModel);
			}

			this.dbContext.SaveChanges();

			return this.dbContext.ChatMessage.Include(m => m.Author).FirstOrDefault(m => m.ChatMessageId == messageDbModel.ChatMessageId);
		}
		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);
		}
		private string GetMessageHeader(string userId, ChatMessage message)
		{
			return String.Format("{0}, {1} {2}", userId == message.AuthorId ? "ja" : message.Author.GetUserName(), message.Date.GetDateDottedStringFormat(), message.Date.GetTimeColonStringFormat());
		}