OSDN Git Service

b947f8d659a1ac28c1c19cecc754d25df65a3086
[newslash/newslash.git] / browser-test / src / test / basic.js
1 const puppeteer = require('puppeteer');
2 const chai = require('chai');
3 const assert = chai.assert;
4
5 const baseUrl = process.env.TEST_HOST; // "https://newslash-dev:3000";
6 const chromiumArgs = ["--no-sandbox"];
7 const username = process.env.TEST_USER;
8 const password = process.env.TEST_PASSWORD;
9 const chromiumPath = process.env.CHROMIUM_PATH || null;
10
11 describe('Top Page', function () {
12   describe('login', function () {
13     assert.isAtLeast(username.length, 1, "usename length");
14     assert.isAtLeast(password.length, 1, "password length");
15     this.timeout(5000);
16
17     it('succeeds', async () => {
18       const browser = await puppeteer.launch({
19         executablePath: chromiumPath,
20         args: chromiumArgs,
21         ignoreHTTPSErrors: true,
22       });
23       const page = await browser.newPage();
24       page.setViewport({width: 1024, height: 800});
25
26       await page.goto(baseUrl);
27
28       // check popup shown
29       await page.click('#account-menu a.toggle-login-modal');
30       await page.waitForSelector('#login-modal', {timeout: 100});
31       assert.isTrue(await page.$eval('#login-modal', el => el.classList.contains("open")),
32              "show login modal");
33
34       // check popup close
35       await page.click('#login-modal form .btn-default');
36       await page.waitForSelector('#login-modal', {hidden: true, timeout: 100});
37       assert.isNotTrue(page.$eval('#login-modal', el => el.classList.contains("open")),
38              "close login modal");
39
40       // popup open
41       await page.click('#account-menu .toggle-login-modal');
42       await page.waitForSelector('#login-modal', {timeout: 100});
43
44       // input ID/pass
45       await page.type('#login-nickname', username);
46       await page.type('#login-passwd', password);
47       await page.click('#login-modal .dialog-footer .btn-primary');
48
49       // wait for load
50       await page.waitForNavigation();
51
52       // check login succeeded
53       const regex = new RegExp(`^\\s*${username}\\s*$`);
54       const uname = await page.$eval('#user-menu a', el => el.innerHTML.trim());
55       assert.match(uname, regex, "login succeed");
56
57       // done
58       await browser.close();
59     });
60   });
61 });
62
63