Skip to content

Commit 83d70c4

Browse files
committed
add order test.
1 parent cc57cdf commit 83d70c4

7 files changed

+1273
-0
lines changed

tests/order/service-order.spec.ts

+209
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
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+
const serviceName = 'terraform-ecs';
71+
const latestVersion = '1.0.0';
72+
const url = `/services/createService?serviceName=${serviceName}&latestVersion=${latestVersion}#compute`;
73+
window.location.href = url;
74+
});
75+
76+
await page.waitForLoadState('networkidle');
77+
await expect(page).toHaveURL(/.*\/services\/createService\?serviceName=terraform-ecs&latestVersion=1.0.0#compute/);
78+
79+
const selectServicePage = new SelectServicePage(page);
80+
await selectServicePage.selectNextButton();
81+
82+
await page.evaluate(() => {
83+
const serviceName = 'terraform-ecs';
84+
const version = '1.0.0';
85+
const url = `/services/createService/orderSubmit?serviceName=${serviceName}&version=${version}#compute`;
86+
window.location.href = url;
87+
});
88+
89+
await page.waitForLoadState('networkidle');
90+
await expect(page).toHaveURL(
91+
/.*\/services\/createService\/orderSubmit\?serviceName=terraform-ecs&version=1.0.0#compute/
92+
);
93+
const orderSubmitPage = new OrderSubmitPage(page);
94+
95+
await orderSubmitPage.selectTerms();
96+
await orderSubmitPage.fillServiceName('testtesttest');
97+
98+
await orderSubmitPage.clickDeployButton();
99+
await page.waitForTimeout(3000);
100+
const successResult = orderSubmitPage.successResult;
101+
await expect(successResult).toBeVisible();
102+
const successEndpointsResult = orderSubmitPage.successEndpointsResult;
103+
await expect(successEndpointsResult).toBeVisible();
104+
const successEcsHostResult = orderSubmitPage.successEcsHostResult;
105+
await expect(successEcsHostResult).toBeVisible();
106+
const successEcsPublicIpResult = orderSubmitPage.successEcsPublicIpResult;
107+
await expect(successEcsPublicIpResult).toBeVisible();
108+
const successAdminPasswdResult = orderSubmitPage.successAdminPasswdResult;
109+
await expect(successAdminPasswdResult).toBeVisible();
110+
await page.waitForTimeout(1000);
111+
112+
await orderSubmitPage.clickServiceId();
113+
await page.evaluate(() => {
114+
const url = '/myServices';
115+
window.history.pushState(
116+
{ from: '/services/createService/orderSubmit', serviceIds: ['868326e9-3611-43d6-ad88-c15d514f3f57'] },
117+
'',
118+
url
119+
);
120+
window.dispatchEvent(new PopStateEvent('popstate'));
121+
});
122+
123+
await page.waitForLoadState('networkidle');
124+
await expect(page).toHaveURL('/myServices');
125+
await page.waitForTimeout(1000);
126+
const myServicesPage = new MyServicesPage(page);
127+
const idCellText = await myServicesPage.getIdCell();
128+
expect(idCellText, 'Id cell text must match expected value.').toBe('86832...');
129+
});
130+
131+
test('deploy service failed', async ({ page, baseURL }) => {
132+
const homePage = new HomePage(page, baseURL);
133+
await homePage.openHomePage();
134+
const layoutHeader = new LayoutHeaderPage(page);
135+
await layoutHeader.switchUserRole('user');
136+
137+
await mockServicesSuccessResponse(page, 0);
138+
await mockSelectServicesSuccessResponse(page, 0);
139+
await mockSelectAzsSuccessResponse(page, 0);
140+
await mockSelectPriceSuccessResponse(page, 0);
141+
await mockDeployFailedResponse(page, 0);
142+
await mockRetryDeployFailedResponse(page, 0);
143+
144+
const servicesPage = new ServiceOrderPage(page);
145+
await servicesPage.clickServicesButton();
146+
await page.waitForTimeout(1000);
147+
await servicesPage.clickComputeMenuItem();
148+
await page.waitForTimeout(1000);
149+
await servicesPage.clickComputeServiceButton();
150+
await page.waitForTimeout(1000);
151+
152+
await page.evaluate(() => {
153+
const serviceName = 'terraform-ecs';
154+
const latestVersion = '1.0.0';
155+
const url = `/services/createService?serviceName=${serviceName}&latestVersion=${latestVersion}#compute`;
156+
window.location.href = url;
157+
});
158+
159+
await page.waitForLoadState('networkidle');
160+
await expect(page).toHaveURL(/.*\/services\/createService\?serviceName=terraform-ecs&latestVersion=1.0.0#compute/);
161+
162+
const selectServicePage = new SelectServicePage(page);
163+
await selectServicePage.selectNextButton();
164+
165+
await page.evaluate(() => {
166+
const serviceName = 'terraform-ecs';
167+
const version = '1.0.0';
168+
const url = `/services/createService/orderSubmit?serviceName=${serviceName}&version=${version}#compute`;
169+
window.location.href = url;
170+
});
171+
172+
await page.waitForLoadState('networkidle');
173+
await expect(page).toHaveURL(
174+
/.*\/services\/createService\/orderSubmit\?serviceName=terraform-ecs&version=1.0.0#compute/
175+
);
176+
const orderSubmitPage = new OrderSubmitPage(page);
177+
178+
await orderSubmitPage.selectTerms();
179+
await orderSubmitPage.fillServiceName('testtesttest');
180+
181+
await orderSubmitPage.clickDeployButton();
182+
await page.waitForTimeout(3000);
183+
const backendErrorResult = orderSubmitPage.backendErrorAlert;
184+
await expect(backendErrorResult).toBeVisible();
185+
await orderSubmitPage.clickRetryRequestButton();
186+
await page.waitForTimeout(5000);
187+
const errorResult = orderSubmitPage.errorResult;
188+
await expect(errorResult).toBeVisible();
189+
});
190+
191+
test('show error alert when backend is not reachable', async ({ page, baseURL }) => {
192+
const homePage = new HomePage(page, baseURL);
193+
await homePage.openHomePage();
194+
const layoutHeader = new LayoutHeaderPage(page);
195+
await layoutHeader.switchUserRole('user');
196+
await loadConnectionRefusedMock(page, catalogServicesUrl);
197+
const servicesPage = new ServiceOrderPage(page);
198+
await servicesPage.clickServicesButton();
199+
await servicesPage.clickComputeMenuItem();
200+
await page.waitForTimeout(3000);
201+
const errorAlert = servicesPage.backendErrorAlert;
202+
await expect(errorAlert).toBeVisible();
203+
expect(await isElementFullyVisibleInsideViewport(page, errorAlert), 'Error alert must be fully visible.').toBe(
204+
true
205+
);
206+
await mockServicesSuccessResponse(page, 2000);
207+
await servicesPage.clickRetryRequestButton();
208+
await expect(errorAlert, 'Alert should be removed during and after successful reload').not.toBeVisible();
209+
});

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)