Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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/test-reporter@v1.6.0
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)

AltStyle によって変換されたページ (->オリジナル) /