Skip to content

Commit

Permalink
Merge pull request #15 from dwickern/scala3
Browse files Browse the repository at this point in the history
add support for Scala 3
  • Loading branch information
dwickern committed Nov 3, 2023
2 parents 65f86a5 + 58793dd commit 4c10872
Show file tree
Hide file tree
Showing 17 changed files with 96 additions and 80 deletions.
15 changes: 8 additions & 7 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ lazy val play29 = ConfigAxis("play29", "play2.9")

lazy val scala212 = "2.12.13"
lazy val scala213 = "2.13.4"
lazy val scala3 = "3.3.1"

lazy val root = (project in file("."))
.aggregate(swagger.projectRefs: _*)
Expand All @@ -23,11 +24,7 @@ lazy val swagger = (projectMatrix in file("."))
.settings(
name := "swagger-play",
libraryDependencies ++= Seq(
"org.scala-lang.modules" %% "scala-collection-compat" % "2.1.3",
"org.specs2" %% "specs2-core" % "4.6.0" % Test,
"org.specs2" %% "specs2-mock" % "4.6.0" % Test,
"org.specs2" %% "specs2-junit" % "4.6.0" % Test,
"org.mockito" % "mockito-core" % "3.2.0" % Test,
"org.specs2" %% "specs2-core" % "4.20.2" % Test,
),
scalacOptions -= "-Xfatal-warnings",
(Test / scalacOptions) --= Seq(
Expand All @@ -50,6 +47,7 @@ lazy val swagger = (projectMatrix in file("."))
_.settings(
moduleName := name.value + "2.7",
libraryDependencies ++= Seq(
"org.scala-lang.modules" %% "scala-collection-compat" % "2.1.3",
"com.typesafe.play" %% "play" % "2.7.3",
"com.typesafe.play" %% "routes-compiler" % "2.7.3",
"com.typesafe.play" %% "play-test" % "2.7.3" % Test,
Expand All @@ -67,6 +65,7 @@ lazy val swagger = (projectMatrix in file("."))
_.settings(
moduleName := name.value + "2.8",
libraryDependencies ++= Seq(
"org.scala-lang.modules" %% "scala-collection-compat" % "2.1.3",
"com.typesafe.play" %% "play" % "2.8.0",
"com.typesafe.play" %% "routes-compiler" % "2.8.0",
"com.typesafe.play" %% "play-test" % "2.8.0" % Test,
Expand All @@ -79,7 +78,7 @@ lazy val swagger = (projectMatrix in file("."))
)
)
.customRow(
scalaVersions = Seq(scala213),
scalaVersions = Seq(scala3, scala213),
axisValues = Seq(play29, VirtualAxis.jvm),
_.settings(
moduleName := name.value + "2.9",
Expand All @@ -89,7 +88,9 @@ lazy val swagger = (projectMatrix in file("."))
"com.typesafe.play" %% "play-test" % "2.9.0" % Test,
"com.typesafe.play" %% "play-specs2" % "2.9.0" % Test,
"io.swagger" % "swagger-core" % "1.6.11",
"io.swagger" %% "swagger-scala-module" % "1.0.6",
("io.swagger" %% "swagger-scala-module" % "1.0.6")
.cross(CrossVersion.for3Use2_13)
.exclude("com.fasterxml.jackson.module", "jackson-module-scala_2.13"),
"javax.xml.bind" % "jaxb-api" % "2.3.1",
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.14.2",
"com.typesafe.play" %% "play-ebean" % "7.0.0-RC2" % Test,
Expand Down
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=1.4.7
sbt.version=1.9.7
4 changes: 2 additions & 2 deletions src/main/scala/controllers/ApiHelpController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@ import scala.jdk.CollectionConverters._
class ApiHelpController @Inject() (components: ControllerComponents, val swaggerPlugin: SwaggerPlugin)
extends AbstractController(components) with SwaggerBaseApiController {

def getResources = Action { implicit request =>
def getResources: Action[AnyContent] = Action { implicit request =>
val host: String = swaggerPlugin.config.host
val resourceListing: Swagger = getResourceListing(host)
respond(resourceListing)
}

def getResource(path: String) = Action { implicit request =>
def getResource(path: String): Action[AnyContent] = Action { implicit request =>
val host: String = swaggerPlugin.config.host
val apiListing: Swagger = getApiListing(path, host)
respond(apiListing)
Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/play/modules/swagger/SwaggerPlugin.scala
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class SwaggerPluginImpl @Inject()(environment: Environment, configuration: Confi
lazy val swaggerSpecFilter: Option[SwaggerSpecFilter] = config.filterClass match {
case Some(e) if e.nonEmpty =>
try {
val filter = environment.classLoader.loadClass(e).newInstance.asInstanceOf[SwaggerSpecFilter]
val filter = environment.classLoader.loadClass(e).getDeclaredConstructor().newInstance().asInstanceOf[SwaggerSpecFilter]
logger.debug("Setting swagger.filter to %s".format(e))
Some(filter)
} catch {
Expand Down
10 changes: 10 additions & 0 deletions src/test/scala-2/Compat.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import play.api.Application
import play.api.test.WithApplication

object Compat {
def newApplication(body: Application => Unit): WithApplication = {
new WithApplication {
body(app)
}
}
}
10 changes: 10 additions & 0 deletions src/test/scala-3/Compat.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import play.api.Application
import play.api.test.WithApplication

object Compat {
def newApplication(body: Application => Unit): WithApplication = {
new WithApplication {
override def running(): Unit = body(app)
}
}
}
3 changes: 1 addition & 2 deletions src/test/scala/EBeanModelTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ import testdata._
import io.swagger.converter._

import org.specs2.mutable._
import org.specs2.mock.Mockito

class EBeanModelTest extends Specification with Mockito {
class EBeanModelTest extends Specification {
"ModelConverters" should {
"not parse an EBean" in {
val models = ModelConverters.getInstance().readAll(classOf[Person])
Expand Down
5 changes: 3 additions & 2 deletions src/test/scala/PlayApiHelpControllerSpec.scala
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import Compat.newApplication
import controllers.ApiHelpController
import org.specs2.concurrent.ExecutionEnv
import org.specs2.mutable._
import play.api.libs.json.JsString
import play.api.test.Helpers._
import play.api.test.{FakeRequest, Helpers, WithApplication}
import play.api.test.{FakeRequest, Helpers}
import play.modules.swagger._

class PlayApiHelpControllerSpec(implicit ee: ExecutionEnv) extends Specification {

"ApiHelpController" should {
"return the swagger specification" in new WithApplication {
"return the swagger specification" in newApplication { app =>
val swaggerPlugin = new SwaggerPluginImpl(app.environment, app.configuration)
val controller = new ApiHelpController(Helpers.stubControllerComponents(), swaggerPlugin)
val result = controller.getResources(FakeRequest("GET", "/swagger.json"))
Expand Down
5 changes: 2 additions & 3 deletions src/test/scala/PlayApiListingCacheSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import io.swagger.models.parameters.{BodyParameter, PathParameter, QueryParamete
import io.swagger.models.properties.{ArrayProperty, RefProperty}
import play.modules.swagger._
import org.specs2.mutable._
import org.specs2.mock.Mockito
import play.api.Logger
import play.api.Environment
import io.swagger.util.Json
Expand All @@ -16,7 +15,7 @@ import play.routes.compiler.Route
import scala.jdk.CollectionConverters._
import play.routes.compiler.{Route => PlayRoute}

class PlayApiListingCacheSpec extends Specification with Mockito with BeforeAfterAll {
class PlayApiListingCacheSpec extends Specification with BeforeAfterAll {

// set up mock for Play Router
val routesList = {
Expand All @@ -36,7 +35,7 @@ PUT /api/dog/api/:id testdata.DogController.add0(id:String)
}
}

val routesRules: Map[String, Route] = Map(routesList.map { route: Route =>
val routesRules: Map[String, Route] = Map(routesList.map { (route: Route) =>
(route.call.packageName.toSeq ++ Seq(route.call.controller + "$", route.call.method)).mkString(".") -> route
}: _*)

Expand Down
3 changes: 1 addition & 2 deletions src/test/scala/PlayApiScannerSpec.scala
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import java.io.File

import org.specs2.mock.Mockito
import org.specs2.mutable._
import play.api.Environment
import play.modules.swagger._
import play.routes.compiler.{Route => PlayRoute}

import scala.jdk.CollectionConverters._

class PlayApiScannerSpec extends Specification with Mockito {
class PlayApiScannerSpec extends Specification {

// set up mock for Play Router
val routesList = {
Expand Down
5 changes: 2 additions & 3 deletions src/test/scala/PlayDelegatedApiScannerSpec.scala
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import io.swagger.config.ScannerFactory
import org.specs2.mock.Mockito
import org.specs2.mutable._
import org.specs2.specification.BeforeAfterAll
import play.api.Environment
Expand All @@ -8,12 +7,12 @@ import play.routes.compiler.Route

import scala.jdk.CollectionConverters._

class PlayDelegatedApiScannerSpec extends Specification with Mockito with BeforeAfterAll {
class PlayDelegatedApiScannerSpec extends Specification with BeforeAfterAll {

val routes: List[Route] =
SwaggerPluginHelper.parseRoutes("delegation", "/api", Environment.simple())

val routesRules: Map[String, Route] = Map(routes.map { route: Route =>
val routesRules: Map[String, Route] = Map(routes.map { (route: Route) =>
(route.call.packageName.toSeq ++ Seq(route.call.controller + "$", route.call.method)).mkString(".") -> route
}: _*)

Expand Down
15 changes: 7 additions & 8 deletions src/test/scala/testdata/CatController.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package testdata

import io.swagger.annotations._
import play.api.mvc.BaseController
import play.api.mvc.ControllerComponents
import play.api.mvc.{Action, AnyContent, BaseController, ControllerComponents}

@Api(value = "/apitest/cats", description = "play with cats")
@SwaggerDefinition(securityDefinition = new SecurityDefinition(oAuth2Definitions = Array(new OAuth2Definition(key = "oauth2",
Expand All @@ -16,7 +15,7 @@ class CatController(override val controllerComponents: ControllerComponents) ext
authorizations = Array(new Authorization(value="oauth2", scopes = Array(new AuthorizationScope(scope = "write_pets", description = "Modify pets")))))
@ApiImplicitParams(Array(
new ApiImplicitParam(name = "cat", value = "Cat object to add", required = true, dataType = "testdata.Cat", paramType = "body")))
def add1 = Action {
def add1: Action[AnyContent] = Action {
request => Ok("test case")
}

Expand All @@ -28,7 +27,7 @@ class CatController(override val controllerComponents: ControllerComponents) ext
new ApiResponse(code = 405, message = "Invalid input")))
@ApiImplicitParams(Array(
new ApiImplicitParam(name = "cat", value = "Cat object to update", required = true, dataType = "testdata.Cat", paramType = "body")))
def update = Action {
def update: Action[AnyContent] = Action {
request => Ok("test case")
}

Expand All @@ -40,7 +39,7 @@ class CatController(override val controllerComponents: ControllerComponents) ext
@ApiResponses(Array(
new ApiResponse(code = 405, message = "Invalid input"),
new ApiResponse(code = 404, message = "Cat not found")))
def get1(@ApiParam(value = "ID of cat to fetch", required = true) id: Long) = Action {
def get1(@ApiParam(value = "ID of cat to fetch", required = true) id: Long): Action[AnyContent] = Action {
request => Ok("test case")
}

Expand All @@ -51,11 +50,11 @@ class CatController(override val controllerComponents: ControllerComponents) ext
responseContainer = "List",
httpMethod = "GET")
@Deprecated
def list = Action {
def list: Action[AnyContent] = Action {
request => Ok("test case")
}

def no_route = Action {
def no_route: Action[AnyContent] = Action {
request => Ok("test case")
}

Expand All @@ -67,7 +66,7 @@ class CatController(override val controllerComponents: ControllerComponents) ext
httpMethod = "GET")
@ApiImplicitParams(Array(
new ApiImplicitParam(name = "test_issue_43_implicit_param", dataType = "Option[Int]", value = "test issue #43 implicit param", paramType = "query")))
def testIssue43(test_issue_43_param: Option[Int]) = Action {
def testIssue43(test_issue_43_param: Option[Int]): Action[AnyContent] = Action {
request => Ok("test issue #43")
}
}
Expand Down
13 changes: 6 additions & 7 deletions src/test/scala/testdata/DelegatedController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ package testdata

import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
import play.api.mvc.ActionBuilder
import play.api.mvc.ControllerHelpers
import play.api.mvc.{Action, ActionBuilder, AnyContent, ControllerHelpers}

@Api
class DelegatedController extends ControllerHelpers {
Expand All @@ -12,13 +11,13 @@ class DelegatedController extends ControllerHelpers {
private val Action = new ActionBuilder.IgnoringBody()

@ApiOperation(value = "list")
def list = Action { _ => Ok("test case")}
def list: Action[AnyContent] = Action { _ => Ok("test case")}
@ApiOperation(value = "list2")
def list2 = Action { _ => Ok("test case")}
def list2: Action[AnyContent] = Action { _ => Ok("test case")}
@ApiOperation(value = "list3")
def list3 = Action { _ => Ok("test case")}
def list3: Action[AnyContent] = Action { _ => Ok("test case")}
@ApiOperation(value = "list4")
def list4 = Action { _ => Ok("test case")}
def list4: Action[AnyContent] = Action { _ => Ok("test case")}
@ApiOperation(value = "list5")
def list5 = Action { _ => Ok("test case")}
def list5: Action[AnyContent] = Action { _ => Ok("test case")}
}

0 comments on commit 4c10872

Please sign in to comment.