Skip to content

Add tests for JSON deserialization of serializable types#7373

Merged
stephentoub merged 7 commits intomainfrom
copilot/add-json-deserialization-tests
Mar 9, 2026
Merged

Add tests for JSON deserialization of serializable types#7373
stephentoub merged 7 commits intomainfrom
copilot/add-json-deserialization-tests

Conversation

Copy link
Contributor

Copilot AI commented Mar 7, 2026

  • Add JsonDeserialization_KnownPayload test to ChatResponseTests.cs
  • Add JsonDeserialization_KnownPayload test to ChatMessageTests.cs
  • Add JsonDeserialization_KnownPayload test to ChatResponseUpdateTests.cs
  • Add JsonDeserialization_KnownPayload test to ChatOptionsTests.cs
  • Add JsonDeserialization_KnownPayload test to UsageDetailsTests.cs
  • Add JsonDeserialization_KnownPayload test to ReasoningOptionsTests.cs
  • Add JsonDeserialization_KnownPayload test to TextContentTests.cs
  • Add JsonDeserialization_KnownPayload test to ErrorContentTests.cs
  • Add JsonDeserialization_KnownPayload test to FunctionCallContentTests.cs
  • Add JsonDeserialization_KnownPayload test to FunctionResultContentTests.cs
  • Add JsonDeserialization_KnownPayload test to ToolCallContentTests.cs
  • Add JsonDeserialization_KnownPayload test to ToolResultContentTests.cs
  • Add JsonDeserialization_KnownPayload test to UriContentTests.cs
  • Add JsonDeserialization_KnownPayload test to UsageContentTests.cs
  • Add JsonDeserialization_KnownPayload test to TextReasoningContentTests.cs
  • Add JsonDeserialization_KnownPayload test to DataContentTests.cs
  • Add JsonDeserialization_KnownPayload test to HostedFileContentTests.cs
  • Add JsonDeserialization_KnownPayload test to HostedVectorStoreContentTests.cs
  • Add JsonDeserialization_KnownPayload test to InputRequestContentTests.cs
  • Add JsonDeserialization_KnownPayload test to InputResponseContentTests.cs
  • Add JsonDeserialization_KnownPayload test to ToolApprovalRequestContentTests.cs
  • Add JsonDeserialization_KnownPayload test to ToolApprovalResponseContentTests.cs
  • Add JsonDeserialization_KnownPayload test to McpServerToolCallContentTests.cs
  • Add JsonDeserialization_KnownPayload test to McpServerToolResultContentTests.cs
  • Add JsonDeserialization_KnownPayload test to CitationAnnotationTests.cs
  • Add JsonDeserialization_KnownPayload test to EmbeddingTests.cs
  • Add JsonDeserialization_KnownPayload test to EmbeddingGenerationOptionsTests.cs
  • Add JsonDeserialization_KnownPayload test to SpeechToTextResponseTests.cs
  • Add JsonDeserialization_KnownPayload test to SpeechToTextResponseUpdateTests.cs
  • Add JsonDeserialization_KnownPayload test to SpeechToTextOptionsTests.cs
  • Add JsonDeserialization_KnownPayload test to ImageGenerationResponseTests.cs
  • Add JsonDeserialization_KnownPayload test to ImageGenerationOptionsTests.cs
  • Add JsonDeserialization_KnownPayload test to CodeInterpreterToolCallContentTests.cs
  • Add JsonDeserialization_KnownPayload test to CodeInterpreterToolResultContentTests.cs
  • Add JsonDeserialization_KnownPayload test to ImageGenerationToolCallContentTests.cs
  • Add JsonDeserialization_KnownPayload test to ImageGenerationToolResultContentTests.cs
  • Add JsonDeserialization_KnownPayload test to WebSearchToolCallContentTests.cs
  • Add JsonDeserialization_KnownPayload test to WebSearchToolResultContentTests.cs
  • Run code review and address feedback
  • Run CodeQL security check

✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Microsoft Reviewers: Open in CodeFlow

Copilot AI and others added 2 commits March 7, 2026 20:04
Add a new test that deserializes a hardcoded JSON string covering all
serializable properties of ChatResponseUpdate using AIJsonUtilities.DefaultOptions,
then asserts each property value.

Co-authored-by: Copilot <[email protected]>
@stephentoub stephentoub marked this pull request as ready for review March 8, 2026 01:35
@stephentoub stephentoub requested a review from a team as a code owner March 8, 2026 01:35
@stephentoub stephentoub added area-ai Microsoft.Extensions.AI libraries and removed area-telemetry labels Mar 8, 2026
@stephentoub stephentoub changed the title [WIP] Add tests for JSON deserialization of serializable types Add tests for JSON deserialization of serializable types Mar 8, 2026
@stephentoub stephentoub enabled auto-merge (squash) March 8, 2026 01:35
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds “known payload” JSON deserialization tests across Microsoft.Extensions.AI.Abstractions exchange types to validate that AIJsonUtilities.DefaultOptions (and relevant test contexts) can correctly materialize expected object graphs, including polymorphic $type payloads and additional properties.

Changes:

  • Added JsonDeserialization_KnownPayload tests for core chat, content, embeddings, speech-to-text, image generation, and usage types.
  • Validated polymorphic $type handling for AIContent / AIAnnotation payloads and common metadata fields (e.g., continuation tokens, additional properties).
  • Expanded coverage for options/response DTOs to ensure property naming and converters match “known” JSON shapes.

Reviewed changes

