Skip to content

Commit 895bf6f

Browse files
authored
Refactor Tests for Form Recognizer (Azure#10640)
1 parent 7c61f89 commit 895bf6f

20 files changed

+2161
-2338
lines changed

sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/ReceiptExtensions.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ public static USReceipt asUSReceipt(RecognizedReceipt receipt) {
5555
FormField<?> fieldValue = entry.getValue();
5656
switch (key) {
5757
case "ReceiptType":
58-
receiptType = new USReceiptType(key, fieldValue.getConfidence());
58+
receiptType = new USReceiptType(((FormField<String>) fieldValue).getFieldValue(),
59+
fieldValue.getConfidence());
5960
break;
6061
case "MerchantName":
6162
merchantName = (FormField<String>) fieldValue;

sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,10 @@ static List<RecognizedForm> toRecognizedForm(AnalyzeResult analyzeResult, boolea
6262
List<ReadResult> readResults = analyzeResult.getReadResults();
6363
List<DocumentResult> documentResults = analyzeResult.getDocumentResults();
6464
List<PageResult> pageResults = analyzeResult.getPageResults();
65-
List<RecognizedForm> extractedFormList = null;
65+
List<RecognizedForm> extractedFormList;
6666

6767
List<FormPage> formPages = toRecognizedLayout(analyzeResult, includeTextDetails);
6868

69-
// unlabeled
7069
if (!CoreUtils.isNullOrEmpty(documentResults)) {
7170
extractedFormList = new ArrayList<>();
7271
for (DocumentResult documentResultItem : documentResults) {
@@ -87,8 +86,7 @@ static List<RecognizedForm> toRecognizedForm(AnalyzeResult analyzeResult, boolea
8786
new IterableStream<>(formPages.subList(pageRange.getStartPageNumber() - 1,
8887
pageRange.getEndPageNumber()))));
8988
}
90-
} else if (!CoreUtils.isNullOrEmpty(pageResults)) {
91-
// labeled
89+
} else {
9290
extractedFormList = new ArrayList<>();
9391
for (PageResult pageResultItem : pageResults) {
9492
StringBuffer formType = new StringBuffer("form-");

sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClientTest.java

Lines changed: 47 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
package com.azure.ai.formrecognizer;
55

6+
import com.azure.ai.formrecognizer.implementation.models.AnalyzeResult;
67
import com.azure.ai.formrecognizer.models.CustomFormModel;
78
import com.azure.ai.formrecognizer.models.ErrorResponseException;
89
import com.azure.ai.formrecognizer.models.FormContentType;
@@ -19,17 +20,17 @@
1920

2021
import java.time.Duration;
2122

23+
import static com.azure.ai.formrecognizer.TestUtils.CUSTOM_FORM_DATA;
2224
import static com.azure.ai.formrecognizer.TestUtils.CUSTOM_FORM_FILE_LENGTH;
25+
import static com.azure.ai.formrecognizer.TestUtils.CUSTOM_FORM_LABELED_DATA;
2326
import static com.azure.ai.formrecognizer.TestUtils.INVALID_SOURCE_URL_ERROR;
2427
import static com.azure.ai.formrecognizer.TestUtils.INVALID_URL;
2528
import static com.azure.ai.formrecognizer.TestUtils.LAYOUT_FILE_LENGTH;
29+
import static com.azure.ai.formrecognizer.TestUtils.LAYOUT_FORM_DATA;
2630
import static com.azure.ai.formrecognizer.TestUtils.RECEIPT_FILE_LENGTH;
31+
import static com.azure.ai.formrecognizer.TestUtils.RECEIPT_FORM_DATA;
2732
import static com.azure.ai.formrecognizer.TestUtils.RECEIPT_LOCAL_URL;
28-
import static com.azure.ai.formrecognizer.TestUtils.getExpectedFormPages;
29-
import static com.azure.ai.formrecognizer.TestUtils.getExpectedReceipts;
30-
import static com.azure.ai.formrecognizer.TestUtils.getExpectedRecognizedForms;
31-
import static com.azure.ai.formrecognizer.TestUtils.getExpectedRecognizedLabeledForms;
32-
import static com.azure.ai.formrecognizer.TestUtils.getExpectedUSReceipt;
33+
import static com.azure.ai.formrecognizer.TestUtils.getAnalyzeRawResponse;
3334
import static com.azure.ai.formrecognizer.TestUtils.getReplayableBufferData;
3435
import static com.azure.ai.formrecognizer.implementation.Utility.toFluxByteBuffer;
3536
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -66,7 +67,7 @@ void recognizeReceiptSourceUrl() {
6667
SyncPoller<OperationResult, IterableStream<RecognizedReceipt>> syncPoller =
6768
client.beginRecognizeReceiptsFromUrl(sourceUrl).getSyncPoller();
6869
syncPoller.waitForCompletion();
69-
validateReceiptResult(getExpectedReceipts(false), syncPoller.getFinalResult());
70+
validateReceiptResultData(syncPoller.getFinalResult(), getAnalyzeRawResponse(RECEIPT_FORM_DATA).getAnalyzeResult(), false);
7071
});
7172
}
7273

@@ -80,7 +81,7 @@ void recognizeReceiptSourceUrlTextDetails() {
8081
SyncPoller<OperationResult, IterableStream<RecognizedReceipt>> syncPoller =
8182
client.beginRecognizeReceiptsFromUrl(sourceUrl, includeTextDetails, null).getSyncPoller();
8283
syncPoller.waitForCompletion();
83-
validateReceiptResult(getExpectedReceipts(includeTextDetails), syncPoller.getFinalResult());
84+
validateReceiptResultData(syncPoller.getFinalResult(), getAnalyzeRawResponse(RECEIPT_FORM_DATA).getAnalyzeResult(), includeTextDetails);
8485
});
8586
}
8687

@@ -95,7 +96,7 @@ void recognizeReceiptData() {
9596
FormContentType.IMAGE_JPEG, false,
9697
null).getSyncPoller();
9798
syncPoller.waitForCompletion();
98-
validateReceiptResult(getExpectedReceipts(false), syncPoller.getFinalResult());
99+
validateReceiptResultData(syncPoller.getFinalResult(), getAnalyzeRawResponse(RECEIPT_FORM_DATA).getAnalyzeResult(), false);
99100
});
100101
}
101102

