Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FormRecognizer] Filling gaps in our tests #12926

Merged
merged 23 commits into from
Jun 23, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
2068654
Created content-detection tests
kinelski Jun 18, 2020
70d46c7
Added single blank page tests
kinelski Jun 22, 2020
831f9cb
Added Jpg content test
kinelski Jun 22, 2020
aa0786d
Renamed receipt test to ReceiptJpg
kinelski Jun 22, 2020
33ece41
Added receipt test to ReceiptPng
kinelski Jun 22, 2020
e7b158b
Make Form1 custom with labels test take includeTextContent
kinelski Jun 22, 2020
821ba96
Make Form1 custom without labels test take includeTextContent
kinelski Jun 22, 2020
126c7bc
Make MultipageFormWithBlankPage with labels tests take uri
kinelski Jun 22, 2020
ea10fa9
Make MultipageFormWithBlankPage without labels tests take uri
kinelski Jun 22, 2020
1d88108
Enabled multipage form stream test without labels
kinelski Jun 22, 2020
50d40cc
Merge remote-tracking branch 'azure/master' into fr-tests
kinelski Jun 22, 2020
44d4370
Added Invalid Prefix test
kinelski Jun 22, 2020
f17a48e
Added bad region CopyModel test
kinelski Jun 22, 2020
6284373
Added test for deleting model that doesnt exist
kinelski Jun 22, 2020
71e0d04
Added fake API key tests
kinelski Jun 22, 2020
0aba487
Merge remote-tracking branch 'azure/master' into fr-tests
kinelski Jun 22, 2020
2fa4857
Renamed recording
kinelski Jun 22, 2020
94d5de1
Merged master; recordings need to be regenerated
kinelski Jun 22, 2020
9c2d27c
Rerecorded
kinelski Jun 22, 2020
afd93d3
Regenerated some recordings
kinelski Jun 22, 2020
dcc2ae5
x
kinelski Jun 22, 2020
62aae61
aaaaaaa
kinelski Jun 22, 2020
42b8861
ooeeooaaaaa
kinelski Jun 22, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@

using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Azure.AI.FormRecognizer.Models;
using Azure.Core;
using Azure.Core.TestFramework;
using NUnit.Framework;
Expand Down Expand Up @@ -41,6 +43,45 @@ private FormRecognizerClient CreateInstrumentedClient(FormRecognizerClientOption
return InstrumentClient(client);
}

[Test]
public async Task StartRecognizeContentSendsUserSpecifiedContentType()
{
var mockResponse = new MockResponse(202);
mockResponse.AddHeader(new HttpHeader(Constants.OperationLocationHeader, "host/layout/analyzeResults/00000000000000000000000000000000"));

var mockTransport = new MockTransport(new[] { mockResponse, mockResponse });
var options = new FormRecognizerClientOptions() { Transport = mockTransport };
var client = CreateInstrumentedClient(options);

using var stream = FormRecognizerTestEnvironment.CreateStream(TestFile.InvoiceLeTiff);
var recognizeOptions = new RecognizeOptions { ContentType = FormContentType.Jpeg };
await client.StartRecognizeContentAsync(stream, recognizeOptions);

var request = mockTransport.Requests.Single();

Assert.True(request.Headers.TryGetValue("Content-Type", out var contentType));
Assert.AreEqual("image/jpeg", contentType);
}

[Test]
public async Task StartRecognizeContentSendsAutoDetectedContentType()
{
var mockResponse = new MockResponse(202);
mockResponse.AddHeader(new HttpHeader(Constants.OperationLocationHeader, "host/layout/analyzeResults/00000000000000000000000000000000"));

var mockTransport = new MockTransport(new[] { mockResponse, mockResponse });
var options = new FormRecognizerClientOptions() { Transport = mockTransport };
var client = CreateInstrumentedClient(options);

using var stream = FormRecognizerTestEnvironment.CreateStream(TestFile.InvoiceLeTiff);
await client.StartRecognizeContentAsync(stream);

var request = mockTransport.Requests.Single();

Assert.True(request.Headers.TryGetValue("Content-Type", out var contentType));
Assert.AreEqual("image/tiff", contentType);
}

[Test]
public async Task StartRecognizeContentFromUriEncodesBlankSpaces()
{
Expand Down Expand Up @@ -68,6 +109,45 @@ public async Task StartRecognizeContentFromUriEncodesBlankSpaces()
}
}

