Skip to content

Commit

Permalink
Merge pull request #50260 from nextcloud/enhancements/files-sharing-t…
Browse files Browse the repository at this point in the history
…ests

chore : Comprehensive e2e testing for public sharing
  • Loading branch information
nfebe authored Feb 3, 2025
2 parents c38aa33 + 6d37e16 commit e9cb614
Show file tree
Hide file tree
Showing 13 changed files with 315 additions and 50 deletions.
2 changes: 1 addition & 1 deletion apps/files_sharing/src/components/SharingEntryLink.vue
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
:disabled="pendingEnforcedExpirationDate || saving"
class="share-link-expiration-date-checkbox"
@change="onDefaultExpirationDateEnabledChange">
{{ config.enforcePasswordForPublicLink ? t('files_sharing', 'Enable link expiration (enforced)') : t('files_sharing', 'Enable link expiration') }}
{{ config.isDefaultExpireDateEnforced ? t('files_sharing', 'Enable link expiration (enforced)') : t('files_sharing', 'Enable link expiration') }}
</NcActionCheckbox>

<!-- expiration date -->
Expand Down
18 changes: 18 additions & 0 deletions cypress/e2e/files_sharing/ShareOptionsType.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*!
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

export type ShareOptions = {
enforcePassword?: boolean
enforceExpirationDate?: boolean
alwaysAskForPassword?: boolean
defaultExpirationDateSet?: boolean
}

