Skip to content

Commit c3a0eeb

Browse files
f-alizadaFarhad Alizada
andauthored
Remove not needed async and wait for the server listen event before test run (#2209)
* Remove no needed async and wait for the server listen event before test run * Listen to console errors in tests * Use node 18 * Add incognito option for browser * Clear user directory before test start --------- Co-authored-by: Farhad Alizada <falizada@microsoft.com>
1 parent 518c428 commit c3a0eeb

File tree

11 files changed

+103
-54
lines changed

11 files changed

+103
-54
lines changed

.github/workflows/test.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ jobs:
2525
steps:
2626
- name: Checkout code
2727
uses: actions/checkout@v3
28-
28+
- name: Setup Node.js 18
29+
uses: actions/setup-node@v3
30+
with:
31+
node-version: 18
2932
- name: Install
3033
run: npm install
3134

src/config.validate.runtime.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"environment": "runtime",
3-
"managementApiUrl": "http://localhost:8181/subscriptions/sid/resourceGroups/rgid/providers/Microsoft.ApiManagement/service/sid",
4-
"backendUrl": "http://localhost:8080/"
3+
"managementApiUrl": "http://127.0.0.1:8181/subscriptions/sid/resourceGroups/rgid/providers/Microsoft.ApiManagement/service/sid",
4+
"backendUrl": "http://127.0.0.1:8080/"
55
}

tests/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ export const BrowserLaunchOptions: LaunchOptions & BrowserLaunchArgumentOptions
66
product: "chrome",
77
devtools: true,
88
userDataDir: "/puppeteer-data-dir", // necessary for persistent user preferences
9+
args: [ '--incognito' ]
910
};

tests/e2e/runtime/apis.spec.ts

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,27 @@ describe("Apis page", async () => {
1717
browser = await puppeteer.launch(BrowserLaunchOptions);
1818
});
1919
after(async () => {
20-
browser.close();
20+
await browser.close();
2121
Utils.closeServer(server);
2222
});
2323

24-
it("User can see apis on the page", async () => {
24+
it("User can see apis on the page", async () =>{
2525
var apis = new Apis();
2626
apis.addApi(Api.getRandomApi());
2727
apis.addApi(Api.getRandomApi());
28-
server = await Utils.createMockServer([apis.getApisListResponse()]);
29-
30-
const page = await browser.newPage();
31-
await page.goto(config.urls.apis);
32-
33-
const apiWidget = new ApisWidget(page);
34-
await apiWidget.apis();
35-
36-
expect(await apiWidget.getApisCount()).to.equal(apis.apiList.length);
28+
server = Utils.createMockServer([apis.getApisListResponse()]);
29+
30+
async function validate(){
31+
const page = await Utils.getBrowserNewPage(browser);
32+
33+
await page.goto(config.urls.apis);
34+
35+
const apiWidget = new ApisWidget(page);
36+
await apiWidget.apis();
37+
38+
expect(await apiWidget.getApisCount()).to.equal(apis.apiList.length);
39+
}
40+
41+
await Utils.startTest(server, validate);
3742
});
3843
});

tests/e2e/runtime/products.spec.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ describe("Products page", async () => {
1717
browser = await puppeteer.launch(BrowserLaunchOptions);
1818
});
1919
after(async () => {
20-
browser.close();
20+
await browser.close();
2121
Utils.closeServer(server);
2222
});
2323

@@ -26,14 +26,17 @@ describe("Products page", async () => {
2626
products.addProduct(Product.getStartedProduct());
2727
products.addProduct(Product.getUnlimitedProduct());
2828

29-
server = await Utils.createMockServer([products.getProductListResponse()]);
29+
server = Utils.createMockServer([products.getProductListResponse()]);
3030

31-
const page = await browser.newPage();
32-
await page.goto(config.urls.products);
31+
async function validate(){
32+
const page = await Utils.getBrowserNewPage(browser);
33+
await page.goto(config.urls.products);
3334

34-
const productWidget = new ProductseWidget(page);
35-
await productWidget.products();
35+
const productWidget = new ProductseWidget(page);
36+
await productWidget.products();
3637

37-
expect(await productWidget.getProductsCount()).to.equal(products.productList.length);
38+
expect(await productWidget.getProductsCount()).to.equal(products.productList.length);
39+
}
40+
await Utils.startTest(server, validate);
3841
});
3942
});

tests/e2e/runtime/profile.spec.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,27 @@ describe("User profile", async () => {
1717
browser = await puppeteer.launch(BrowserLaunchOptions);
1818
});
1919
after(async () => {
20-
browser.close();
20+
await browser.close();
2121
Utils.closeServer(server);
2222
});
2323

2424
it("User can visit his profile page", async () => {
2525
var userInfo = new UserMockData();
26-
server = await Utils.createMockServer([await userInfo.getSignInResponse(), userInfo.getUserInfoResponse()]);
27-
const page = await browser.newPage();
26+
server = Utils.createMockServer([ userInfo.getSignInResponse(), userInfo.getUserInfoResponse()]);
2827

29-
await signIn(page, config);
30-
expect(page.url()).to.equal(config.urls.home);
28+
async function validate(){
29+
const page = await Utils.getBrowserNewPage(browser);
3130

32-
await page.goto(config.urls.profile);
31+
await signIn(page, config);
32+
expect(page.url()).to.equal(config.urls.home);
3333

34-
const profileWidget = new ProfileWidget(page);
35-
await profileWidget.profile();
34+
await page.goto(config.urls.profile);
3635

37-
expect(await profileWidget.getUserEmail()).to.equal(userInfo.email);
36+
const profileWidget = new ProfileWidget(page);
37+
await profileWidget.profile();
38+
39+
expect(await profileWidget.getUserEmail()).to.equal(userInfo.email);
40+
}
41+
await Utils.startTest(server, validate);
3842
});
3943
});