[Test]
public async Task StartRecognizeReceiptsSendsUserSpecifiedContentType()
{
var mockResponse = new MockResponse(202);
mockResponse.AddHeader(new HttpHeader(Constants.OperationLocationHeader, "host/prebuilt/receipt/analyzeResults/00000000000000000000000000000000"));

var mockTransport = new MockTransport(new[] { mockResponse, mockResponse });
var options = new FormRecognizerClientOptions() { Transport = mockTransport };
var client = CreateInstrumentedClient(options);

using var stream = FormRecognizerTestEnvironment.CreateStream(TestFile.InvoiceLeTiff);
var recognizeOptions = new RecognizeOptions { ContentType = FormContentType.Jpeg };
await client.StartRecognizeReceiptsAsync(stream, recognizeOptions);

var request = mockTransport.Requests.Single();

Assert.True(request.Headers.TryGetValue("Content-Type", out var contentType));
Assert.AreEqual("image/jpeg", contentType);
}

[Test]
public async Task StartRecognizeReceiptsSendsAutoDetectedContentType()
{
var mockResponse = new MockResponse(202);
mockResponse.AddHeader(new HttpHeader(Constants.OperationLocationHeader, "host/prebuilt/receipt/analyzeResults/00000000000000000000000000000000"));

var mockTransport = new MockTransport(new[] { mockResponse, mockResponse });
var options = new FormRecognizerClientOptions() { Transport = mockTransport };
var client = CreateInstrumentedClient(options);

using var stream = FormRecognizerTestEnvironment.CreateStream(TestFile.InvoiceLeTiff);
await client.StartRecognizeReceiptsAsync(stream);

var request = mockTransport.Requests.Single();

Assert.True(request.Headers.TryGetValue("Content-Type", out var contentType));
Assert.AreEqual("image/tiff", contentType);
}

[Test]
public async Task StartRecognizeReceiptsFromUriEncodesBlankSpaces()
{
Expand Down Expand Up @@ -95,6 +175,45 @@ public async Task StartRecognizeReceiptsFromUriEncodesBlankSpaces()
}
}

[Test]
public async Task StartRecognizeCustomFormsSendsUserSpecifiedContentType()
{
var mockResponse = new MockResponse(202);
mockResponse.AddHeader(new HttpHeader(Constants.OperationLocationHeader, "host/custom/models/00000000000000000000000000000000/analyzeResults/00000000000000000000000000000000"));

var mockTransport = new MockTransport(new[] { mockResponse, mockResponse });
var options = new FormRecognizerClientOptions() { Transport = mockTransport };
var client = CreateInstrumentedClient(options);

using var stream = FormRecognizerTestEnvironment.CreateStream(TestFile.InvoiceLeTiff);
var recognizeOptions = new RecognizeOptions { ContentType = FormContentType.Jpeg };
await client.StartRecognizeCustomFormsAsync("00000000000000000000000000000000", stream, recognizeOptions);

var request = mockTransport.Requests.Single();

Assert.True(request.Headers.TryGetValue("Content-Type", out var contentType));
Assert.AreEqual("image/jpeg", contentType);
}

[Test]
public async Task StartRecognizeCustomFormsSendsAutoDetectedContentType()
{
var mockResponse = new MockResponse(202);
mockResponse.AddHeader(new HttpHeader(Constants.OperationLocationHeader, "host/custom/models/00000000000000000000000000000000/analyzeResults/00000000000000000000000000000000"));

var mockTransport = new MockTransport(new[] { mockResponse, mockResponse });
var options = new FormRecognizerClientOptions() { Transport = mockTransport };
var client = CreateInstrumentedClient(options);

using var stream = FormRecognizerTestEnvironment.CreateStream(TestFile.InvoiceLeTiff);
await client.StartRecognizeCustomFormsAsync("00000000000000000000000000000000", stream);

var request = mockTransport.Requests.Single();

Assert.True(request.Headers.TryGetValue("Content-Type", out var contentType));
Assert.AreEqual("image/tiff", contentType);
}

[Test]
public async Task StartRecognizeCustomFormsFromUriEncodesBlankSpaces()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,13 @@ public FormTrainingClientLiveTests(bool isAsync) : base(isAsync)
{
}

