Skip to content
Open
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
10 changes: 5 additions & 5 deletions .drone.jsonnet
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ local SbtCleanTest(ver) = BuildStep(ver) + {
local Coverage(name, ver) = BuildStep(ver) + {
name: name,
commands: [
"sbt clean coverage test",
"sbt coverageAggregate",
"wget -O .codecov https://codecov.io/bash",
"chmod +x .codecov",
"./.codecov -X gcov -X coveragepy -X xcode -X gcovout"
"sbt clean coverage test",
"sbt coverageAggregate",
"curl -Os https://uploader.codecov.io/latest/alpine/codecov",
"chmod +x codecov",
"./codecov -t ${CODECOV_TOKEN}",
]
};

Expand Down
6 changes: 3 additions & 3 deletions .drone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -153,9 +153,9 @@
"commands": [
"sbt clean coverage test",
"sbt coverageAggregate",
"wget -O .codecov https://codecov.io/bash",
"chmod +x .codecov",
"./.codecov -X gcov -X coveragepy -X xcode -X gcovout"
"curl -Os https://uploader.codecov.io/latest/alpine/codecov",
"chmod +x codecov",
"./codecov -t ${CODECOV_TOKEN}"
],
"environment": {
"CODECOV_TOKEN": {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.github.andyglow.jsonschema

case class NoneForDefaultModelsCase4Inner(value: Option[String] = None)

case class NoneForDefaultModelsCase4(value: Option[NoneForDefaultModelsCase4Inner] = None)
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ object case2 {
case class Foo(value: Option[String] = None)
}

object case3 {
import case2._
case class Bar(value: Option[Foo] = None)
}

class NoneForDefaultValueSpec extends AnyFunSuite {
import NoneForDefaultValueCases._

Expand All @@ -31,5 +36,13 @@ class NoneForDefaultValueSpec extends AnyFunSuite {

// type is specified in same file, companion object
Json.schema[case1.Foo] shouldBe `object`(Field("value", `string`, required = false))

// type hierarchy
// same source file
Json.schema[case3.Bar] shouldBe `object`(Field("value", `object`(Field("value", `string`, required = false)), required = false))
// external source file
Json.schema[NoneForDefaultModelsCase4] shouldBe `object`(Field("value", `object`(Field("value", `string`, required = false)), required = false))
// external module
Json.schema[ExternalNoneForDefaultModelsCase5] shouldBe `object`(Field("value", `object`(Field("value", `string`, required = false)), required = false))
}
}
10 changes: 9 additions & 1 deletion build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,16 @@ lazy val macros = { project in file("macros") }
)
)

lazy val testModels = { project in file("test-models") }.settings(
commonSettings,
name := "scala-jsonschema-test-models",
crossScalaVersions := Nil,
publish / skip := true,
publishArtifact := false,
update / aggregate := false)

lazy val api = { project in file("api") }
.dependsOn(core, macros)
.dependsOn(core, macros, testModels % "test->compile")
.settings(
commonSettings,
name := "scala-jsonschema"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package com.github.andyglow.jsonschema

import json._
import org.scalatest.matchers.should.Matchers._
import org.scalatest.funsuite.AnyFunSuite
import com.github.andyglow.jsonschema.{model => case0}

object NoneForDefaultCirceCases {

object case1 {
case class Foo(value: Option[String] = None)
}

object case3 {

case class Bar(name: String, innerLevel2: Option[String] = None)

case class Foo(name: String, inner: Option[Bar] = None)
}
}

object case2 {

case class Foo(value: Option[String] = None)
}

class NoneForDefaultCirceSpec extends AnyFunSuite {
import AsCirceSpec.jsValEq
import NoneForDefaultCirceCases._
import json.schema.Version.Draft04
import io.circe.{ Json => Circe }
import io.circe.generic.auto._
import AsCirce._

test("scala.None for default value") {

// type id specified in external file
Json.schema[case0.Foo].asCirce(Draft04()) shouldEqual Circe.obj(
"""$schema""" -> Circe.fromString("http://json-schema.org/draft-04/schema#"),
"properties" -> Circe.obj(
"value" -> Circe.obj(
"type" -> Circe.fromString("string")
)
),
"type" -> Circe.fromString("object"),
"additionalProperties" -> Circe.fromBoolean(false)
)

// type is specified in same file
Json.schema[case2.Foo].asCirce(Draft04()) shouldEqual Circe.obj(
"""$schema""" -> Circe.fromString("http://json-schema.org/draft-04/schema#"),
"properties" -> Circe.obj(
"value" -> Circe.obj(
"type" -> Circe.fromString("string")
)
),
"type" -> Circe.fromString("object"),
"additionalProperties" -> Circe.fromBoolean(false)
)

// type is specified in same file, companion object
Json.schema[case1.Foo].asCirce(Draft04()) shouldEqual Circe.obj(
"""$schema""" -> Circe.fromString("http://json-schema.org/draft-04/schema#"),
"properties" -> Circe.obj(
"value" -> Circe.obj(
"type" -> Circe.fromString("string")
)
),
"type" -> Circe.fromString("object"),
"additionalProperties" -> Circe.fromBoolean(false)
)

// type is specified in same file, companion object
Json.schema[case3.Foo].asCirce(Draft04()) shouldEqual Circe.obj(
"""$schema""" -> Circe.fromString("http://json-schema.org/draft-04/schema#"),
"type" -> Circe.fromString("object"),
"additionalProperties" -> Circe.fromBoolean(false),
"required" -> Circe.arr(Circe.fromString("name")),
"properties" -> Circe.obj(
"name" -> Circe.obj(
"type" -> Circe.fromString("string")
),
"inner" -> Circe.obj(
"type" -> Circe.fromString("object"),
"additionalProperties" -> Circe.fromBoolean(false),
"required" -> Circe.arr(Circe.fromString("name")),
"properties" -> Circe.obj(
"name" -> Circe.obj(
"type" -> Circe.fromString("string")
),
"innerLevel2" -> Circe.obj(
"type" -> Circe.fromString("string")
)
)
)
)
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.github.andyglow.jsonschema


case class ExternalNoneForDefaultModelsCase5Inner(value: Option[String] = None)

case class ExternalNoneForDefaultModelsCase5(value: Option[ExternalNoneForDefaultModelsCase5Inner] = None)
2 changes: 1 addition & 1 deletion version.sbt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ThisBuild / version := "0.7.9-SNAPSHOT"
ThisBuild / version := "0.7.8"