java-tutorials/play-framework/student-api/test/ApplicationLiveTest.java

173 lines
5.9 KiB
Java

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test;
import model.Student;
import play.test.*;
import static play.test.Helpers.*;
public class ApplicationLiveTest{
private static final String BASE_URL = "http://localhost:9000";
@Test
public void testInServer() throws Exception {
TestServer server = testServer(3333);
running(server, () -> {
try {
WSClient ws = play.libs.ws.WS.newClient(3333);
CompletionStage<WSResponse> completionStage = ws.url("/").get();
WSResponse response = completionStage.toCompletableFuture().get();
ws.close();
assertEquals(OK, response.getStatus());
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
});
}
@Test
public void whenCreatesRecord_thenCorrect() {
Student student = new Student("jody", "west", 50);
JSONObject obj = new JSONObject(makeRequest(BASE_URL, "POST", new JSONObject(student)));
assertTrue(obj.getBoolean("isSuccessfull"));
JSONObject body = obj.getJSONObject("body");
assertEquals(student.getAge(), body.getInt("age"));
assertEquals(student.getFirstName(), body.getString("firstName"));
assertEquals(student.getLastName(), body.getString("lastName"));
}
@Test
public void whenDeletesCreatedRecord_thenCorrect() {
Student student = new Student("Usain", "Bolt", 25);
JSONObject ob1 = new JSONObject(makeRequest(BASE_URL, "POST", new JSONObject(student))).getJSONObject("body");
int id = ob1.getInt("id");
JSONObject obj1 = new JSONObject(makeRequest(BASE_URL + "/" + id, "POST", new JSONObject()));
assertTrue(obj1.getBoolean("isSuccessfull"));
makeRequest(BASE_URL + "/" + id, "DELETE", null);
JSONObject obj2 = new JSONObject(makeRequest(BASE_URL + "/" + id, "POST", new JSONObject()));
assertFalse(obj2.getBoolean("isSuccessfull"));
}
@Test
public void whenUpdatesCreatedRecord_thenCorrect() {
Student student = new Student("john", "doe", 50);
JSONObject body1 = new JSONObject(makeRequest(BASE_URL, "POST", new JSONObject(student))).getJSONObject("body");
assertEquals(student.getAge(), body1.getInt("age"));
int newAge = 60;
body1.put("age", newAge);
JSONObject body2 = new JSONObject(makeRequest(BASE_URL, "PUT", body1)).getJSONObject("body");
assertFalse(student.getAge() == body2.getInt("age"));
assertTrue(newAge == body2.getInt("age"));
}
@Test
public void whenGetsAllRecords_thenCorrect() {
Student student1 = new Student("jane", "daisy", 50);
Student student2 = new Student("john", "daniel", 60);
Student student3 = new Student("don", "mason", 55);
Student student4 = new Student("scarlet", "ohara", 90);
makeRequest(BASE_URL, "POST", new JSONObject(student1));
makeRequest(BASE_URL, "POST", new JSONObject(student2));
makeRequest(BASE_URL, "POST", new JSONObject(student3));
makeRequest(BASE_URL, "POST", new JSONObject(student4));
JSONObject objects = new JSONObject(makeRequest(BASE_URL, "GET", null));
assertTrue(objects.getBoolean("isSuccessfull"));
JSONArray array = objects.getJSONArray("body");
assertTrue(array.length() >= 4);
}
public static String makeRequest(String myUrl, String httpMethod, JSONObject parameters) {
URL url = null;
try {
url = new URL(myUrl);
} catch (MalformedURLException e) {
e.printStackTrace();
}
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
e.printStackTrace();
}
conn.setDoInput(true);
conn.setReadTimeout(10000);
conn.setRequestProperty("Content-Type", "application/json");
DataOutputStream dos = null;
int respCode = 0;
String inputString = null;
try {
conn.setRequestMethod(httpMethod);
if (Arrays.asList("POST", "PUT").contains(httpMethod)) {
String params = parameters.toString();
conn.setDoOutput(true);
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(params);
dos.flush();
dos.close();
}
respCode = conn.getResponseCode();
if (respCode != 200 && respCode != 201) {
String error = inputStreamToString(conn.getErrorStream());
return error;
}
inputString = inputStreamToString(conn.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
return inputString;
}
public static String inputStreamToString(InputStream is) {
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
String line;
try {
br = new BufferedReader(new InputStreamReader(is));
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}
}