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

Working tests #1

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
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
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,11 @@ Lagom Scala ScalaJS ScalaTags template for TypeSafe Activator
==================================================

Modified [play-scala-scalajs-scalatags](https://github.com/oswaldo/play-scala-scalajs-scalatags) activator template to accomodate Lagom.

# Test

All tests can be run by calling

```
sbt> test
```
60 changes: 35 additions & 25 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,18 +1,9 @@
import sbt.Project.projectToRef

lazy val clients = Seq(scalajsclient)
lazy val scalaV = "2.11.8"

lazy val playserver = (project in file("play")).settings(
scalaVersion := scalaV,
scalaJSProjects := clients,
libraryDependencies ++= Seq(
"com.lihaoyi" %% "scalatags" % "0.5.5",
"org.webjars" % "jquery" % "3.0.0"
)
).enablePlugins(PlayScala, LagomPlay).
aggregate(clients.map(projectToRef): _*).
dependsOn(sharedJvm)
val scalaTest = "org.scalatest" %% "scalatest" % "3.0.1" % "test"
val macwire = "com.softwaremill.macwire" %% "macros" % "2.2.5" % "provided"

lazy val scalajsclient = (project in file("scalajs")).settings(
scalaVersion := scalaV,
Expand All @@ -21,13 +12,33 @@ lazy val scalajsclient = (project in file("scalajs")).settings(
unmanagedSourceDirectories in Compile := Seq((scalaSource in Compile).value),
libraryDependencies ++= Seq(
"org.scala-js" %%% "scalajs-dom" % "0.9.1",
"com.lihaoyi" %%% "scalatags" % "0.5.5"
"com.lihaoyi" %%% "scalatags" % "0.5.5",
scalaTest
)
).enablePlugins(ScalaJSPlugin, ScalaJSPlay)
.dependsOn(sharedJs)
.dependsOn(sharedJs)

lazy val clients = Seq(scalajsclient)

lazy val playserver = (project in file("play")).settings(
scalaVersion := scalaV,
scalaJSProjects := clients,
libraryDependencies ++= Seq(
"com.lihaoyi" %% "scalatags" % "0.5.5",
"org.webjars" % "jquery" % "3.0.0",
specs2 % Test
)
).enablePlugins(PlayScala, LagomPlay).
aggregate(clients.map(projectToRef): _*).
dependsOn(sharedJvm)

lazy val shared = (crossProject.crossType(CrossType.Pure) in file("shared")).
settings(scalaVersion := scalaV).
settings(
scalaVersion := scalaV,
libraryDependencies ++= Seq(
scalaTest
)
).
jsConfigure(_ enablePlugins ScalaJSPlay)

lazy val sharedJvm = shared.jvm
Expand All @@ -36,16 +47,18 @@ lazy val sharedJs = shared.js
lazy val timeApi = commonSettings("time-api")
.settings(
scalaVersion := scalaV,
libraryDependencies += lagomJavadslApi
libraryDependencies += lagomScaladslApi
)

lazy val timeImpl = commonSettings("time-impl")
.enablePlugins(LagomJava)
.enablePlugins(LagomScala)
.settings(lagomForkedTestSettings: _*)
.settings(
scalaVersion := scalaV,
libraryDependencies ++= Seq(
//lagomJavadslPersistence,
lagomJavadslTestKit
macwire,
lagomScaladslTestKit,
scalaTest
)
)
.settings(lagomForkedTestSettings: _*)
Expand All @@ -54,15 +67,12 @@ lazy val timeImpl = commonSettings("time-impl")
def commonSettings(id: String) = Project(id, base = file(id))
.settings(eclipseSettings: _*)
.settings(javacOptions in compile ++= Seq("-encoding", "UTF-8", "-source", "1.8", "-target", "1.8", "-Xlint:unchecked", "-Xlint:deprecation"))
.settings(jacksonParameterNamesJavacSettings: _*) // applying it to every project even if not strictly needed.

// loads the Play project at sbt startup
onLoad in Global := (Command.process("project playserver", _: State)) compose (onLoad in Global).value
lazy val root = (project in file("."))
.aggregate(playserver, sharedJvm, sharedJs, scalajsclient, timeImpl)

//See https://github.com/FasterXML/jackson-module-parameter-names
lazy val jacksonParameterNamesJavacSettings = Seq(
javacOptions in compile += "-parameters"
)
// loads the Play project at sbt startup
onLoad in Global := (Command.process("project root", _: State)) compose (onLoad in Global).value

//Configuration of sbteclipse
//Needed for importing the project into Eclipse
Expand Down
19 changes: 9 additions & 10 deletions play/app/controllers/Application.scala
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
package controllers

import play.api._
import javax.inject.Inject

import play.api.http._
import play.api.mvc._
import scalatags._
import scalatags.Text._
import scalatags.Text.all._
import shared.SharedMessages
import javax.inject.Inject
import views.IndexView
import views.MainView
import views.{IndexView, MainView}

import scalatags._

class Application @Inject()(implicit env: play.Environment)
extends Controller {
def index = ok(IndexView(SharedMessages.itWorks))

def ok(view: Seq[Text.TypedTag[String]]) = Action {
def index: Action[AnyContent] = ok(IndexView(SharedMessages.itWorks))

private def ok(view: Seq[Text.TypedTag[String]]) = Action {
implicit val codec = Codec.utf_8
Ok(MainView(view).toString).withHeaders(CONTENT_TYPE -> ContentTypes.HTML)
Ok(MainView(view).toString).as(ContentTypes.HTML)
}

}
21 changes: 14 additions & 7 deletions play/test/ApplicationSpec.scala
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import org.junit.runner._
import org.specs2.mutable._
import org.specs2.runner._
import org.junit.runner._

import play.api.test._
import play.api.Mode
import play.api.inject.guice.GuiceApplicationBuilder
import play.api.test.Helpers._
import play.api.test._

/**
* Add your spec here.
Expand All @@ -12,19 +13,25 @@ import play.api.test.Helpers._
*/
@RunWith(classOf[JUnitRunner])
class ApplicationSpec extends Specification {
val application = new GuiceApplicationBuilder()
.in(Mode.Test)
.build

"Application" should {

"send 404 on a bad request" in new WithApplication{
route(FakeRequest(GET, "/boum")) must beNone
val result = route(application, FakeRequest(GET, "/foobar")).get

status(result) must equalTo(NOT_FOUND)
}

"render the index page" in new WithApplication{
val home = route(FakeRequest(GET, "/")).get
val home = route(application, FakeRequest(GET, "/")).get

status(home) must equalTo(OK)
contentType(home) must beSome.which(_ == "text/html")
contentAsString(home) must contain ("Your new application is ready.")
val homeType = contentType(home)
homeType must beSome.which(_ == "text/html")
contentAsString(home) must contain ("Scalatags page generated on the server side")
}
}
}
7 changes: 3 additions & 4 deletions play/test/IntegrationSpec.scala
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import org.junit.runner._
import org.specs2.mutable._
import org.specs2.runner._
import org.junit.runner._

import play.api.test._
import play.api.test.Helpers._

/**
* add your integration spec here.
Expand All @@ -18,7 +16,8 @@ class IntegrationSpec extends Specification {

browser.goTo("http://localhost:" + port)

browser.pageSource must contain("Your new application is ready.")
browser.pageSource must contain("ScalaJS shouts out")
browser.pageSource must contain("It works!")
}
}
}
4 changes: 2 additions & 2 deletions project/plugins.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.1")

addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0")

addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.10")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.13")

addSbtPlugin("com.vmunier" % "sbt-play-scalajs" % "0.3.1")

addSbtPlugin("com.geirsson" % "sbt-scalafmt" % "0.2.10")

addSbtPlugin("com.lightbend.lagom" % "lagom-sbt-plugin" % "1.0.0")
addSbtPlugin("com.lightbend.lagom" % "lagom-sbt-plugin" % "1.3.1")
2 changes: 1 addition & 1 deletion scalajs/src/main/scala/Hello.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import shared.SharedMessages
import org.scalajs.dom.ext.Ajax
import scala.concurrent.ExecutionContext

object Hellp extends js.JSApp {
object Hello extends js.JSApp {

def main(): Unit = {
if (!js.isUndefined(global.window.console)) {
Expand Down
9 changes: 9 additions & 0 deletions scalajs/src/test/scala/ScalaJsTest.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import org.scalatest._

class ScalaJsTest extends FunSpec {
describe("ScalaJs") {
it("should test") {
assert(true)
}
}
}
9 changes: 9 additions & 0 deletions shared/src/test/scala/ScalaSharedTest.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import org.scalatest._

class ScalaSharedTest extends FunSpec {
describe("Share") {
it("should run tests") {
assert(/* condition = */true)
}
}
}
25 changes: 0 additions & 25 deletions time-api/src/main/java/time/api/TimeService.java

This file was deleted.

18 changes: 18 additions & 0 deletions time-api/src/main/scala/time/api/TimeService.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package time.api

import akka.NotUsed
import com.lightbend.lagom.scaladsl.api.{Descriptor, Service, ServiceCall}

trait TimeService extends Service {

def timeAt(tz: String): ServiceCall[NotUsed, String]

override def descriptor: Descriptor = {
import Service._

named("timeService").withCalls(
pathCall("/api/timeAt/:tz", timeAt _)
).withAutoAcl(true)
}
}

32 changes: 14 additions & 18 deletions time-impl/src/main/scala/time/impl/TimeServiceImpl.scala
Original file line number Diff line number Diff line change
@@ -1,26 +1,22 @@
package time.impl

import time.api.TimeService
import com.lightbend.lagom.javadsl.api.ServiceCall
import java.time.{LocalTime, ZoneId}

import akka.NotUsed
import java.util.concurrent.CompletableFuture
import java.util.concurrent.CompletionStage
import java.time.LocalTime
import java.time.ZoneId
import com.lightbend.lagom.scaladsl.api.{Descriptor, ServiceCall}
import time.api.TimeService

class TimeServiceImpl extends TimeService{
import scala.concurrent.{ExecutionContext, Future}


override def timeAt(tz: String): ServiceCall[NotUsed, String] = {
new ServiceCall[NotUsed, String] {

override def invoke(obj: NotUsed) : CompletionStage[String] = {
val c = new CompletableFuture[String]
c.complete(LocalTime.now(ZoneId.of(tz, ZoneId.SHORT_IDS)).toString)
c
class TimeServiceImpl(implicit ec: ExecutionContext) extends TimeService {

override def timeAt(tz: String): ServiceCall[NotUsed, String] = new ServiceCall[NotUsed, String] {
override def invoke(obj: NotUsed): Future[String] = {
Future {
LocalTime.now(ZoneId.of(tz, ZoneId.SHORT_IDS)).toString
}
}

}
}


override def descriptor: Descriptor = super.descriptor
}
16 changes: 16 additions & 0 deletions time-impl/src/main/scala/time/impl/TimeServiceLoader.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package time.impl

import time.api.TimeService
import com.lightbend.lagom.scaladsl.server._
import com.softwaremill.macwire._

class TimeServiceApplication(context: LagomApplicationContext) extends LagomApplication(context) {

override lazy val lagomServer = LagomServer.forServices(
bindService[TimeService].to(wire[TimeServiceImpl])
)

override def serviceLocator: com.lightbend.lagom.scaladsl.api.ServiceLocator = ???
override def wsClient: play.api.libs.ws.WSClient = ???

}
13 changes: 0 additions & 13 deletions time-impl/src/main/scala/time/impl/TimeServiceModule.scala

This file was deleted.