public async Task SendMessage(SendMessageInputModel inputModel) { var messageViewModel = await messagesService.CreateMessageAsync(inputModel.SenderId, inputModel.RecipientId, inputModel.AdId, inputModel.Content); await Clients.Users(inputModel.RecipientId) .SendAsync("SendMessage", messageViewModel); }
public async Task <ActionResult> Create(MessageCreationBindingModel model) { if (!ModelState.IsValid) { return(BadRequest()); } await messagesService.CreateMessageAsync(model.Content, model.User); return(Ok()); }
public async Task CreateMessageAsync_WithValidData_ShouldCreateAMessage() { //Arrange var expected = new MessageDetailsViewModel { AdTitle = "Iphone 6s", Content = "Content for the message", Sender = "Ivan", SentOn = "31/01/2019" }; var moqAdsService = new Mock <IAdsService>(); var moqUsersService = new Mock <IUsersService>(); moqUsersService.Setup(x => x.GetUserByIdAsync("SenderId")) .ReturnsAsync(new SellMeUser { Id = "SenderId", UserName = "******" }); var moqMapper = new Mock <IMapper>(); moqMapper.Setup(x => x.Map <MessageDetailsViewModel>(It.IsAny <Message>())) .Returns(new MessageDetailsViewModel { AdTitle = "Iphone 6s", Content = "Content for the message", Sender = "Ivan", SentOn = "31/01/2019" }); var context = InitializeContext.CreateContextForInMemory(); messagesService = new MessagesService(context, moqAdsService.Object, moqUsersService.Object, moqMapper.Object); var testingAd = CreateTestingAd(); await context.Ads.AddAsync(testingAd); await context.SaveChangesAsync(); //Act and assert var actual = await messagesService.CreateMessageAsync("SenderId", "RecipientId", 1, "Content for the message"); Assert.Equal(expected.AdTitle, actual.AdTitle); Assert.Equal(expected.Content, actual.Content); Assert.Equal(expected.Sender, actual.Sender); Assert.Equal(expected.SentOn, actual.SentOn); }
public async Task CreateMessageAsync_WithInvalidAdId_ShouldThrowAnArgumentException() { //Arrange var expectedErrorMessage = "Ad with the given id doesn't exist!"; var moqAdsService = new Mock <IAdsService>(); var moqUsersService = new Mock <IUsersService>(); var moqIMapper = new Mock <IMapper>(); var context = InitializeContext.CreateContextForInMemory(); messagesService = new MessagesService(context, moqAdsService.Object, moqUsersService.Object, moqIMapper.Object); //Act and assert var ex = await Assert.ThrowsAsync <ArgumentException>(() => messagesService.CreateMessageAsync(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1, Guid.NewGuid().ToString())); Assert.Equal(expectedErrorMessage, ex.Message); }
public async Task <IActionResult> Send(SendMessageInputModel inputModel) { if (!ModelState.IsValid) { var sendMessageBindingModel = await messagesService.GetMessageBindingModelByAdIdAsync(inputModel.AdId); sendMessageBindingModel.InputModel = inputModel; return(View(sendMessageBindingModel)); } var messageViewModel = await messagesService.CreateMessageAsync(inputModel.SenderId, inputModel.RecipientId, inputModel.AdId, inputModel.Content); var unreadMessagesCount = await messagesService.GetUnreadMessagesCountAsync(inputModel.RecipientId); await hubContext.Clients.User(inputModel.RecipientId).SendAsync("MessageCount", unreadMessagesCount); await hubContext.Clients.User(inputModel.RecipientId) .SendAsync("SendMessage", messageViewModel); return(RedirectToAction("Details", new{ adId = inputModel.AdId, senderId = inputModel.SenderId, recipientId = inputModel.RecipientId })); }