Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions apps/files/src/utils/fileUtils.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*!
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

import { FileType } from '@nextcloud/files'
import type { Node } from '@nextcloud/files'
import { describe, expect, it, vi } from 'vitest'
import { getSummaryFor } from './fileUtils.ts'

// Mock translation function used in getSummaryFor
vi.mock('@nextcloud/l10n', () => ({
n: vi.fn((app, single, plural, count) => {
if (count === 1) return single.replace('%n', count)
return plural.replace('%n', count)
}),
}))

describe('fileUtils', () => {
describe('getSummaryFor', () => {
it('returns correct summary for files and folders', () => {
const nodes = [
{ type: FileType.File } as Node,
{ type: FileType.Folder } as Node,
]
expect(getSummaryFor(nodes, 1)).toBe('1 file · 1 folder · 1 hidden')
})

it('does not display hidden string when hideHiddenString is true', () => {
const nodes = [
{ type: FileType.File } as Node,
{ type: FileType.Folder } as Node,
]
expect(getSummaryFor(nodes, 1, true)).toBe('1 file · 1 folder')
})

it('returns correct summary when there are no hidden files', () => {
const nodes = [
{ type: FileType.File } as Node,
{ type: FileType.File } as Node,
]
expect(getSummaryFor(nodes, 0)).toBe('2 files')
})
})
})
5 changes: 3 additions & 2 deletions apps/files/src/utils/fileUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@ export function extractFilePaths(path: string): [string, string] {
*
* @param nodes - The nodes to summarize
* @param hidden - The number of hidden nodes
* @param hideHiddenString - Whether to omit the hidden files text from the summary
*/
export function getSummaryFor(nodes: Node[], hidden = 0): string {
export function getSummaryFor(nodes: Node[], hidden = 0, hideHiddenString = false): string {
const fileCount = nodes.filter((node) => node.type === FileType.File).length
const folderCount = nodes.filter((node) => node.type === FileType.Folder).length

Expand All @@ -40,7 +41,7 @@ export function getSummaryFor(nodes: Node[], hidden = 0): string {
const folderSummary = n('files', '%n folder', '%n folders', folderCount)
summary.push(folderSummary)
}
if (hidden > 0) {
if (hidden > 0 && !hideHiddenString) {
// TRANSLATORS: This is the number of hidden files or folders
const hiddenSummary = n('files', '%n hidden', '%n hidden', hidden)
summary.push(hiddenSummary)
Expand Down
2 changes: 1 addition & 1 deletion apps/files/src/views/FilesList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ export default defineComponent({
*/
summary() {
const hidden = this.dirContents.length - this.dirContentsFiltered.length
return getSummaryFor(this.dirContentsFiltered, hidden)
return getSummaryFor(this.dirContentsFiltered, hidden, this.isPublic)
},
debouncedFetchContent() {
Expand Down