From 8f341189f25ce5d3511fd1a5a0a2b1656b685148 Mon Sep 17 00:00:00 2001 From: David Gageot Date: Sat, 29 Nov 2014 16:33:17 +0100 Subject: [PATCH] Fix test --- app/index.html | 4 +- src/main/java/gageot/net/Messages.java | 46 +++++++++++++++++++ .../java/gageot/net/MessagesResource.java | 27 ++++------- src/test/java/gageot/net/MainWebTest.java | 46 ++++++++++++++++++- 4 files changed, 100 insertions(+), 23 deletions(-) create mode 100644 src/main/java/gageot/net/Messages.java diff --git a/app/index.html b/app/index.html index eca1596..83ff689 100644 --- a/app/index.html +++ b/app/index.html @@ -9,7 +9,7 @@

Messages stored on Google Data Store:

-
diff --git a/src/main/java/gageot/net/Messages.java b/src/main/java/gageot/net/Messages.java new file mode 100644 index 0000000..a57a46a --- /dev/null +++ b/src/main/java/gageot/net/Messages.java @@ -0,0 +1,46 @@ +/** + * Copyright (C) 2014 david@gageot.net + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ +package gageot.net; + +import com.google.appengine.api.datastore.Entity; +import com.google.appengine.api.datastore.Query; + +import java.util.Date; +import java.util.List; + +import static com.google.appengine.api.datastore.DatastoreServiceFactory.getDatastoreService; +import static com.google.appengine.api.datastore.FetchOptions.Builder.withLimit; +import static com.google.appengine.api.datastore.KeyFactory.createKey; +import static com.google.appengine.api.datastore.Query.SortDirection.DESCENDING; +import static net.codestory.Fluent.of; + +public class Messages { + public List list() { + Query query = new Query("Message", createKey("Messages", "list")).addSort("date", DESCENDING); + + List messages = getDatastoreService().prepare(query).asList(withLimit(100)); + + return of(messages).map(message -> (String) message.getProperty("message")).toList(); + } + + public void create(String message) { + Entity entity = new Entity("Message", createKey("Messages", "list")); + entity.setProperty("message", message); + entity.setProperty("date", new Date()); + + getDatastoreService().put(entity); + } +} diff --git a/src/main/java/gageot/net/MessagesResource.java b/src/main/java/gageot/net/MessagesResource.java index 8f7ecfb..c61f760 100644 --- a/src/main/java/gageot/net/MessagesResource.java +++ b/src/main/java/gageot/net/MessagesResource.java @@ -15,36 +15,25 @@ */ package gageot.net; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Query; import net.codestory.http.annotations.Get; import net.codestory.http.annotations.Post; -import java.util.Date; import java.util.List; -import static com.google.appengine.api.datastore.DatastoreServiceFactory.getDatastoreService; -import static com.google.appengine.api.datastore.FetchOptions.Builder.withLimit; -import static com.google.appengine.api.datastore.KeyFactory.createKey; -import static com.google.appengine.api.datastore.Query.SortDirection.DESCENDING; -import static net.codestory.Fluent.of; - public class MessagesResource { - @Get("/message/list") - public List list() { - Query query = new Query("Message", createKey("Messages", "list")).addSort("date", DESCENDING); + private final Messages messages; - List messages = getDatastoreService().prepare(query).asList(withLimit(100)); + public MessagesResource(Messages messages) { + this.messages = messages; + } - return of(messages).map(message -> (String) message.getProperty("message")).toList(); + @Get("/message/list") + public List list() { + return messages.list(); } @Post("/message") public void create(String message) { - Entity entity = new Entity("Message", createKey("Messages", "list")); - entity.setProperty("message", message); - entity.setProperty("date", new Date()); - - getDatastoreService().put(entity); + messages.create(message); } } diff --git a/src/test/java/gageot/net/MainWebTest.java b/src/test/java/gageot/net/MainWebTest.java index 1a29a83..4d00034 100644 --- a/src/test/java/gageot/net/MainWebTest.java +++ b/src/test/java/gageot/net/MainWebTest.java @@ -16,11 +16,23 @@ package gageot.net; import net.codestory.http.WebServer; +import net.codestory.http.injection.Singletons; +import net.codestory.http.routes.Routes; import net.codestory.simplelenium.SeleniumTest; import org.junit.Test; +import java.util.ArrayList; +import java.util.List; + public class MainWebTest extends SeleniumTest { - WebServer webServer = new WebServer().configure(MainWeb.WebConfiguration.class).startOnRandomPort(); + WebServer webServer = new WebServer().configure(new MainWeb.WebConfiguration() { + @Override + public void configure(Routes routes) { + super.configure(routes); + + routes.setIocAdapter(new Singletons().register(Messages.class, messages)); // Install dependency mock + } + }).startOnRandomPort(); @Override protected String getDefaultBaseUrl() { @@ -28,9 +40,39 @@ protected String getDefaultBaseUrl() { } @Test - public void index() { + public void show_messages() { + messages.create("Message01"); + messages.create("Message02"); + goTo("/"); find("h2").should().contain("Managed VMs Sample Project"); + find("#messages").should().contain("Message01", "Message02"); } + + @Test + public void add_message() { + messages.create("FirstMessage"); + + goTo("/"); + + find("#message").fill("SecondMessage"); + find("#add").click(); + + find("#messages").should().contain("FirstMessage", "SecondMessage"); + } + + Messages messages = new Messages() { + private final List messages = new ArrayList<>(); + + @Override + public List list() { + return messages; + } + + @Override + public void create(String message) { + messages.add(message); + } + }; } \ No newline at end of file