Skip to content

Commit

Permalink
Merge pull request #3157 from owncloud/change-existing-expiration
Browse files Browse the repository at this point in the history
[Tests-Only] Added acceptance test for changing existing expiration date on collaborator share
  • Loading branch information
kiranparajuli589 authored Mar 12, 2020
2 parents 5630cc0 + 0c933af commit c19224a
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -349,3 +349,21 @@ Feature: Sharing files and folders with internal groups
| fileName | expectedCollaborators |
| simple-folder | User Two, grp1 |

Scenario: change existing expiration date of an existing share with another internal group
Given user "user3" has created a new share with following settings
| path | lorem.txt |
| shareTypeString | group |
| shareWith | grp1 |
| expireDate | +14 |
And user "user3" has logged in using the webUI
When the user edits the collaborator expiry date of "grp1" of file "lorem.txt" to "+7" days using the webUI
Then user "user1" should have received a share with target "lorem (2).txt" and expiration date in 7 days
Then user "user2" should have received a share with target "lorem (2).txt" and expiration date in 7 days
And user "user3" should have a share with these details:
| field | value |
| path | /lorem.txt |
| share_type | group |
| uid_owner | user3 |
| share_with | grp1 |
| expiration | +7 |

Original file line number Diff line number Diff line change
Expand Up @@ -602,3 +602,19 @@ Feature: Sharing files and folders with internal users
And user "user1" has logged in using the webUI
When the user shares file "testimage.jpg" with user "User Two" using the webUI
Then user "user2" should have received a share with target "testimage (2).jpg" and expiration date in 3 days

Scenario: change existing expiration date of an existing share with another internal user
Given user "user1" has created a new share with following settings
| path | lorem.txt |
| shareWith | user2 |
| expireDate | +14 |
And user "user1" has logged in using the webUI
When the user edits the collaborator expiry date of "User Two" of file "lorem.txt" to "+7" days using the webUI
Then user "user2" should have received a share with target "lorem (2).txt" and expiration date in 7 days
And user "user1" should have a share with these details:
| field | value |
| path | /lorem.txt |
| share_type | user |
| uid_owner | user1 |
| share_with | user2 |
| expiration | +7 |
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const util = require('util')
const sharingHelper = require('../../helpers/sharingHelper')

module.exports = {
commands: {
Expand Down Expand Up @@ -144,6 +145,30 @@ module.exports = {
}
})
return disabled
},
/**
* sets expiration date on collaborators/public-link shares
*
* @param {string} value - provided date in format YYYY-MM-DD, or empty string to unset date
* @returns {Promise}
*/
setExpirationDate: async function (value) {
if (value === '') {
return this.click('@publicLinkDeleteExpirationDateButton')
}
value = sharingHelper.calculateDate(value)
const dateToSet = new Date(Date.parse(value))
const year = dateToSet.getFullYear()
const month = dateToSet.toLocaleString('en-GB', { month: 'long' })
const day = dateToSet.getDate()
await this
.initAjaxCounters()
.waitForElementVisible('@linkExpirationDateField')
.click('@linkExpirationDateField')
return this
.setExpiryDateYear(year)
.setExpiryDateMonth(month)
.setExpiryDateDay(day)
}
},
elements: {
Expand Down Expand Up @@ -171,6 +196,9 @@ module.exports = {
},
linkExpirationDateField: {
selector: '.vdatetime-input'
},
publicLinkDeleteExpirationDateButton: {
selector: '#oc-files-file-link-expire-date-delete'
}
}
}
35 changes: 4 additions & 31 deletions tests/acceptance/pageObjects/FilesPageElement/publicLinksDialog.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
const util = require('util')
const _ = require('lodash')
const sharingHelper = require('../../helpers/sharingHelper')

module.exports = {
commands: {
Expand Down Expand Up @@ -65,32 +64,6 @@ module.exports = {
.clearValue('@publicLinkPasswordField')
.setValue('@publicLinkPasswordField', linkPassword)
},
/**
* sets expire date of the public link share using webUI
*
* @param {string} value - provided date in format YYYY-MM-DD, or empty string to unset date
* @returns {Promise}
*/
setPublicLinkExpiryDate: async function (value) {
const expirationDatePicker = this.api.page.FilesPageElement.expirationDatePicker()
if (value === '') {
return this.click('@publicLinkDeleteExpirationDateButton')
}
value = sharingHelper.calculateDate(value)
const dateToSet = new Date(Date.parse(value))
const year = dateToSet.getFullYear()
const month = dateToSet.toLocaleString('en-GB', { month: 'long' })
const day = dateToSet.getDate()
const linkExpirationDateField = expirationDatePicker.elements.linkExpirationDateField.selector
await this
.initAjaxCounters()
.waitForElementVisible(linkExpirationDateField)
.click(linkExpirationDateField)
return expirationDatePicker
.setExpiryDateYear(year)
.setExpiryDateMonth(month)
.setExpiryDateDay(day)
},
/**
* function sets different fields for public link
*
Expand All @@ -106,7 +79,10 @@ module.exports = {
} else if (key === 'password') {
return this.setPublicLinkPassword(value)
} else if (key === 'expireDate') {
return this.setPublicLinkExpiryDate(value)
return this.api.page
.FilesPageElement
.expirationDatePicker()
.setExpirationDate(value)
}
return this
},
Expand Down Expand Up @@ -430,9 +406,6 @@ module.exports = {
},
sidebarPrivateLinkIconCopied: {
selector: '#files-sidebar-private-link-icon-copied'
},
publicLinkDeleteExpirationDateButton: {
selector: '#oc-files-file-link-expire-date-delete'
}
}
}
22 changes: 18 additions & 4 deletions tests/acceptance/pageObjects/FilesPageElement/sharingDialog.js
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ module.exports = {
.waitForOutstandingAjaxCalls()
.waitForElementNotPresent('@addShareSaveButton')
},
saveCollaboratorPermission: function () {
saveChanges: function () {
return this.waitForElementVisible('@saveShareButton')
.initAjaxCounters()
.click('@saveShareButton')
Expand Down Expand Up @@ -268,7 +268,7 @@ module.exports = {
}
}
if (changed) {
await this.saveCollaboratorPermission()
await this.saveChanges()
} else {
await this.clickCancel()
}
Expand Down Expand Up @@ -298,7 +298,7 @@ module.exports = {
for (const permission of enabledPermissions) {
await this.toggleSinglePermission(permission)
}
await this.saveCollaboratorPermission()
await this.saveChanges()
},
/**
*
Expand Down Expand Up @@ -370,7 +370,7 @@ module.exports = {
changeCollaboratorRole: async function (collaborator, newRole) {
await collaboratorDialog.clickEditShare(collaborator)
await this.changeCollaboratorRoleInDropdown(newRole)
return this.saveCollaboratorPermission()
return this.saveChanges()
},
/**
* @params {string} newRole
Expand Down Expand Up @@ -485,6 +485,20 @@ module.exports = {
}

return this.useXpath().expect.element(collaboratorSelector).to.not.be.present
},
/**
* @param {string} collaborator Name of the collaborator
* @param {string} days number of days to be added or subtracted from current date
*
* @return {Promise<*>}
*/
changeCollaboratorExpiryDate: async function (collaborator, days) {
await collaboratorDialog.clickEditShare(collaborator)
await this.api.page
.FilesPageElement
.expirationDatePicker()
.setExpirationDate(days)
return this.saveChanges()
}
},
elements: {
Expand Down
45 changes: 45 additions & 0 deletions tests/acceptance/stepDefinitions/sharingContext.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,41 @@ const shareFileFolder = function (
httpHelper.checkOCSStatus(json, 'Could not create share. Message: ' + json.ocs.meta.message)
})
}
/**
* create any share using dataTable
*
* @param {string} sharer
* @param {object} dataTable (attrs like: path, shareWith, expireDate, name, permissionString,
* shareTypeString, password can be passed inside dataTable)
*
* @return void
*/
Given('user {string} has created a new share with following settings',
function (sharer, dataTable) {
const settings = dataTable.rowsHash()
const expireDate = settings.expireDate
let dateToSet = ''
if (typeof expireDate !== 'undefined') {
dateToSet = sharingHelper.calculateDate(expireDate)
}
let targetShareType = null
if (settings.shareTypeString) {
targetShareType = sharingHelper.humanReadableShareTypeToNumber(settings.shareTypeString)
}
return shareFileFolder(
settings.path,
sharer,
settings.shareWith,
targetShareType,
settings.permissionString,
settings.name,
{
expireDate: dateToSet,
password: settings.password
}
)
})

/**
* sets up data into a standard format for creating new public link share
*
Expand Down Expand Up @@ -742,6 +777,16 @@ When(
}
)

When('the user edits the collaborator expiry date of {string} of file/folder/resource {string} to {string} days/day using the webUI',
async function (collaborator, resource, days) {
const api = client.page.FilesPageElement
await api
.appSideBar()
.closeSidebar(100)
.openSharingDialog(resource)
return api.sharingDialog().changeCollaboratorExpiryDate(collaborator, days)
})

Then('user {string} should be listed as {string} in the collaborators list on the webUI', function (user, role) {
return assertCollaboratorslistContains('user', user, { role })
})
Expand Down

0 comments on commit c19224a

Please sign in to comment.