Skip to content

Commit 5fdd9ce

Browse files
committed
add order test.
1 parent cc57cdf commit 5fdd9ce

7 files changed

+1267
-0
lines changed

tests/order/service-order.spec.ts

+203
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
import { expect, test } from '@playwright/test';
2+
import { isElementFullyVisibleInsideViewport } from '../utils/common/view-port-validation.ts';
3+
import { loadConnectionRefusedMock } from '../utils/mocks/common-errors-mock.ts';
4+
import { catalogServicesUrl } from '../utils/mocks/endpoints.ts';
5+
import {
6+
mockDeployDetailsSuccessResponse,
7+
mockDeployFailedResponse,
8+
mockDeploySuccessResponse,
9+
mockDeployTaskStatusSuccessResponse,
10+
mockMyServicesSuccessResponse,
11+
mockRetryDeployFailedResponse,
12+
mockSelectAzsSuccessResponse,
13+
mockSelectPriceSuccessResponse,
14+
mockSelectServicesSuccessResponse,
15+
mockServicesSuccessResponse,
16+
mockVmResourceSuccessResponse,
17+
} from '../utils/mocks/service-order-mock.ts';
18+
import { HomePage } from '../utils/pages/HomePage.ts';
19+
import { LayoutHeaderPage } from '../utils/pages/LayoutHeaderPage.ts';
20+
import { MyServicesPage } from '../utils/pages/MyServicesPage.ts';
21+
import { OrderSubmitPage } from '../utils/pages/OrderSubmitPage.ts';
22+
import { SelectServicePage } from '../utils/pages/SelectServicePage.ts';
23+
import { ServiceOrderPage } from '../utils/pages/ServiceOrderPage.ts';
24+
25+
test('Submenu should load services data', async ({ page, baseURL }) => {
26+
const homePage = new HomePage(page, baseURL);
27+
await homePage.openHomePage();
28+
const layoutHeader = new LayoutHeaderPage(page);
29+
await layoutHeader.switchUserRole('user');
30+
await mockServicesSuccessResponse(page, 0);
31+
let apiCallCount = 0;
32+
page.on('request', (request) => {
33+
if (request.url().includes(catalogServicesUrl)) {
34+
apiCallCount++;
35+
}
36+
});
37+
const servicesPage = new ServiceOrderPage(page);
38+
await servicesPage.clickServicesButton();
39+
await page.waitForTimeout(2000);
40+
await servicesPage.clickComputeMenuItem();
41+
await page.waitForTimeout(2000);
42+
expect(apiCallCount, 'New API call must be done when submenu button is clicked.').toBe(1);
43+
});
44+
45+
test('deploy service successfully', async ({ page, baseURL }) => {
46+
const homePage = new HomePage(page, baseURL);
47+
await homePage.openHomePage();
48+
const layoutHeader = new LayoutHeaderPage(page);
49+
await layoutHeader.switchUserRole('user');
50+
51+
await mockServicesSuccessResponse(page, 0);
52+
await mockSelectServicesSuccessResponse(page, 0);
53+
await mockSelectAzsSuccessResponse(page, 0);
54+
await mockSelectPriceSuccessResponse(page, 0);
55+
await mockDeploySuccessResponse(page, 0);
56+
await mockDeployTaskStatusSuccessResponse(page, 0);
57+
await mockDeployDetailsSuccessResponse(page, 0);
58+
await mockVmResourceSuccessResponse(page, 0);
59+
await mockMyServicesSuccessResponse(page, 0);
60+
61+
const servicesPage = new ServiceOrderPage(page);
62+
await servicesPage.clickServicesButton();
63+
await page.waitForTimeout(1000);
64+
await servicesPage.clickComputeMenuItem();
65+
await page.waitForTimeout(1000);
66+
await servicesPage.clickComputeServiceButton();
67+
await page.waitForTimeout(1000);
68+
69+
await page.evaluate(() => {
70+
window.location.href = `/services/createService?serviceName=terraform-ecs&latestVersion=1.0.0#compute`;
71+
});
72+
73+
await page.waitForLoadState('networkidle');
74+
await expect(page).toHaveURL(/.*\/services\/createService\?serviceName=terraform-ecs&latestVersion=1.0.0#compute/);
75+
76+
const selectServicePage = new SelectServicePage(page);
77+
await selectServicePage.selectNextButton();
78+
79+
await page.evaluate(() => {
80+
window.location.href = `/services/createService/orderSubmit?serviceName=terraform-ecs&version=1.0.0#compute`;
81+
});
82+
83+
await page.waitForLoadState('networkidle');
84+
await expect(page).toHaveURL(
85+
/.*\/services\/createService\/orderSubmit\?serviceName=terraform-ecs&version=1.0.0#compute/
86+
);
87+
const orderSubmitPage = new OrderSubmitPage(page);
88+
89+
await orderSubmitPage.selectTerms();
90+
await orderSubmitPage.fillServiceName('testtesttest');
91+
92+
await orderSubmitPage.clickDeployButton();
93+
await page.waitForTimeout(3000);
94+
const successResult = orderSubmitPage.successResult;
95+
await expect(successResult).toBeVisible();
96+
const successEndpointsResult = orderSubmitPage.successEndpointsResult;
97+
await expect(successEndpointsResult).toBeVisible();
98+
const successEcsHostResult = orderSubmitPage.successEcsHostResult;
99+
await expect(successEcsHostResult).toBeVisible();
100+
const successEcsPublicIpResult = orderSubmitPage.successEcsPublicIpResult;
101+
await expect(successEcsPublicIpResult).toBeVisible();
102+
const successAdminPasswdResult = orderSubmitPage.successAdminPasswdResult;
103+
await expect(successAdminPasswdResult).toBeVisible();
104+
await page.waitForTimeout(1000);
105+
106+
await orderSubmitPage.clickServiceId();
107+
await page.evaluate(() => {
108+
const url = '/myServices';
109+
window.history.pushState(
110+
{ from: '/services/createService/orderSubmit', serviceIds: ['868326e9-3611-43d6-ad88-c15d514f3f57'] },
111+
'',
112+
url
113+
);
114+
window.dispatchEvent(new PopStateEvent('popstate'));
115+
});
116+
117+
await page.waitForLoadState('networkidle');
118+
await expect(page).toHaveURL('/myServices');
119+
await page.waitForTimeout(1000);
120+
const myServicesPage = new MyServicesPage(page);
121+
const idCellText = await myServicesPage.getIdCell();
122+
expect(idCellText, 'Id cell text must match expected value.').toBe('86832...');
123+
});
124+
125+
test('deploy service failed', async ({ page, baseURL }) => {
126+
const homePage = new HomePage(page, baseURL);
127+
await homePage.openHomePage();
128+
const layoutHeader = new LayoutHeaderPage(page);
129+
await layoutHeader.switchUserRole('user');
130+
131+
await mockServicesSuccessResponse(page, 0);
132+
await mockSelectServicesSuccessResponse(page, 0);
133+
await mockSelectAzsSuccessResponse(page, 0);
134+
await mockSelectPriceSuccessResponse(page, 0);
135+
await mockDeployFailedResponse(page, 0);
136+
await mockRetryDeployFailedResponse(page, 0);
137+
138+
const servicesPage = new ServiceOrderPage(page);
139+
await servicesPage.clickServicesButton();
140+
await page.waitForTimeout(1000);
141+
await servicesPage.clickComputeMenuItem();
142+
await page.waitForTimeout(1000);
143+
await servicesPage.clickComputeServiceButton();
144+
await page.waitForTimeout(1000);
145+
146+
await page.evaluate(() => {
147+
const serviceName = 'terraform-ecs';
148+
const latestVersion = '1.0.0';
149+
const url = `/services/createService?serviceName=${serviceName}&latestVersion=${latestVersion}#compute`;
150+
window.location.href = url;
151+
});
152+
153+
await page.waitForLoadState('networkidle');
154+
await expect(page).toHaveURL(/.*\/services\/createService\?serviceName=terraform-ecs&latestVersion=1.0.0#compute/);
155+
156+
const selectServicePage = new SelectServicePage(page);
157+
await selectServicePage.selectNextButton();
158+
159+
await page.evaluate(() => {
160+
const serviceName = 'terraform-ecs';
161+
const version = '1.0.0';
162+
const url = `/services/createService/orderSubmit?serviceName=${serviceName}&version=${version}#compute`;
163+
window.location.href = url;
164+
});
165+
166+
await page.waitForLoadState('networkidle');
167+
await expect(page).toHaveURL(
168+
/.*\/services\/createService\/orderSubmit\?serviceName=terraform-ecs&version=1.0.0#compute/
169+
);
170+
const orderSubmitPage = new OrderSubmitPage(page);
171+
172+
await orderSubmitPage.selectTerms();
173+
await orderSubmitPage.fillServiceName('testtesttest');
174+
175+
await orderSubmitPage.clickDeployButton();
176+
await page.waitForTimeout(3000);
177+
const backendErrorResult = orderSubmitPage.backendErrorAlert;
178+
await expect(backendErrorResult).toBeVisible();
179+
await orderSubmitPage.clickRetryRequestButton();
180+
await page.waitForTimeout(5000);
181+
const errorResult = orderSubmitPage.errorResult;
182+
await expect(errorResult).toBeVisible();
183+
});
184+
185+
test('show error alert when backend is not reachable', async ({ page, baseURL }) => {
186+
const homePage = new HomePage(page, baseURL);
187+
await homePage.openHomePage();
188+
const layoutHeader = new LayoutHeaderPage(page);
189+
await layoutHeader.switchUserRole('user');
190+
await loadConnectionRefusedMock(page, catalogServicesUrl);
191+
const servicesPage = new ServiceOrderPage(page);
192+
await servicesPage.clickServicesButton();
193+
await servicesPage.clickComputeMenuItem();
194+
await page.waitForTimeout(3000);
195+
const errorAlert = servicesPage.backendErrorAlert;
196+
await expect(errorAlert).toBeVisible();
197+
expect(await isElementFullyVisibleInsideViewport(page, errorAlert), 'Error alert must be fully visible.').toBe(
198+
true
199+
);
200+
await mockServicesSuccessResponse(page, 2000);
201+
await servicesPage.clickRetryRequestButton();
202+
await expect(errorAlert, 'Alert should be removed during and after successful reload').not.toBeVisible();
203+
});

tests/utils/mocks/endpoints.ts

+16
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,19 @@ export const credentialsCapabilitiesUrl =
99
export const credentialsDeleteUrl =
1010
'http://localhost:8080/xpanse/isv/credentials?cspName=HuaweiCloud&siteName=International&type=variables&name=AK_SK';
1111
export const stackCheckUrl = 'http://localhost:8080/xpanse/stack/health';
12+
export const catalogServicesUrl = 'http://localhost:8080/xpanse/catalog/services?categoryName=compute';
13+
export const selectServiceUrl =
14+
'http://localhost:8080/xpanse/catalog/services?categoryName=compute&serviceName=terraform-ecs';
15+
export const selectAzsUrl =
16+
'http://localhost:8080/xpanse/csp/region/azs?cspName=HuaweiCloud&siteName=Chinese%20Mainland&regionName=cn-southwest-2&serviceTemplateId=10c2baff-36a8-4ea9-9041-b51409b0f291';
17+
export const selectPriceUrl =
18+
'http://localhost:8080/xpanse/pricing/service/10c2baff-36a8-4ea9-9041-b51409b0f291/cn-southwest-2/Chinese%20Mainland/Pay%20per%20Use';
19+
export const deployServiceUrl = 'http://localhost:8080/xpanse/services';
20+
export const deployTaskStatusUrl =
21+
'http://localhost:8080/xpanse/services/orders/9c830b70-c2d5-4608-9dea-826becd122bb/status';
22+
export const deployDetailsUrl =
23+
'http://localhost:8080/xpanse/services/details/self_hosted/868326e9-3611-43d6-ad88-c15d514f3f57';
24+
export const myServicesDetailsUrl = 'http://localhost:8080/xpanse/services/details';
25+
export const vmResourceUrl =
26+
'http://localhost:8080/xpanse/csp/resources/vm?csp=HuaweiCloud&siteName=Chinese%20Mainland&regionName=cn-southwest-2';
27+
export const retryDeployUrl = 'http://localhost:8080/xpanse/services/deploy/retry/868326e9-3611-43d6-ad88-c15d514f3f57';

0 commit comments

Comments
 (0)