public async Task GivenQuestionList_WhenICallGetSummary_ThenASummaryIsReturnedWithASetOfDistinctTags() { // Arrange DateTime dateTime = new DateTime(2013, 01, 4); List <Question> questions = new List <Question> { new Question(new CreateQuestionDto { Tags = new[] { "x", "b", "z" } }), new Question(new CreateQuestionDto { Tags = new[] { "a", "c", "z" } }), new Question(new CreateQuestionDto { Tags = new[] { "z" } }), }; _questionRepositoryMock .Setup(x => x.GetAllForDate(dateTime)) .ReturnsAsync(questions); // Act DaySummaryDto daySummaryDto = await _daySummaryService.GetSummaryAsync(dateTime); // Assert Assert.That(daySummaryDto.UniqueTags.Count(), Is.EqualTo(5)); }
public async Task GivenQuestionList_WhenICallGetSummary_ThenASummaryIsReturnedWithAViewTotal() { // Arrange DateTime dateTime = new DateTime(2013, 01, 4); List <Question> questions = new List <Question> { new Question(new CreateQuestionDto { ViewTotal = 3 }), new Question(new CreateQuestionDto { ViewTotal = 4 }), new Question(new CreateQuestionDto { ViewTotal = 1 }), }; _questionRepositoryMock .Setup(x => x.GetAllForDate(dateTime)) .ReturnsAsync(questions); // Act DaySummaryDto daySummaryDto = await _daySummaryService.GetSummaryAsync(dateTime); // Assert Assert.That(daySummaryDto.ViewTotal, Is.EqualTo(8)); }
public async Task GivenValidDate_WhenIRun_ThenASummaryIsOutput() { // Arrange string validDate = "2019-03-01"; DateTime?dateTime = new DateTime(2019, 3, 1); _dateParserMock.Setup(x => x.Parse(validDate)).Returns(dateTime); DaySummaryDto daySummaryDto = new DaySummaryDto { QuestionTotal = 14, ViewTotal = 15415, UniqueTags = new[] { "z" } }; _daySummaryServiceMock .Setup(x => x.GetSummaryAsync(dateTime.Value)) .ReturnsAsync(daySummaryDto); string formattedTags = "tags!"; _tagFormatterMock.Setup(x => x.Format(daySummaryDto.UniqueTags)).Returns(formattedTags); // Act await _consoleAppService.Run(new[] { validDate }); // Assert string[] outputs = _testAppOutput.Outputs.ToArray(); Assert.That(outputs[0], Is.EqualTo("Summary for date: " + validDate)); Assert.That(outputs[1], Is.EqualTo($"Total questions: {daySummaryDto.QuestionTotal}")); Assert.That(outputs[2], Is.EqualTo($"Total views: {daySummaryDto.ViewTotal}")); Assert.That(outputs[4], Is.EqualTo(formattedTags)); }
public async Task Run(string[] args) { // An argument parser could be used here if (args.Length == 0) { _appOutput.WriteLine("A date must be provided in the format yyyy-MM-dd"); // No date provided so terminate early return; } DateTime?dateTime = _dateParser.Parse(args[0]); if (!dateTime.HasValue) { _appOutput.WriteLine($"the input date '{args[0]}' must be provided in the format yyyy-MM-dd"); // No date could be parsed so terminate early return; } DaySummaryDto daySummaryDto = await _daySummaryService.GetSummaryAsync(dateTime.Value); if (daySummaryDto == null) { _appOutput.WriteLine( $"an error occured when trying to retrieve the summary for the date '{dateTime.Value}'. " + $"Please try again."); // Unable to retrieve summary properly, so terminate early return; } _appOutput.WriteLine($"Summary for date: {dateTime.Value:yyyy-MM-dd}"); _appOutput.WriteLine($"Total questions: {daySummaryDto.QuestionTotal}"); _appOutput.WriteLine($"Total views: {daySummaryDto.ViewTotal}"); _appOutput.WriteLine("Tags:"); string tags = _tagFormatter.Format(daySummaryDto.UniqueTags); _appOutput.WriteLine(tags); }