From 8c2a755f848c536c2e27cf473f0f3848a82ccebb Mon Sep 17 00:00:00 2001 From: "Juan Picado @jotadeveloper" Date: Sat, 10 Feb 2018 09:16:24 +0100 Subject: [PATCH] test(e2e): add test scenario to login user --- circle.yml | 1 - package.json | 3 +- src/webui/src/components/Header/index.js | 10 +-- test/e2e/config-e2e.yaml | 4 + test/e2e/e2e.spec.js | 73 +++++++++++++++++-- test/e2e/setup.js | 2 +- test/e2e/store-e2e/.sinopia-db.json | 1 - .../__snapshots__/header.spec.js.snap | 2 +- yarn.lock | 12 ++- 9 files changed, 90 insertions(+), 18 deletions(-) delete mode 100644 test/e2e/store-e2e/.sinopia-db.json diff --git a/circle.yml b/circle.yml index 2b5307e29..09da5ce59 100644 --- a/circle.yml +++ b/circle.yml @@ -29,7 +29,6 @@ test: - yarn run test - nvm alias default 8 - yarn run test - - yarn run test:e2e - nvm alias default 9 - yarn run test - yarn run test:e2e diff --git a/package.json b/package.json index c826082e5..f442ba392 100644 --- a/package.json +++ b/package.json @@ -126,6 +126,7 @@ "supertest": "3.0.0", "url-loader": "0.6.2", "verdaccio-auth-memory": "^0.0.4", + "verdaccio-memory": "0.0.3", "webpack": "3.10.0", "webpack-dev-server": "2.11.1", "webpack-merge": "4.1.1" @@ -147,7 +148,7 @@ "flow": "flow", "pretest": "npm run code:build", "test": "cross-env NODE_ENV=test BABEL_ENV=test jest --maxWorkers 2", - "test:e2e": "cross-env npm run code-test:build && BABEL_ENV=registry jest --config ./jest.e2e.config.js --maxWorkers 2", + "test:e2e": "npm run code-test:build && cross-env BABEL_ENV=registry jest --config ./jest.e2e.config.js --maxWorkers 2", "test:unit": "cross-env NODE_ENV=test BABEL_ENV=test jest '(/test/unit.*\\.spec|/test/webui/.*\\.spec)\\.js' --maxWorkers 2", "test:func": "cross-env NODE_ENV=test BABEL_ENV=test jest '(/test/functional.*\\.func)\\.js' --maxWorkers 2", "pre:ci": "npm run lint && npm run build:webui", diff --git a/src/webui/src/components/Header/index.js b/src/webui/src/components/Header/index.js index 02d75e6d4..397fed3d9 100644 --- a/src/webui/src/components/Header/index.js +++ b/src/webui/src/components/Header/index.js @@ -129,13 +129,13 @@ export default class Header extends React.Component { if (!this.isTokenExpire) { // TODO: Check jwt token expire return (
- Hi, {storage.getItem('username')} + Hi, {storage.getItem('username')}   - +
); } else { - return ; + return ; } } @@ -175,10 +175,10 @@ export default class Header extends React.Component { - - diff --git a/test/e2e/config-e2e.yaml b/test/e2e/config-e2e.yaml index 3e3956570..27deb9233 100644 --- a/test/e2e/config-e2e.yaml +++ b/test/e2e/config-e2e.yaml @@ -4,6 +4,10 @@ web: enable: true title: verdaccio-server-e2e +store: + memory: + cache: true + auth: auth-memory: users: diff --git a/test/e2e/e2e.spec.js b/test/e2e/e2e.spec.js index 6437e24ad..8861f752d 100644 --- a/test/e2e/e2e.spec.js +++ b/test/e2e/e2e.spec.js @@ -1,12 +1,13 @@ -const timeout = 5000; - describe('/ (Verdaccio Page)', () => { let page; + // this might be increased based on the delays included in all test + jest.setTimeout(10000); beforeAll(async () => { page = await global.__BROWSER__.newPage(); await page.goto('http://0.0.0.0:55558'); - }, timeout); + page.on('console', msg => console.log('PAGE LOG:', msg.text())); + }); afterAll(async () => { await page.close() @@ -17,6 +18,66 @@ describe('/ (Verdaccio Page)', () => { expect(text).toContain('adduser'); }) - }, - timeout -); + + it('should match npm adduser and set registry on header', async () => { + let text = await page.evaluate(() => document.querySelector('figure').textContent); + expect(text).toMatch('npm set registry http://0.0.0.0:55558'); + expect(text).toMatch('npm adduser --registry http://0.0.0.0:55558'); + }) + + + it('should match title with no packages published', async () => { + let text = await page.evaluate(() => document.querySelector('.container h1').textContent); + expect(text).toMatch('No Package Published Yet'); + }) + + it('should match title with first step', async () => { + let text = await page.evaluate(() => document.querySelector('#adduser code').textContent); + expect(text).toMatch('npm adduser --registry http://0.0.0.0:55558'); + }) + + it('should match title with second step', async () => { + let text = await page.evaluate(() => document.querySelector('#publish code').textContent); + expect(text).toMatch('npm publish --registry http://0.0.0.0:55558'); + }) + + it('should match button Login to sign in', async () => { + let text = await page.evaluate(() => document.querySelector('header button > span').textContent); + expect(text).toMatch('Login'); + }) + + it('should click on sign in button', async () => { + const signInButton = await page.$('header button'); + await signInButton.click(); + const signInDialog = await page.$('header .el-dialog__wrapper'); + + expect(signInDialog).not.toBeNull(); + }) + + it('should log in an user test', async () => { + // we open the dialog + const signInButton = await page.$('header button'); + await signInButton.click({button: 'middle', delay: 100}); + await page.waitFor(500); + // we fill the sign in form + const signInDialog = await page.$('.el-dialog'); + const userInput = await signInDialog.$('input[type=text]'); + expect(userInput).not.toBeNull(); + const passInput = await signInDialog.$('input[type=password]'); + expect(passInput).not.toBeNull(); + await userInput.type('test', {delay: 100}); + await passInput.type('test', {delay: 100}); + await passInput.dispose(); + // click on log in + const loginButton = await page.$('.login-button'); + expect(loginButton).toBeDefined(); + await loginButton.focus(); + await loginButton.click({delay: 100}); + await page.waitFor(500); + // check whether user is logged + const greetings = await page.evaluate(() => document.querySelector('.user-logged-greetings').textContent); + const buttonLogout = await page.$('.header-button-logout'); + expect(greetings).toMatch('Hi, test'); + expect(buttonLogout).toBeDefined(); + }) + }); diff --git a/test/e2e/setup.js b/test/e2e/setup.js index cb4c7c652..40365d653 100644 --- a/test/e2e/setup.js +++ b/test/e2e/setup.js @@ -20,7 +20,7 @@ module.exports = async function() { const fork = await process1.init(); console.log(chalk.green('Setup Puppeteer')); - const browser = await puppeteer.launch({}); + const browser = await puppeteer.launch(); global.__BROWSER__ = browser; global.__VERDACCIO_E2E__ = fork[0]; mkdirp.sync(DIR); diff --git a/test/e2e/store-e2e/.sinopia-db.json b/test/e2e/store-e2e/.sinopia-db.json deleted file mode 100644 index 14b990508..000000000 --- a/test/e2e/store-e2e/.sinopia-db.json +++ /dev/null @@ -1 +0,0 @@ -{"list":[],"secret":"d51457fa8526d9ca3e00289433746e39f445cff4640409d4ba305e0232e13ae7"} \ No newline at end of file diff --git a/test/webui/components/__snapshots__/header.spec.js.snap b/test/webui/components/__snapshots__/header.spec.js.snap index 2d13c0cc4..3b7b8105f 100644 --- a/test/webui/components/__snapshots__/header.spec.js.snap +++ b/test/webui/components/__snapshots__/header.spec.js.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`
snapshot test shoud match snapshot 1`] = `"
npm set registry nullblank
npm adduser --registry nullblank
Login



"`; +exports[`
snapshot test shoud match snapshot 1`] = `"
npm set registry nullblank
npm adduser --registry nullblank
Login



"`; diff --git a/yarn.lock b/yarn.lock index 881d6448d..7a8b76d56 100644 --- a/yarn.lock +++ b/yarn.lock @@ -200,7 +200,7 @@ lodash "4.17.4" mkdirp "0.5.1" -"@verdaccio/streams@0.0.2": +"@verdaccio/streams@0.0.2", "@verdaccio/streams@^0.0.2": version "0.0.2" resolved "https://registry.npmjs.org/@verdaccio/streams/-/streams-0.0.2.tgz#72cd65449e657b462a1ca094f663cad9ea872427" @@ -5598,7 +5598,7 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" -memory-fs@^0.4.0, memory-fs@~0.4.1: +memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" dependencies: @@ -8802,6 +8802,14 @@ verdaccio-auth-memory@^0.0.4: version "0.0.4" resolved "https://registry.npmjs.org/verdaccio-auth-memory/-/verdaccio-auth-memory-0.0.4.tgz#b44a65209778a8dc3c8d39478141a0bc22e04375" +verdaccio-memory@0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/verdaccio-memory/-/verdaccio-memory-0.0.3.tgz#8ba6b51f2cf93d67958fedad5feb3f1e19933e48" + dependencies: + "@verdaccio/streams" "^0.0.2" + http-errors "1.6.2" + memory-fs "^0.4.1" + verror@1.10.0: version "1.10.0" resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"