Merge pull request #57001 from nextcloud/backport/56977/stable32

[stable32] fix(files_sharing): Normalize dir type to folder for federated shares
This commit is contained in:
F. E Noel Nfebe 2025-12-19 14:29:08 +01:00 committed by GitHub
commit de68fbf7a2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 55 additions and 5 deletions

View file

@ -313,6 +313,25 @@ describe('SharingService share to Node mapping', () => {
accepted: false,
}
const remoteFolderAccepted = {
mimetype: 'httpd/unix-directory',
mtime: 1688721600,
permissions: 31,
type: 'dir',
file_id: 5678,
id: 5,
share_type: ShareType.User,
parent: null,
remote: 'http://example.com',
remote_id: '12346',
share_token: 'share-token-folder',
name: '/testfolder',
mountpoint: '/shares/testfolder',
owner: 'owner-uid',
user: 'sharee-uid',
accepted: true,
}
const tempExternalFile = {
id: 65,
share_type: 0,
@ -455,6 +474,36 @@ describe('SharingService share to Node mapping', () => {
})
})
describe('Remote folder', () => {
test('Accepted with type dir', async () => {
axios.get.mockReturnValueOnce(Promise.resolve({
data: {
ocs: {
data: [remoteFolderAccepted],
},
},
}))
const shares = await getContents(false, true, false, false)
expect(axios.get).toHaveBeenCalledTimes(1)
expect(shares.contents).toHaveLength(1)
const folder = shares.contents[0] as Folder
expect(folder).toBeInstanceOf(Folder)
expect(folder.fileid).toBe(5678)
expect(folder.source).toBe('http://nextcloud.local/remote.php/dav/files/test/shares/testfolder')
expect(folder.owner).toBe('owner-uid')
expect(folder.mime).toBe('httpd/unix-directory')
expect(folder.mtime?.getTime()).toBe(remoteFolderAccepted.mtime * 1000)
expect(folder.size).toBe(undefined)
expect(folder.permissions).toBe(31)
expect(folder.root).toBe('/files/test')
expect(folder.attributes).toBeInstanceOf(Object)
expect(folder.attributes.favorite).toBe(0)
})
})
test('External temp file', async () => {
axios.get.mockReturnValueOnce(Promise.resolve({
data: {

View file

@ -30,7 +30,8 @@ const ocsEntryToNode = async function(ocsEntry: any): Promise<Folder | File | nu
// This won't catch files without an extension, but this is the best we can do
ocsEntry.mimetype = mime.getType(ocsEntry.name)
}
ocsEntry.item_type = ocsEntry.type || (ocsEntry.mimetype ? 'file' : 'folder')
const type = ocsEntry.type === 'dir' ? 'folder' : ocsEntry.type
ocsEntry.item_type = type || (ocsEntry.mimetype ? 'file' : 'folder')
// different naming for remote shares
ocsEntry.item_mtime = ocsEntry.mtime

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long