@mirai/core 0.3.379 → 0.3.380
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/Checkout/__mocks__/checkout-get.json +935 -0
- package/__tests__/Checkout/__mocks__/checkout-post-PAYLATER.json +10 -0
- package/__tests__/Checkout/__mocks__/checkout-post-TPV.json +7 -0
- package/__tests__/Checkout/__mocks__/checkout-post-TRANSFER.json +10 -0
- package/__tests__/Checkout/checkout.constants.js +8 -0
- package/__tests__/Checkout/checkout.spec.jsx +40 -0
- package/__tests__/Checkout/workflows/form.workflow.js +17 -0
- package/__tests__/Checkout/workflows/index.js +4 -0
- package/__tests__/Checkout/workflows/payment.workflow.js +10 -0
- package/__tests__/Checkout/workflows/review.workflow.js +19 -0
- package/__tests__/Checkout/workflows/submit.workflow.js +9 -0
- package/__tests__/Finder/finder.spec.js +64 -0
- package/__tests__/Finder/workflows/calendar.workflow.js +9 -0
- package/__tests__/Finder/workflows/index.js +3 -0
- package/__tests__/Finder/workflows/occupation.workflow.js +13 -0
- package/__tests__/Finder/workflows/promocode.workflow.js +8 -0
- package/__tests__/Rates/__mocks__/rates-success.json +731 -0
- package/__tests__/Rates/rates.spec.jsx +20 -0
- package/__tests__/Session/workflows/forgotPassword.workflow.js +4 -2
- package/__tests__/Session/workflows/login.workflow.js +5 -3
- package/__tests__/Session/workflows/profile.workflow.js +11 -9
- package/__tests__/Signup/workflows/signup.workflow.js +9 -7
- package/__tests__/constants.js +18 -0
- package/__tests__/helpers/getWeekNumber.js +8 -0
- package/__tests__/helpers/index.js +1 -0
- package/build/components/Checkout/Checkout.js +1 -0
- package/build/components/Checkout/Checkout.js.map +1 -1
- package/build/components/Checkout/__tests__/__snapshots__/Checkout.test.js.snap +16 -16
- package/build/components/Checkout/partials/Checkout.Confirmation.js +2 -1
- package/build/components/Checkout/partials/Checkout.Confirmation.js.map +1 -1
- package/build/components/Checkout/partials/__tests__/__snapshots__/Checkout.Confirmation.test.js.snap +6 -0
- package/build/components/Checkout/partials/__tests__/__snapshots__/Checkout.Form.test.js.snap +28 -8
- package/build/components/Deals/__tests__/__snapshots__/Deals.Calendar.test.js.snap +114 -114
- package/build/components/Deals/__tests__/__snapshots__/Deals.test.js.snap +211 -209
- package/build/components/Environment/Environment.js +4 -2
- package/build/components/Environment/Environment.js.map +1 -1
- package/build/components/Finder/Finder.compact.js +10 -5
- package/build/components/Finder/Finder.compact.js.map +1 -1
- package/build/components/Finder/Finder.constants.js +1 -2
- package/build/components/Finder/Finder.constants.js.map +1 -1
- package/build/components/Finder/Finder.js +4 -20
- package/build/components/Finder/Finder.js.map +1 -1
- package/build/components/Finder/__tests__/__snapshots__/Finder.test.js.snap +734 -730
- package/build/components/Finder/components/Calendar/__tests__/__snapshots__/Calendar.test.js.snap +419 -419
- package/build/components/__shared__/BookingDetails/BookingDetails.js +2 -1
- package/build/components/__shared__/BookingDetails/BookingDetails.js.map +1 -1
- package/build/components/__shared__/BookingDetails/__tests__/__snapshots__/BookingDetails.test.js.snap +5 -0
- package/build/components/__shared__/BookingSummary/BookingSummary.js +2 -1
- package/build/components/__shared__/BookingSummary/BookingSummary.js.map +1 -1
- package/build/components/__shared__/ButtonMore/ButtonMore.js +1 -1
- package/build/components/__shared__/ButtonMore/ButtonMore.js.map +1 -1
- package/build/components/__shared__/ButtonMore/__tests__/__snapshots__/ButtonMore.test.js.snap +2 -0
- package/build/components/__shared__/FieldOccupation/__tests__/__snapshots__/FieldOccupation.test.js.snap +1 -0
- package/build/components/__shared__/FieldPromocode/FieldPromocode.js +4 -2
- package/build/components/__shared__/FieldPromocode/FieldPromocode.js.map +1 -1
- package/build/components/__shared__/FieldPromocode/__tests__/__snapshots__/FieldPromocode.test.jsx.snap +2 -1
- package/build/components/__shared__/Occupation/Occupation.Group.js +2 -1
- package/build/components/__shared__/Occupation/Occupation.Group.js.map +1 -1
- package/build/components/__shared__/Occupation/__tests__/__snapshots__/Occupation.test.js.snap +6 -0
- package/build/components/__shared__/Payment/Payment.js +2 -1
- package/build/components/__shared__/Payment/Payment.js.map +1 -1
- package/build/components/__shared__/Payment/__tests__/__snapshots__/Payment.test.js.snap +25 -10
- package/build/helpers/consolidateStore.js +1 -1
- package/build/helpers/consolidateStore.js.map +1 -1
- package/package.json +2 -1
- package/playwright.config.js +10 -7
- package/public/routes/Home.jsx +3 -2
- package/__tests__/Finder/finder._spec.js +0 -18
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const PAGE_URL = 'http://local.mirai.com:8080/step2-checkout';
|
|
2
|
+
|
|
3
|
+
const URL_PARAMS = {
|
|
4
|
+
DEFAULT:
|
|
5
|
+
'?checkin=10%2F04%2F2025&idtokenprovider=100379008&clientCode=¤cy=EUR&hsri=02040&lang=en&nights=2&parties=W3siYWR1bHRzIjoyLCJjaGlsZHJlbiI6W119XQ%3D%3D&type=hotel&env=dev&step=1&home=http%3A%2F%2Flocal.mirai.com%3A8080%2F&device=DESKTOP_TABLET&applyClubDiscount=true&extras=%5B%7B%22idExtra%22%3A64953%2C%22included%22%3Afalse%2C%22nightsToApply%22%3A2%2C%22numSelected%22%3A1%7D%2C%7B%22idExtra%22%3A65346%2C%22included%22%3Afalse%2C%22nightsToApply%22%3A2%2C%22numSelected%22%3A1%7D%2C%7B%22idExtra%22%3A65347%2C%22included%22%3Afalse%2C%22nightsToApply%22%3A2%2C%22numSelected%22%3A1%7D%5D&offersAppliedBySelectedRoom=%5B%7B%22idRR%22%3A%2244948%7C63971%7C349217b0%7C35770%22%2C%22offersApplied%22%3A%22%22%7D%5D&roomNumberBySelectedRoom=%5B%5D&rooms=44948%7C63971%7C349217b0%7C35770%3A1&totalPrice=20130',
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export { PAGE_URL, URL_PARAMS };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { test } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
import { PAGE_URL, URL_PARAMS } from './checkout.constants';
|
|
4
|
+
import { form, payment, review, submit } from './workflows';
|
|
5
|
+
|
|
6
|
+
const PAYMENTS = ['PAYLATER', 'TPV', 'TRANSFER'];
|
|
7
|
+
|
|
8
|
+
test.beforeEach(async ({ context }) => {
|
|
9
|
+
await context.addInitScript(() => (window.IS_PLAYWRIGHT = true));
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
const enviroment = async ({ page, payment }) => {
|
|
13
|
+
await page.route(/https:\/\/reservation\.mirai\.com\/XMAS\/reservation\/v2\/booking\/checkout(\?.*)?$/, (route) => {
|
|
14
|
+
const method = route.request().method().toLowerCase();
|
|
15
|
+
|
|
16
|
+
route.fulfill({
|
|
17
|
+
status: 200,
|
|
18
|
+
contentType: 'application/json',
|
|
19
|
+
body: JSON.stringify(require(`./__mocks__/checkout-${method}${method === 'post' ? `-${payment}` : ''}.json`)),
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
await page.goto(`${PAGE_URL}${URL_PARAMS.DEFAULT}`, { waitUntil: 'networkidle', timeout: 10000 });
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
PAYMENTS.forEach((paymentId) => {
|
|
27
|
+
test(`Checkout w/ ${paymentId}`, async ({ page }) => {
|
|
28
|
+
await enviroment({ page, payment: paymentId });
|
|
29
|
+
|
|
30
|
+
await form({ page });
|
|
31
|
+
await payment({ page, payment: paymentId });
|
|
32
|
+
await submit({ page, payment: paymentId });
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test(`Review & return to previous step`, async ({ page }) => {
|
|
37
|
+
await enviroment({ page });
|
|
38
|
+
|
|
39
|
+
await review({ page });
|
|
40
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { USER } from '../../constants';
|
|
2
|
+
|
|
3
|
+
export const form = async ({ page }) => {
|
|
4
|
+
await page.fill('ui-checkout form input[name="firstName"]', USER.firstName);
|
|
5
|
+
await page.fill('ui-checkout form input[name="lastName"]', USER.lastName);
|
|
6
|
+
await page.fill('ui-checkout form input[name="email"]', USER.email);
|
|
7
|
+
await page.locator('ui-checkout form select[name="phone-prefix"]').selectOption(USER.phone.prefix);
|
|
8
|
+
await page.fill('ui-checkout form input[name="phone-phone"]', USER.phone.number);
|
|
9
|
+
await page.fill('ui-checkout form textarea[name="comments"]', 'Will arrive between 1-2pm');
|
|
10
|
+
// additional request
|
|
11
|
+
await page.fill('ui-checkout form input[name="additionalRequest.34486.nameKey"]', 'additionalRequest.34486');
|
|
12
|
+
|
|
13
|
+
// User submits but forgots privacy policy
|
|
14
|
+
await page.getByTestId('checkout-button').click();
|
|
15
|
+
await page.waitForSelector('ui-notification', { state: 'visible' });
|
|
16
|
+
await page.locator('ui-checkout form input[name="privacyPolicy"]').check();
|
|
17
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { USER } from '../../constants';
|
|
2
|
+
|
|
3
|
+
export const payment = async ({ page, payment = 'PAYLATER' }) => {
|
|
4
|
+
await page.getByTestId(`payments-item-${payment}`).click();
|
|
5
|
+
|
|
6
|
+
if (payment === 'TPV') {
|
|
7
|
+
// ! TODO: Sometimes doesnt exist
|
|
8
|
+
await page.fill('ui-payment input[name="name"]', `${USER.firstName} ${USER.lastName}`.toUpperCase());
|
|
9
|
+
}
|
|
10
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const { expect } = require('@playwright/test');
|
|
2
|
+
|
|
3
|
+
export const review = async ({ page }) => {
|
|
4
|
+
// Expand more info
|
|
5
|
+
expect(await page.locator('text="Booking extras"').count()).toEqual(0);
|
|
6
|
+
await page.getByTestId('button-more').click();
|
|
7
|
+
await page.locator('text="Booking extras"').isVisible();
|
|
8
|
+
|
|
9
|
+
// Change language
|
|
10
|
+
const [responseError] = await Promise.all([
|
|
11
|
+
page.waitForResponse((response) => response.url().includes('/dictionary?locale=es-ES') && !!response.status()),
|
|
12
|
+
page.locator('select[name="locale"]').selectOption('Español'),
|
|
13
|
+
]);
|
|
14
|
+
expect(responseError.status()).toBe(200);
|
|
15
|
+
|
|
16
|
+
// Return
|
|
17
|
+
await page.getByTestId('action-change-selection').click();
|
|
18
|
+
await page.waitForURL(/\/step1-rates/, { waitUntil: 'networkidle', timeout: 10000 });
|
|
19
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const submit = async ({ page, payment = 'PAYLATER' }) => {
|
|
2
|
+
await page.getByTestId('checkout-button').click();
|
|
3
|
+
|
|
4
|
+
if (['PAYMENT', 'TRANSFER'].includes(payment)) {
|
|
5
|
+
await page.waitForURL(/\/step3-booking/, { waitUntil: 'networkidle', timeout: 10000 });
|
|
6
|
+
} else if (payment === 'TPV') {
|
|
7
|
+
await page.waitForURL(/\/redirectToTPV/, { waitUntil: 'networkidle', timeout: 10000 });
|
|
8
|
+
}
|
|
9
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { expect, test } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
import { calendar, occupation, promocode } from './workflows';
|
|
4
|
+
|
|
5
|
+
const testId = 'finder';
|
|
6
|
+
|
|
7
|
+
test.beforeEach(async ({ context, page }) => {
|
|
8
|
+
await context.addInitScript(() => (window.IS_PLAYWRIGHT = true));
|
|
9
|
+
await page.goto('http://local.mirai.com:8080', { waitUntil: 'networkidle', timeout: 20000 });
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test('Finder basic search', async ({ page }) => {
|
|
13
|
+
await calendar({ page, testId });
|
|
14
|
+
await page.getByTestId(`${testId}-submit`).click();
|
|
15
|
+
|
|
16
|
+
await expect(page).toHaveURL(/.*step1-rates/, { timeout: 15000 });
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('Finder search with adult added', async ({ isMobile, page }) => {
|
|
20
|
+
await calendar({ isMobile, page, testId });
|
|
21
|
+
await occupation({ addAdult: true, isMobile, page, testId });
|
|
22
|
+
|
|
23
|
+
await page.getByTestId(`${testId}-submit`).click();
|
|
24
|
+
|
|
25
|
+
await expect(page).toHaveURL(/.*step1-rates/, { timeout: 15000 });
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('Finder search with child added', async ({ isMobile, page }) => {
|
|
29
|
+
await calendar({ isMobile, page, testId });
|
|
30
|
+
await occupation({ addChild: true, isMobile, page, testId });
|
|
31
|
+
|
|
32
|
+
await page.getByTestId(`${testId}-submit`).click();
|
|
33
|
+
|
|
34
|
+
await expect(page).toHaveURL(/.*step1-rates/, { timeout: 15000 });
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('Finder search with child added and not age', async ({ isMobile, page }) => {
|
|
38
|
+
await calendar({ isMobile, page, testId });
|
|
39
|
+
await occupation({ addAgeChild: false, addChild: true, isMobile, page, testId });
|
|
40
|
+
|
|
41
|
+
await page.getByTestId(`${testId}-submit`).click();
|
|
42
|
+
|
|
43
|
+
if (isMobile) await expect(page.getByTestId(`${testId}-occupation-field-modal`)).toBeVisible();
|
|
44
|
+
else await expect(page.getByTestId(`${testId}-occupation`)).toBeVisible();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('Finder search with promocode', async ({ isMobile, page }) => {
|
|
48
|
+
await calendar({ isMobile, page, testId });
|
|
49
|
+
await promocode({ isMobile, page, testId });
|
|
50
|
+
|
|
51
|
+
await page.getByTestId(`${testId}-submit`).click();
|
|
52
|
+
|
|
53
|
+
await expect(page).toHaveURL(/.*step1-rates/, { timeout: 15000 });
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
test('Finder search with adult added and promocode', async ({ isMobile, page }) => {
|
|
57
|
+
await calendar({ isMobile, page, testId });
|
|
58
|
+
await occupation({ addAdult: true, isMobile, page, testId });
|
|
59
|
+
await promocode({ isMobile, page, testId });
|
|
60
|
+
|
|
61
|
+
await page.getByTestId(`${testId}-submit`).click();
|
|
62
|
+
|
|
63
|
+
await expect(page).toHaveURL(/.step1-rates/, { timeout: 20000 });
|
|
64
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { getWeekNumber } from '../../helpers';
|
|
2
|
+
|
|
3
|
+
export const calendar = async ({ page, testId }) => {
|
|
4
|
+
const week = getWeekNumber(new Date()) + 1;
|
|
5
|
+
|
|
6
|
+
await page.getByTestId(`${testId}-calendar-field`).click();
|
|
7
|
+
await page.getByTestId(`${testId}-calendar-2024-${week}-0`).click();
|
|
8
|
+
await page.getByTestId(`${testId}-calendar-2024-${week}-5`).click();
|
|
9
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const occupation = async ({ addAdult, addAgeChild = true, addChild, isMobile, page, testId }) => {
|
|
2
|
+
await page.getByTestId(`${testId}-occupation-field`).click();
|
|
3
|
+
if (addAdult) {
|
|
4
|
+
await page.getByTestId('group-0-button-max').click();
|
|
5
|
+
}
|
|
6
|
+
if (addChild) {
|
|
7
|
+
await page.getByTestId('group-1-button-max').click();
|
|
8
|
+
addAgeChild && (await page.getByTestId('group-1-select-0').selectOption('1'));
|
|
9
|
+
}
|
|
10
|
+
if (isMobile) {
|
|
11
|
+
await page.getByTestId(`${testId}-occupation-field-modal-button-close`).click();
|
|
12
|
+
}
|
|
13
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const promocode = async ({ isMobile, page, testId }) => {
|
|
2
|
+
await page.getByTestId(`${testId}-promocode`).click();
|
|
3
|
+
await page.getByTestId('finder-promocode-input').fill('test');
|
|
4
|
+
|
|
5
|
+
if (isMobile) {
|
|
6
|
+
await page.getByTestId(`${testId}-promocode-modal-button-close`).click();
|
|
7
|
+
}
|
|
8
|
+
};
|