From e43ee0811f41fceadbc377eb49eaced4349c2bd8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Feb 2026 12:27:28 +0000 Subject: [PATCH 1/4] Initial plan From d2ccd9deb4e466a701646eaea3dd9c6e8f3bb577 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Feb 2026 12:36:30 +0000 Subject: [PATCH 2/4] Fix failing vision integration tests by using local test files Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> --- .../MediaInputTest.cs | 35 +++++++----------- ...kflows.Declarative.IntegrationTests.csproj | 3 ++ .../TestFiles/basic-text.pdf | Bin 0 -> 599 bytes .../TestFiles/test-image.jpg | Bin 0 -> 148 bytes 4 files changed, 17 insertions(+), 21 deletions(-) create mode 100644 dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/TestFiles/basic-text.pdf create mode 100644 dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/TestFiles/test-image.jpg diff --git a/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/MediaInputTest.cs b/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/MediaInputTest.cs index 5400628ba3..f077aff640 100644 --- a/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/MediaInputTest.cs +++ b/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/MediaInputTest.cs @@ -2,7 +2,6 @@ using System; using System.IO; -using System.Net.Http; using System.Threading.Tasks; using Azure.AI.Projects; using Azure.Identity; @@ -21,12 +20,13 @@ public sealed class MediaInputTest(ITestOutputHelper output) : IntegrationTest(o { private const string WorkflowWithConversationFileName = "MediaInputConversation.yaml"; private const string WorkflowWithAutoSendFileName = "MediaInputAutoSend.yaml"; - private const string ImageReference = "https://sample-files.com/downloads/images/jpg/web_optimized_1200x800_97kb.jpg"; - private const string PdfReference = "https://sample-files.com/downloads/documents/pdf/basic-text.pdf"; + private const string ImageReferenceUrl = "https://sample-files.com/downloads/images/jpg/web_optimized_1200x800_97kb.jpg"; + private const string PdfLocalFile = "TestFiles/basic-text.pdf"; + private const string ImageLocalFile = "TestFiles/test-image.jpg"; [Theory] - [InlineData(ImageReference, "image/jpeg", true)] - [InlineData(ImageReference, "image/jpeg", false)] + [InlineData(ImageReferenceUrl, "image/jpeg", true)] + [InlineData(ImageReferenceUrl, "image/jpeg", false)] public async Task ValidateFileUrlAsync(string fileSource, string mediaType, bool useConversation) { // Arrange @@ -39,12 +39,12 @@ public async Task ValidateFileUrlAsync(string fileSource, string mediaType, bool // Temporarily disabled [Theory] [Trait("Category", "IntegrationDisabled")] - [InlineData(ImageReference, "image/jpeg", true)] - [InlineData(ImageReference, "image/jpeg", false)] + [InlineData(ImageLocalFile, "image/jpeg", true)] + [InlineData(ImageLocalFile, "image/jpeg", false)] public async Task ValidateImageFileDataAsync(string fileSource, string mediaType, bool useConversation) { // Arrange - byte[] fileData = await DownloadFileAsync(fileSource); + byte[] fileData = await File.ReadAllBytesAsync(fileSource); string encodedData = Convert.ToBase64String(fileData); string fileUrl = $"data:{mediaType};base64,{encodedData}"; this.Output.WriteLine($"Content: {fileUrl.Substring(0, Math.Min(112, fileUrl.Length))}..."); @@ -54,12 +54,12 @@ public async Task ValidateImageFileDataAsync(string fileSource, string mediaType } [Theory] - [InlineData(PdfReference, "application/pdf", true)] - [InlineData(PdfReference, "application/pdf", false)] + [InlineData(PdfLocalFile, "application/pdf", true)] + [InlineData(PdfLocalFile, "application/pdf", false)] public async Task ValidateFileDataAsync(string fileSource, string mediaType, bool useConversation) { // Arrange - byte[] fileData = await DownloadFileAsync(fileSource); + byte[] fileData = await File.ReadAllBytesAsync(fileSource); string encodedData = Convert.ToBase64String(fileData); string fileUrl = $"data:{mediaType};base64,{encodedData}"; this.Output.WriteLine($"Content: {fileUrl.Substring(0, Math.Min(112, fileUrl.Length))}..."); @@ -71,12 +71,12 @@ public async Task ValidateFileDataAsync(string fileSource, string mediaType, boo // Temporarily disabled [Theory] [Trait("Category", "IntegrationDisabled")] - [InlineData(PdfReference, "doc.pdf", true)] - [InlineData(PdfReference, "doc.pdf", false)] + [InlineData(PdfLocalFile, "doc.pdf", true)] + [InlineData(PdfLocalFile, "doc.pdf", false)] public async Task ValidateFileUploadAsync(string fileSource, string documentName, bool useConversation) { // Arrange - byte[] fileData = await DownloadFileAsync(fileSource); + byte[] fileData = await File.ReadAllBytesAsync(fileSource); AIProjectClient client = new(this.TestEndpoint, new AzureCliCredential()); using MemoryStream contentStream = new(fileData); OpenAIFileClient fileClient = client.GetProjectOpenAIClient().GetOpenAIFileClient(); @@ -94,13 +94,6 @@ public async Task ValidateFileUploadAsync(string fileSource, string documentName } } - private static async Task DownloadFileAsync(string uri) - { - using HttpClient client = new(); - client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0"); - return await client.GetByteArrayAsync(new Uri(uri)); - } - private async Task ValidateFileAsync(AIContent fileContent, bool useConversation) { // Act diff --git a/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests.csproj b/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests.csproj index 985086a56e..309a590b83 100644 --- a/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests.csproj +++ b/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests.csproj @@ -36,6 +36,9 @@ Always + + Always + diff --git a/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/TestFiles/basic-text.pdf b/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/TestFiles/basic-text.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a4fb8a4509e5893c75ad56915d0873c0dcc400c3 GIT binary patch literal 599 zcmZWn-A=+V6u$3MoSP+jp;y?XDin00nb0)6!2^5WTltDM{=nwL`WDzmN8Wq zL}Uc~S2RR^R~8ng9pXQujb7IdL|aKmr%DPk3b{=Ze^5m!`+5V@5c#QypnDa0!`dOu zLQDz3$I9xpnd68w`%t5U-v~%NAOFIYHld<;uBi zPq{H_!SKIXcvz4oNhg5?958`lw4naO(o;-CSoskzO0d==tP{7i&d9P-#=nS3`Kchq YuC=DS+`R)Zf(-wU mFvtT9X9aSAfB^~^nV4Bv+1NQaxw!w|V&DKt*fae2e-i*tgC2MQ literal 0 HcmV?d00001 From 9935b69c8fce4471225135ea800f37df525c4c4b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Feb 2026 12:59:56 +0000 Subject: [PATCH 3/4] Fix net472 build error: replace File.ReadAllBytesAsync with compatible helper using AppContext.BaseDirectory Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> --- .../MediaInputTest.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/MediaInputTest.cs b/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/MediaInputTest.cs index f077aff640..b4f629d15c 100644 --- a/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/MediaInputTest.cs +++ b/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/MediaInputTest.cs @@ -44,7 +44,7 @@ public async Task ValidateFileUrlAsync(string fileSource, string mediaType, bool public async Task ValidateImageFileDataAsync(string fileSource, string mediaType, bool useConversation) { // Arrange - byte[] fileData = await File.ReadAllBytesAsync(fileSource); + byte[] fileData = await ReadLocalFileAsync(fileSource); string encodedData = Convert.ToBase64String(fileData); string fileUrl = $"data:{mediaType};base64,{encodedData}"; this.Output.WriteLine($"Content: {fileUrl.Substring(0, Math.Min(112, fileUrl.Length))}..."); @@ -59,7 +59,7 @@ public async Task ValidateImageFileDataAsync(string fileSource, string mediaType public async Task ValidateFileDataAsync(string fileSource, string mediaType, bool useConversation) { // Arrange - byte[] fileData = await File.ReadAllBytesAsync(fileSource); + byte[] fileData = await ReadLocalFileAsync(fileSource); string encodedData = Convert.ToBase64String(fileData); string fileUrl = $"data:{mediaType};base64,{encodedData}"; this.Output.WriteLine($"Content: {fileUrl.Substring(0, Math.Min(112, fileUrl.Length))}..."); @@ -76,7 +76,7 @@ public async Task ValidateFileDataAsync(string fileSource, string mediaType, boo public async Task ValidateFileUploadAsync(string fileSource, string documentName, bool useConversation) { // Arrange - byte[] fileData = await File.ReadAllBytesAsync(fileSource); + byte[] fileData = await ReadLocalFileAsync(fileSource); AIProjectClient client = new(this.TestEndpoint, new AzureCliCredential()); using MemoryStream contentStream = new(fileData); OpenAIFileClient fileClient = client.GetProjectOpenAIClient().GetOpenAIFileClient(); @@ -94,6 +94,12 @@ public async Task ValidateFileUploadAsync(string fileSource, string documentName } } + private static Task ReadLocalFileAsync(string relativePath) + { + string fullPath = Path.Combine(AppContext.BaseDirectory, relativePath); + return Task.FromResult(File.ReadAllBytes(fullPath)); + } + private async Task ValidateFileAsync(AIContent fileContent, bool useConversation) { // Act From 4e84f4e38d7d6db7e810d762783cae3e32fdf43d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Feb 2026 13:05:35 +0000 Subject: [PATCH 4/4] Simplify ReadLocalFile: return byte[] directly instead of Task Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> --- .../MediaInputTest.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/MediaInputTest.cs b/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/MediaInputTest.cs index b4f629d15c..da30db6f98 100644 --- a/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/MediaInputTest.cs +++ b/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/MediaInputTest.cs @@ -44,7 +44,7 @@ public async Task ValidateFileUrlAsync(string fileSource, string mediaType, bool public async Task ValidateImageFileDataAsync(string fileSource, string mediaType, bool useConversation) { // Arrange - byte[] fileData = await ReadLocalFileAsync(fileSource); + byte[] fileData = ReadLocalFile(fileSource); string encodedData = Convert.ToBase64String(fileData); string fileUrl = $"data:{mediaType};base64,{encodedData}"; this.Output.WriteLine($"Content: {fileUrl.Substring(0, Math.Min(112, fileUrl.Length))}..."); @@ -59,7 +59,7 @@ public async Task ValidateImageFileDataAsync(string fileSource, string mediaType public async Task ValidateFileDataAsync(string fileSource, string mediaType, bool useConversation) { // Arrange - byte[] fileData = await ReadLocalFileAsync(fileSource); + byte[] fileData = ReadLocalFile(fileSource); string encodedData = Convert.ToBase64String(fileData); string fileUrl = $"data:{mediaType};base64,{encodedData}"; this.Output.WriteLine($"Content: {fileUrl.Substring(0, Math.Min(112, fileUrl.Length))}..."); @@ -76,7 +76,7 @@ public async Task ValidateFileDataAsync(string fileSource, string mediaType, boo public async Task ValidateFileUploadAsync(string fileSource, string documentName, bool useConversation) { // Arrange - byte[] fileData = await ReadLocalFileAsync(fileSource); + byte[] fileData = ReadLocalFile(fileSource); AIProjectClient client = new(this.TestEndpoint, new AzureCliCredential()); using MemoryStream contentStream = new(fileData); OpenAIFileClient fileClient = client.GetProjectOpenAIClient().GetOpenAIFileClient(); @@ -94,10 +94,10 @@ public async Task ValidateFileUploadAsync(string fileSource, string documentName } } - private static Task ReadLocalFileAsync(string relativePath) + private static byte[] ReadLocalFile(string relativePath) { string fullPath = Path.Combine(AppContext.BaseDirectory, relativePath); - return Task.FromResult(File.ReadAllBytes(fullPath)); + return File.ReadAllBytes(fullPath); } private async Task ValidateFileAsync(AIContent fileContent, bool useConversation)