backend/e2e/test/pages/utils/scene.js (view raw)
1/* eslint-disable class-methods-use-this */
2const faker = require('faker');
3const axios = require('axios');
4
5function randomPhone() {
6 return `${faker.random.arrayElement([
7 '76',
8 '78',
9 '79',
10 '77',
11 ])}${faker.random.number({
12 min: 100,
13 max: 999,
14 })}${faker.random.number({
15 min: 10,
16 max: 99,
17 })}${faker.random.number({min: 10, max: 99})}`;
18}
19function randomFutureDate() {
20 const num = x => (x < 10 ? `0${x}` : `${x}`);
21 const date = faker.date.future();
22 const month = date.getMonth();
23 const day = date.getDate();
24 const year = date.getFullYear();
25 return `${year}-${num(month)}-${num(day)}`;
26}
27
28class _Scene {
29 constructor() {
30 this.feature = undefined;
31 this.screenShotCount = 0;
32 this.scene = undefined;
33 this.actor = this.randomActor();
34 this.event = this.randomEvent();
35 this.car = this.randomCar();
36 }
37
38 /**
39 * @returns {Object}
40 */
41 randomActor() {
42 return {
43 email: faker.internet.email(),
44 phone: faker.random.arrayElement(['+41', '0']) + randomPhone(),
45 };
46 }
47
48 /**
49 * @return {Object}
50 */
51 randomEvent() {
52 return {
53 address: `${faker.address.streetAddress()}, ${faker.address.zipCode()} ${faker.address.city()}`,
54 date: randomFutureDate(),
55 name: `${faker.hacker.noun()} ${faker.hacker.verb()} ${faker.hacker.adjective()}`,
56 };
57 }
58
59 /**
60 * @return {Object}
61 */
62 randomCar() {
63 return {
64 name: `${faker.hacker.verb()} ${faker.commerce.productName()}`,
65 seats: faker.random.number({min: 0, max: 7}),
66 meeting: `${faker.address.streetAddress()}, ${faker.address.zipCode()} ${faker.address.city()}`,
67 meeting_date: randomFutureDate(),
68 details: faker.lorem.paragraph(),
69 };
70 }
71
72 /**
73 * Create an event and set an event id.
74 * @return {string} the new event id
75 */
76 async createEvent() {
77 try {
78 const {
79 data: {id},
80 } = await axios.post(`${process.env.BASE_URL}/events`, {
81 address: this.event.address,
82 date: faker.date.future().toISOString(),
83 email: this.actor.email,
84 name: this.event.name,
85 });
86 this.event.id = id;
87 return id;
88 } catch (err) {
89 console.error('can not create event', {err});
90 throw err;
91 }
92 }
93}
94exports.Scene = new _Scene();