Skip to content

Commit a68ab11

Browse files
Added Happy and Sad Path tests for restful e-commerce APIs (#24)
* updated date format in booking data builder * added example for post api * added log4j for logging response details, added helper method to print log response details * added tests for get all order and get orders using order id, user id as params * added token generation and update order tests, modified the assertions for get order tests * handled blank and empty response body while response log generation and added tests for partial update and delete orders * updated Helper class name to Logger * added docker compose file for restful ecommerce, updated testng.xml and maven.yml to run restfulecommerce tests in github actions * updated docker compose to use service-ports * updated the baseurl for running tests in github actions * updated baseurl for ecommerce * updated github actions hosted runner to macos * added amd64 docker image and updated yml workflow to use ubuntu latest * added steps to start docker service for restful ecommerce app * added gson dependency in pom, added sadpathtest class, updated logger, update happy path tests * updated sad path scenario assertions and corrected spelling mistake in message text recevied in response * updated happy and sad path tests
1 parent 3d37eec commit a68ab11

File tree

16 files changed

+828
-8
lines changed

16 files changed

+828
-8
lines changed

.github/workflows/maven.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ jobs:
3737
- name: Start restful booker service
3838
run: docker compose -f ./docker-compose-restfulbooker.yml up -d
3939

40+
- name: Start restful ecommerce service
41+
run: docker compose -f ./docker-compose-ecommerce.yml up -d
42+
4043
- name: Build Project
4144
run: mvn clean install -DskipTests
4245

@@ -46,6 +49,9 @@ jobs:
4649
- name: Stop restful booker service
4750
run: docker compose -f ./docker-compose-restfulbooker.yml down --remove-orphans
4851

52+
- name: Stop restful ecommerce service
53+
run: docker compose -f ./docker-compose-ecommerce.yml down --remove-orphans
54+
4955
- name: Test Reporter
5056
uses: dorny/[email protected]
5157
if: always()

docker-compose-ecommerce.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# To execute this docker-compose yml file use `docker compose -f docker-compose-ecommerce.yml up -d`
2+
# Add the `-d` flag at the end for detached execution
3+
# To stop the execution, hit Ctrl+C, and then `docker compose -f docker-compose-ecommerce.yml down`
4+
services:
5+
restful-ecommerce:
6+
image: mfaisalkhatri/restful-ecommerce-app
7+
ports:
8+
- 3004:3004

pom.xml

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,17 @@
1212

1313
<properties>
1414
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15-
<playwright-version>1.45.1</playwright-version>
15+
<playwright-version>1.47.0</playwright-version>
1616
<testng-version>7.10.2</testng-version>
1717
<hamcrest-all-version>1.3</hamcrest-all-version>
1818
<json-simple-version>1.1.1</json-simple-version>
1919
<lombok-version>1.18.34</lombok-version>
2020
<datafaker-version>2.3.1</datafaker-version>
21+
<gson-version>2.11.0</gson-version>
2122
<org-json-verion>20240303</org-json-verion>
23+
<jackson-databind-version>2.17.2</jackson-databind-version>
24+
<log4j-core-version>2.12.4</log4j-core-version>
25+
<log4j-api-version>2.12.4</log4j-api-version>
2226
<maven-compiler-plugin-version>3.13.0</maven-compiler-plugin-version>
2327
<maven-surefire-plugin-version>3.3.1</maven-surefire-plugin-version>
2428
<java-release-version>17</java-release-version>
@@ -54,6 +58,26 @@
5458
<artifactId>datafaker</artifactId>
5559
<version>${datafaker-version}</version>
5660
</dependency>
61+
<dependency>
62+
<groupId>com.google.code.gson</groupId>
63+
<artifactId>gson</artifactId>
64+
<version>${gson-version}</version>
65+
</dependency>
66+
<dependency>
67+
<groupId>com.fasterxml.jackson.core</groupId>
68+
<artifactId>jackson-databind</artifactId>
69+
<version>${jackson-databind-version}</version>
70+
</dependency>
71+
<dependency>
72+
<groupId>org.apache.logging.log4j</groupId>
73+
<artifactId>log4j-api</artifactId>
74+
<version>${log4j-api-version}</version>
75+
</dependency>
76+
<dependency>
77+
<groupId>org.apache.logging.log4j</groupId>
78+
<artifactId>log4j-core</artifactId>
79+
<version>${log4j-core-version}</version>
80+
</dependency>
5781
</dependencies>
5882
<build>
5983
<pluginManagement>

public/results/results.json

Lines changed: 114 additions & 0 deletions
Large diffs are not rendered by default.

src/main/resources/log4j2.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Configuration status="INFO">
3+
<Appenders>
4+
<Console name="LogToConsole" target="SYSTEM_OUT">
5+
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
6+
</Console>
7+
</Appenders>
8+
<Loggers>
9+
<Logger name="io.github.mfaisalkhatri" level="info" additivity="false">
10+
<AppenderRef ref="LogToConsole"/>
11+
</Logger>
12+
<Root level="error">
13+
<AppenderRef ref="LogToConsole"/>
14+
</Root>
15+
</Loggers>
16+
</Configuration>

src/test/java/io/github/mfaisalkhatri/api/restfulbooker/data/BookingDataBuilder.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ public final class BookingDataBuilder {
1414
private static final Faker FAKER = new Faker();
1515

1616
public static BookingData getBookingData() {
17-
final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
1817
return BookingData.builder()
1918
.firstname(FAKER.name()
2019
.firstName())
@@ -24,11 +23,10 @@ public static BookingData getBookingData() {
2423
.numberBetween(1, 2000))
2524
.depositpaid(true)
2625
.bookingdates(BookingDates.builder()
27-
.checkin(formatter.format(FAKER.date()
28-
.past(20, TimeUnit.DAYS)))
29-
.checkout(formatter.format(FAKER.date()
30-
.future(5, TimeUnit.DAYS)))
31-
.build())
26+
.checkin(FAKER.timeAndDate()
27+
.past(20, TimeUnit.DAYS,"yyyy-MM-dd"))
28+
.checkout(FAKER.timeAndDate()
29+
.future(5, TimeUnit.DAYS, "yyyy-MM-dd")).build())
3230
.additionalneeds("Breakfast")
3331
.build();
3432

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package io.github.mfaisalkhatri.api.restfulecommerce;
2+
3+
import com.microsoft.playwright.APIRequest;
4+
import com.microsoft.playwright.APIRequestContext;
5+
import com.microsoft.playwright.Playwright;
6+
import org.testng.annotations.AfterClass;
7+
import org.testng.annotations.BeforeClass;
8+
9+
import java.util.HashMap;
10+
import java.util.Map;
11+
12+
public class BaseTest {
13+
14+
protected Playwright playwright;
15+
protected APIRequestContext request;
16+
private static final String BASE_URL = "http://localhost:3004";
17+
18+
@BeforeClass
19+
public void setup() {
20+
createPlaywright();
21+
createAPIRequestContext();
22+
}
23+
24+
@AfterClass
25+
public void tearDown() {
26+
disposeAPIRequestContext();
27+
closePlaywright();
28+
29+
}
30+
31+
private void createPlaywright() {
32+
playwright = Playwright.create();
33+
}
34+
35+
private void createAPIRequestContext() {
36+
Map<String, String> headers = new HashMap<>();
37+
headers.put("Content-Type", "application/json");
38+
39+
request = playwright.request().newContext(new APIRequest.NewContextOptions()
40+
.setBaseURL(BASE_URL)
41+
.setExtraHTTPHeaders(headers));
42+
}
43+
44+
45+
private void closePlaywright() {
46+
if (playwright != null) {
47+
playwright.close();
48+
playwright = null;
49+
}
50+
}
51+
52+
private void disposeAPIRequestContext() {
53+
if (request != null) {
54+
request.dispose();
55+
request = null;
56+
}
57+
}
58+
59+
60+
}

0 commit comments

Comments
 (0)