Skip to content

Commit

Permalink
Merge pull request #1924 from aml-org/W-12689954
Browse files Browse the repository at this point in the history
W-12689954 add emitter and cycle test  for defaultContentType
  • Loading branch information
damianpedra committed Feb 2, 2024
2 parents b7cc307 + 8bd86a5 commit 44d9066
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,22 @@ import amf.apicontract.client.scala.model.domain.Tag
import amf.apicontract.client.scala.model.domain.api.{Api, WebApi}
import amf.apicontract.internal.metamodel.domain.api.WebApiModel
import amf.apicontract.internal.spec.async.emitters.context.AsyncSpecEmitterContext
import amf.apicontract.internal.spec.async.emitters.domain.{
AsyncApiCreativeWorksEmitter,
AsyncApiEndpointsEmitter,
AsyncApiServersEmitter
}
import amf.apicontract.internal.spec.async.emitters.domain.{AsyncApiCreativeWorksEmitter, AsyncApiEndpointsEmitter, AsyncApiServersEmitter, DefaultContentTypeEmitter}
import amf.apicontract.internal.spec.common.emitter
import amf.apicontract.internal.spec.common.emitter.{AgnosticShapeEmitterContextAdapter, SecurityRequirementsEmitter}
import amf.apicontract.internal.spec.oas.emitter.domain.{InfoEmitter, TagsEmitter}
import amf.core.client.scala.model.document.{BaseUnit, Document}
import amf.core.client.scala.model.domain.{AmfArray, AmfScalar}
import amf.core.internal.parser.domain.FieldEntry
import amf.core.internal.remote.{
AsyncApi20,
AsyncApi21,
AsyncApi22,
AsyncApi23,
AsyncApi24,
AsyncApi25,
AsyncApi26,
Spec
}
import amf.core.internal.render.BaseEmitters.{EmptyMapEmitter, EntryPartEmitter, ValueEmitter, traverse}
import amf.core.internal.remote.{AsyncApi20, AsyncApi21, AsyncApi22, AsyncApi23, AsyncApi24, AsyncApi25, AsyncApi26, Spec}
import amf.core.internal.render.BaseEmitters.{EmptyMapEmitter, EntryPartEmitter, ValueEmitter, pos, traverse}
import amf.core.internal.render.SpecOrdering
import amf.core.internal.render.emitters.EntryEmitter
import amf.core.internal.validation.CoreValidations.TransformationValidation
import amf.core.internal.validation.CoreValidations.{NotLinkable, TransformationValidation}
import amf.shapes.client.scala.model.domain.CreativeWork
import amf.shapes.internal.annotations.OrphanOasExtension
import amf.shapes.internal.spec.common.emitter.annotations.AnnotationsEmitter
import org.mulesoft.common.client.lexical.Position
import org.yaml.model.{YDocument, YNode, YScalar, YType}

import scala.collection.mutable
Expand Down Expand Up @@ -134,6 +123,8 @@ class AsyncApi20DocumentEmitter(document: BaseUnit)(implicit val specCtx: AsyncS

fs.entry(WebApiModel.Security).map(f => result += SecurityRequirementsEmitter("security", f, ordering))

fs.entry(WebApiModel.ContentType).map(f => result += DefaultContentTypeEmitter(f, ordering))

result ++= AnnotationsEmitter(api, ordering).emitters
ordering.sorted(result)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package amf.apicontract.internal.spec.async.emitters.domain

import amf.core.client.scala.model.domain.{AmfArray, AmfScalar}
import amf.core.internal.parser.domain.FieldEntry
import amf.core.internal.render.BaseEmitters.pos
import amf.core.internal.render.SpecOrdering
import amf.core.internal.render.emitters.EntryEmitter
import org.mulesoft.common.client.lexical.Position
import org.yaml.model.{YDocument, YNode}

case class DefaultContentTypeEmitter(f: FieldEntry, ordering: SpecOrdering) extends EntryEmitter {
override def emit(b: YDocument.EntryBuilder): Unit = {
val maybeString: Option[String] = getValue
maybeString.foreach(contentType => b.entry("defaultContentType", YNode(contentType)))

}

private def getValue: Option[String] = {
f.value.value match {
case array: AmfArray =>
array.values
.headOption
.map(f => f.asInstanceOf[AmfScalar].value.toString)
case _ =>
None
}
}

override def position(): Position = pos(f.value.annotations)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
asyncapi: 2.1.0
info:
title: Test API with defaultContentType
version: 1.0.0
defaultContentType: application/json
channels: {}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ class Async20CycleTest extends FunSuiteCycleTests {

def cyclesAsyncAsync: Seq[FixtureData] = Seq(
FixtureData("Empty cycle", "empty.yaml", "empty.yaml"),
FixtureData("Default Content Type", "default-content-type.yaml", "default-content-type.yaml"),
FixtureData("Info cycle", "info.yaml", "info.yaml"),
FixtureData("Tags cycle", "tags.yaml", "tags.yaml"),
FixtureData("Documentation cycle", "documentation.yaml", "documentation.yaml"),
Expand Down

0 comments on commit 44d9066

Please sign in to comment.