public async Task TryIncrementCurrentNumber_IncrementsCounter_OnValidEntry() { var context = CreateDbContextMock(); var manager = new ContinuityManager(context); var nextEntry = new ImageEntry(null, 2); bool result = await manager.TryIncrementCurrentNumber(nextEntry); Assert.True(result); Assert.Equal(3, manager.GetCurrentNumber()); //2 entries + 1 }
public async Task TryIncrementCurrentNumber_Fails_OnAddingDuplicateEntry() { var context = CreateDbContextMock(); var manager = new ContinuityManager(context); var duplicateEntry = new ImageEntry(null, 1); bool result = await manager.TryIncrementCurrentNumber(duplicateEntry); Assert.False(result); Assert.Equal(2, manager.GetCurrentNumber()); //assert number hasn't changed }
private async Task <ResponseImageViewModel> ProcessImage(UploadImageViewModel model, DigitDetectionOptions options, ModelStateDictionary modelState) { int expectedNumber = continuityManager.GetCurrentNumber(); if (!modelState.IsValid) { var errors = modelState.SelectMany(pair => pair.Value.Errors.Select(error => error.ErrorMessage)) .ToList(); return(ResponseImageViewModelSimpleFactory.GenerateFailureResponse(null, expectedNumber, errors)); } //preprocess image var bitmap = bitmapUtility.FromFormFile(model.File); if (!imageRatioValidator.Validate(bitmap)) { return(ResponseImageViewModelSimpleFactory.GenerateFailureResponse(null, expectedNumber, imageRatioValidator.ErrorMessage)); } //extract text string recognizedText = await TryRecognizeText(options, bitmap); if (recognizedText == null) { return(ResponseImageViewModelSimpleFactory.GenerateFailureResponse(null, expectedNumber, ErrorMessages.SERVER_OVERLOADED)); } //preprocess text var sanitizer = new TextSanitizer(); recognizedText = sanitizer.Process(recognizedText); var expectedText = continuityManager.GetCurrentNumber().ToString(); if (expectedText == recognizedText) { int recognizedAsNumber = int.Parse(recognizedText); var bytes = bitmapUtility.ToByteArray(bitmapUtility.Resize(bitmap)); var entry = new ImageEntry(bytes, recognizedAsNumber); if (await continuityManager.TryIncrementCurrentNumber(entry)) { return(ResponseImageViewModelSimpleFactory.GenerateSuccessResponse(recognizedText, expectedNumber)); } else { //correct the expected number, as it must've changed expectedNumber = continuityManager.GetCurrentNumber(); return(ResponseImageViewModelSimpleFactory.GenerateFailureResponse(null, expectedNumber, ErrorMessages.CONCURRENCY)); } } else { string error = string.Format(ErrorMessages.INVALID_NUMBER, expectedText); return(ResponseImageViewModelSimpleFactory.GenerateFailureResponse(recognizedText, expectedNumber, error)); } }