@@ -119,7 +120,7 @@ void recognizeReceiptDataWithContentTypeAutoDetection() {
119120
client.beginRecognizeReceipts(getReplayableBufferData(RECEIPT_LOCAL_URL), RECEIPT_FILE_LENGTH, null,
120121
false, null).getSyncPoller();
121122
syncPoller.waitForCompletion();
122-
validateReceiptResult(getExpectedReceipts(false), syncPoller.getFinalResult());
123+
validateReceiptResultData(syncPoller.getFinalResult(), getAnalyzeRawResponse(RECEIPT_FORM_DATA).getAnalyzeResult(), false);
123124
}
124125

125126
/**
@@ -133,8 +134,7 @@ void recognizeReceiptDataTextDetails() {
133134
FormContentType.IMAGE_JPEG, includeTextDetails,
134135
null).getSyncPoller();
135136
syncPoller.waitForCompletion();
136-
validateReceiptResult(getExpectedReceipts(true),
137-
syncPoller.getFinalResult());
137+
validateReceiptResultData(syncPoller.getFinalResult(), getAnalyzeRawResponse(RECEIPT_FORM_DATA).getAnalyzeResult(), true);
138138
});
139139
}
140140

@@ -158,8 +158,9 @@ void recognizeReceiptAsUSReceipt() {
158158
FormContentType.IMAGE_JPEG, includeTextDetails,
159159
null).getSyncPoller();
160160
syncPoller.waitForCompletion();
161-
syncPoller.getFinalResult().forEach(recognizedReceipt -> validateUSReceipt(getExpectedUSReceipt(),
162-
ReceiptExtensions.asUSReceipt(recognizedReceipt), includeTextDetails));
161+
syncPoller.getFinalResult().forEach(recognizedReceipt ->
162+
validateUSReceiptData(ReceiptExtensions.asUSReceipt(recognizedReceipt),
163+
getAnalyzeRawResponse(RECEIPT_FORM_DATA).getAnalyzeResult(), includeTextDetails));
163164
});
164165
}
165166

@@ -173,7 +174,8 @@ void recognizeLayoutData() {
173174
= client.beginRecognizeContent(toFluxByteBuffer(data),
174175
LAYOUT_FILE_LENGTH, FormContentType.IMAGE_JPEG, null).getSyncPoller();
175176
syncPoller.waitForCompletion();
176-
validateLayoutResult(getExpectedFormPages(), syncPoller.getFinalResult());
177+
final AnalyzeResult rawResponse = getAnalyzeRawResponse(LAYOUT_FORM_DATA).getAnalyzeResult();
178+
validateLayoutDataResults(syncPoller.getFinalResult(), rawResponse.getReadResults(), rawResponse.getPageResults(), false);
177179
});
178180
}
179181

@@ -205,7 +207,8 @@ void recognizeLayoutDataWithContentTypeAutoDetection() {
205207
= client.beginRecognizeContent(toFluxByteBuffer(data),
206208
LAYOUT_FILE_LENGTH, null, null).getSyncPoller();
207209
syncPoller.waitForCompletion();
208-
validateLayoutResult(getExpectedFormPages(), syncPoller.getFinalResult());
210+
final AnalyzeResult rawResponse = getAnalyzeRawResponse(LAYOUT_FORM_DATA).getAnalyzeResult();
211+
validateLayoutDataResults(syncPoller.getFinalResult(), rawResponse.getReadResults(), rawResponse.getPageResults(), false);
209212
});
210213
}
211214

@@ -218,7 +221,8 @@ void recognizeLayoutSourceUrl() {
218221
SyncPoller<OperationResult, IterableStream<FormPage>> syncPoller
219222
= client.beginRecognizeContentFromUrl(sourceUrl).getSyncPoller();
220223
syncPoller.waitForCompletion();
221-
validateLayoutResult(getExpectedFormPages(), syncPoller.getFinalResult());
224+
final AnalyzeResult rawResponse = getAnalyzeRawResponse(LAYOUT_FORM_DATA).getAnalyzeResult();
225+
validateLayoutDataResults(syncPoller.getFinalResult(), rawResponse.getReadResults(), rawResponse.getPageResults(), false);
222226
});
223227
}
224228

@@ -236,7 +240,7 @@ void recognizeLayoutInvalidSourceUrl() {
236240
*/
237241
@Test
238242
void recognizeCustomFormInvalidSourceUrl() {
239-
beginTrainingLabeledResultRunner((storageSASUrl, useLabelFile) -> {
243+
beginTrainingLabeledRunner((storageSASUrl, useLabelFile) -> {
240244
SyncPoller<OperationResult, CustomFormModel> syncPoller =
241245
client.getFormTrainingAsyncClient().beginTraining(storageSASUrl, useLabelFile).getSyncPoller();
242246
syncPoller.waitForCompletion();
@@ -252,19 +256,20 @@ void recognizeCustomFormInvalidSourceUrl() {
252256
*/
253257
@Test
254258
void recognizeCustomFormLabeledData() {
255-
customFormLabeledDataRunner(data ->
256-
beginTrainingLabeledResultRunner((storageSASUrl, useLabelFile) -> {
257-
SyncPoller<OperationResult, CustomFormModel> syncPoller =
259+
customFormDataRunner(data ->
260+
beginTrainingLabeledRunner((storageSASUrl, useLabelFile) -> {
261+
SyncPoller<OperationResult, CustomFormModel> trainingPoller =
258262
client.getFormTrainingAsyncClient().beginTraining(storageSASUrl, useLabelFile).getSyncPoller();
259-
syncPoller.waitForCompletion();
263+
trainingPoller.waitForCompletion();
260264

261-
SyncPoller<OperationResult, IterableStream<RecognizedForm>> syncPollers
265+
SyncPoller<OperationResult, IterableStream<RecognizedForm>> syncPoller
262266
= client.beginRecognizeCustomForms(toFluxByteBuffer(data),
263-
syncPoller.getFinalResult().getModelId(),
267+
trainingPoller.getFinalResult().getModelId(),
264268
CUSTOM_FORM_FILE_LENGTH, FormContentType.APPLICATION_PDF, true, null)
265269
.getSyncPoller();
266270
syncPoller.waitForCompletion();
267-
validateRecognizedFormResult(getExpectedRecognizedLabeledForms(), syncPollers.getFinalResult());
271+
validateRecognizedResult(syncPoller.getFinalResult(),
272+
getAnalyzeRawResponse(CUSTOM_FORM_LABELED_DATA).getAnalyzeResult(), true, true);
268273
}));
269274
}
270275

@@ -273,8 +278,8 @@ void recognizeCustomFormLabeledData() {
273278
*/
274279
@Test
275280
void recognizeCustomFormLabeledDataWithNullValues() {
276-
customFormLabeledDataRunner(data ->
277-
beginTrainingLabeledResultRunner((storageSASUrl, useLabelFile) -> {
281+
customFormDataRunner(data ->
282+
beginTrainingLabeledRunner((storageSASUrl, useLabelFile) -> {
278283
SyncPoller<OperationResult, CustomFormModel> syncPoller =
279284
client.getFormTrainingAsyncClient().beginTraining(storageSASUrl, useLabelFile).getSyncPoller();
280285
syncPoller.waitForCompletion();
@@ -297,19 +302,20 @@ void recognizeCustomFormLabeledDataWithNullValues() {
297302
*/
298303
@Test
299304
void recognizeCustomFormLabeledDataWithContentTypeAutoDetection() {
300-
customFormLabeledDataRunner(data ->
301-
beginTrainingLabeledResultRunner((storageSASUrl, useLabelFile) -> {
302-
SyncPoller<OperationResult, CustomFormModel> syncPoller =
305+
customFormDataRunner(data ->
306+
beginTrainingLabeledRunner((storageSASUrl, useLabelFile) -> {
307+
SyncPoller<OperationResult, CustomFormModel> trainingPoller =
303308
client.getFormTrainingAsyncClient().beginTraining(storageSASUrl, useLabelFile).getSyncPoller();
304-
syncPoller.waitForCompletion();
309+
trainingPoller.waitForCompletion();
305310

306-
SyncPoller<OperationResult, IterableStream<RecognizedForm>> syncPollers
311+
SyncPoller<OperationResult, IterableStream<RecognizedForm>> syncPoller
307312
= client.beginRecognizeCustomForms(toFluxByteBuffer(data),
308-
syncPoller.getFinalResult().getModelId(),
313+
trainingPoller.getFinalResult().getModelId(),
309314
CUSTOM_FORM_FILE_LENGTH, null, true, null)
310315
.getSyncPoller();
311316
syncPoller.waitForCompletion();
312-
validateRecognizedFormResult(getExpectedRecognizedLabeledForms(), syncPollers.getFinalResult());
317+
validateRecognizedResult(syncPoller.getFinalResult(),
318+
getAnalyzeRawResponse(CUSTOM_FORM_LABELED_DATA).getAnalyzeResult(), true, true);
313319
}));
314320
}
315321

@@ -318,19 +324,20 @@ void recognizeCustomFormLabeledDataWithContentTypeAutoDetection() {
318324
*/
319325
@Test
320326
void recognizeCustomFormUnlabeledData() {
321-
customFormLabeledDataRunner(data ->
322-
beginTrainingUnlabeledResultRunner((storageSASUrl, useLabelFile) -> {
323-
SyncPoller<OperationResult, CustomFormModel> syncPoller =
327+
customFormDataRunner(data ->
328+
beginTrainingUnlabeledRunner((storageSASUrl, useLabelFile) -> {
329+
SyncPoller<OperationResult, CustomFormModel> trainingPoller =
324330
client.getFormTrainingAsyncClient().beginTraining(storageSASUrl, useLabelFile).getSyncPoller();
325-
syncPoller.waitForCompletion();
331+
trainingPoller.waitForCompletion();
326332

327-
SyncPoller<OperationResult, IterableStream<RecognizedForm>> syncPollers
333+
SyncPoller<OperationResult, IterableStream<RecognizedForm>> syncPoller
328334
= client.beginRecognizeCustomForms(toFluxByteBuffer(data),
329-
syncPoller.getFinalResult().getModelId(),
335+
trainingPoller.getFinalResult().getModelId(),
330336
CUSTOM_FORM_FILE_LENGTH, FormContentType.APPLICATION_PDF, false, null)
331337
.getSyncPoller();
332338
syncPoller.waitForCompletion();
333-
validateRecognizedFormResult(getExpectedRecognizedForms(), syncPollers.getFinalResult());
339+
validateRecognizedResult(syncPoller.getFinalResult(),
340+
getAnalyzeRawResponse(CUSTOM_FORM_DATA).getAnalyzeResult(), false, false);
334341
}));
335342
}
336343
}

0 commit comments

Comments
 (0)