package examples.rest; import com.vtence.molecule.WebServer; import com.vtence.molecule.testing.http.UrlEncodedForm; import com.vtence.molecule.testing.http.HttpRequest; import com.vtence.molecule.testing.http.HttpResponse; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import static com.vtence.molecule.testing.http.HttpResponseAssert.assertThat; public class RESTTest { RESTExample rest = new RESTExample(); WebServer server = WebServer.create(9999); HttpRequest request = new HttpRequest(9999); HttpResponse response; @Before public void startServer() throws IOException { rest.run(server); } @After public void stopServer() throws IOException { server.stop(); } @Test public void managingAlbumResources() throws IOException { response = request.but().content(new UrlEncodedForm().addField("title", "My Favorite Things") .addField("artist", "John Coltrane")) .post("/albums"); assertThat(response).hasStatusCode(201); response = request.but().get("/albums/1"); assertThat(response).isOK() .hasBodyText("Title: My Favorite Things, Artist: John Coltrane"); response = request.but().content(new UrlEncodedForm().addField("title", "Blue Train") .addField("artist", "John Coltrane")) .post("/albums"); assertThat(response).hasStatusCode(201); response = request.but().get("/albums"); assertThat(response).isOK() .hasBodyText("1: Title: My Favorite Things, Artist: John Coltrane\n" + "2: Title: Blue Train, Artist: John Coltrane\n"); response = request.but().content(new UrlEncodedForm().addField("title", "Kind of Blue") .addField("artist", "Miles Davis")) .put("/albums/2"); assertThat(response).isOK() .hasBodyText("Title: Kind of Blue, Artist: Miles Davis"); response = request.but().delete("/albums/1"); assertThat(response).isOK(); response = request.but().get("/albums"); assertThat(response).isOK() .hasBodyText("2: Title: Kind of Blue, Artist: Miles Davis\n"); } @Test public void makingAPostActLikeAnUpdateOrDelete() throws IOException { response = request.but() .content(new UrlEncodedForm().addField("title", "My Favorite Things") .addField("artist", "John Coltrane")) .post("/albums"); assertThat(response).hasStatusCode(201); response = request.but() .content(new UrlEncodedForm().addField("_method", "PUT") .addField("title", "Kind of Blue") .addField("artist", "Miles Davis")) .post("/albums/1"); assertThat(response).isOK(); response = request.but().get("/albums/1"); assertThat(response).isOK() .hasBodyText("Title: Kind of Blue, Artist: Miles Davis"); response = request.but().content(new UrlEncodedForm().addField("_method", "DELETE")) .post("/albums/1"); assertThat(response).isOK(); response = request.but().get("/albums"); assertThat(response).isOK() .hasBodyText("Your music library is empty"); } @Test public void askingForAMissingAlbum() throws IOException { response = request.get("/albums/9999"); assertThat(response).hasStatusCode(404); } }