parser-js icon indicating copy to clipboard operation
parser-js copied to clipboard

Parser do not validate and throw error when `parameters` are provided but address is null

Open derberg opened this issue 9 months ago • 4 comments

Like in the subject.

Document:

asyncapi: 3.0.0
info:
  title: Account Service
  version: 1.0.0
  description: This service is in charge of processing user signups
channels:
  userSignedup:
    address: user/signedup
    parameters:
      test:
        description: I should get an error that I provide a parameter but there are no parameters in the address, or basically address in `null`
    messages:
      UserSignedUp:
        $ref: '#/components/messages/UserSignedUp'
operations:
  sendUserSignedup:
    action: send
    channel:
      $ref: '#/channels/userSignedup'
    messages:
      - $ref: '#/channels/userSignedup/messages/UserSignedUp'
components:
  messages:
    UserSignedUp:
      payload:
        type: object
        properties:
          displayName:
            type: string
            description: Name of the user
          email:
            type: string
            format: email
            description: Email of the user

it should not be a valid document and I should get an error saying that I have parameters but there are no parameters in the address

derberg avatar Oct 12 '23 13:10 derberg

We need to adapt the spectral rules to solve this issue. Here is how:

  • Use the v2 rule that does this for AsyncAPI v2: https://github.com/asyncapi/parser-js/blob/0a765c1ed46af605707d9e37f71d76192b950602/src/ruleset/v2/ruleset.ts#L69
  • Add it to the core ruleset: https://github.com/asyncapi/parser-js/blob/next-major-spec/src/ruleset/ruleset.ts
  • Make the v3 rule look for the address not in the key of the key/value pair, but in the value.address instead.

This issue is marked as good first issue, but it's a medium difficulty!

Remember to target the next-major-spec branch.

jonaslagoni avatar Nov 09 '23 19:11 jonaslagoni

/gfi typescript

jonaslagoni avatar Nov 09 '23 19:11 jonaslagoni

We need to adapt the spectral rules to solve this issue. Here is how:

  • Use the v2 rule that does this for AsyncAPI v2: https://github.com/asyncapi/parser-js/blob/0a765c1ed46af605707d9e37f71d76192b950602/src/ruleset/v2/ruleset.ts#L69

Note that the linked rule only applies for channels with parameters in their address. Otherwise, it just skips it. See the following code that executes for the channel address: https://github.com/asyncapi/parser-js/blob/0a765c1ed46af605707d9e37f71d76192b950602/src/ruleset/v2/functions/channelParameters.ts#L25

We need to additionally make it fail in case there are parameters defined for such a channel but they are not added into the address. This is the usecase @derberg shared.

Remember to target the next-major-spec branch.

This is not anymore a requirement since all v3-related stuff has been merged now to master.

cc @Min2who

smoya avatar Dec 04 '23 11:12 smoya