Skip to content

[spector] Add discriminated union test cases #7602

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

Merged
merged 20 commits into from
Jul 1, 2025
Merged

[spector] Add discriminated union test cases #7602

merged 20 commits into from
Jul 1, 2025

Conversation

Copilot
Copy link
Contributor

@Copilot Copilot AI commented Jun 10, 2025

This PR adds comprehensive spector test cases for discriminated unions based on the TypeSpec standard library documentation.

Scenarios Implemented

Added test cases covering the three main discriminated union patterns:

  1. Default serialization (/envelope) - Uses default kind and value envelope structure:

    {
      "kind": "cat",
      "value": {
        "name": "Whiskers",
        "meow": true
      }
    }
  2. Custom property names (/custom-names) - Uses custom discriminator and envelope properties:

    {
      "petType": "cat", 
      "petData": {
        "name": "Whiskers",
        "meow": true
      }
    }
  3. Inline discriminator (/inline) - Uses envelope: "none" to inject discriminator directly:

    {
      "kind": "cat",
      "name": "Whiskers", 
      "meow": true
    }

Each scenario includes both GET and PUT operations with complete mockapi implementations.

Files Added

  • packages/http-specs/specs/type/union/discriminated/main.tsp - TypeSpec definitions with 6 scenarios
  • packages/http-specs/specs/type/union/discriminated/mockapi.ts - Mock API implementations
  • Updated spec-summary.md with auto-generated documentation

Validation

✅ All 56 scenarios (including new ones) pass validation
✅ TypeScript compilation successful
✅ Mock API validation passes
✅ No linting errors
✅ Documentation regenerated

The implementation follows existing spector patterns and provides comprehensive test coverage for discriminated unions as specified in the TypeSpec documentation.

Fixes #7601.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • typespec.io
    • Triggering command: curl -s REDACTED (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI and others added 2 commits June 10, 2025 08:43
Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com>
Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com>
@Copilot Copilot AI changed the title [WIP] [spector] Add cases for discriminated union [spector] Add discriminated union test cases Jun 10, 2025
@Copilot Copilot AI requested a review from msyyc June 10, 2025 08:45
Copilot finished work on behalf of msyyc June 10, 2025 08:45
Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com>
@msyyc
Copy link
Contributor

msyyc commented Jun 11, 2025

@copilot Apply comments #7602 (comment) and #7602 (comment) for all scenarios.

Copilot finished work on behalf of msyyc June 11, 2025 09:22
… to all GET endpoints

Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jun 11, 2025

@copilot Apply comments #7602 (comment) and #7602 (comment) for all scenarios.

Applied both comments to all scenarios:

  1. Added optional parameters to all GET operations (envelope: kind?: string, custom-names: petType?: string, inline: kind?: string)
  2. Changed all PUT operations to return the request body instead of NoContentResponse

Updated mockapi implementations to handle the optional parameters with appropriate response logic (when parameter is null/"cat" returns cat response, when "dog" returns dog response). All 56 scenarios pass validation. Implemented in commit ab3ee92.

Copilot finished work on behalf of msyyc June 11, 2025 09:41
Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com>
Copilot finished work on behalf of msyyc June 12, 2025 00:08
… union scenarios

Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com>
Copilot finished work on behalf of msyyc June 12, 2025 03:06
Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jun 12, 2025

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • telemetry.astro.build
    • Triggering command: node /home/REDACTED/work/typespec/typespec/website/node_modules/.bin/../astro/astro.js build (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot finished work on behalf of msyyc June 12, 2025 04:11
@Copilot Copilot AI requested a review from MaryGao June 19, 2025 06:03
Copilot finished work on behalf of MaryGao June 19, 2025 06:03
@msyyc msyyc force-pushed the copilot/fix-7601 branch from fc0cafa to 8783206 Compare June 19, 2025 08:06
Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jun 19, 2025

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • telemetry.astro.build
    • Triggering command: node /home/REDACTED/work/typespec/typespec/website/node_modules/.bin/../astro/astro.js build (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot finished work on behalf of msyyc June 19, 2025 08:18
Co-authored-by: iscai-msft <43154838+iscai-msft@users.noreply.github.com>
Copilot finished work on behalf of iscai-msft June 19, 2025 15:35
@Copilot Copilot AI requested a review from iscai-msft June 19, 2025 15:35
@msyyc
Copy link
Contributor

msyyc commented Jun 23, 2025

@copilot Add changelog for http-client-js just like you do for http-specs.

Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jun 23, 2025

@copilot Add changelog for http-client-js just like you do for http-specs.

Added changelog entry for http-client-js documenting that discriminated union test scenarios are skipped since the feature is not yet supported by the JavaScript emitter. Commit c53bed6.

Copilot finished work on behalf of msyyc June 23, 2025 02:01
@msyyc msyyc enabled auto-merge June 30, 2025 01:29
@msyyc
Copy link
Contributor

msyyc commented Jun 30, 2025

Hi @timotheeguerin, appreciate if you could help approve the PR for merge.

@msyyc msyyc disabled auto-merge July 1, 2025 08:36
@msyyc msyyc added this pull request to the merge queue Jul 1, 2025
Merged via the queue into main with commit 3a7884d Jul 1, 2025
21 checks passed
@msyyc msyyc deleted the copilot/fix-7601 branch July 1, 2025 09:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Error loading sessions

Retrying.

Successfully merging this pull request may close these issues.

[spector] Add cases for discriminated union
7 participants