public async Task <ValidationResult> ValidateTextAnalysisInputAsync(TextAnalysisInput textAnalysisInput) { // Null objects are not handled by Fluent Validation so it has to be handled first if (textAnalysisInput == null) { return(new ValidationResult("VE_TextAnalysisInput_NotNull_001", "TextAnalysisInput should NOT be NULL")); } if (textAnalysisInput.Text == null) { return(new ValidationResult("VE_TextAnalysisInput_Text_NotNull_001", "Text should NOT be NULL")); } if (textAnalysisInput.Subtext == null) { return(new ValidationResult("VE_TextAnalysisInput_Subtext_NotNull_001", "Subtext should NOT be NULL")); } // Fluent Validation var fluentValidationResult = await _textAnalysisInputValidator.ValidateAsync(textAnalysisInput); // Mapping through extension methods var validationResult = fluentValidationResult.MapToValidationResultModel(); return(validationResult); }
[InlineData("Polly put the kettle on, polly put the kettle on, poLLy put the kettle on we'll all have tea", "XX")] // another invalid text and subtext public async void GetCharacterPositionsAsync_InputIsValid_XX_NaResult(string text, string subtext) { // Arrange var textAnalysisInput = new TextAnalysisInput() { Text = text, Subtext = subtext }; var validationResult = _fixture.Build <ValidationResult>().Create(); validationResult.IsValid = true; _validationService .Setup(svc => svc.ValidateTextAnalysisInputAsync(It.IsAny <TextAnalysisInput>())) .ReturnsAsync(validationResult); // Act var result = await _characterPositionsService.GetCharacterPositionsAsync(textAnalysisInput); // Assert result.Should().NotBeNull(); result.Count.Should().Be(1); var characterPositionNA = result.Find(x => x.Mark.Equals("N/A")); characterPositionNA.Should().NotBeNull(); }
public async Task <string> PostAsync([FromBody] TextAnalysisInput textAnalysisInput) { // Using Dependency Injected service var result = await _characterPositionsService.GetCharacterPositionsAsync(textAnalysisInput); string jsonResult = JsonConvert.SerializeObject(result, Formatting.Indented); return(jsonResult); }
/// <summary> /// Main entry point for the Controller to get Character Positions. /// </summary> /// <param name="textAnalysisInput">Input for Text Analysis.</param> /// <returns>Character Position List or Error List.</returns> public async Task <List <CharacterPosition> > GetCharacterPositionsAsync(TextAnalysisInput textAnalysisInput) { var validationResult = await _validationService.ValidateTextAnalysisInputAsync(textAnalysisInput); if (!validationResult.IsValid) { return(validationResult.MapToCharacterPositionListModel()); } var positionsIntCollection = GetMatchedSubtextPositions(textAnalysisInput.Text, textAnalysisInput.Subtext); positionsIntCollection.Sort(); return(positionsIntCollection.MapToCharacterPositionListModel()); }
[InlineData(null, null)] // yet another valid text and subtext public async void ValidateTextAnalysisInputAsync_InputIsInValid_ValidationFails(string text, string subtext) { // Arrange var textAnalysisInput = new TextAnalysisInput() { Text = text, Subtext = subtext }; // Act var validationResult = await _validationService.ValidateTextAnalysisInputAsync(textAnalysisInput); // Assert validationResult.Should().NotBeNull(); validationResult.IsValid.Should().BeFalse(); }
[InlineData("asdf", "df")] // yet another valid text and subtext public async void ValidateTextAnalysisInputAsync_InputIsValid_ValidationSucceeds(string text, string subtext) { // Arrange var textAnalysisInput = new TextAnalysisInput() { Text = text, Subtext = subtext }; // Act var validationResult = await _textAnalysisValidator.ValidateAsync(textAnalysisInput); // Assert validationResult.Should().NotBeNull(); validationResult.IsValid.Should().BeTrue(); }
[InlineData("Polly put the kettle on, polly put the kettle on, poLLy put the kettle on we'll all have tea", "lL")] // another valid text and subtext public async void GetCharacterPositionsAsync_InputIsValid_LL_OkResult(string text, string subtext) { // Arrange var textAnalysisInput = new TextAnalysisInput() { Text = text, Subtext = subtext }; var validationResult = _fixture.Build <ValidationResult>().Create(); validationResult.IsValid = true; _validationService .Setup(svc => svc.ValidateTextAnalysisInputAsync(It.IsAny <TextAnalysisInput>())) .ReturnsAsync(validationResult); // Act var result = await _characterPositionsService.GetCharacterPositionsAsync(textAnalysisInput); // Assert result.Should().NotBeNull(); result.Count.Should().Be(5); // 3, 28, 53, 78, 82 var characterPosition3 = result.Find(x => x.Mark.Equals("3")); characterPosition3.Should().NotBeNull(); var characterPosition28 = result.Find(x => x.Mark.Equals("28")); characterPosition28.Should().NotBeNull(); var characterPosition53 = result.Find(x => x.Mark.Equals("53")); characterPosition53.Should().NotBeNull(); var characterPosition78 = result.Find(x => x.Mark.Equals("78")); characterPosition78.Should().NotBeNull(); var characterPosition82 = result.Find(x => x.Mark.Equals("82")); characterPosition82.Should().NotBeNull(); }