Files
korean_comments_action/tests/main.spec.ts
T

95 lines
2.5 KiB
TypeScript

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)
})
})