import { beforeEach, describe, expect, it, vi } from 'vitest' const mocks = vi.hoisted(() => ({ getSidebar: vi.fn(), registerFileAction: vi.fn(), loadState: vi.fn(), open: vi.fn(), setActiveTab: vi.fn(), getTabs: vi.fn(), })) vi.mock('@nextcloud/files', () => ({ getSidebar: mocks.getSidebar, registerFileAction: mocks.registerFileAction, Permission: { NONE: 0 }, })) vi.mock('@nextcloud/initial-state', () => ({ loadState: mocks.loadState, })) import { action } from '../src/main' const node = { root: '/files/alice', permissions: 1, source: 'https://cloud.example/remote.php/dav/files/alice/report.pdf', } const context = { nodes: [node], folder: {}, view: {}, contents: [node], } beforeEach(() => { mocks.open.mockReset() mocks.setActiveTab.mockReset() mocks.getTabs.mockReset() mocks.loadState.mockReset() mocks.loadState.mockReturnValue(true) mocks.getTabs.mockReturnValue([{ id: 'activity' }]) mocks.getSidebar.mockReturnValue({ available: true, isOpen: false, node: undefined, open: mocks.open, setActiveTab: mocks.setActiveTab, getTabs: mocks.getTabs, }) }) describe('Korean comments file action', () => { it('registers a non-inline 댓글 action', () => { expect(mocks.registerFileAction).toHaveBeenCalledWith(action) expect(action.displayName(context as never)).toBe('댓글') expect(action.inline?.(context as never)).toBe(false) }) it('opens the integrated Activity tab', async () => { expect(action.enabled?.(context as never)).toBe(true) expect(await action.exec(context as never)).toBeNull() expect(mocks.open).toHaveBeenCalledWith(node, 'activity') }) it('switches an already-open sidebar to Activity', async () => { mocks.getSidebar.mockReturnValue({ available: true, isOpen: true, node, open: mocks.open, setActiveTab: mocks.setActiveTab, getTabs: mocks.getTabs, }) expect(await action.exec(context as never)).toBeNull() expect(mocks.setActiveTab).toHaveBeenCalledWith('activity') expect(mocks.open).not.toHaveBeenCalled() }) it('falls back to the standalone Comments tab', async () => { mocks.getTabs.mockReturnValue([{ id: 'comments' }]) expect(await action.exec(context as never)).toBeNull() expect(mocks.open).toHaveBeenCalledWith(node, 'comments') }) it('hides when Activity exists without Comments integration', () => { mocks.loadState.mockReturnValue(false) mocks.getTabs.mockReturnValue([{ id: 'activity' }]) expect(action.enabled?.(context as never)).toBe(false) }) })