mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-26 06:44:58 +00:00
code: nextjs,frontends,node (5 files)
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
|
||||
const mockList = vi.fn()
|
||||
const mockAdapter = { list: mockList }
|
||||
|
||||
vi.mock('../dbal-client', () => ({
|
||||
getAdapter: () => mockAdapter,
|
||||
}))
|
||||
|
||||
import { getInstalledPackages } from './get-installed-packages'
|
||||
|
||||
describe('getInstalledPackages', () => {
|
||||
beforeEach(() => {
|
||||
mockList.mockReset()
|
||||
})
|
||||
|
||||
it('returns mapped installed packages', async () => {
|
||||
mockList.mockResolvedValue({
|
||||
data: [
|
||||
{ packageId: 'pkg_one', installedAt: BigInt(100), version: '1.0.0', enabled: true },
|
||||
{ packageId: 'pkg_two', installedAt: BigInt(200), version: '2.0.0', enabled: false },
|
||||
],
|
||||
})
|
||||
|
||||
const result = await getInstalledPackages()
|
||||
|
||||
expect(mockList).toHaveBeenCalledWith('InstalledPackage')
|
||||
expect(result).toEqual([
|
||||
{ packageId: 'pkg_one', installedAt: 100, version: '1.0.0', enabled: true },
|
||||
{ packageId: 'pkg_two', installedAt: 200, version: '2.0.0', enabled: false },
|
||||
])
|
||||
})
|
||||
})
|
||||
52
frontends/nextjs/src/lib/db/packages/install-package.test.ts
Normal file
52
frontends/nextjs/src/lib/db/packages/install-package.test.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
|
||||
const mockFindFirst = vi.fn()
|
||||
const mockCreate = vi.fn()
|
||||
const mockAdapter = { findFirst: mockFindFirst, create: mockCreate }
|
||||
|
||||
vi.mock('../dbal-client', () => ({
|
||||
getAdapter: () => mockAdapter,
|
||||
}))
|
||||
|
||||
import { installPackage } from './install-package'
|
||||
|
||||
describe('installPackage', () => {
|
||||
beforeEach(() => {
|
||||
mockFindFirst.mockReset()
|
||||
mockCreate.mockReset()
|
||||
})
|
||||
|
||||
it('creates package when not installed', async () => {
|
||||
mockFindFirst.mockResolvedValue(null)
|
||||
|
||||
await installPackage({
|
||||
packageId: 'pkg_one',
|
||||
installedAt: 1234,
|
||||
version: '1.2.3',
|
||||
enabled: true,
|
||||
})
|
||||
|
||||
expect(mockFindFirst).toHaveBeenCalledWith('InstalledPackage', {
|
||||
where: { packageId: 'pkg_one' },
|
||||
})
|
||||
expect(mockCreate).toHaveBeenCalledWith('InstalledPackage', {
|
||||
packageId: 'pkg_one',
|
||||
installedAt: BigInt(1234),
|
||||
version: '1.2.3',
|
||||
enabled: true,
|
||||
})
|
||||
})
|
||||
|
||||
it('does not create when already installed', async () => {
|
||||
mockFindFirst.mockResolvedValue({ packageId: 'pkg_one' })
|
||||
|
||||
await installPackage({
|
||||
packageId: 'pkg_one',
|
||||
installedAt: 1234,
|
||||
version: '1.2.3',
|
||||
enabled: true,
|
||||
})
|
||||
|
||||
expect(mockCreate).not.toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
16
frontends/nextjs/src/lib/nerd-mode-ide/append-node.ts
Normal file
16
frontends/nextjs/src/lib/nerd-mode-ide/append-node.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import type { FileNode } from './types'
|
||||
|
||||
export function appendNode(nodes: FileNode[], parentId: string | null, newNode: FileNode): FileNode[] {
|
||||
if (!parentId) return [...nodes, newNode]
|
||||
|
||||
return nodes.map((node) => {
|
||||
if (node.id === parentId && node.type === 'folder') {
|
||||
const children = node.children ? [...node.children, newNode] : [newNode]
|
||||
return { ...node, children, expanded: true }
|
||||
}
|
||||
if (node.children) {
|
||||
return { ...node, children: appendNode(node.children, parentId, newNode) }
|
||||
}
|
||||
return node
|
||||
})
|
||||
}
|
||||
20
frontends/nextjs/src/lib/nerd-mode-ide/create-file-node.ts
Normal file
20
frontends/nextjs/src/lib/nerd-mode-ide/create-file-node.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import { createNodeId } from './create-node-id'
|
||||
import { getLanguageFromFilename } from './get-language-from-filename'
|
||||
import type { FileNode } from './types'
|
||||
|
||||
interface CreateFileNodeOptions {
|
||||
name: string
|
||||
content?: string
|
||||
exportPath?: string
|
||||
}
|
||||
|
||||
export function createFileNode({ name, content = '', exportPath }: CreateFileNodeOptions): FileNode {
|
||||
return {
|
||||
id: createNodeId('file'),
|
||||
name,
|
||||
type: 'file',
|
||||
content,
|
||||
language: getLanguageFromFilename(name),
|
||||
exportPath,
|
||||
}
|
||||
}
|
||||
20
frontends/nextjs/src/lib/nerd-mode-ide/create-folder-node.ts
Normal file
20
frontends/nextjs/src/lib/nerd-mode-ide/create-folder-node.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import { createNodeId } from './create-node-id'
|
||||
import type { FileNode } from './types'
|
||||
|
||||
interface CreateFolderNodeOptions {
|
||||
name: string
|
||||
children?: FileNode[]
|
||||
expanded?: boolean
|
||||
exportPath?: string
|
||||
}
|
||||
|
||||
export function createFolderNode({ name, children = [], expanded = false, exportPath }: CreateFolderNodeOptions): FileNode {
|
||||
return {
|
||||
id: createNodeId('folder'),
|
||||
name,
|
||||
type: 'folder',
|
||||
children,
|
||||
expanded,
|
||||
exportPath,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user