Skip to content

Commit 638a84c

Browse files
Merge pull request #1 from hungdao-testing/feature/update_booking
done update booking
2 parents e158bb0 + 322b38c commit 638a84c

File tree

1 file changed

+193
-0
lines changed

1 file changed

+193
-0
lines changed

tests/update-booking.spec.js

Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
import { test, expect } from "@playwright/test";
2+
import {
3+
generateValidJsonBookingPayload,
4+
generateValidXmlBookingPayload,
5+
} from "../data/helper/generateData";
6+
import tv4 from "tv4";
7+
import * as xml2js from "xml2js";
8+
import { default as xmlSchemaValidator } from "xsd-validator";
9+
10+
const BOOKING_URL = "/booking";
11+
const AUTH_URL = "/auth";
12+
13+
test("Update existing booking with Json payload", async ({ request }) => {
14+
//arrange
15+
const schema = {
16+
$schema: "http://json-schema.org/draft-07/schema#",
17+
title: "Generated schema for Root",
18+
type: "object",
19+
properties: {
20+
firstname: {
21+
type: "string",
22+
},
23+
lastname: {
24+
type: "string",
25+
},
26+
totalprice: {
27+
type: "number",
28+
},
29+
depositpaid: {
30+
type: "boolean",
31+
},
32+
bookingdates: {
33+
type: "object",
34+
properties: {
35+
checkin: {
36+
type: "string",
37+
},
38+
checkout: {
39+
type: "string",
40+
},
41+
},
42+
required: ["checkin", "checkout"],
43+
},
44+
additionalneeds: {
45+
type: "string",
46+
},
47+
},
48+
required: [
49+
"firstname",
50+
"lastname",
51+
"totalprice",
52+
"depositpaid",
53+
"bookingdates",
54+
],
55+
};
56+
const createPayloadJson = generateValidJsonBookingPayload();
57+
58+
const createdBookReq = await request.post(BOOKING_URL, {
59+
data: { ...createPayloadJson },
60+
headers: {
61+
"Content-Type": "application/json",
62+
Accept: "application/json",
63+
},
64+
});
65+
await expect(createdBookReq.status()).toBe(200);
66+
const createBookRespJson = await createdBookReq.json();
67+
const bookingId = createBookRespJson.bookingid;
68+
69+
// act
70+
const authReq = await request.post(AUTH_URL, {
71+
data: {
72+
username: "admin",
73+
password: "password123",
74+
},
75+
headers: {
76+
"Content-Type": "application/json",
77+
},
78+
});
79+
const authenBody = await authReq.json();
80+
const accessToken = authenBody.token;
81+
82+
const newPayloadJson = generateValidJsonBookingPayload();
83+
const updateBookingReq = await request.put(BOOKING_URL + `/${bookingId}`, {
84+
data: newPayloadJson,
85+
headers: {
86+
"Content-Type": "application/json",
87+
Accept: "application/json",
88+
Cookie: `token=${accessToken}`,
89+
},
90+
});
91+
92+
//assert
93+
await expect(updateBookingReq.status()).toBe(200);
94+
const jsonBody = await updateBookingReq.json();
95+
expect(tv4.validate(jsonBody, schema, true)).toBeTruthy();
96+
97+
expect(jsonBody.firstname).toBe(newPayloadJson.firstname);
98+
expect(jsonBody.lastname).toBe(newPayloadJson.lastname);
99+
expect(jsonBody.totalprice).toBe(newPayloadJson.totalprice);
100+
expect(jsonBody.depositpaid).toBe(newPayloadJson.depositpaid);
101+
expect(JSON.stringify(jsonBody.bookingdates)).toBe(
102+
JSON.stringify(newPayloadJson.bookingdates)
103+
);
104+
});
105+
106+
test("Update existing booking with Xml payload", async ({ request }) => {
107+
//arrange
108+
const schema = `
109+
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
110+
<xs:element name="booking">
111+
<xs:complexType>
112+
<xs:sequence>
113+
<xs:element type="xs:string" name="firstname"/>
114+
<xs:element type="xs:string" name="lastname"/>
115+
<xs:element type="xs:integer" name="totalprice"/>
116+
<xs:element type="xs:string" name="depositpaid"/>
117+
<xs:element name="bookingdates">
118+
<xs:complexType>
119+
<xs:sequence>
120+
<xs:element type="xs:date" name="checkin"/>
121+
<xs:element type="xs:date" name="checkout"/>
122+
</xs:sequence>
123+
</xs:complexType>
124+
</xs:element>
125+
</xs:sequence>
126+
</xs:complexType>
127+
</xs:element>
128+
</xs:schema>
129+
`;
130+
const createPayloadXml = generateValidXmlBookingPayload();
131+
132+
const createdBookReq = await request.post(BOOKING_URL, {
133+
data: createPayloadXml,
134+
headers: {
135+
"Content-Type": "text/xml",
136+
Accept: "application/xml",
137+
},
138+
});
139+
await expect(createdBookReq.status()).toBe(200);
140+
const createBookResp = await createdBookReq.text();
141+
const createBookRespInXml = await xml2js.parseStringPromise(createBookResp, {
142+
explicitArray: false,
143+
});
144+
145+
const bookingId = createBookRespInXml["created-booking"].bookingid;
146+
147+
// act
148+
const authReq = await request.post(AUTH_URL, {
149+
data: {
150+
username: "admin",
151+
password: "password123",
152+
},
153+
headers: {
154+
"Content-Type": "application/json",
155+
},
156+
});
157+
const authenBody = await authReq.json();
158+
const accessToken = authenBody.token;
159+
160+
const newPayloadXml = generateValidXmlBookingPayload();
161+
const updateBookingReq = await request.put(BOOKING_URL + `/${bookingId}`, {
162+
data: newPayloadXml,
163+
headers: {
164+
"Content-Type": "text/xml",
165+
Accept: "application/xml",
166+
Cookie: `token=${accessToken}`,
167+
},
168+
});
169+
170+
//assert
171+
await expect(updateBookingReq.status()).toBe(200);
172+
const updateBookingReqText = await updateBookingReq.text();
173+
const updateBookingReqInXml = await xml2js.parseStringPromise(
174+
updateBookingReqText,
175+
{
176+
explicitArray: false,
177+
}
178+
);
179+
180+
const isMatchedToSchema = xmlSchemaValidator(updateBookingReqText, schema);
181+
expect(isMatchedToSchema).toBeTruthy();
182+
183+
const updatePayloadXmlAfterParsing = await xml2js.parseStringPromise(
184+
newPayloadXml.toString(),
185+
{
186+
explicitArray: false,
187+
}
188+
);
189+
190+
expect(JSON.stringify(updatePayloadXmlAfterParsing)).toBe(
191+
JSON.stringify(updateBookingReqInXml)
192+
);
193+
});

0 commit comments

Comments
 (0)