Skip to content

Commit

Permalink
fix: Do not expire labeled versions
Browse files Browse the repository at this point in the history
Signed-off-by: Louis Chemineau <louis@chmn.me>
  • Loading branch information
artonge committed Sep 13, 2024
1 parent 6f86aaa commit 0eb424f
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 0 deletions.
75 changes: 75 additions & 0 deletions cypress/e2e/files_versions/version_expiration.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/**
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

import type { User } from '@nextcloud/cypress'

import { assertVersionContent, nameVersion, openVersionsPanel, uploadThreeVersions } from './filesVersionsUtils'
import { addUserToGroup, createGroup, createGroupFolder, PERMISSION_DELETE, PERMISSION_READ, PERMISSION_WRITE } from '../groupfoldersUtils'
import { navigateToFolder } from '../files/filesUtils'

describe('Versions expiration', () => {
let randomGroupName: string
let randomGroupFolderName: string
let randomFileName: string
let randomFilePath: string
let user1: User

beforeEach(() => {
randomGroupName = Math.random().toString(36).replace(/[^a-z]+/g, '').substring(0, 10)
randomGroupFolderName = Math.random().toString(36).replace(/[^a-z]+/g, '').substring(0, 10)
randomFileName = Math.random().toString(36).replace(/[^a-z]+/g, '').substring(0, 10) + '.txt'
randomFilePath = `${randomGroupFolderName}/${randomFileName}`

cy.createRandomUser().then(_user => { user1 = _user })
createGroup(randomGroupName)

cy.then(() => {
addUserToGroup(randomGroupName, user1.userId)
createGroupFolder(randomGroupFolderName, randomGroupName, [PERMISSION_READ, PERMISSION_WRITE, PERMISSION_DELETE])

uploadThreeVersions(user1, randomFilePath)
cy.login(user1)
})

cy.visit('/apps/files')
navigateToFolder(randomGroupFolderName)
openVersionsPanel(randomFilePath)

})

it('Expire all versions', () => {
cy.runOccCommand('config:system:set versions_retention_obligation --value "0, 0"')
cy.runOccCommand('versions:expire')
cy.runOccCommand('config:system:set versions_retention_obligation --value auto')
cy.visit('/apps/files')
openVersionsPanel(randomFileName)

cy.get('#tab-version_vue').within(() => {
cy.get('[data-files-versions-version]').should('have.length', 1)
cy.get('[data-files-versions-version]').eq(0).contains('Current version')
})

assertVersionContent(0, 'v3')
})

it('Expire versions v2', () => {
nameVersion(2, 'v1')

cy.runOccCommand('config:system:set versions_retention_obligation --value "0, 0"')
cy.runOccCommand('versions:expire')
cy.runOccCommand('config:system:set versions_retention_obligation --value auto')
cy.visit('/apps/files')
openVersionsPanel(randomFileName)

cy.get('#tab-version_vue').within(() => {
cy.get('[data-files-versions-version]').should('have.length', 2)
cy.get('[data-files-versions-version]').eq(0).contains('Current version')
cy.get('[data-files-versions-version]').eq(1).contains('v1')
})

assertVersionContent(0, 'v3')
assertVersionContent(1, 'v1')
})
})
11 changes: 11 additions & 0 deletions lib/Versions/ExpireManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

use OCA\Files_Versions\Expiration;
use OCA\Files_Versions\Versions\IVersion;
use OCA\Files_Versions\Versions\IMetadataVersion;

/**
* TODO: move this to files_versions to be reused to apps in nc16
Expand Down Expand Up @@ -117,6 +118,16 @@ public function getExpiredVersion(array $versions, int $time, bool $quotaExceede
});

$expired = array_filter($versionsLeft, function (IVersion $version) use ($quotaExceeded) {
// Do not expire current version.
if ($version instanceof IMetadataVersion && $version->getTimestamp() === $version->getSourceFile()->getMtime()) {
return false;

Check failure on line 123 in lib/Versions/ExpireManager.php

View workflow job for this annotation

GitHub Actions / static-psalm-analysis

UndefinedInterfaceMethod

lib/Versions/ExpireManager.php:123:18: UndefinedInterfaceMethod: Method OCA\Files_Versions\Versions\IVersion::getMetadataValue does not exist (see https://psalm.dev/181)

Check failure on line 123 in lib/Versions/ExpireManager.php

View workflow job for this annotation

GitHub Actions / static-psalm-analysis

UndefinedInterfaceMethod

lib/Versions/ExpireManager.php:123:66: UndefinedInterfaceMethod: Method OCA\Files_Versions\Versions\IVersion::getMetadataValue does not exist (see https://psalm.dev/181)
}

// Do not expire versions with a label.
if ($version->getMetadataValue('label') !== null && $version->getMetadataValue('label') !== '') {
return false;
}

return $this->expiration->isExpired($version->getTimestamp(), $quotaExceeded);
});

Expand Down

0 comments on commit 0eb424f

Please sign in to comment.