tests/e2e/runtime/signin.spec.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,13 @@ describe("User sign-in flow", async () => {
2929

3030
it("User can sign-in with basic credentials", async () => {
3131
var userInfo = new UserMockData();
32-
server = await Utils.createMockServer([await userInfo.getSignInResponse()]);
33-
const page = await browser.newPage();
34-
await signIn(page, config);
35-
expect(page.url()).to.equal(config.urls.home);
32+
server = Utils.createMockServer([userInfo.getSignInResponse()]);
33+
async function validate(){
34+
const page = await Utils.getBrowserNewPage(browser);
35+
await signIn(page, config);
36+
expect(page.url()).to.equal(config.urls.home);
37+
}
38+
39+
await Utils.startTest(server, validate);
3640
});
3741
});

tests/e2e/runtime/signup.spec.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,26 @@ describe("User sign-up flow", async () => {
1616
browser = await puppeteer.launch(BrowserLaunchOptions);
1717
});
1818
after(async () => {
19-
browser.close();
19+
await browser.close();
2020
Utils.closeServer(server);
2121
});
2222

2323
it("User can sign-up with basic credentials", async () => {
2424
var userInfo = new UserMockData();
25-
server = await Utils.createMockServer([await userInfo.getUserRegisterResponse("email", "name", "lastname")]);
26-
const page = await browser.newPage();
27-
await page.goto(config.urls.signup);
25+
server = Utils.createMockServer([userInfo.getUserRegisterResponse("email", "name", "lastname")]);
2826

29-
const signUpWidget = new SignupBasicWidget(page);
30-
await signUpWidget.signUpWithBasic();
27+
async function validate(){
28+
const page = await Utils.getBrowserNewPage(browser);
29+
await page.goto(config.urls.signup);
3130

32-
expect(await signUpWidget.getConfirmationMessageValue())
31+
const signUpWidget = new SignupBasicWidget(page);
32+
await signUpWidget.signUpWithBasic();
33+
34+
expect(await signUpWidget.getConfirmationMessageValue())
3335
.to.equal("Follow the instructions from the email to verify your account.");
36+
}
37+
38+
await Utils.startTest(server, validate);
3439
});
3540

3641
});

tests/mocks/collection/user.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export class UserMockData{
88
this.publicId = "example-example-example";
99
}
1010

11-
public async getSignInResponse(){
11+
public getSignInResponse(){
1212
return {
1313
"/subscriptions/sid/resourceGroups/rgid/providers/Microsoft.ApiManagement/service/sid/identity":{
1414
"headers": [
@@ -18,7 +18,7 @@ export class UserMockData{
1818
},
1919
{
2020
"name": "ocp-apim-sas-token",
21-
"value": await Utils.getSharedAccessToken(this.publicId, "accesskey", 1)
21+
"value": Utils.getSharedAccessToken(this.publicId, "accesskey", 1)
2222
}
2323
],
2424
"statusCode": 200,

tests/utils.ts

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as fs from "fs";
22
import * as crypto from "crypto";
3-
import { User } from "./mocks";
43
import * as http from "http";
4+
import { ConsoleMessage, Page } from 'puppeteer';
55

66
export class Utils {
77
public static async getConfig(): Promise<any> {
@@ -14,7 +14,7 @@ export class Utils {
1414
return validationConfig;
1515
}
1616

17-
public static async getSharedAccessToken(apimUid: string, apimAccessKey: string, validDays: number): Promise<string> {
17+
public static getSharedAccessToken(apimUid: string, apimAccessKey: string, validDays: number): string {
1818
const expiryDate = new Date();
1919
expiryDate.setDate(expiryDate.getDate() + validDays);
2020

@@ -38,7 +38,7 @@ export class Utils {
3838
return result;
3939
}
4040

41-
public static async createMockServer(responses?: Object[]) {
41+
public static createMockServer(responses?: Object[]) {
4242
var obj = {};
4343
if (responses?.length){
4444
for (let responseObj of responses) {
@@ -72,10 +72,40 @@ export class Utils {
7272
}
7373
});
7474

75-
server.listen(8181);
7675
return server;
7776
}
7877
public static closeServer(server){
79-
server.close();
78+
if (server != null){
79+
server.close();
80+
}
81+
}
82+
83+
public static startTest(server, validate): Promise<void>{
84+
return new Promise((resolve, reject) => {
85+
server.on("ready", () => {
86+
validate().then(() => {
87+
resolve();
88+
}).catch((err) => {
89+
reject(err);
90+
});
91+
});
92+
93+
server.listen(8181,"127.0.0.1", function(){
94+
server.emit("ready");
95+
});
96+
});
8097
}
98+
99+
public static async getBrowserNewPage(browser): Promise<Page>{
100+
const page = await browser.newPage();
101+
102+
page.on('console', async (message: ConsoleMessage) => {
103+
if (message.type() === 'error') {
104+
console.error(message.text());
105+
}
106+
});
107+
108+
return page;
109+
}
110+
81111
}

0 commit comments

Comments
 (0)