public async Task CalculateWordsPerSession() { // Arrange var handler = new Service.Handlers.SubmitWordsHandler(_context, _mapper); var message = new SubmitWords { SessionId = _existingSession.Id, Words = new List <string> { "chocolate", "vanilla", }, DateModified = DateTime.UtcNow }; await handler.Handle(message, new TestsMessageHandlerContext()); // Act await new Worker.Handlers.RefreshCalculationsHandler(Common.GetDbContext(_connectionString), Common.GetMapper()) .Handle(new RefreshCalculations(), new TestsMessageHandlerContext()); // Assert _context = Common.GetDbContext(_connectionString); var vanillaCounts = await _context.SessionWordCounts.SingleAsync(s => s.Word == "vanilla"); var chocolateCounts = await _context.SessionWordCounts.SingleAsync(s => s.Word == "chocolate"); Assert.Equal(2, vanillaCounts.Count); Assert.Equal(1, chocolateCounts.Count); }
public async Task <IActionResult> SubmitWords(Guid id, [FromBody] List <string> words) { if (!words.Any()) { return(BadRequest(new { Detail = "Cannot submit empty list of words" })); } var session = await this._countingStringsRepository.GetByIdAsync(id); if (session == null) { return(BadRequest(new { Detail = "Session not recognized" })); } if (session.Status == 0) { return(BadRequest(new { Detail = "Session is already closed" })); } var submitWordsCommand = new SubmitWords { SessionId = session.Id, Words = words, DateModified = DateTime.UtcNow }; await this._messageSession.Send(submitWordsCommand); return(NoContent()); }
public async Task CalculateWordFrequency() { // Arrange var handler = new Service.Handlers.SubmitWordsHandler(Common.GetDbContext(_connectionString), Common.GetMapper()); var worker = new Worker.Handlers.RefreshCalculationsHandler(Common.GetDbContext(_connectionString), Common.GetMapper()); var messageOld = new SubmitWords { SessionId = _existingSession.Id, Words = new List <string> { "chocolate", // new "vanilla", // existing }, DateModified = DateTime.UtcNow }; await handler.Handle(messageOld, new TestsMessageHandlerContext()); // Act await worker.Handle(new RefreshCalculations(), new TestsMessageHandlerContext()); //Assert var refreshedContext = Common.GetDbContext(_connectionString); var vanillaData = await refreshedContext.WordDateCounts.Where(s => s.Word == "vanilla").ToListAsync(); var chocolateData = await _context.WordDateCounts.Where(s => s.Word == "chocolate").ToListAsync(); Assert.True(vanillaData.Count == 2); Assert.Contains(vanillaData, d => d.Date.Date == DateTime.UtcNow.Date); Assert.Contains(vanillaData, d => d.Date.Date == DateTime.UtcNow.AddDays(-1).Date); Assert.True(vanillaData.All(d => d.Count == 1)); Assert.True(chocolateData.Count == 1); Assert.Contains(chocolateData, d => d.Date.Date == DateTime.UtcNow.Date); Assert.True(vanillaData.All(d => d.Count == 1)); // Submit new words and recalculate counts. // Arrange handler = new Service.Handlers.SubmitWordsHandler(Common.GetDbContext(_connectionString), Common.GetMapper()); var messageNew = new SubmitWords { SessionId = _existingSession.Id, Words = new List <string> { "chocolate", // existing "vanilla", // existing }, DateModified = DateTime.UtcNow }; await handler.Handle(messageNew, new TestsMessageHandlerContext()); // Act await new Worker.Handlers.RefreshCalculationsHandler(Common.GetDbContext(_connectionString), Common.GetMapper()) .Handle(new RefreshCalculations(), new TestsMessageHandlerContext()); //Assert _context = Common.GetDbContext(_connectionString); vanillaData = await _context.WordDateCounts.Where(s => s.Word == "vanilla").ToListAsync(); chocolateData = await _context.WordDateCounts.Where(s => s.Word == "chocolate").ToListAsync(); Assert.True(vanillaData.Count == 2); Assert.NotNull(vanillaData.SingleOrDefault(v => v.Date.Date == DateTime.UtcNow.Date && v.Count == 2)); Assert.NotNull(vanillaData.SingleOrDefault(v => v.Date.Date == DateTime.UtcNow.AddDays(-1).Date&& v.Count == 1)); Assert.True(chocolateData.Count == 1); Assert.NotNull(chocolateData.SingleOrDefault(v => v.Date.Date == DateTime.UtcNow.Date && v.Count == 2)); }