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

W-12689951: add mercure binding in async21+ #1922

Merged
merged 2 commits into from
Feb 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
package amf.apicontract.internal.spec.async.parser.bindings

import amf.apicontract.internal.spec.async.parser.bindings.Bindings._
import amf.core.client.scala.model.domain._
import amf.core.internal.metamodel.Field
import amf.core.internal.parser.YMapOps
import amf.core.internal.parser.domain.{Annotations, ScalarNode}
import amf.core.internal.validation.CoreValidations
import amf.apicontract.internal.metamodel.domain.bindings.BindingType
import amf.apicontract.client.scala.model.domain.bindings._
import amf.apicontract.internal.spec.async.parser.context.AsyncWebApiContext
import amf.apicontract.internal.spec.common.parser.SpecParserOps
import amf.apicontract.internal.validation.definitions.ParserSideValidations
import amf.shapes.internal.spec.common.JSONSchemaDraft7SchemaVersion
import amf.shapes.internal.spec.common.parser.YMapEntryLike
import amf.shapes.internal.spec.oas.parser.OasTypeParser
import org.yaml.model.{YMap, YMapEntry, YNode, YScalar}

abstract class AsyncBindingsParser(entryLike: YMapEntryLike)(implicit ctx: AsyncWebApiContext) extends SpecParserOps {
Expand Down Expand Up @@ -121,4 +116,5 @@ object Bindings {
val Sqs = "sqs"
val Stomp = "stomp"
val Redis = "redis"
val Mercure = "mercure"
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
package amf.apicontract.internal.spec.async.parser.context

import amf.apicontract.internal.spec.async._
import amf.apicontract.internal.spec.async.parser.context.syntax.{
Async20Syntax,
Async21Syntax,
Async22Syntax,
Async23Syntax,
Async24Syntax,
Async25Syntax,
Async26Syntax
}
import amf.apicontract.internal.spec.async.parser.context.syntax._
import amf.apicontract.internal.spec.common.AsyncWebApiDeclarations
import amf.core.client.scala.config.ParsingOptions
import amf.core.client.scala.parse.document.{ParsedReference, ParserContext}
Expand All @@ -24,7 +16,6 @@ import amf.core.internal.remote.{
Spec
}
import amf.shapes.internal.spec.async.parser.Async2Settings
import amf.shapes.internal.spec.common.parser.SpecSettings

import scala.collection.mutable

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ object AsyncValidBindingSet {

private val basic = Set(Http, WebSockets, Kafka, Amqp, Amqp1, Mqtt, Mqtt5, Nats, Jms, Sns, Sqs, Stomp, Redis)
val async20: AsyncValidBindingSet = AsyncValidBindingSet(basic)
val async21: AsyncValidBindingSet = async20
val async21: AsyncValidBindingSet = async20.add(Mercure)
val async22: AsyncValidBindingSet = async21
val async23: AsyncValidBindingSet = async22
val async24: AsyncValidBindingSet = async23
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package amf.apicontract.internal.spec.async.parser.context.syntax

import amf.apicontract.internal.spec.async.parser.bindings.Bindings.Mercure
import amf.shapes.internal.spec.common.parser.SpecSyntax

object Async21Syntax extends SpecSyntax {
override val nodes: Map[String, Set[String]] = Async20Syntax.nodes
override val nodes: Map[String, Set[String]] = add(Async20Syntax.nodes, "bindings", Set(Mercure))
}
Original file line number Diff line number Diff line change
@@ -1,32 +1,12 @@
package amf.apicontract.internal.spec.async.parser.document

import amf.aml.internal.parse.common.DeclarationKey
import amf.apicontract.client.scala.model.document.APIContractProcessingData
import amf.apicontract.client.scala.model.domain.api.AsyncApi
import amf.apicontract.client.scala.model.domain.bindings.{
ChannelBindings,
MessageBindings,
OperationBindings,
ServerBindings
}
import amf.apicontract.client.scala.model.domain.{EndPoint, Operation, Parameter}
import amf.apicontract.client.scala.model.domain.EndPoint
import amf.apicontract.internal.metamodel.domain.api.WebApiModel
import amf.apicontract.internal.metamodel.domain.bindings.{
ChannelBindingsModel,
MessageBindingsModel,
OperationBindingsModel,
ServerBindingsModel
}
import amf.apicontract.internal.metamodel.domain.security.SecuritySchemeModel
import amf.apicontract.internal.spec.async.parser.bindings.{
AsyncChannelBindingsParser,
AsyncMessageBindingsParser,
AsyncOperationBindingsParser,
AsyncServerBindingsParser
}
import amf.apicontract.internal.spec.async.parser.context.AsyncWebApiContext
import amf.apicontract.internal.spec.async.parser.domain._
import amf.apicontract.internal.spec.async.parser.domain.declarations.{Async20DeclarationParser, AsyncDeclarationParser}
import amf.apicontract.internal.spec.async.parser.domain.declarations.AsyncDeclarationParser
import amf.apicontract.internal.spec.common.parser._
import amf.apicontract.internal.spec.oas.parser.document.OasLikeDeclarationsHelper
import amf.apicontract.internal.spec.oas.parser.domain.{OasLikeInformationParser, OasLikeTagsParser}
Expand All @@ -35,15 +15,13 @@ import amf.apicontract.internal.validation.definitions.ParserSideValidations.{
MandatoryChannelsProperty
}
import amf.core.client.scala.model.document.Document
import amf.core.client.scala.model.domain.{AmfArray, AmfObject, AmfScalar, DomainElement}
import amf.core.client.scala.model.domain.{AmfArray, AmfObject, AmfScalar}
import amf.core.client.scala.parse.document.SyamlParsedDocument
import amf.core.internal.annotations.DeclaredElement
import amf.core.internal.metamodel.document.DocumentModel
import amf.core.internal.metamodel.domain.DomainElementModel
import amf.core.internal.parser.domain.{Annotations, ScalarNode}
import amf.core.internal.parser.{Root, YMapOps}
import amf.core.internal.remote.Spec
import amf.shapes.internal.spec.common.parser.{AnnotationParser, OasLikeCreativeWorkParser, YMapEntryLike}
import amf.shapes.internal.spec.common.parser.{AnnotationParser, OasLikeCreativeWorkParser}
import org.yaml.model.{YMap, YMapEntry, YType}

abstract class AsyncApiDocumentParser(root: Root, spec: Spec, declarationParser: AsyncDeclarationParser)(implicit
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
asyncapi: 2.1.0
info:
title: test mercure binding
version: 1.0.0
servers:
theName:
url: some.com
protocol: mercure
bindings:
mercure: {}
channels:
some-channel:
bindings:
mercure: {}
description: some channel
publish:
bindings:
mercure: {}
message:
bindings:
mercure: {}
payload:
type: string
Original file line number Diff line number Diff line change
Expand Up @@ -125,12 +125,18 @@ class Async20CycleTest extends FunSuiteCycleTests {
FixtureData("Security schemes", "security-schemes.yaml", "security-schemes.yaml"),
FixtureData("Operation and message traits", "operation-message-traits.yaml", "operation-message-traits.yaml"),
FixtureData("components emission", "components-cycle.yaml", "components-cycle.yaml"),
// TODO: fill async 2.x with each spec new features
FixtureData("Async 2.1 doc - empty", "empty-async21.yaml", "empty-async21.yaml"),
FixtureData("Async 2.2 doc - empty", "empty-async22.yaml", "empty-async22.yaml"),
FixtureData("Async 2.3 doc - empty", "empty-async23.yaml", "empty-async23.yaml"),
FixtureData("Async 2.4 doc - empty", "empty-async24.yaml", "empty-async24.yaml"),
FixtureData("Async 2.5 doc - empty", "empty-async25.yaml", "empty-async25.yaml"),
FixtureData("Async 2.6 doc - empty", "empty-async26.yaml", "empty-async26.yaml")
FixtureData("Async 2.6 doc - empty", "empty-async26.yaml", "empty-async26.yaml"),
FixtureData(
"mercure binding",
"bindings/mercure-binding.yaml",
"bindings/mercure-binding.yaml"
)

// TODO: figure out why this test is commented out
// FixtureData("Channel params with refs", "references/channel-params.yaml", "references/channel-params.yaml"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package amf.validation

import amf.core.client.common.validation.Async20Profile
import amf.core.internal.remote.{Async20YamlHint, Hint}
import org.scalatest.matchers.should.Matchers

class Async20MultiPlatformValidationsTest extends MultiPlatformReportGenTest with Matchers {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package amf.validation

import amf.core.internal.remote.{Async20JsonHint, Async20YamlHint, Hint}
import org.scalatest.matchers.should.Matchers

class Async20UniquePlatformUnitValidationsTest extends UniquePlatformReportGenTest with Matchers {
Expand Down