summaryrefslogtreecommitdiff
path: root/contrib/playlib/test/src/mill/playlib/RouterModuleTests.scala
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/playlib/test/src/mill/playlib/RouterModuleTests.scala')
-rw-r--r--contrib/playlib/test/src/mill/playlib/RouterModuleTests.scala112
1 files changed, 112 insertions, 0 deletions
diff --git a/contrib/playlib/test/src/mill/playlib/RouterModuleTests.scala b/contrib/playlib/test/src/mill/playlib/RouterModuleTests.scala
new file mode 100644
index 00000000..1aeed019
--- /dev/null
+++ b/contrib/playlib/test/src/mill/playlib/RouterModuleTests.scala
@@ -0,0 +1,112 @@
+package mill.playlib
+
+import ammonite.ops.{Path, cp, ls, mkdir, pwd, rm, _}
+import mill.T
+import mill.api.Result.Failure
+import mill.util.{TestEvaluator, TestUtil}
+import utest.framework.TestPath
+import utest.{TestSuite, Tests, assert, _}
+
+object RouterModuleTests extends TestSuite {
+
+ trait HelloBase extends TestUtil.BaseModule {
+ override def millSourcePath: Path = TestUtil.getSrcPathBase() / millOuterCtx.enclosing.split('.')
+ }
+
+ trait HelloWorldModule extends mill.playlib.RouterModule {
+ def playVersion = "2.6.15"
+ }
+
+ object HelloWorld extends HelloBase {
+
+ object core extends HelloWorldModule {
+ override def playVersion = "2.6.14"
+
+ /**
+ * What version of Scala to use
+ */
+ override def scalaVersion: T[String] = "2.12.8"
+ }
+
+ }
+
+ val resourcePath: Path = pwd / 'contrib / 'playlib / 'test / 'resources / "hello-world"
+ val invalidResourcePath: Path = pwd / 'contrib / 'playlib / 'test / 'resources / "invalid"
+ val invalidSubResourcePath: Path = pwd / 'contrib / 'playlib / 'test / 'resources / "invalidsub"
+
+ def workspaceTest[T, M <: TestUtil.BaseModule](m: M, resourcePath: Path = resourcePath)
+ (t: TestEvaluator => T)
+ (implicit tp: TestPath): T = {
+ val eval = new TestEvaluator(m)
+ rm(m.millSourcePath)
+ rm(eval.outPath)
+ mkdir(m.millSourcePath / up)
+ cp(resourcePath, m.millSourcePath)
+ t(eval)
+ }
+
+ def tests: Tests = Tests {
+ 'playVersion - {
+
+ 'fromBuild - workspaceTest(HelloWorld) { eval =>
+ val Right((result, evalCount)) = eval.apply(HelloWorld.core.playVersion)
+
+ assert(
+ result == "2.6.14",
+ evalCount > 0
+ )
+ }
+ }
+ 'compileRouter - workspaceTest(HelloWorld) { eval =>
+ val eitherResult = eval.apply(HelloWorld.core.compileRouter)
+ val Right((result, evalCount)) = eitherResult
+ val outputFiles = ls.rec(result.classes.path).filter(_.isFile)
+ val expectedClassfiles = Seq[RelPath](
+ RelPath("controllers/ReverseRoutes.scala"),
+ RelPath("controllers/routes.java"),
+ RelPath("router/Routes.scala"),
+ RelPath("router/RoutesPrefix.scala"),
+ RelPath("sub/Routes.scala"),
+ RelPath("sub/RoutesPrefix.scala"),
+ RelPath("controllers/javascript/JavaScriptReverseRoutes.scala")
+ ).map(
+ eval.outPath / 'core / 'compileRouter / 'dest / _
+ )
+ assert(
+ result.classes.path == eval.outPath / 'core / 'compileRouter / 'dest,
+ outputFiles.nonEmpty,
+ outputFiles.forall(expectedClassfiles.contains),
+ outputFiles.size == 7,
+ evalCount > 0
+ )
+
+ // don't recompile if nothing changed
+ val Right((_, unchangedEvalCount)) = eval.apply(HelloWorld.core.compileRouter)
+
+ assert(unchangedEvalCount == 0)
+ }
+ "compileRouter invalid routes"- workspaceTest(HelloWorld, resourcePath = invalidResourcePath) {
+ eval =>
+ val eitherResult = eval.apply(HelloWorld.core.compileRouter)
+ val Left(Failure(message, x)) = eitherResult
+ val expectedMessage = "Unable to compile play routes\ncompilation error in " +
+ HelloWorld.core.millSourcePath.toIO.getAbsolutePath + "/routes/routes at line 4, " +
+ "column" +
+ " 1: HTTP Verb (GET, POST, ...), include (->), comment (#), or modifier line (+) expected"
+ assert(
+ message == expectedMessage
+ )
+ }
+ "compileRouter invalid sub.routes " - workspaceTest(HelloWorld, resourcePath = invalidSubResourcePath) {
+ eval =>
+ val eitherResult = eval.apply(HelloWorld.core.compileRouter)
+ val Left(Failure(message, x)) = eitherResult
+ val expectedMessage = "Unable to compile play routes\ncompilation error in " +
+ HelloWorld.core.millSourcePath.toIO.getAbsolutePath + "/routes/sub.routes at line 3, column" +
+ " 1: HTTP Verb (GET, POST, ...), include (->), comment (#), or modifier line (+) expected"
+ assert(
+ message == expectedMessage
+ )
+ }
+ }
+}