Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[test-only] e2e test. set expiration date to share #10292

Merged
merged 2 commits into from
Jan 5, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .drone.star
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,6 @@ config = {
"webUISharingInternalUsers",
"webUISharingInternalUsersBlacklisted",
"webUISharingInternalUsersCollaborator",
"webUISharingExpirationDate",
],
"oCISSharingInternal3": [
"webUISharingInternalGroupsSharingIndicator",
Expand Down Expand Up @@ -221,7 +220,6 @@ basicTestSuites = [
"webUIResharing2",
"webUISharingAcceptShares",
"webUISharingAutocompletion",
"webUISharingExpirationDate",
"webUISharingFilePermissionMultipleUsers",
"webUISharingFilePermissionsGroups",
"webUISharingFolderAdvancedPermissionMultipleUsers",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,8 @@ Other free text and markdown formatting can be used elsewhere in the document if
### [Share additional info](https://github.com/owncloud/ocis/issues/1253)
- [webUISharingInternalUsersShareWithPage/shareWithUsers.feature:126](https://github.com/owncloud/web/blob/master/tests/acceptance/features/webUISharingInternalUsersShareWithPage/shareWithUsers.feature#L126)

### [Expiration date set is not implemented in user share](https://github.com/owncloud/ocis/issues/1250)
- [webUISharingInternalGroups/shareWithGroups.feature:228](https://github.com/owncloud/web/blob/master/tests/acceptance/features/webUISharingInternalGroups/shareWithGroups.feature#L228)

### [Different path for shares inside folder](https://github.com/owncloud/ocis/issues/1231)

### [Implement expiration date for shares](https://github.com/owncloud/ocis/issues/1250)
- [webUISharingInternalGroups/shareWithGroups.feature:208](https://github.com/owncloud/web/blob/master/tests/acceptance/features/webUISharingInternalGroups/shareWithGroups.feature#L208)
- [webUISharingExpirationDate/shareWithExpirationDate.feature:21](https://github.com/owncloud/web/blob/master/tests/acceptance/features/webUISharingExpirationDate/shareWithExpirationDate.feature#L21)

### [Listing shares via ocs API does not show path for parent folders](https://github.com/owncloud/ocis/issues/1231)
- [webUISharingPublicManagement/shareByPublicLink.feature:110](https://github.com/owncloud/web/blob/master/tests/acceptance/features/webUISharingPublicManagement/shareByPublicLink.feature#L111)

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -203,55 +203,3 @@ Feature: Sharing files and folders with internal groups
Then the following resources should have the following collaborators
| fileName | expectedCollaborators |
| simple-folder | Brian Murphy, grp1 |

@issue-ocis-1250
Scenario: change existing expiration date of an existing share with another internal group
Given user "Carol" has created file "lorem.txt" in the server
And user "Carol" has created a new share with following settings in the server
| path | lorem.txt |
| shareTypeString | group |
| shareWith | grp1 |
| expireDate | +14 |
And user "Carol" 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 "Alice" should have received a share with target "Shares/lorem.txt" and expiration date in 7 days in the server
And user "Brian" should have received a share with target "Shares/lorem.txt" and expiration date in 7 days in the server
And user "Carol" should have a share with these details in the server:
| field | value |
| path | /lorem.txt |
| share_type | group |
| uid_owner | Carol |
| share_with | grp1 |
| expiration | +7 |

@issue-ocis-1317 @issue-ocis-1250
Scenario: share a resource with another internal group with default expiration date
Given the setting "shareapi_default_expire_date_group_share" of app "core" has been set to "yes" in the server
And the setting "shareapi_expire_after_n_days_group_share" of app "core" has been set to "42" in the server
And user "Carol" has created file "lorem.txt" in the server
And user "Carol" has logged in using the webUI
When the user shares folder "lorem.txt" with group "grp1" as "Viewer" using the webUI
Then user "Carol" should have a share with these details in the server:
| field | value |
| path | /lorem.txt |
| share_type | group |
| uid_owner | Carol |
| share_with | grp1 |
| expiration | +42 |
And user "Alice" should have received a share with target "Shares/lorem.txt" and expiration date in 42 days in the server
And user "Brian" should have received a share with target "Shares/lorem.txt" and expiration date in 42 days in the server

@issue-ocis-1250
Scenario Outline: share a resource with another internal group with expiration date beyond maximum enforced expiration date
Given the setting "shareapi_default_expire_date_group_share" of app "core" has been set to "yes" in the server
And the setting "shareapi_enforce_expire_date_group_share" of app "core" has been set to "yes" in the server
And the setting "shareapi_expire_after_n_days_group_share" of app "core" has been set to "5" in the server
And user "Carol" has created file "lorem.txt" in the server
And user "Carol" has created folder "simple-folder" in the server
And user "Carol" has logged in using the webUI
When the user tries to share resource "<shared-resource>" with group "grp1" which expires in "+6" days using the webUI
Then user "Alice" should not have created any shares in the server
Examples:
| shared-resource |
| lorem.txt |
| simple-folder |
8 changes: 5 additions & 3 deletions tests/e2e/cucumber/features/smoke/reshare.feature
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@ Feature: reshare
And "Alice" shares the following resource using API
| resource | recipient | type | role |
| folder_to_shared | Brian | user | Can edit |

And "Brian" logs in
And "Brian" opens the "files" app
And "Brian" navigates to the shared with me page

# re-share with expiration date
And "Brian" reshares the following resource
| resource | recipient | type | role | resourceType |
| folder_to_shared | sales | group | Can view | folder |
| resource | recipient | type | role | resourceType | expirationDate |
| folder_to_shared | sales | group | Can view | folder | +5 days |

And "Carol" logs in
And "Carol" opens the "files" app
Expand Down
38 changes: 37 additions & 1 deletion tests/e2e/cucumber/features/smoke/share.feature
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ Feature: share
| testavatar.jpeg | Brian | user | Can view | file |
| simple.pdf | Brian | user | custom_permissions:read,update,share | file |
| sharedFile.txt | Brian | user | Can edit | file |

And "Brian" opens the "files" app
And "Brian" navigates to the shared with me page
Then "Brian" should not see a sync status for the file "shareToBrian.txt"
Expand Down Expand Up @@ -133,3 +133,39 @@ Feature: share
| shareToBrian.txt | Alice Hansen |
| shareToBrian.md | Alice Hansen |
And "Brian" logs out


Scenario: share with expiration date
Given "Admin" creates following group using API
| id |
| sales |
And "Admin" adds user to the group using API
| user | group |
| Brian | sales |
And "Alice" logs in
And "Alice" creates the following folder in personal space using API
| name |
| myfolder |
| mainFolder |
And "Alice" creates the following files into personal space using API
| pathToFile | content |
| new.txt | some content |
And "Alice" opens the "files" app
When "Alice" shares the following resource using the sidebar panel
| resource | recipient | type | role | resourceType | expirationDate |
| new.txt | Brian | user | Can edit | file | +5 days |
| myfolder | sales | group | Can view | folder | +10 days |
| mainFolder | Brian | user | Can edit | folder | |

# set expirationDate to existing share
And "Alice" sets the expiration date of the folder "mainFolder" of the user "Brian" to "+5 days"
And "Alice" sets the expiration date of the folder "myfolder" of the group "sales" to "+3 days"
ScharfViktor marked this conversation as resolved.
Show resolved Hide resolved
And "Alice" logs out

And "Brian" navigates to the shared with me page
And "Brian" accepts the following share
| name |
| new.txt |
| myfolder |
| mainFolder |
And "Brian" logs out
32 changes: 30 additions & 2 deletions tests/e2e/cucumber/steps/ui/shares.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { ICollaborator } from '../../../support/objects/app-files/share/collabor

const parseShareTable = function (stepTable: DataTable, usersEnvironment) {
return stepTable.hashes().reduce((acc, stepRow) => {
const { resource, recipient, type, role, resourceType } = stepRow
const { resource, recipient, type, role, resourceType, expirationDate } = stepRow

if (!acc[resource]) {
acc[resource] = []
Expand All @@ -19,7 +19,8 @@ const parseShareTable = function (stepTable: DataTable, usersEnvironment) {
: usersEnvironment.getUser({ key: recipient }),
role,
type,
resourceType
resourceType,
expirationDate
})

return acc
Expand Down Expand Up @@ -279,3 +280,30 @@ When(
}
}
)

When(
/^"([^"]*)" sets the expiration date of the (folder|file) "([^"]*)" of the (group|user) "([^"]*)" to "([^"]*)"?$/,
async function (
this: World,
stepUser: string,
_: unknown,
resource: string,
collaboratorType: 'user' | 'group',
collaboratorName: string,
expirationDate: string
): Promise<void> {
const { page } = this.actorsEnvironment.getActor({ key: stepUser })
const shareObject = new objects.applicationFiles.Share({ page })
await shareObject.addExpirationDate({
resource,
collaborator: {
collaborator:
collaboratorType === 'group'
? this.usersEnvironment.getGroup({ key: collaboratorName })
: this.usersEnvironment.getUser({ key: collaboratorName }),
type: collaboratorType
} as ICollaborator,
expirationDate
})
}
)
28 changes: 27 additions & 1 deletion tests/e2e/support/objects/app-files/share/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,14 @@ const pendingShareItem =
'//div[@id="files-shared-with-me-pending-section"]//tr[contains(@class,"oc-tbody-tr")]'
const passwordInput = '.oc-modal-body input.oc-text-input'
const createLinkButton = '.oc-modal-body-actions-confirm'
const showMoreOptionsButton = '#show-more-share-options-btn'
const calendarDatePickerId = 'recipient-datepicker-btn'
ScharfViktor marked this conversation as resolved.
Show resolved Hide resolved

export interface ShareArgs {
page: Page
resource: string
recipients: ICollaborator[]
expirationDate?: string
}

export const openSharingPanel = async function (
Expand Down Expand Up @@ -67,9 +70,14 @@ export const createShare = async (args: createShareArgs): Promise<void> => {
if (via !== 'URL_NAVIGATION') {
await openSharingPanel(page, resource, via)
}
const expirationDate = recipients[0].expirationDate

if (expirationDate) {
await page.locator(showMoreOptionsButton).click()
await page.getByTestId(calendarDatePickerId).click()
await Collaborator.setExpirationDate(page, expirationDate)
}
await Collaborator.inviteCollaborators({ page, collaborators: recipients })

await sidebar.close({ page })
}

Expand Down Expand Up @@ -249,3 +257,21 @@ export const setDenyShare = async (args: setDenyShareArgs): Promise<void> => {
await openSharingPanel(page, resource)
await Collaborator.setDenyShareForCollaborator({ page, deny, collaborator })
}

export const addExpirationDate = async (args: {
page: Page
resource: string
collaborator: Omit<ICollaborator, 'role'>
expirationDate: string
}): Promise<void> => {
const { page, resource, collaborator, expirationDate } = args
await openSharingPanel(page, resource)

await Promise.all([
page.waitForResponse(
(resp) =>
resp.url().includes('shares') && resp.status() === 200 && resp.request().method() === 'PUT'
),
Collaborator.setExpirationDateForCollaborator({ page, collaborator, expirationDate })
])
}
5 changes: 5 additions & 0 deletions tests/e2e/support/objects/app-files/share/collaborator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export interface ICollaborator {
role?: string
type?: CollaboratorType
resourceType?: string
expirationDate?: string
}

export interface InviteCollaboratorsArgs {
Expand Down Expand Up @@ -311,6 +312,10 @@ export default class Collaborator {
.locator(util.format(Collaborator.setExpirationDateCollaboratorButton, collaboratorRow))
.click()

await Collaborator.setExpirationDate(page, expirationDate)
}

static async setExpirationDate(page: Page, expirationDate: any): Promise<void> {
const newExpiryDate = getActualExpiryDate(
expirationDate.toLowerCase().match(/[dayrmonthwek]+/)[0],
expirationDate
Expand Down
15 changes: 15 additions & 0 deletions tests/e2e/support/objects/app-files/share/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Page } from '@playwright/test'
import * as po from './actions'
import { resourceIsNotOpenable, isAcceptedSharePresent, resourceIsSynced } from './utils'
import { createLinkArgs } from '../link/actions'
import { ICollaborator } from './collaborator'
export class Share {
#page: Page

Expand Down Expand Up @@ -71,4 +72,18 @@ export class Share {
await po.setDenyShare({ ...args, page: this.#page })
await this.#page.goto(startUrl)
}

async addExpirationDate({
resource,
collaborator,
expirationDate
}: {
resource: string
collaborator: Omit<ICollaborator, 'role'>
expirationDate: string
}): Promise<void> {
const startUrl = this.#page.url()
await po.addExpirationDate({ resource, collaborator, expirationDate, page: this.#page })
await this.#page.goto(startUrl)
}
}