Skip to content
Merged
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 src/main/resources/log4j2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,12 @@
<AppenderRef ref="LogToConsole"/>
</Root>
</Loggers>
<Loggers>
<Logger name="io.github.mfaisalkhatri" level="trace" additivity="false">
<AppenderRef ref="LogToConsole"/>
</Logger>
<Root level="error">
<AppenderRef ref="LogToConsole"/>
</Root>
</Loggers>
</Configuration>
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package io.github.mfaisalkhatri.api.restfulecommerce;

import java.util.HashMap;
import java.util.Map;

import com.microsoft.playwright.APIRequest;
import com.microsoft.playwright.APIRequestContext;
import com.microsoft.playwright.APIResponse;
import com.microsoft.playwright.Playwright;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;

import java.util.HashMap;
import java.util.Map;

public class BaseTest {

protected Playwright playwright;
Expand All @@ -29,32 +30,36 @@ public void tearDown() {
}

private void createPlaywright() {
playwright = Playwright.create();
this.playwright = Playwright.create ();
}

private void createAPIRequestContext() {
Map<String, String> headers = new HashMap<>();
final Map<String, String> headers = new HashMap<> ();
headers.put("Content-Type", "application/json");

request = playwright.request().newContext(new APIRequest.NewContextOptions()
this.request = this.playwright.request ()
.newContext (new APIRequest.NewContextOptions ()
.setBaseURL(BASE_URL)
.setExtraHTTPHeaders(headers));
}


private void closePlaywright() {
if (playwright != null) {
playwright.close();
playwright = null;
if (this.playwright != null) {
this.playwright.close ();
this.playwright = null;
}
}

private void disposeAPIRequestContext() {
if (request != null) {
request.dispose();
request = null;
if (this.request != null) {
this.request.dispose ();
this.request = null;
}
}


protected void logResponse (final APIResponse response) {
final Logger logger = new Logger (response);
logger.logResponseDetails ();
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
package io.github.mfaisalkhatri.api.restfulecommerce;

import static io.github.mfaisalkhatri.api.restfulecommerce.testdata.OrderDataBuilder.getNewOrder;
import static io.github.mfaisalkhatri.api.restfulecommerce.testdata.OrderDataBuilder.getPartialUpdatedOrder;
import static io.github.mfaisalkhatri.api.restfulecommerce.testdata.OrderDataBuilder.getUpdatedOrder;
import static io.github.mfaisalkhatri.api.restfulecommerce.testdata.TokenBuilder.getCredentials;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;

import java.util.ArrayList;
import java.util.List;

import com.microsoft.playwright.APIResponse;
import com.microsoft.playwright.options.RequestOptions;
import io.github.mfaisalkhatri.api.restfulecommerce.testdata.OrderData;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONArray;
import org.json.JSONObject;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.util.ArrayList;
import java.util.List;

import static io.github.mfaisalkhatri.api.restfulecommerce.testdata.OrderDataBuilder.*;
import static io.github.mfaisalkhatri.api.restfulecommerce.testdata.TokenBuilder.getCredentials;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;

@Slf4j
public class HappyPathTests extends BaseTest{

private List<OrderData> orderList;
Expand All @@ -33,9 +36,7 @@ public void testSetup() {
public void testShouldPerformHealthCheckOfServer() {
final APIResponse response = this.request.get("/health");

final Logger logger = new Logger(response);
logger.logResponseDetails();

logResponse (response);
final JSONObject responseObject = new JSONObject(response.text());

assertEquals(response.status(), 200);
Expand All @@ -54,6 +55,8 @@ public void testShouldCreateNewOrders() {
final APIResponse response = this.request.post("/addOrder", RequestOptions.create()
.setData(this.orderList));

logResponse (response);

final JSONObject responseObject = new JSONObject(response.text());
final JSONArray ordersArray = responseObject.getJSONArray("orders");

Expand All @@ -68,16 +71,14 @@ public void testShouldCreateNewOrders() {
this.userId =ordersArray.getJSONObject(0).getString("user_id");
this.productId =ordersArray.getJSONObject(0).getString("product_id");


}

@Test
public void testShouldGetAllOrders() {

final APIResponse response = this.request.get("/getAllOrders");

final Logger logger = new Logger(response);
logger.logResponseDetails();
logResponse (response);

final JSONObject responseObject = new JSONObject(response.text());
final JSONArray ordersArray = responseObject.getJSONArray("orders");
Expand All @@ -92,10 +93,10 @@ public void testShouldGetAllOrders() {
@Test
public void testShouldGetOrderUsingOrderId() {
final int orderId = 1;
final APIResponse response = this.request.get("/getOrder", RequestOptions.create().setQueryParam("id", orderId));
final APIResponse response = this.request.get ("/getOrder", RequestOptions.create ()
.setQueryParam ("id", orderId));

final Logger logger = new Logger(response);
logger.logResponseDetails();
logResponse (response);

final JSONObject responseObject = new JSONObject(response.text());
final JSONArray ordersArray = responseObject.getJSONArray("orders");
Expand All @@ -109,10 +110,10 @@ public void testShouldGetOrderUsingOrderId() {
@Test
public void testShouldGetOrdersUsingUserId() {

final APIResponse response = this.request.get("/getOrder", RequestOptions.create().setQueryParam("user_id", this.userId));
final APIResponse response = this.request.get ("/getOrder", RequestOptions.create ()
.setQueryParam ("user_id", this.userId));

final Logger logger = new Logger(response);
logger.logResponseDetails();
logResponse (response);

final JSONObject responseObject = new JSONObject(response.text());
final JSONArray ordersArray = responseObject.getJSONArray("orders");
Expand All @@ -126,10 +127,10 @@ public void testShouldGetOrdersUsingUserId() {
@Test
public void testShouldGetOrdersUsingProductId() {

final APIResponse response = this.request.get("/getOrder", RequestOptions.create().setQueryParam("product_id", this.productId));
final APIResponse response = this.request.get ("/getOrder", RequestOptions.create ()
.setQueryParam ("product_id", this.productId));

final Logger logger = new Logger(response);
logger.logResponseDetails();
logResponse (response);

final JSONObject responseObject = new JSONObject(response.text());
final JSONArray ordersArray = responseObject.getJSONArray("orders");
Expand All @@ -148,12 +149,10 @@ public void testShouldGetOrdersUsingOrderIdProductIdAndUserId() {
.setQueryParam("product_id", this.productId)
.setQueryParam("user_id", this.userId));

final Logger logger = new Logger(response);
logger.logResponseDetails();
logResponse (response);

assertEquals(response.status(), 200);


final JSONObject responseObject = new JSONObject(response.text());
final JSONArray ordersArray = responseObject.getJSONArray("orders");

Expand All @@ -167,10 +166,10 @@ public void testShouldGetOrdersUsingOrderIdProductIdAndUserId() {

@Test
public void testTokenGeneration() {
final APIResponse response = this.request.post("/auth", RequestOptions.create().setData(getCredentials()));
final APIResponse response = this.request.post ("/auth", RequestOptions.create ()
.setData (getCredentials ()));

final Logger logger = new Logger(response);
logger.logResponseDetails();
logResponse (response);

final JSONObject responseObject = new JSONObject(response.text());

Expand All @@ -182,7 +181,10 @@ public void testTokenGeneration() {
@Test
public void testShouldUpdateTheOrderUsingPut() {

final APIResponse authResponse = this.request.post("/auth", RequestOptions.create().setData(getCredentials()));
final APIResponse authResponse = this.request.post ("/auth", RequestOptions.create ()
.setData (getCredentials ()));

logResponse (authResponse);

final JSONObject authResponseObject = new JSONObject(authResponse.text());
final String token = authResponseObject.get("token").toString();
Expand All @@ -194,6 +196,8 @@ public void testShouldUpdateTheOrderUsingPut() {
.setHeader("Authorization", token)
.setData(updatedOrder));

logResponse (response);

final JSONObject updateOrderResponseObject = new JSONObject(response.text());
final JSONObject orderObject = updateOrderResponseObject.getJSONObject("order");

Expand All @@ -212,6 +216,8 @@ public void testShouldPartialUpdateTheOrderUsingPatch() {

final APIResponse authResponse = this.request.post("/auth", RequestOptions.create().setData(getCredentials()));

logResponse (authResponse);

final JSONObject authResponseObject = new JSONObject(authResponse.text());
final String token = authResponseObject.get("token").toString();

Expand All @@ -221,9 +227,11 @@ public void testShouldPartialUpdateTheOrderUsingPatch() {
final APIResponse response = this.request.patch("/partialUpdateOrder/" + orderId, RequestOptions.create()
.setHeader("Authorization", token)
.setData(partialUpdatedOrder));


logResponse (response);

final JSONObject updateOrderResponseObject = new JSONObject(response.text());
final JSONObject orderObject = updateOrderResponseObject.getJSONObject("order");
final JSONObject orderObject = updateOrderResponseObject.getJSONObject ("order");

assertEquals(response.status(), 200);
assertEquals(updateOrderResponseObject.get("message"), "Order updated successfully!");
Expand All @@ -235,7 +243,10 @@ public void testShouldPartialUpdateTheOrderUsingPatch() {
@Test
public void testShouldDeleteTheOrder() {

final APIResponse authResponse = this.request.post("/auth", RequestOptions.create().setData(getCredentials()));
final APIResponse authResponse = this.request.post ("/auth", RequestOptions.create ()
.setData (getCredentials ()));

logResponse (authResponse);

final JSONObject authResponseObject = new JSONObject(authResponse.text());
final String token = authResponseObject.get("token").toString();
Expand All @@ -245,19 +256,17 @@ public void testShouldDeleteTheOrder() {
final APIResponse response = this.request.delete("/deleteOrder/" + orderId, RequestOptions.create()
.setHeader("Authorization", token));

final Logger logger = new Logger(response);
logger.logResponseDetails();

logResponse (response);
assertEquals(response.status(), 204);
}

@Test
public void testShouldNotRetrieveDeletedOrder() {
final int orderId = 1;
final APIResponse response = this.request.get("/getOrder", RequestOptions.create().setQueryParam("id", orderId));
final APIResponse response = this.request.get ("/getOrder", RequestOptions.create ()
.setQueryParam ("id", orderId));

final Logger logger = new Logger(response);
logger.logResponseDetails();
logResponse (response);

assertEquals(response.status(), 404);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,39 +8,41 @@

public class Logger {

private APIResponse response;
private org.apache.logging.log4j.Logger log;
private final APIResponse response;
private final org.apache.logging.log4j.Logger log;

public Logger(APIResponse response) {
public Logger (final APIResponse response) {
this.response = response;
log = LogManager.getLogger(getClass());
this.log = LogManager.getLogger (getClass ());
}

public void logResponseDetails() {

log.info("Response Headers: \n{}",response.headers());
log.info("Status Code: {}", response.status());
if(response.text()!=null && !response.text().isEmpty() && !response.text().isBlank()) {
log.info("Response Body: \n{}", prettyPrintJson(response.text()));
this.log.trace ("Logging Response Details.....");

this.log.info ("Response Headers: \n{}", this.response.headers ());
this.log.info ("Status Code: {}", this.response.status ());
if (this.response.text () != null && !this.response.text ()
.isEmpty () && !this.response.text ()
.isBlank ()) {
this.log.info ("Response Body: \n{}", prettyPrintJson (this.response.text ()));
}

this.log.trace ("End of Logs!");
}

private String prettyPrintJson(String text) {
private String prettyPrintJson (final String text) {
String prettyPrintJson = "";
if (text != null && !text.isBlank() && !text.isEmpty()) {
try {

ObjectMapper objectMapper = new ObjectMapper();
Object jsonObject = objectMapper.readValue(text, Object.class);
final ObjectMapper objectMapper = new ObjectMapper ();
final Object jsonObject = objectMapper.readValue (text, Object.class);
prettyPrintJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonObject);
return prettyPrintJson;
} catch (JsonProcessingException e) {
log.error("Error Printing Pretty Json : {}", e.getMessage());
} catch (final JsonProcessingException e) {
this.log.error ("Error Printing Pretty Json : {}", e.getMessage ());
}
}

log.info("No response body generated!");
this.log.info ("No response body generated!");
return null;

}
Expand Down
Loading
Loading