export const defaultShareOptions: ShareOptions = {
enforcePassword: false,
enforceExpirationDate: false,
alwaysAskForPassword: false,
defaultExpirationDateSet: false,
}
192 changes: 192 additions & 0 deletions cypress/e2e/files_sharing/public-share/required-before-create.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
/*!
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

import type { ShareContext } from './setup-public-share.ts'
import type { ShareOptions } from '../ShareOptionsType.ts'
import { defaultShareOptions } from '../ShareOptionsType.ts'
import { setupData, createShare } from './setup-public-share.ts'

describe('files_sharing: Before create checks', () => {

let shareContext: ShareContext

before(() => {
// Setup data for the shared folder once before all tests
cy.createRandomUser().then((randomUser) => {
shareContext = {
user: randomUser,
}
})
})

afterEach(() => {
cy.runOccCommand('config:app:delete core shareapi_enable_link_password_by_default')
cy.runOccCommand('config:app:delete core shareapi_enforce_links_password')
cy.runOccCommand('config:app:delete core shareapi_default_expire_date')
cy.runOccCommand('config:app:delete core shareapi_enforce_expire_date')
cy.runOccCommand('config:app:delete core shareapi_expire_after_n_days')
})

const applyShareOptions = (options: ShareOptions = defaultShareOptions): void => {
cy.runOccCommand(`config:app:set --value ${options.alwaysAskForPassword ? 'yes' : 'no'} core shareapi_enable_link_password_by_default`)
cy.runOccCommand(`config:app:set --value ${options.enforcePassword ? 'yes' : 'no'} core shareapi_enforce_links_password`)
cy.runOccCommand(`config:app:set --value ${options.enforceExpirationDate ? 'yes' : 'no'} core shareapi_enforce_expire_date`)
cy.runOccCommand(`config:app:set --value ${options.defaultExpirationDateSet ? 'yes' : 'no'} core shareapi_default_expire_date`)
if (options.defaultExpirationDateSet) {
cy.runOccCommand('config:app:set --value 2 core shareapi_expire_after_n_days')
}
}

it('Checks if user can create share when both password and expiration date are enforced', () => {
const shareOptions : ShareOptions = {
alwaysAskForPassword: true,
enforcePassword: true,
enforceExpirationDate: true,
defaultExpirationDateSet: true,
}
applyShareOptions(shareOptions)
const shareName = 'passwordAndExpireEnforced'
setupData(shareContext.user, shareName)
createShare(shareContext, shareName, shareOptions).then((shareUrl) => {
shareContext.url = shareUrl
cy.log(`Created share with URL: ${shareUrl}`)
})
})

it('Checks if user can create share when password is enforced and expiration date has a default set', () => {
const shareOptions : ShareOptions = {
alwaysAskForPassword: true,
enforcePassword: true,
defaultExpirationDateSet: true,
}
applyShareOptions(shareOptions)
const shareName = 'passwordEnforcedDefaultExpire'
setupData(shareContext.user, shareName)
createShare(shareContext, shareName, shareOptions).then((shareUrl) => {
shareContext.url = shareUrl
cy.log(`Created share with URL: ${shareUrl}`)
})
})

it('Checks if user can create share when password is optionally requested and expiration date is enforced', () => {
const shareOptions : ShareOptions = {
alwaysAskForPassword: true,
defaultExpirationDateSet: true,
enforceExpirationDate: true,
}
applyShareOptions(shareOptions)
const shareName = 'defaultPasswordExpireEnforced'
setupData(shareContext.user, shareName)
createShare(shareContext, shareName, shareOptions).then((shareUrl) => {
shareContext.url = shareUrl
cy.log(`Created share with URL: ${shareUrl}`)
})
})

it('Checks if user can create share when password is optionally requested and expiration date have defaults set', () => {
const shareOptions : ShareOptions = {
alwaysAskForPassword: true,
defaultExpirationDateSet: true,
}
applyShareOptions(shareOptions)
const shareName = 'defaultPasswordAndExpire'
setupData(shareContext.user, shareName)
createShare(shareContext, shareName, shareOptions).then((shareUrl) => {
shareContext.url = shareUrl
cy.log(`Created share with URL: ${shareUrl}`)
})
})

it('Checks if user can create share with password enforced and expiration date set but not enforced', () => {
const shareOptions : ShareOptions = {
alwaysAskForPassword: true,
enforcePassword: true,
defaultExpirationDateSet: true,
enforceExpirationDate: false,
}
applyShareOptions(shareOptions)
const shareName = 'passwordEnforcedExpireSetNotEnforced'
setupData(shareContext.user, shareName)
createShare(shareContext, shareName, shareOptions).then((shareUrl) => {
shareContext.url = shareUrl
cy.log(`Created share with URL: ${shareUrl}`)
})
})

it('Checks if user can create a share when both password and expiration date have default values but are both not enforced', () => {
const shareOptions : ShareOptions = {
alwaysAskForPassword: true,
enforcePassword: false,
defaultExpirationDateSet: true,
enforceExpirationDate: false,
}
applyShareOptions(shareOptions)
const shareName = 'defaultPasswordAndExpirationNotEnforced'
setupData(shareContext.user, shareName)
createShare(shareContext, shareName, shareOptions).then((shareUrl) => {
shareContext.url = shareUrl
cy.log(`Created share with URL: ${shareUrl}`)
})
})

it('Checks if user can create share with password not enforced but expiration date enforced', () => {
const shareOptions : ShareOptions = {
alwaysAskForPassword: true,
enforcePassword: false,
defaultExpirationDateSet: true,
enforceExpirationDate: true,
}
applyShareOptions(shareOptions)
const shareName = 'noPasswordExpireEnforced'
setupData(shareContext.user, shareName)
createShare(shareContext, shareName, shareOptions).then((shareUrl) => {
shareContext.url = shareUrl
cy.log(`Created share with URL: ${shareUrl}`)
})
})

it('Checks if user can create share with password not enforced and expiration date has a default set', () => {
const shareOptions : ShareOptions = {
alwaysAskForPassword: true,
enforcePassword: false,
defaultExpirationDateSet: true,
enforceExpirationDate: false,
}
applyShareOptions(shareOptions)
const shareName = 'defaultExpireNoPasswordEnforced'
setupData(shareContext.user, shareName)
createShare(shareContext, shareName, shareOptions).then((shareUrl) => {
shareContext.url = shareUrl
cy.log(`Created share with URL: ${shareUrl}`)
})
})

it('Checks if user can create share with expiration date set and password not enforced', () => {
const shareOptions : ShareOptions = {
alwaysAskForPassword: true,
enforcePassword: false,
defaultExpirationDateSet: true,
}
applyShareOptions(shareOptions)

const shareName = 'noPasswordExpireDefault'
setupData(shareContext.user, shareName)
createShare(shareContext, shareName, shareOptions).then((shareUrl) => {
shareContext.url = shareUrl
cy.log(`Created share with URL: ${shareUrl}`)
})
})

it('Checks if user can create share with password not enforced, expiration date not enforced, and no defaults set', () => {
applyShareOptions()
const shareName = 'noPasswordNoExpireNoDefaults'
setupData(shareContext.user, shareName)
createShare(shareContext, shareName, null).then((shareUrl) => {
shareContext.url = shareUrl
cy.log(`Created share with URL: ${shareUrl}`)
})
})

})
Loading

0 comments on commit e9cb614

Please sign in to comment.