[Test]
public void FormTrainingClientCannotAuthenticateWithFakeApiKey()
{
var client = CreateInstrumentedFormTrainingClient(apiKey: "fakeKey");
Assert.ThrowsAsync<RequestFailedException>(async () => await client.GetAccountPropertiesAsync());
}

[Test]
public async Task FormTrainingClientCanAuthenticateWithTokenCredential()
{
Expand Down Expand Up @@ -89,6 +96,20 @@ public async Task StartTraining(bool labeled)
}
}

[Test]
public async Task StartTrainingFailsWithInvalidPrefix()
{
var client = CreateInstrumentedFormTrainingClient();
var trainingFilesUri = new Uri(TestEnvironment.BlobContainerSasUrl);
TrainingOperation operation;

var filter = new TrainingFileFilter { IncludeSubFolders = true, Prefix = "invalidPrefix" };

operation = await client.StartTrainingAsync(trainingFilesUri, useTrainingLabels: false, filter);

Assert.ThrowsAsync<RequestFailedException>(async () => await operation.WaitForCompletionAsync(PollingInterval));
}

[Test]
public async Task StartTrainingError()
{
Expand Down Expand Up @@ -171,6 +192,15 @@ public async Task TrainingOps(bool labeled)
Assert.ThrowsAsync<RequestFailedException>(() => client.GetCustomModelAsync(trainedModel.ModelId));
}

[Test]
public void DeleteModelFailsWhenModelDoesNotExist()
{
var client = CreateInstrumentedFormTrainingClient();
var fakeModelId = "00000000-0000-0000-0000-000000000000";

Assert.ThrowsAsync<RequestFailedException>(async () => await client.DeleteModelAsync(fakeModelId));
}

[Test]
public async Task CopyModel()
{
Expand Down Expand Up @@ -210,6 +240,22 @@ public void CopyModelError()
Assert.ThrowsAsync<RequestFailedException>(async () => await sourceClient.StartCopyModelAsync("00000000-0000-0000-0000-000000000000", targetAuth));
}

[Test]
public async Task StartCopyModelFailsWithWrongRegion()
{
var sourceClient = CreateInstrumentedFormTrainingClient();
var targetClient = CreateInstrumentedFormTrainingClient();
var resourceID = TestEnvironment.TargetResourceId;
var wrongRegion = TestEnvironment.TargetResourceRegion == "westcentralus" ? "eastus2" : "westcentralus";

await using var trainedModel = await CreateDisposableTrainedModelAsync(useTrainingLabels: true);
CopyAuthorization targetAuth = await targetClient.GetCopyAuthorizationAsync(resourceID, wrongRegion);

var operation = await sourceClient.StartCopyModelAsync(trainedModel.ModelId, targetAuth);

Assert.ThrowsAsync<RequestFailedException>(async () => await operation.WaitForCompletionAsync(PollingInterval));
}

[Test]
public async Task GetCopyAuthorization()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ public FormRecognizerLiveTestBase(bool isAsync) : base(isAsync)
/// variables and instruments it to make use of the Azure Core Test Framework functionalities.
/// </summary>
/// <param name="useTokenCredential">Whether or not to use a <see cref="TokenCredential"/> to authenticate. An <see cref="AzureKeyCredential"/> is used by default.</param>
/// <param name="apiKey">The API key to use for authentication. Defaults to <see cref="FormRecognizerTestEnvironment.ApiKey"/>.</param>
/// <returns>The instrumented <see cref="FormTrainingClient" />.</returns>
protected FormTrainingClient CreateInstrumentedFormTrainingClient(bool useTokenCredential = false)
protected FormTrainingClient CreateInstrumentedFormTrainingClient(bool useTokenCredential = false, string apiKey = default)
{
var endpoint = new Uri(TestEnvironment.Endpoint);
var options = Recording.InstrumentClientOptions(new FormRecognizerClientOptions());
Expand All @@ -36,7 +37,7 @@ protected FormTrainingClient CreateInstrumentedFormTrainingClient(bool useTokenC
}
else
{
var credential = new AzureKeyCredential(TestEnvironment.ApiKey);
var credential = new AzureKeyCredential(apiKey ?? TestEnvironment.ApiKey);
client = new FormTrainingClient(endpoint, credential, options);
}

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading