diff options
Diffstat (limited to 'example/todoApi')
-rw-r--r-- | example/todoApi/app/src/TodoMvcApi.scala | 38 | ||||
-rw-r--r-- | example/todoApi/app/test/src/ExampleTests.scala | 47 | ||||
-rw-r--r-- | example/todoApi/build.sc | 18 |
3 files changed, 103 insertions, 0 deletions
diff --git a/example/todoApi/app/src/TodoMvcApi.scala b/example/todoApi/app/src/TodoMvcApi.scala new file mode 100644 index 0000000..3559f28 --- /dev/null +++ b/example/todoApi/app/src/TodoMvcApi.scala @@ -0,0 +1,38 @@ +package app +object TodoMvcApi extends cask.MainRoutes{ + case class Todo(checked: Boolean, text: String) + object Todo{ + implicit def todoRW = upickle.default.macroRW[Todo] + } + var todos = Seq( + Todo(true, "Get started with Cask"), + Todo(false, "Profit!") + ) + + @cask.get("/list/:state") + def list(state: String) = { + val filteredTodos = state match{ + case "all" => todos + case "active" => todos.filter(!_.checked) + case "completed" => todos.filter(_.checked) + } + upickle.default.write(filteredTodos) + } + + @cask.post("/add") + def add(request: cask.Request) = { + todos = Seq(Todo(false, new String(request.data.readAllBytes()))) ++ todos + } + + @cask.post("/toggle/:index") + def toggle(index: Int) = { + todos = todos.updated(index, todos(index).copy(checked = !todos(index).checked)) + } + + @cask.post("/delete/:index") + def delete(index: Int) = { + todos = todos.patch(index, Nil, 1) + } + + initialize() +} diff --git a/example/todoApi/app/test/src/ExampleTests.scala b/example/todoApi/app/test/src/ExampleTests.scala new file mode 100644 index 0000000..5e9e11a --- /dev/null +++ b/example/todoApi/app/test/src/ExampleTests.scala @@ -0,0 +1,47 @@ +package app +import io.undertow.Undertow + +import utest._ + +object ExampleTests extends TestSuite{ + def test[T](example: cask.main.BaseMain)(f: String => T): T = { + val server = Undertow.builder + .addHttpListener(8080, "localhost") + .setHandler(example.defaultHandler) + .build + server.start() + val res = + try f("http://localhost:8080") + finally server.stop() + res + } + + val tests = Tests{ + 'TodoMvcApi - test(TodoMvcApi){ host => + requests.get(s"$host/list/all").text() ==> + """[{"checked":true,"text":"Get started with Cask"},{"checked":false,"text":"Profit!"}]""" + requests.get(s"$host/list/active").text() ==> + """[{"checked":false,"text":"Profit!"}]""" + requests.get(s"$host/list/completed").text() ==> + """[{"checked":true,"text":"Get started with Cask"}]""" + + requests.post(s"$host/toggle/1") + + requests.get(s"$host/list/all").text() ==> + """[{"checked":true,"text":"Get started with Cask"},{"checked":true,"text":"Profit!"}]""" + + requests.get(s"$host/list/active").text() ==> + """[]""" + + requests.post(s"$host/add", data = "new Task") + + requests.get(s"$host/list/active").text() ==> + """[{"checked":false,"text":"new Task"}]""" + + requests.post(s"$host/delete/0") + + requests.get(s"$host/list/active").text() ==> + """[]""" + } + } +} diff --git a/example/todoApi/build.sc b/example/todoApi/build.sc new file mode 100644 index 0000000..6b3ab3f --- /dev/null +++ b/example/todoApi/build.sc @@ -0,0 +1,18 @@ +import mill._, scalalib._ + + +trait AppModule extends ScalaModule{ + def scalaVersion = "2.12.6" + def ivyDeps = Agg( + ivy"com.lihaoyi::cask:0.0.1", + ) + + object test extends Tests{ + def testFrameworks = Seq("utest.runner.Framework") + def forkArgs = Seq("--illegal-access=deny") + def ivyDeps = Agg( + ivy"com.lihaoyi::utest::0.6.3", + ivy"com.lihaoyi::requests::0.1.2", + ) + } +}
\ No newline at end of file |