diff --git a/src/backend/src/filesystem/hl_operations/hl_stat.js b/src/backend/src/filesystem/hl_operations/hl_stat.js index 5fa321e1..53419aea 100644 --- a/src/backend/src/filesystem/hl_operations/hl_stat.js +++ b/src/backend/src/filesystem/hl_operations/hl_stat.js @@ -29,7 +29,8 @@ class HLStat extends HLFilesystemOperation { const { subject, user, return_subdomains, - return_permissions, + return_permissions, // Deprecated: kept for backwards compatiable with `return_shares` + return_shares, return_versions, return_size, } = this.values; @@ -55,8 +56,7 @@ class HLStat extends HLFilesystemOperation { if (return_size) await subject.fetchSize(user); if (return_subdomains) await subject.fetchSubdomains(user) - if (return_permissions) { - subject.entry.permissions = []; + if (return_shares || return_permissions) { await subject.fetchShares(); } if (return_versions) await subject.fetchVersions(); diff --git a/src/backend/src/routers/filesystem_api/stat.js b/src/backend/src/routers/filesystem_api/stat.js index 6680714b..8c0501b0 100644 --- a/src/backend/src/routers/filesystem_api/stat.js +++ b/src/backend/src/routers/filesystem_api/stat.js @@ -43,6 +43,7 @@ module.exports = eggspress('/stat', { user: req.user, return_subdomains: req.body.return_subdomains, return_permissions: req.body.return_permissions, + return_shares: req.body.return_shares, return_versions: req.body.return_versions, return_size: req.body.return_size, }); diff --git a/tools/api-tester/tests/stat.js b/tools/api-tester/tests/stat.js index 46038454..41f8c6c6 100644 --- a/tools/api-tester/tests/stat.js +++ b/tools/api-tester/tests/stat.js @@ -46,7 +46,23 @@ module.exports = { expect(threw).true; }); - const flags = ['permissions', 'versions']; + await t.case('stat with versions', async () => { + result = await t.stat(TEST_FILENAME, { + return_versions: true, + }); + + await verify_fsentry(t, result); + await t.case('filename is correct', () => { + expect(result.name).equal(`test_stat.txt`); + }); + await t.case(`result has versions array`, () => { + expect(Array.isArray(result.versions)).true; + }); + }) + + // Backend should return 'shares' field when 'return_shares' is true. And + // the backwards compatiable of `return_permissions` is also tested here. + const flags = ['shares', 'permissions']; for ( const flag of flags ) { await t.case('stat with ' + flag, async () => { result = await t.stat(TEST_FILENAME, { @@ -57,8 +73,10 @@ module.exports = { await t.case('filename is correct', () => { expect(result.name).equal(`test_stat.txt`); }); - await t.case(`result has ${flag} array`, () => { - expect(Array.isArray(result[flag])).true; + await t.case(`result has shares (apps and users)`, () => { + expect('shares' in result).true; + expect(Array.isArray(result['shares']['users'])).true; + expect(Array.isArray(result['shares']['apps'])).true; }); }) }