Skip to content

Commit dd4d2b5

Browse files
committed
seperate step defs
1 parent 4c353d6 commit dd4d2b5

11 files changed

Lines changed: 138 additions & 104 deletions

File tree

cucumber.conf.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
const { Before, BeforeAll, AfterAll, After, setDefaultTimeout } = require("@cucumber/cucumber");
22
const { chromium } = require("playwright");
3+
const { NextcloudAdminPage } = require("./tests/e2e/pageObjects/NextcloudAdminPage")
4+
const ncAdminPageObject = new NextcloudAdminPage()
5+
const { OpenprojectAdminPage } = require("./tests/e2e/pageObjects/OpenprojectAdminPage")
6+
const opAdminPageObject = new OpenprojectAdminPage()
7+
38

49
setDefaultTimeout(60000)
510

@@ -21,12 +26,16 @@ AfterAll(async function () {
2126

2227
Before(async function () {
2328
global.contextNC = await global.browserNC.newContext()
29+
await contextNC.grantPermissions(['clipboard-read','clipboard-write']);
2430
global.pageNC = await global.contextNC.newPage()
2531
global.contextOP = await global.browserOP.newContext()
32+
await contextOP.grantPermissions(['clipboard-read','clipboard-write']);
2633
global.pageOP = await global.contextOP.newPage()
2734
});
2835

2936
After(async function () {
37+
await ncAdminPageObject.resetNCOauthSetUP()
38+
await opAdminPageObject.deleteFileStorage()
3039
await global.pageNC.close();
3140
await global.contextNC.close();
3241
await global.pageOP.close();

src/components/admin/TextInput.vue

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,6 @@ export default {
6969
default: '',
7070
type: String,
7171
},
72-
// id: {
73-
// type: String,
74-
// required: true,
75-
// },
7672
type: {
7773
type: String,
7874
default: 'text',

tests/e2e/config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
exports.config = {
3+
baseUrlNC: process.env.NEXTCLOUD_HOST,
4+
baseUrlOP: process.env.OPENPROJECT_HOST,
5+
}

tests/e2e/features/webUI/test.feature renamed to tests/e2e/features/webUI/OauthFlow.feature

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ Feature:
55

66

77
Scenario: user logs in
8-
Given nextcloud administrator has logged in using the webUI
8+
Given openproject administrator has logged in openproject using the webUI
9+
And nextcloud administrator has logged in using the webUI
910
And the administrator has navigated to the openproject tab in administrator settings
10-
And openproject administrator has logged in openproject using the webUI
1111
When openproject administrator adds file storage with following settings
12-
| name | host |
13-
| nextcloud | http://localhost/nextcloud/master |
12+
| name | host |
13+
| nextcloud | http://localhost/nextcloud |
1414
And nextcloud administrator adds following openproject host
1515
| host |
1616
| http://localhost:3000 |
17-
And openproject administrator copies the openproject oauth credintials
18-
And nextcloud administrator pastes the openproject oauth credintials
19-
And nextcloud administrator copies the nextcloud oauth credintials
20-
And openproject administrator pastes the nextcloud oauth credintials
17+
And openproject administrator copies the openproject oauth credentials
18+
And nextcloud administrator pastes the openproject oauth credentials
19+
And nextcloud administrator copies the nextcloud oauth credentials
20+
And openproject administrator pastes the nextcloud oauth credentials
2121

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
//import {OpenprojectAdminPage} from "./OpenprojectAdminPage";
2-
31
class NextcloudAdminPage {
2+
43
constructor() {
54
this.settingsMenuSelector = '//div[@id="settings"]/div[@id="expand"]'
65
this.adminSettingSelector = '[data-id="admin_settings"]'
@@ -13,38 +12,44 @@ class NextcloudAdminPage {
1312
this.copyNCOauthClientIdButtonSelector = '//div[@id="nextcloud-oauth-client-id"]//button'
1413
this.copyNCOauthSecretdButtonSelector = '//div[@id="nextcloud-oauth-client-secret"]//button'
1514
this.submitNCOauthButtonSelector = '[data-test-id="submit-nc-oauth-values-form-btn"]'
16-
this.nextcloudClientId = ''
17-
this.nextcloudClientSecret = ''
18-
//this.opAdminPage = new OpenprojectAdminPage()
15+
this.resetAllAppSettingsSelector = '#reset-all-app-settings-btn'
16+
this.resetConfirmSelector = '//div[@class="oc-dialog"]//div[contains(@class,"oc-dialog-buttonrow")]//button[text() = "Yes, reset"]'
1917
}
2018

21-
async adminNavigatesToAdminOPTab(){
19+
async adminNavigatesToAdminOPTab() {
2220
await pageNC.click(this.settingsMenuSelector)
2321
await pageNC.click(this.adminSettingSelector)
2422
await pageNC.locator(this.openProjectTabSelector).last().click()
2523
}
2624

27-
async adminAddsOpenProjectHost(host){
25+
async adminAddsOpenProjectHost(host) {
2826
await pageNC.click(this.openProjectOauthInstanceInputFieldSelector)
2927
await pageNC.fill(this.openProjectOauthInstanceInputFieldSelector, host)
3028
await pageNC.click(this.saveOauthInstanceButtonSelector)
3129
}
3230

33-
async adminSetsTheOpOauthCreds(){
34-
// await pageNC.click(this.openProjectOauthClientIdSelector)
35-
// await pageNC.fill(this.openProjectOauthClientIdSelector,this.opAdminPage.openProjectClientId)
36-
// await pageNC.click(this.openProjectOauthSecretSelector)
37-
// await pageNC.fill(this.openProjectOauthSecretSelector,this.opAdminPage.openProjectClientSecret)
31+
async adminSetsTheOpOauthCreds(opClientId, opClientSecret) {
32+
await pageNC.click(this.openProjectOauthClientIdSelector)
33+
await pageNC.fill(this.openProjectOauthClientIdSelector, opClientId)
34+
await pageNC.click(this.openProjectOauthSecretSelector)
35+
await pageNC.fill(this.openProjectOauthSecretSelector, opClientSecret)
3836
await pageNC.click(this.submitOPOauthButtonSelector)
3937
}
4038

41-
async adminCopiesTheNcOauthCreds(){
39+
async adminCopiesTheNcOauthCreds() {
4240
await pageNC.click(this.copyNCOauthClientIdButtonSelector)
43-
this.nextcloudClientId = await pageNC.evaluate(() => navigator.clipboard.readText())
41+
const nextcloudClientId = await pageNC.evaluate(() => navigator.clipboard.readText())
4442
await pageNC.click(this.copyNCOauthSecretdButtonSelector)
45-
this.nextcloudClientSecret = await pageNC.evaluate(() => navigator.clipboard.readText())
43+
const nextcloudClientSecret = await pageNC.evaluate(() => navigator.clipboard.readText())
4644
await pageNC.click(this.submitNCOauthButtonSelector)
45+
return { client_id:nextcloudClientId, client_secret:nextcloudClientSecret }
4746
}
47+
48+
async resetNCOauthSetUP() {
49+
await pageNC.click(this.resetAllAppSettingsSelector)
50+
await pageNC.click(this.resetConfirmSelector)
51+
}
52+
4853
}
4954

5055
module.exports = { NextcloudAdminPage };

tests/e2e/pageObjects/NextcloudLoginPage.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1+
const {config} = require("../config");
2+
13
class NextcloudLoginPage {
24
constructor() {
3-
this.ncUrl = 'http://localhost/nextcloud/master'
45
this.usernameSelector = '#user'
56
this.passwordSelector = '#password'
67
this.submitButtonSelector = '//button[@type="submit"]'
78
}
89

9-
async userLogsInNextcloud(username, password){
10-
await pageNC.goto(this.ncUrl);
10+
async userLogsInNextcloud(username, password) {
11+
await pageNC.goto(config.baseUrlNC);
1112
await pageNC.fill(this.usernameSelector, username)
1213
await pageNC.fill(this.passwordSelector,password)
1314
await pageNC.click(this.submitButtonSelector)
Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
//import {NextcloudAdminPage} from "./NextcloudAdminPage";
2-
31
class OpenprojectAdminPage {
2+
43
constructor() {
54
this.openProjectAvatarSelector = '//div[@title="OpenProject Admin"]'
65
this.administratorSettingMenuItemSelector = '//a[contains(@class,"administration-menu-item ")]'
@@ -12,15 +11,13 @@ class OpenprojectAdminPage {
1211
this.copyClientIdButtonSelector = '//button[contains(@class,"client-id-copy-button")]'
1312
this.copyClientSecretButtonSelector = '//button[contains(@class,"secret-copy-button")]'
1413
this.doneContinueSetupButtonSelector = '//a[text() = "Done. Continue setup"]'
15-
this.oauthClientIdInputFieldSelectorOP ='#oauth_client_client_id'
16-
this.oauthClientSecretInputFieldSelectorOP ='#oauth_client_client_secret'
14+
this.oauthClientIdInputFieldSelectorOP = '#oauth_client_client_id'
15+
this.oauthClientSecretInputFieldSelectorOP = '#oauth_client_client_secret'
1716
this.saveAndCompleteSetupButtonSelector = '//button[text() = "Save and complete setup"]'
18-
this.openProjectClientId = ''
19-
this.openProjectClientSecret = ''
20-
//this.ncAdminPage = new NextcloudAdminPage()
17+
this.deleteFileStorageSelector = '.icon-delete'
2118
}
2219

23-
async adminAddsFileStorageHost(name, host){
20+
async adminAddsFileStorageHost(name, host) {
2421
await pageOP.click(this.openProjectAvatarSelector)
2522
await pageOP.click(this.administratorSettingMenuItemSelector)
2623
await pageOP.click(this.fileStoragesSelector)
@@ -29,19 +26,30 @@ class OpenprojectAdminPage {
2926
await pageOP.fill(this.hostUrlInputFieldSelector, host)
3027
await pageOP.click(this.continueSetupButtonSelector)
3128
}
32-
async copyOpenProjectOauthCreds(){
29+
30+
async copyOpenProjectOauthCreds() {
3331
await pageOP.click(this.copyClientIdButtonSelector)
34-
this.openProjectClientId = await pageOP.evaluate(() => navigator.clipboard.readText())
32+
const openProjectClientId = await pageOP.evaluate(() => navigator.clipboard.readText())
3533
await pageOP.click(this.copyClientSecretButtonSelector)
36-
this.openProjectClientSecret = await pageOP.evaluate(() => navigator.clipboard.readText())
34+
const openProjectClientSecret = await pageOP.evaluate(() => navigator.clipboard.readText())
3735
await pageOP.click(this.doneContinueSetupButtonSelector)
36+
return { client_secret: openProjectClientId, client_id: openProjectClientSecret }
3837
}
3938

40-
async pasteNCOauthCreds(){
41-
// await pageOP.fill(this.oauthClientIdInputFieldSelectorOP, this.ncAdminPage.nextcloudClientId)
42-
// await pageOP.fill(this.oauthClientSecretInputFieldSelectorOP, this.ncAdminPage.nextcloudClientSecret)
39+
async pasteNCOauthCreds(ncClientId, ncClientSecret) {
40+
await pageOP.fill(this.oauthClientIdInputFieldSelectorOP, ncClientId)
41+
await pageOP.fill(this.oauthClientSecretInputFieldSelectorOP, ncClientSecret)
4342
await pageOP.click(this.saveAndCompleteSetupButtonSelector)
4443
}
44+
45+
async deleteFileStorage() {
46+
await pageOP.click(this.deleteFileStorageSelector)
47+
await pageOP.on('dialog', async (dialog) => {
48+
console.log(dialog.message());
49+
await dialog.accept();
50+
});
51+
}
4552
}
4653

4754
module.exports = { OpenprojectAdminPage };
55+
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
1+
const {config} = require("../config")
2+
13
class OpenprojectLoginPage {
24
constructor() {
3-
this.opUrl = 'http://localhost:3000'
45
this.openProjectTitle = '//a[@title="Sign in"]'
56
this.usernameSelector = '#username-pulldown'
67
this.passwordSelector = '#password-pulldown'
78
this.userSignUP = '#login-pulldown'
89
}
910

1011
async userLogsInOpenproject(username, password){
11-
await pageOP.goto(this.opUrl)
12+
await pageOP.goto(config.baseUrlOP)
1213
await pageOP.click(this.openProjectTitle)
1314
await pageOP.fill(this.usernameSelector, username)
1415
await pageOP.fill(this.passwordSelector, password)
1516
await pageOP.click(this.userSignUP)
1617
}
1718
}
1819

19-
module.exports = { OpenprojectLoginPage };
20+
module.exports = { OpenprojectLoginPage }
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
const {Given, When} = require('@cucumber/cucumber')
2+
const { expect } = require("@playwright/test")
3+
4+
const { NextcloudAdminPage } = require("../pageObjects/NextcloudAdminPage");
5+
const { OpenprojectAdminPage } = require("../pageObjects/OpenprojectAdminPage")
6+
7+
const ncAdminPageObject = new NextcloudAdminPage()
8+
const opAdminPageObject = new OpenprojectAdminPage()
9+
10+
let opClientId = ''
11+
let opClientSecret = ''
12+
let ncClientId = ''
13+
let ncClientSecret = ''
14+
15+
16+
Given('the administrator has navigated to the openproject tab in administrator settings', async function () {
17+
await ncAdminPageObject.adminNavigatesToAdminOPTab()
18+
});
19+
20+
When('openproject administrator adds file storage with following settings', async function (dataTable) {
21+
for (const info of dataTable.hashes()) {
22+
await opAdminPageObject.adminAddsFileStorageHost(info.name, info.host)
23+
}
24+
})
25+
26+
27+
When('nextcloud administrator adds following openproject host', async function (dataTable) {
28+
for (const info of dataTable.hashes()) {
29+
await ncAdminPageObject.adminAddsOpenProjectHost(info.host)
30+
}
31+
})
32+
33+
When('openproject administrator copies the openproject oauth credentials', async function() {
34+
const values = await opAdminPageObject.copyOpenProjectOauthCreds()
35+
opClientId = values.client_id
36+
opClientSecret = values.client_secret
37+
})
38+
39+
When('nextcloud administrator pastes the openproject oauth credentials', async function() {
40+
await ncAdminPageObject.adminSetsTheOpOauthCreds(opClientId,opClientSecret)
41+
})
42+
43+
When('nextcloud administrator copies the nextcloud oauth credentials',async function() {
44+
const values = await ncAdminPageObject.adminCopiesTheNcOauthCreds()
45+
ncClientId = values.client_id
46+
ncClientSecret = values.client_secret
47+
})
48+
49+
When('openproject administrator pastes the nextcloud oauth credentials', async function() {
50+
await opAdminPageObject.pasteNCOauthCreds(ncClientId,ncClientSecret)
51+
})
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const {Given} = require("@cucumber/cucumber");
2+
3+
const { NextcloudLoginPage } = require("../pageObjects/NextcloudLoginPage")
4+
const { OpenprojectLoginPage } = require("../pageObjects/OpenprojectLoginPage")
5+
6+
const ncLoginPageObject = new NextcloudLoginPage()
7+
const opLoginPageObject = new OpenprojectLoginPage()
8+
9+
Given('nextcloud administrator has logged in using the webUI', async function () {
10+
await ncLoginPageObject.userLogsInNextcloud('admin','admin')
11+
});
12+
13+
Given('openproject administrator has logged in openproject using the webUI', async function () {
14+
await opLoginPageObject.userLogsInOpenproject('admin','admin')
15+
});

0 commit comments

Comments
 (0)