-
-
Notifications
You must be signed in to change notification settings - Fork 4.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: Add end-to-end test for share expiration date
Signed-off-by: Ferdinand Thiessen <[email protected]>
- Loading branch information
Showing
2 changed files
with
152 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
/*! | ||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors | ||
* SPDX-License-Identifier: AGPL-3.0-or-later | ||
*/ | ||
|
||
import { User } from '@nextcloud/cypress' | ||
import { closeSidebar } from '../files/FilesUtils.ts' | ||
import { createShare, openSharingDetails, openSharingPanel, updateShare } from './FilesSharingUtils.ts' | ||
|
||
describe('files_sharing: Expiry date', () => { | ||
const expectedDefaultDate = new Date(Date.now() + 2 * 24 * 60 * 60 * 1000) | ||
const expectedDefaultDateString = `${expectedDefaultDate.getFullYear()}-${String(expectedDefaultDate.getMonth() + 1).padStart(2, '0')}-${String(expectedDefaultDate.getDate()).padStart(2, '0')}` | ||
const fortnight = new Date(Date.now() + 14 * 24 * 60 * 60 * 1000) | ||
const fortnightString = `${fortnight.getFullYear()}-${String(fortnight.getMonth() + 1).padStart(2, '0')}-${String(fortnight.getDate()).padStart(2, '0')}` | ||
|
||
let alice: User | ||
let bob: User | ||
|
||
before(() => { | ||
// Ensure we have the admin setting setup for default dates with 2 days in the future | ||
cy.runOccCommand('config:app:set --value yes core shareapi_default_internal_expire_date') | ||
cy.runOccCommand('config:app:set --value 2 core shareapi_internal_expire_after_n_days') | ||
|
||
cy.createRandomUser().then((user) => { | ||
alice = user | ||
cy.login(alice) | ||
}) | ||
cy.createRandomUser().then((user) => { | ||
bob = user | ||
}) | ||
}) | ||
|
||
after(() => { | ||
cy.runOccCommand('config:app:delete core shareapi_default_internal_expire_date') | ||
cy.runOccCommand('config:app:delete core shareapi_enforce_internal_expire_date') | ||
cy.runOccCommand('config:app:delete core shareapi_internal_expire_after_n_days') | ||
}) | ||
|
||
beforeEach(() => { | ||
cy.runOccCommand('config:app:delete core shareapi_enforce_internal_expire_date') | ||
}) | ||
|
||
it('See default expiry date is set and enforced', () => { | ||
// Enforce the date | ||
cy.runOccCommand('config:app:set --value yes core shareapi_enforce_internal_expire_date') | ||
const dir = 'defaultExpiryDateEnforced' | ||
prepareDirectory(dir) | ||
|
||
validateExpiryDate(dir, expectedDefaultDateString) | ||
cy.findByRole('checkbox', { name: /expiration date/i }) | ||
.should('be.checked') | ||
.and('be.disabled') | ||
}) | ||
|
||
it('See default expiry date is set also if not enforced', () => { | ||
const dir = 'defaultExpiryDate' | ||
prepareDirectory(dir) | ||
|
||
validateExpiryDate(dir, expectedDefaultDateString) | ||
cy.findByRole('checkbox', { name: /expiration date/i }) | ||
.should('be.checked') | ||
.and('not.be.disabled') | ||
.check({ force: true, scrollBehavior: 'nearest' }) | ||
}) | ||
|
||
it('Can set custom expiry date', () => { | ||
const dir = 'customExpiryDate' | ||
prepareDirectory(dir) | ||
updateShare(dir, 0, { expiryDate: fortnight }) | ||
validateExpiryDate(dir, fortnightString) | ||
}) | ||
|
||
it('Custom expiry date survives reload', () => { | ||
const dir = 'customExpiryDateReload' | ||
prepareDirectory(dir) | ||
updateShare(dir, 0, { expiryDate: fortnight }) | ||
validateExpiryDate(dir, fortnightString) | ||
|
||
cy.visit('/apps/files') | ||
validateExpiryDate(dir, fortnightString) | ||
}) | ||
|
||
/** | ||
* Regression test for https://github.com/nextcloud/server/pull/50192 | ||
* Ensure that admin default settings do not always override the user set value. | ||
*/ | ||
it('Custom expiry date survives unrelated update', () => { | ||
const dir = 'customExpiryUnrelatedChanges' | ||
prepareDirectory(dir) | ||
updateShare(dir, 0, { expiryDate: fortnight }) | ||
validateExpiryDate(dir, fortnightString) | ||
|
||
closeSidebar() | ||
updateShare(dir, 0, { note: 'Only note changed' }) | ||
validateExpiryDate(dir, fortnightString) | ||
|
||
cy.visit('/apps/files') | ||
validateExpiryDate(dir, fortnightString) | ||
}) | ||
|
||
/** | ||
* Prepare directory, login and share to bob | ||
* | ||
* @param name The directory name | ||
*/ | ||
function prepareDirectory(name: string) { | ||
cy.mkdir(alice, `/${name}`) | ||
cy.login(alice) | ||
cy.visit('/apps/files') | ||
createShare(name, bob.userId) | ||
} | ||
|
||
/** | ||
* Validate expiry date on a share | ||
* | ||
* @param filename The filename to validate | ||
* @param expectedDate The expected date in YYYY-MM-dd | ||
*/ | ||
function validateExpiryDate(filename: string, expectedDate: string) { | ||
openSharingPanel(filename) | ||
openSharingDetails(0) | ||
|
||
cy.get('#share-date-picker') | ||
.should('exist') | ||
.and('have.value', expectedDate) | ||
} | ||
|
||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters