From f744c02c44f2b49979aca6b5f830c4a9055397ee Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Fri, 7 Feb 2020 13:57:32 +0100 Subject: [PATCH 1/7] e2e --- e2e/app.e2e-spec.ts | 14 ++++++++++---- e2e/app.po.ts | 2 +- e2e/helpers/server.po.ts | 20 ++++++++++++++++++++ e2e/servers.e2e-spec.ts | 27 +++++++++++++++++++++++++++ package.json | 2 ++ 5 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 e2e/helpers/server.po.ts create mode 100644 e2e/servers.e2e-spec.ts diff --git a/e2e/app.e2e-spec.ts b/e2e/app.e2e-spec.ts index 40a0b075..7e2a1898 100644 --- a/e2e/app.e2e-spec.ts +++ b/e2e/app.e2e-spec.ts @@ -1,14 +1,20 @@ import { Gns3WebUiPage } from './app.po'; -describe('gns3-web-ui App', () => { +describe('GNS3 Web UI Application', () => { let page: Gns3WebUiPage; beforeEach(() => { page = new Gns3WebUiPage(); }); - it('should display title', () => { - page.navigateTo(); - expect(page.getTitleText()).toEqual('GNS3 Web UI'); + it('should have correct page title', async () => { + // arrange + await page.navigateTo(); + + // act + let text = await page.getTitleText(); + + // assert + expect(text).toEqual('GNS3 Web UI'); }); }); diff --git a/e2e/app.po.ts b/e2e/app.po.ts index 458a6e6a..f0086fa6 100644 --- a/e2e/app.po.ts +++ b/e2e/app.po.ts @@ -6,7 +6,7 @@ export class Gns3WebUiPage { } getTitleText() { - return browser.getTitle(); + return browser.driver.getTitle(); } getParagraphText() { diff --git a/e2e/helpers/server.po.ts b/e2e/helpers/server.po.ts new file mode 100644 index 00000000..c7d6c71e --- /dev/null +++ b/e2e/helpers/server.po.ts @@ -0,0 +1,20 @@ +import { browser, by, element } from 'protractor'; + +export class ServersPage { + maximizeWindow() { + browser.driver.manage().window().maximize(); + } + + navigateToServersPage() { + return browser.get('/servers'); + } + + getAddServerNotificationText() { + return browser.driver.findElement(by.className('mat-card-content')).getText(); + // return element(by.className('mat-card-content')[0]).getText(); + } + + checkServersTable() { + return browser.driver.findElement(by.className('mat-cell cdk-column-id mat-column-id ng-star-inserted')).getText(); + } +} diff --git a/e2e/servers.e2e-spec.ts b/e2e/servers.e2e-spec.ts new file mode 100644 index 00000000..ced12d32 --- /dev/null +++ b/e2e/servers.e2e-spec.ts @@ -0,0 +1,27 @@ +import { ServersPage } from './helpers/server.po'; + +describe('gns3-web-ui App', () => { + let page: ServersPage; + + beforeEach(() => { + page = new ServersPage(); + }); + + it('should be able to add server', async () => { + // arrange + page.maximizeWindow(); + await page.navigateToServersPage(); + + // act + let text = await page.getAddServerNotificationText(); + + // assert + expect(text).toBe("We've discovered GNS3 server on 127.0.0.1:3080, would you like to add to the list?"); + + // let firstRowOfServersTable = await page.checkServersTable(); + + // console.log('answer ********************* ', firstRowOfServersTable); + + // expect(true).toBe(true); + }); +}); diff --git a/package.json b/package.json index f973a565..cca64095 100644 --- a/package.json +++ b/package.json @@ -85,6 +85,8 @@ }, "devDependencies": { "@angular-devkit/build-angular": "^0.803.10", + "@angular-devkit/core": "^8.3.23", + "@angular-devkit/schematics": "^8.3.23", "@angular/cli": "^8.3.10", "@angular/compiler-cli": "^8.2.11", "@angular/language-service": "^8.2.11", From fce7241bb2683f39d61e4868c0c222d6c2bb567f Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Fri, 7 Feb 2020 16:52:12 +0100 Subject: [PATCH 2/7] e2e --- e2e/helpers/common.po.ts | 7 +++++++ e2e/helpers/server.po.ts | 7 ++++++- e2e/servers.e2e-spec.ts | 33 ++++++++++++++++++++++++++++----- 3 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 e2e/helpers/common.po.ts diff --git a/e2e/helpers/common.po.ts b/e2e/helpers/common.po.ts new file mode 100644 index 00000000..01aa08ce --- /dev/null +++ b/e2e/helpers/common.po.ts @@ -0,0 +1,7 @@ +import { browser, by, element } from 'protractor'; + +export class TestHelper { + sleep(value: number) { + browser.sleep(value); + } +} diff --git a/e2e/helpers/server.po.ts b/e2e/helpers/server.po.ts index c7d6c71e..82827a3c 100644 --- a/e2e/helpers/server.po.ts +++ b/e2e/helpers/server.po.ts @@ -14,7 +14,12 @@ export class ServersPage { // return element(by.className('mat-card-content')[0]).getText(); } + async clickAddServer() { + let buttons = await browser.driver.findElements(by.className('mat-button mat-button-base')); + await buttons[3].click(); + } + checkServersTable() { - return browser.driver.findElement(by.className('mat-cell cdk-column-id mat-column-id ng-star-inserted')).getText(); + return browser.driver.findElements(by.css('mat-cell')); } } diff --git a/e2e/servers.e2e-spec.ts b/e2e/servers.e2e-spec.ts index ced12d32..abd14893 100644 --- a/e2e/servers.e2e-spec.ts +++ b/e2e/servers.e2e-spec.ts @@ -1,13 +1,23 @@ import { ServersPage } from './helpers/server.po'; +import { TestHelper } from './helpers/common.po'; +import { element } from 'protractor'; -describe('gns3-web-ui App', () => { +fdescribe('gns3-web-ui App', () => { let page: ServersPage; + let helper: TestHelper; beforeEach(() => { page = new ServersPage(); + helper = new TestHelper(); }); - it('should be able to add server', async () => { + async function asyncForEach(array, callback) { + for (let index = 0; index < array.length; index++) { + await callback(array[index], index, array); + } + }; + + it('user should have possibility to add server', async () => { // arrange page.maximizeWindow(); await page.navigateToServersPage(); @@ -17,11 +27,24 @@ describe('gns3-web-ui App', () => { // assert expect(text).toBe("We've discovered GNS3 server on 127.0.0.1:3080, would you like to add to the list?"); + }); - // let firstRowOfServersTable = await page.checkServersTable(); + it('user should see added server in the list', async () => { + // arrange + page.maximizeWindow(); + await page.navigateToServersPage(); + await page.clickAddServer(); + helper.sleep(1000); - // console.log('answer ********************* ', firstRowOfServersTable); + // act + let firstRowOfServersTable = await page.checkServersTable(); + let serverData = []; + await asyncForEach(firstRowOfServersTable, async element => { + serverData.push(await element.getText()); + }); - // expect(true).toBe(true); + // assert + expect(serverData).toContain('127.0.0.1'); + expect(serverData).toContain('3080'); }); }); From 36a5596d33258afa27b09d95b940fd06a8c68a1f Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Wed, 26 Feb 2020 13:43:30 +0100 Subject: [PATCH 3/7] Test for projects page added --- e2e/helpers/common.po.ts | 15 ++++++++ e2e/helpers/project-map.po.ts | 0 e2e/helpers/project.po.ts | 20 +++++++++++ e2e/helpers/server.po.ts | 15 +++++++- e2e/project-map.e2e-spec.ts | 34 +++++++++++++++++++ e2e/projects.e2e-spec.ts | 34 +++++++++++++++++++ e2e/servers.e2e-spec.ts | 10 ++---- .../add-blank-project-dialog.component.html | 2 +- .../navigation-dialog.component.html | 2 +- 9 files changed, 121 insertions(+), 11 deletions(-) create mode 100644 e2e/helpers/project-map.po.ts create mode 100644 e2e/helpers/project.po.ts create mode 100644 e2e/project-map.e2e-spec.ts create mode 100644 e2e/projects.e2e-spec.ts diff --git a/e2e/helpers/common.po.ts b/e2e/helpers/common.po.ts index 01aa08ce..3dae8252 100644 --- a/e2e/helpers/common.po.ts +++ b/e2e/helpers/common.po.ts @@ -1,7 +1,22 @@ import { browser, by, element } from 'protractor'; +import { ServersPage } from './server.po'; export class TestHelper { sleep(value: number) { browser.sleep(value); } + + waitForLoading() { + browser.waitForAngular(); + } + + async asyncForEach(array, callback) { + for (let index = 0; index < array.length; index++) { + await callback(array[index], index, array); + } + } + + getCurrentUrl() { + return browser.getCurrentUrl(); + } } diff --git a/e2e/helpers/project-map.po.ts b/e2e/helpers/project-map.po.ts new file mode 100644 index 00000000..e69de29b diff --git a/e2e/helpers/project.po.ts b/e2e/helpers/project.po.ts new file mode 100644 index 00000000..76b60ec2 --- /dev/null +++ b/e2e/helpers/project.po.ts @@ -0,0 +1,20 @@ +import { TestHelper } from "./common.po" +import { browser, by } from "protractor"; + +export class ProjectsPage { + helper = new TestHelper(); + + async openAddProjectDialog() { + let addButton = await browser.driver.findElement(by.css('button.add-button')); + await addButton.click(); + } + + async createProject() { + let today = new Date(); + let inputs = await browser.driver.findElements(by.css('input.mat-input-element')); + await inputs[1].sendKeys('test project ' + today.getUTCMilliseconds()); + this.helper.sleep(2000); + let dialogButton = await browser.driver.findElement(by.css('button.add-project-button')); + await dialogButton.click(); + } +} diff --git a/e2e/helpers/server.po.ts b/e2e/helpers/server.po.ts index 82827a3c..372bbeab 100644 --- a/e2e/helpers/server.po.ts +++ b/e2e/helpers/server.po.ts @@ -1,6 +1,9 @@ import { browser, by, element } from 'protractor'; +import { TestHelper } from './common.po'; export class ServersPage { + helper = new TestHelper; + maximizeWindow() { browser.driver.manage().window().maximize(); } @@ -11,7 +14,6 @@ export class ServersPage { getAddServerNotificationText() { return browser.driver.findElement(by.className('mat-card-content')).getText(); - // return element(by.className('mat-card-content')[0]).getText(); } async clickAddServer() { @@ -22,4 +24,15 @@ export class ServersPage { checkServersTable() { return browser.driver.findElements(by.css('mat-cell')); } + + async navigateToServerProjects() { + this.helper.sleep(2000); + let hyperlinks = await browser.driver.findElements(by.css('a.table-link')); + let serverLink; + await this.helper.asyncForEach(hyperlinks, async element => { + let text = await element.getText(); + if (text === '127.0.0.1') serverLink = element; + }); + await serverLink.click(); + } } diff --git a/e2e/project-map.e2e-spec.ts b/e2e/project-map.e2e-spec.ts new file mode 100644 index 00000000..a42c073a --- /dev/null +++ b/e2e/project-map.e2e-spec.ts @@ -0,0 +1,34 @@ +import { ServersPage } from './helpers/server.po'; +import { TestHelper } from './helpers/common.po'; +import { element } from 'protractor'; +import { ProjectsPage } from './helpers/project.po'; + +fdescribe('Project map page', () => { + let serversPage: ServersPage; + let projectsPage: ProjectsPage; + let helper: TestHelper; + + beforeEach(async () => { + serversPage = new ServersPage(); + projectsPage = new ProjectsPage(); + helper = new TestHelper(); + + serversPage.maximizeWindow(); + await serversPage.navigateToServersPage(); + await serversPage.clickAddServer(); + await serversPage.navigateToServerProjects(); + await projectsPage.openAddProjectDialog(); + helper.sleep(2000); + await projectsPage.createProject(); + helper.sleep(2000); + }); + + it('user should have possibility to add nodes to map', async () => { + // arrange + + //act + + //assert + expect(true).toBe(true); + }); +}); diff --git a/e2e/projects.e2e-spec.ts b/e2e/projects.e2e-spec.ts new file mode 100644 index 00000000..977c3656 --- /dev/null +++ b/e2e/projects.e2e-spec.ts @@ -0,0 +1,34 @@ +import { ServersPage } from './helpers/server.po'; +import { TestHelper } from './helpers/common.po'; +import { element } from 'protractor'; +import { ProjectsPage } from './helpers/project.po'; + +describe('Projects page', () => { + let serversPage: ServersPage; + let projectsPage: ProjectsPage; + let helper: TestHelper; + + beforeEach(() => { + serversPage = new ServersPage(); + projectsPage = new ProjectsPage(); + helper = new TestHelper(); + }); + + it('user should have possibility to create new project', async () => { + // arrange + serversPage.maximizeWindow(); + await serversPage.navigateToServersPage(); + await serversPage.clickAddServer(); + await serversPage.navigateToServerProjects(); + helper.sleep(2000); + + //act + await projectsPage.openAddProjectDialog(); + helper.sleep(2000); + await projectsPage.createProject(); + helper.sleep(2000); + + //assert + expect(helper.getCurrentUrl()).toMatch('server/1/project/'); + }); +}); diff --git a/e2e/servers.e2e-spec.ts b/e2e/servers.e2e-spec.ts index abd14893..3f181caa 100644 --- a/e2e/servers.e2e-spec.ts +++ b/e2e/servers.e2e-spec.ts @@ -2,7 +2,7 @@ import { ServersPage } from './helpers/server.po'; import { TestHelper } from './helpers/common.po'; import { element } from 'protractor'; -fdescribe('gns3-web-ui App', () => { +describe('Servers page', () => { let page: ServersPage; let helper: TestHelper; @@ -11,12 +11,6 @@ fdescribe('gns3-web-ui App', () => { helper = new TestHelper(); }); - async function asyncForEach(array, callback) { - for (let index = 0; index < array.length; index++) { - await callback(array[index], index, array); - } - }; - it('user should have possibility to add server', async () => { // arrange page.maximizeWindow(); @@ -39,7 +33,7 @@ fdescribe('gns3-web-ui App', () => { // act let firstRowOfServersTable = await page.checkServersTable(); let serverData = []; - await asyncForEach(firstRowOfServersTable, async element => { + await helper.asyncForEach(firstRowOfServersTable, async element => { serverData.push(await element.getText()); }); diff --git a/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.html b/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.html index 9e3b6920..9a318994 100644 --- a/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.html +++ b/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.html @@ -18,6 +18,6 @@
- +
diff --git a/src/app/components/projects/navigation-dialog/navigation-dialog.component.html b/src/app/components/projects/navigation-dialog/navigation-dialog.component.html index 6c471ca7..814ac4dc 100644 --- a/src/app/components/projects/navigation-dialog/navigation-dialog.component.html +++ b/src/app/components/projects/navigation-dialog/navigation-dialog.component.html @@ -2,6 +2,6 @@
Do you want to navigate to {{projectMessage}}?
- +
From cf60f1a046f7ca0bf8c574f0121849254ca9f3df Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Wed, 26 Feb 2020 19:39:36 +0100 Subject: [PATCH 4/7] E2E for project map page --- e2e/helpers/project-map.po.ts | 49 +++++++++++++++++++ e2e/project-map.e2e-spec.ts | 11 ++++- .../template-list-dialog.component.html | 2 +- .../template/template.component.html | 2 +- 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/e2e/helpers/project-map.po.ts b/e2e/helpers/project-map.po.ts index e69de29b..ff855656 100644 --- a/e2e/helpers/project-map.po.ts +++ b/e2e/helpers/project-map.po.ts @@ -0,0 +1,49 @@ +import { TestHelper } from "./common.po" +import { browser, by } from "protractor"; + +export class ProjectMapPage { + helper = new TestHelper(); + + async openAddProjectDialog() { + let addButton = await browser.driver.findElement(by.css('button.addNode')); + await addButton.click(); + } + + async addNode() { + let inputs = await browser.driver.findElements(by.css('input.mat-input-element')); + await inputs[0].sendKeys('VPCS'); + this.helper.sleep(1000); + + let selects = await browser.driver.findElements(by.css('mat-select.mat-select')); + await selects[1].click(); + this.helper.sleep(1000); + + let options = await browser.driver.findElements(by.css('mat-option.mat-option')); + await options[1].click(); //first option should be chosen + this.helper.sleep(1000); + + // new select appears after refreshing data + selects = await browser.driver.findElements(by.css('mat-select.mat-select')); + if (selects[2]) { + await selects[2].click(); + this.helper.sleep(1000); + + options = await browser.driver.findElements(by.css('mat-option.mat-option')); + await options[0].click(); + this.helper.sleep(1000); + } + + let addButton = await browser.driver.findElement(by.css('button.addButton')); + await addButton.click(); + this.helper.sleep(1000); + } + + async verifyIfNodeWithLabelExists(labelToFind: string) { + let nodeLabel = await browser.driver.findElement(by.css('#map > g > g.layer > g.nodes > g:nth-child(1) > g > g > g > text')); + let selectedNode; + let textFromNodeLabel = await nodeLabel.getText(); + if (textFromNodeLabel == labelToFind) selectedNode = nodeLabel; + + return selectedNode ? true : false; + } +} diff --git a/e2e/project-map.e2e-spec.ts b/e2e/project-map.e2e-spec.ts index a42c073a..8bf702f3 100644 --- a/e2e/project-map.e2e-spec.ts +++ b/e2e/project-map.e2e-spec.ts @@ -2,15 +2,18 @@ import { ServersPage } from './helpers/server.po'; import { TestHelper } from './helpers/common.po'; import { element } from 'protractor'; import { ProjectsPage } from './helpers/project.po'; +import { ProjectMapPage } from './helpers/project-map.po'; fdescribe('Project map page', () => { let serversPage: ServersPage; let projectsPage: ProjectsPage; + let projectMapPage: ProjectMapPage; let helper: TestHelper; beforeEach(async () => { serversPage = new ServersPage(); projectsPage = new ProjectsPage(); + projectMapPage = new ProjectMapPage(); helper = new TestHelper(); serversPage.maximizeWindow(); @@ -23,12 +26,16 @@ fdescribe('Project map page', () => { helper.sleep(2000); }); - it('user should have possibility to add nodes to map', async () => { + fit('user should have possibility to add nodes to map', async () => { // arrange + projectMapPage.openAddProjectDialog(); + helper.sleep(2000); //act + projectMapPage.addNode(); + helper.sleep(2000); //assert - expect(true).toBe(true); + expect(await projectMapPage.verifyIfNodeWithLabelExists('PC1')).toBe(true); }); }); diff --git a/src/app/components/template/template-list-dialog/template-list-dialog.component.html b/src/app/components/template/template-list-dialog/template-list-dialog.component.html index 70c5851d..2a59f3a3 100644 --- a/src/app/components/template/template-list-dialog/template-list-dialog.component.html +++ b/src/app/components/template/template-list-dialog/template-list-dialog.component.html @@ -71,5 +71,5 @@
- +
diff --git a/src/app/components/template/template.component.html b/src/app/components/template/template.component.html index a9535011..a5b2a19b 100644 --- a/src/app/components/template/template.component.html +++ b/src/app/components/template/template.component.html @@ -1 +1 @@ - + From 53b3128c66a995a92bedbe27c6f85a0b4fad446b Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Thu, 27 Feb 2020 11:30:05 +0100 Subject: [PATCH 5/7] Update project-map.po.ts --- e2e/helpers/project-map.po.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/e2e/helpers/project-map.po.ts b/e2e/helpers/project-map.po.ts index ff855656..7ce8c823 100644 --- a/e2e/helpers/project-map.po.ts +++ b/e2e/helpers/project-map.po.ts @@ -39,7 +39,8 @@ export class ProjectMapPage { } async verifyIfNodeWithLabelExists(labelToFind: string) { - let nodeLabel = await browser.driver.findElement(by.css('#map > g > g.layer > g.nodes > g:nth-child(1) > g > g > g > text')); + this.helper.sleep(5000); + let nodeLabel = await browser.driver.findElement(by.css('#map > g > g.layer > g.nodes > g > g > g > g > text')); let selectedNode; let textFromNodeLabel = await nodeLabel.getText(); if (textFromNodeLabel == labelToFind) selectedNode = nodeLabel; From 851d006ef2ef77e3bcdc938c54dbd8cec9a9885c Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Thu, 27 Feb 2020 13:11:35 +0100 Subject: [PATCH 6/7] Updating e2e tests --- e2e/helpers/server.po.ts | 7 +++++-- e2e/project-map.e2e-spec.ts | 4 ++-- e2e/servers.e2e-spec.ts | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/e2e/helpers/server.po.ts b/e2e/helpers/server.po.ts index 372bbeab..ece2422b 100644 --- a/e2e/helpers/server.po.ts +++ b/e2e/helpers/server.po.ts @@ -17,8 +17,11 @@ export class ServersPage { } async clickAddServer() { - let buttons = await browser.driver.findElements(by.className('mat-button mat-button-base')); - await buttons[3].click(); + let serversTable = await this.checkServersTable(); + if (serversTable.length === 0) { + let buttons = await browser.driver.findElements(by.className('mat-button mat-button-base')); + await buttons[3].click(); + } } checkServersTable() { diff --git a/e2e/project-map.e2e-spec.ts b/e2e/project-map.e2e-spec.ts index 8bf702f3..f5379d9d 100644 --- a/e2e/project-map.e2e-spec.ts +++ b/e2e/project-map.e2e-spec.ts @@ -4,7 +4,7 @@ import { element } from 'protractor'; import { ProjectsPage } from './helpers/project.po'; import { ProjectMapPage } from './helpers/project-map.po'; -fdescribe('Project map page', () => { +describe('Project map page', () => { let serversPage: ServersPage; let projectsPage: ProjectsPage; let projectMapPage: ProjectMapPage; @@ -26,7 +26,7 @@ fdescribe('Project map page', () => { helper.sleep(2000); }); - fit('user should have possibility to add nodes to map', async () => { + it('user should have possibility to add nodes to map', async () => { // arrange projectMapPage.openAddProjectDialog(); helper.sleep(2000); diff --git a/e2e/servers.e2e-spec.ts b/e2e/servers.e2e-spec.ts index 3f181caa..1d177f4b 100644 --- a/e2e/servers.e2e-spec.ts +++ b/e2e/servers.e2e-spec.ts @@ -11,7 +11,7 @@ describe('Servers page', () => { helper = new TestHelper(); }); - it('user should have possibility to add server', async () => { + xit('user should have possibility to add server', async () => { // arrange page.maximizeWindow(); await page.navigateToServersPage(); From ea2f5e8801fd1005129f1ba6bcedd8ec23c4881c Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Mon, 2 Mar 2020 10:12:00 +0100 Subject: [PATCH 7/7] Update package.json --- package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/package.json b/package.json index cca64095..f973a565 100644 --- a/package.json +++ b/package.json @@ -85,8 +85,6 @@ }, "devDependencies": { "@angular-devkit/build-angular": "^0.803.10", - "@angular-devkit/core": "^8.3.23", - "@angular-devkit/schematics": "^8.3.23", "@angular/cli": "^8.3.10", "@angular/compiler-cli": "^8.2.11", "@angular/language-service": "^8.2.11",