-
Notifications
You must be signed in to change notification settings - Fork 1
/
fixtures.js
115 lines (110 loc) · 4.68 KB
/
fixtures.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
const base = require("@playwright/test")
const { expect } = require("@playwright/test")
const faker = require("faker")
/**
* Test fixtures (https://playwright.dev/docs/test-fixtures)
* This is extending the base/test import { base } from @playwright/test to include
* new fixtures like the endpoints of the API and functions that setup new users,
* produtos, carrinhos and performs login, retrieving the authorization token
* for administrator actions
*/
module.exports = base.test.extend({
loginPath: "/login",
cartPath: "/carrinhos",
userPath: "/usuarios",
productsPath: "/produtos",
/**
* Fixture that performs API authentication and returns the authorization token
* It uses the baseURL, request and loginPath from Playwright's environment
* Then, the login fixture receives an email and a password as parameter
*/
login: async ({ baseURL, request, loginPath }, use) => {
await use(async (email, password) => {
const response = await request.post(`${baseURL}${loginPath}`, {
headers: { monitor: "false" },
data: {
email: email,
password: password,
},
})
expect(response.status()).toBe(200)
return await response.json()
})
},
/**
* Fixture that creates a new user on the ServeRest server
* It uses the baseURL, request and userPath from Playwright's environment
* Then, the cadastrarUsuario fixture receives an object with the administrator
* parameter to select if the new user will have administrator permission
*/
cadastrarUsuario: async ({ baseURL, request, userPath }, use) => {
await use(async ({ administrador = false } = {}) => {
let data = {
nome: faker.name.findName(),
email: faker.internet.email(faker.name.firstName(), faker.name.lastName()),
password: faker.random.alphaNumeric(16),
administrador: String(administrador),
}
const response = await request.post(`${baseURL}${userPath}`, {
headers: { monitor: "false" },
data: data,
})
expect(response.status()).toBe(201)
const responseData = await response.json()
data["_id"] = responseData["_id"]
return data
})
},
/**
* Fixture that creates a new product on the ServeRest server
* It uses the baseURL, request and productsPath from Playwright's environment
* Then, the cadastrarProduto fixture receives a bearer authorization token as parameter
*/
cadastrarProduto: async ({ baseURL, request, productsPath }, use) => {
await use(async (authorization) => {
let data = {
// alphaNumeric to reduce the chances of existing name when running the test suite multiple times
nome: faker.commerce.productName() + faker.random.alphaNumeric(100),
preco: Number(faker.commerce.price(undefined, undefined, 0)),
descricao: faker.commerce.productAdjective(),
quantidade: faker.datatype.number(1000),
}
const response = await request.post(`${baseURL}${productsPath}`, {
data: data,
headers: { Authorization: authorization, monitor: "false" },
})
expect(response.status()).toBe(201)
const responseData = await response.json()
data["_id"] = responseData["_id"]
return data
})
},
/**
* Fixture that creates a new shopping cart on the ServeRest server
* It uses the baseURL, request and cartPath from Playwright's environment
* Then, the cadastrarCarrinho fixture receives a bearer authorization token and
* a list of products as parameter
*/
cadastrarCarrinho: async ({ baseURL, request, cartPath }, use) => {
await use(async (authorization, produtos) => {
let data = { produtos: [] }
if (produtos instanceof Object) {
produtos = [produtos]
}
for (let produto of produtos) {
data.produtos.push({
idProduto: produto._id,
quantidade: produto.quantidade,
})
}
const response = await request.post(`${baseURL}${cartPath}`, {
data: data,
headers: { Authorization: authorization, monitor: "false" },
})
expect(response.status()).toBe(201)
const responseData = await response.json()
data["_id"] = responseData["_id"]
return data
})
},
})