Copilot reviewed 38 out of 38 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/UsageDetailsTests.cs Adds known-payload deserialization coverage for UsageDetails, including AdditionalCounts.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/SpeechToText/SpeechToTextResponseUpdateTests.cs Adds known-payload deserialization coverage for SpeechToTextResponseUpdate (kind, timespan, contents, additional props).
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/SpeechToText/SpeechToTextResponseTests.cs Adds known-payload deserialization coverage for SpeechToTextResponse (contents, usage, additional props).
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/SpeechToText/SpeechToTextOptionsTests.cs Adds known-payload deserialization coverage for SpeechToTextOptions.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Image/ImageGenerationResponseTests.cs Adds known-payload deserialization coverage for ImageGenerationResponse contents + usage.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Image/ImageGenerationOptionsTests.cs Adds known-payload deserialization coverage for ImageGenerationOptions including size/format and additional props.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Embeddings/EmbeddingTests.cs Adds known-payload deserialization coverage for polymorphic Embedding ($type: float32).
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Embeddings/EmbeddingGenerationOptionsTests.cs Adds known-payload deserialization coverage for EmbeddingGenerationOptions.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/WebSearchToolResultContentTests.cs Adds known-payload deserialization coverage for experimental web-search tool result content via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/WebSearchToolCallContentTests.cs Adds known-payload deserialization coverage for experimental web-search tool call content via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/UsageContentTests.cs Adds known-payload deserialization coverage for UsageContent wrapping UsageDetails.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/UriContentTests.cs Adds known-payload deserialization coverage for UriContent via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ToolResultContentTests.cs Adds known-payload deserialization coverage for ToolResultContent via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ToolCallContentTests.cs Adds known-payload deserialization coverage for ToolCallContent via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ToolApprovalResponseContentTests.cs Adds known-payload deserialization coverage for ToolApprovalResponseContent (nested tool call).
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ToolApprovalRequestContentTests.cs Adds known-payload deserialization coverage for ToolApprovalRequestContent (nested tool call).
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/TextReasoningContentTests.cs Adds known-payload deserialization coverage for TextReasoningContent via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/TextContentTests.cs Adds known-payload deserialization coverage for TextContent via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/McpServerToolResultContentTests.cs Adds known-payload deserialization coverage for McpServerToolResultContent with outputs via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/McpServerToolCallContentTests.cs Adds known-payload deserialization coverage for McpServerToolCallContent with arguments via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/InputResponseContentTests.cs Adds known-payload deserialization coverage for InputResponseContent polymorphism (toolApprovalResponse).
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/InputRequestContentTests.cs Adds known-payload deserialization coverage for InputRequestContent polymorphism (toolApprovalRequest).
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ImageGenerationToolResultContentTests.cs Adds known-payload deserialization coverage for experimental image-generation tool result content via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ImageGenerationToolCallContentTests.cs Adds known-payload deserialization coverage for experimental image-generation tool call content via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/HostedVectorStoreContentTests.cs Adds known-payload deserialization coverage for HostedVectorStoreContent via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/HostedFileContentTests.cs Adds known-payload deserialization coverage for HostedFileContent (experimental-backed JSON-included properties).
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/FunctionResultContentTests.cs Adds known-payload deserialization coverage for FunctionResultContent via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/FunctionCallContentTests.cs Adds known-payload deserialization coverage for FunctionCallContent via $type (args + informationalOnly).
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ErrorContentTests.cs Adds known-payload deserialization coverage for ErrorContent via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/DataContentTests.cs Adds known-payload deserialization coverage for DataContent via $type (data URI parsing).
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/CodeInterpreterToolResultContentTests.cs Adds known-payload deserialization coverage for experimental code-interpreter tool result content via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/CodeInterpreterToolCallContentTests.cs Adds known-payload deserialization coverage for experimental code-interpreter tool call content via $type.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/CitationAnnotationTests.cs Adds known-payload deserialization coverage for CitationAnnotation via AIAnnotation polymorphism.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/ChatCompletion/ReasoningOptionsTests.cs Adds known-payload deserialization coverage for ReasoningOptions via test serializer context.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/ChatCompletion/ChatResponseUpdateTests.cs Adds known-payload deserialization coverage for ChatResponseUpdate including polymorphic contents and continuation token.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/ChatCompletion/ChatResponseTests.cs Adds known-payload deserialization coverage for ChatResponse including nested messages and continuation token.
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/ChatCompletion/ChatOptionsTests.cs Adds known-payload deserialization coverage for ChatOptions (reasoning, tool mode, response format, continuation token).
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/ChatCompletion/ChatMessageTests.cs Adds known-payload deserialization coverage for ChatMessage including multiple content item types.

@stephentoub
Copy link
Member

@copilot address the feedback

auto-merge was automatically disabled March 8, 2026 01:46

Head branch was pushed to by a user without write access

Copy link
Contributor Author

Copilot AI commented Mar 8, 2026

@copilot address the feedback

Fixed both in 7bc8937: used unqualified Size in ImageGenerationOptionsTests.cs and collection expression ["query one", "query two"] in WebSearchToolCallContentTests.cs.

@stephentoub stephentoub merged commit 3dfe56d into main Mar 9, 2026
6 checks passed
@stephentoub stephentoub deleted the copilot/add-json-deserialization-tests branch March 9, 2026 14:34
jeffhandley pushed a commit to jeffhandley/extensions that referenced this pull request Mar 17, 2026
Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: stephentoub <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-ai Microsoft.Extensions.AI libraries

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants