@@ -33,9 +41,7 @@ async function onFileDrop(event: DragEvent) {
/>
![StudioItemActionId.RenameItem, StudioItemActionId.DeleteItem, StudioItemActionId.DuplicateItem].includes(action.id))
+ // Upload only available for medias
+ if (!item.id.startsWith(TreeRootId.Media)) {
+ forbiddenActions.push(StudioItemActionId.UploadMedia)
}
// Item type filtering
switch (item.type) {
+ case 'root':
+ forbiddenActions.push(StudioItemActionId.RenameItem, StudioItemActionId.DeleteItem, StudioItemActionId.DuplicateItem)
+ break
case 'file':
- forbiddenActions.push(StudioItemActionId.CreateFolder, StudioItemActionId.CreateDocument)
+ forbiddenActions.push(StudioItemActionId.CreateFolder, StudioItemActionId.CreateDocument, StudioItemActionId.UploadMedia)
break
case 'directory':
forbiddenActions.push(StudioItemActionId.DuplicateItem)
@@ -72,7 +83,6 @@ export function computeActionItems(itemActions: StudioAction[], item?: TreeItem
forbiddenActions.push(StudioItemActionId.DuplicateItem, StudioItemActionId.RenameItem, StudioItemActionId.DeleteItem)
break
case TreeStatus.Renamed:
- forbiddenActions.push(StudioItemActionId.RenameItem)
break
default:
forbiddenActions.push(StudioItemActionId.RevertItem)
diff --git a/src/app/src/utils/draft.ts b/src/app/src/utils/draft.ts
index 8528a8f0..731bd9c0 100644
--- a/src/app/src/utils/draft.ts
+++ b/src/app/src/utils/draft.ts
@@ -1,7 +1,7 @@
import { type DatabasePageItem, type DraftItem, type BaseItem, ContentFileExtension } from '../types'
import { DraftStatus } from '../types'
-import { ROOT_ITEM } from './tree'
import { isEqual } from './database'
+import { TreeRootId } from './tree'
export function getDraftStatus(modified?: BaseItem, original?: BaseItem): DraftStatus {
if (!modified && !original) {
@@ -31,7 +31,7 @@ export function getDraftStatus(modified?: BaseItem, original?: BaseItem): DraftS
}
export function findDescendantsFromId(list: DraftItem[], id: string): DraftItem[] {
- if (id === ROOT_ITEM.id) {
+ if ([TreeRootId.Content, TreeRootId.Media].includes(id as TreeRootId)) {
return list
}
diff --git a/src/app/src/utils/tree.ts b/src/app/src/utils/tree.ts
index 5fc9bc92..febeccf6 100644
--- a/src/app/src/utils/tree.ts
+++ b/src/app/src/utils/tree.ts
@@ -5,7 +5,10 @@ import type { RouteLocationNormalized } from 'vue-router'
import type { BaseItem } from '../types/item'
import { isEqual } from './database'
-export const ROOT_ITEM: TreeItem = { id: 'root', name: 'content', fsPath: '/', type: 'root' }
+export enum TreeRootId {
+ Content = 'content',
+ Media = 'public-assets',
+}
export const EXTENSIONS_WITH_PREVIEW = new Set([
'jpg',
@@ -317,16 +320,20 @@ function calculateDirectoryStatuses(items: TreeItem[]) {
const childrenWithStatus = item.children.filter(child => child.status && child.status !== TreeStatus.Opened)
if (childrenWithStatus.length > 0) {
- // Check if ALL children with status are deleted
- const allDeleted = childrenWithStatus.every(child => child.status === TreeStatus.Deleted)
-
- if (allDeleted && childrenWithStatus.length === item.children.length) {
- // If all children are deleted, mark directory as deleted
- item.status = TreeStatus.Deleted
- }
- else {
- // Otherwise, mark as updated
- item.status = TreeStatus.Updated
+ item.status = TreeStatus.Updated
+
+ const allChildrenHaveStatus = childrenWithStatus.length === item.children.length
+
+ if (allChildrenHaveStatus) {
+ if (childrenWithStatus.every(child => child.status === TreeStatus.Deleted)) {
+ item.status = TreeStatus.Deleted
+ }
+ else if (childrenWithStatus.every(child => child.status === TreeStatus.Renamed)) {
+ item.status = TreeStatus.Renamed
+ }
+ else if (childrenWithStatus.every(child => child.status === TreeStatus.Created)) {
+ item.status = TreeStatus.Created
+ }
}
}
}
diff --git a/src/app/test/integration/composables/useDraftDocuments.test.ts b/src/app/test/integration/composables/useDraftDocuments.test.ts
index cec6e339..88bf4b43 100644
--- a/src/app/test/integration/composables/useDraftDocuments.test.ts
+++ b/src/app/test/integration/composables/useDraftDocuments.test.ts
@@ -141,10 +141,6 @@ describe('useDraftDocuments - Action Chains Integration Tests', () => {
const draftDocuments = useDraftDocuments(mockHost, mockGit as never)
const { selectById, update, revert, list } = draftDocuments
- const mockDocument = createMockDocument(documentId)
- const fsPath = mockHost.document.getFileSystemPath(documentId)
- await mockHost.document.create(fsPath, mockDocument.path, '')
-
/*
STEP 1: SELECT
*/
@@ -198,9 +194,7 @@ describe('useDraftDocuments - Action Chains Integration Tests', () => {
const draftDocuments = useDraftDocuments(mockHost, mockGit as never)
const { selectById, rename, update, list } = draftDocuments
- const mockDocument = createMockDocument(documentId)
- const fsPath = mockHost.document.getFileSystemPath(documentId)
- const createdDocument = await mockHost.document.create(fsPath, mockDocument.path, '')
+ const createdDocument = createMockDocument(documentId)
/*
STEP 1: SELECT
@@ -220,12 +214,13 @@ describe('useDraftDocuments - Action Chains Integration Tests', () => {
STEP 2: RENAME
*/
const newId = generateUniqueDocumentId()
- const renamedDraftItem = await rename(documentId, newId)
+ const newFsPath = mockHost.document.getFileSystemPath(newId)
+ await rename([{ id: documentId, newFsPath }])
// Storage
expect(mockStorage.size).toEqual(2)
- const renamedDraftStorage = JSON.parse(mockStorage.get(normalizeKey(renamedDraftItem.id))!)
+ const renamedDraftStorage = JSON.parse(mockStorage.get(normalizeKey(newId))!)
expect(renamedDraftStorage).toHaveProperty('status', DraftStatus.Created)
expect(renamedDraftStorage).toHaveProperty('id', newId)
expect(renamedDraftStorage).toHaveProperty('original', createdDocument)
diff --git a/src/app/test/mocks/host.ts b/src/app/test/mocks/host.ts
index 5b40b5d8..238c2a8c 100644
--- a/src/app/test/mocks/host.ts
+++ b/src/app/test/mocks/host.ts
@@ -10,16 +10,9 @@ const getFileSystemPath = (id: string) => {
export const createMockHost = (): StudioHost => ({
document: {
get: vi.fn().mockImplementation(async (id: string) => createMockDocument(id)),
- create: vi.fn().mockImplementation(async (fsPath: string, routePath: string, content: string) => {
+ create: vi.fn().mockImplementation(async (fsPath: string, _content: string) => {
const id = fsPath.startsWith('docs/') ? fsPath : `docs${fsPath}`
- return createMockDocument(id, {
- path: routePath,
- stem: fsPath.split('/').pop()?.replace('.md', ''),
- body: {
- type: 'minimark',
- value: [content || 'Test content'],
- },
- })
+ return createMockDocument(id)
}),
upsert: vi.fn().mockResolvedValue(undefined),
delete: vi.fn().mockResolvedValue(undefined),
diff --git a/src/app/test/unit/utils/context.test.ts b/src/app/test/unit/utils/context.test.ts
index eacf37f7..074671a6 100644
--- a/src/app/test/unit/utils/context.test.ts
+++ b/src/app/test/unit/utils/context.test.ts
@@ -2,6 +2,7 @@ import { describe, it, expect } from 'vitest'
import { computeActionItems, STUDIO_ITEM_ACTION_DEFINITIONS } from '../../../src/utils/context'
import { StudioItemActionId, type TreeItem } from '../../../src/types'
import { TreeStatus } from '../../../src/types'
+import { TreeRootId } from '../../../src/utils/tree'
describe('computeActionItems', () => {
it('should return all actions when item is undefined', () => {
@@ -12,51 +13,68 @@ describe('computeActionItems', () => {
/**************************************************
******************* Root items *******************
**************************************************/
- it('should filter out actions for root items', () => {
+ it('should filter out actions for content root items', () => {
const rootItem: TreeItem = {
+ id: TreeRootId.Content,
type: 'root',
name: 'content',
} as TreeItem
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, rootItem)
- expect(result.find(action => action.id === StudioItemActionId.RenameItem)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.DeleteItem)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.DuplicateItem)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
action.id !== StudioItemActionId.RenameItem
&& action.id !== StudioItemActionId.DeleteItem
- && action.id !== StudioItemActionId.DuplicateItem,
+ && action.id !== StudioItemActionId.DuplicateItem
+ && action.id !== StudioItemActionId.UploadMedia
+ && action.id !== StudioItemActionId.RevertItem,
+ )
+ expect(result).toEqual(expectedActions)
+ })
+
+ it('should filter out actions for media root items', () => {
+ const rootItem: TreeItem = {
+ id: TreeRootId.Media,
+ type: 'root',
+ name: 'media',
+ } as TreeItem
+
+ const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, rootItem)
+
+ const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
+ action.id !== StudioItemActionId.RevertItem
+ && action.id !== StudioItemActionId.DeleteItem
+ && action.id !== StudioItemActionId.DuplicateItem
+ && action.id !== StudioItemActionId.RenameItem,
)
+
expect(result).toEqual(expectedActions)
})
/**************************************************
******************* File items *******************
**************************************************/
- it('should filter out actions for file items without draft status', () => {
+ it('should filter out actions for content file items without draft status', () => {
const fileItem: TreeItem = {
+ id: 'docs/test.md',
type: 'file',
name: 'test.md',
} as TreeItem
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, fileItem)
- expect(result.find(action => action.id === StudioItemActionId.CreateFolder)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.CreateDocument)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.RevertItem)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
action.id !== StudioItemActionId.CreateFolder
&& action.id !== StudioItemActionId.CreateDocument
- && action.id !== StudioItemActionId.RevertItem,
+ && action.id !== StudioItemActionId.RevertItem
+ && action.id !== StudioItemActionId.UploadMedia,
)
expect(result).toEqual(expectedActions)
})
- it('should filter out actions for file items with draft OPENED status', () => {
+ it('should filter out actions for content file items with draft OPENED status', () => {
const fileItem: TreeItem = {
+ id: 'docs/test.md',
type: 'file',
name: 'test.md',
status: TreeStatus.Opened,
@@ -64,20 +82,18 @@ describe('computeActionItems', () => {
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, fileItem)
- expect(result.find(action => action.id === StudioItemActionId.CreateFolder)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.CreateDocument)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.RevertItem)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
action.id !== StudioItemActionId.CreateFolder
&& action.id !== StudioItemActionId.CreateDocument
- && action.id !== StudioItemActionId.RevertItem,
+ && action.id !== StudioItemActionId.RevertItem
+ && action.id !== StudioItemActionId.UploadMedia,
)
expect(result).toEqual(expectedActions)
})
- it('should filter out actions for file items with draft UPDATED status', () => {
+ it('should filter out actions for content file items with draft UPDATED status', () => {
const fileItem: TreeItem = {
+ id: 'docs/test.md',
type: 'file',
name: 'test.md',
status: TreeStatus.Updated,
@@ -85,18 +101,17 @@ describe('computeActionItems', () => {
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, fileItem)
- expect(result.find(action => action.id === StudioItemActionId.CreateFolder)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.CreateDocument)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
action.id !== StudioItemActionId.CreateFolder
- && action.id !== StudioItemActionId.CreateDocument,
+ && action.id !== StudioItemActionId.CreateDocument
+ && action.id !== StudioItemActionId.UploadMedia,
)
expect(result).toEqual(expectedActions)
})
- it('should filter out actions for file items with draft CREATED status', () => {
+ it('should filter out actions for content file items with draft CREATED status', () => {
const fileItem: TreeItem = {
+ id: 'docs/test.md',
type: 'file',
name: 'test.md',
status: TreeStatus.Created,
@@ -104,18 +119,17 @@ describe('computeActionItems', () => {
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, fileItem)
- expect(result.find(action => action.id === StudioItemActionId.CreateFolder)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.CreateDocument)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
action.id !== StudioItemActionId.CreateFolder
- && action.id !== StudioItemActionId.CreateDocument,
+ && action.id !== StudioItemActionId.CreateDocument
+ && action.id !== StudioItemActionId.UploadMedia,
)
expect(result).toEqual(expectedActions)
})
- it('should filter out actions for file items with draft DELETED status', () => {
+ it('should filter out actions for content file items with draft DELETED status', () => {
const fileItem: TreeItem = {
+ id: 'docs/test.md',
type: 'file',
name: 'test.md',
status: TreeStatus.Deleted,
@@ -123,24 +137,20 @@ describe('computeActionItems', () => {
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, fileItem)
- expect(result.find(action => action.id === StudioItemActionId.CreateFolder)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.CreateDocument)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.DuplicateItem)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.RenameItem)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.DeleteItem)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
action.id !== StudioItemActionId.CreateFolder
&& action.id !== StudioItemActionId.CreateDocument
&& action.id !== StudioItemActionId.DuplicateItem
&& action.id !== StudioItemActionId.RenameItem
- && action.id !== StudioItemActionId.DeleteItem,
+ && action.id !== StudioItemActionId.DeleteItem
+ && action.id !== StudioItemActionId.UploadMedia,
)
expect(result).toEqual(expectedActions)
})
- it('should filter out actions for file items with draft RENAMED status', () => {
+ it('should filter out actions for content file items with draft RENAMED status', () => {
const fileItem: TreeItem = {
+ id: 'docs/test.md',
type: 'file',
name: 'test.md',
status: TreeStatus.Renamed,
@@ -148,14 +158,10 @@ describe('computeActionItems', () => {
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, fileItem)
- expect(result.find(action => action.id === StudioItemActionId.CreateFolder)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.CreateDocument)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.RenameItem)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
action.id !== StudioItemActionId.CreateFolder
&& action.id !== StudioItemActionId.CreateDocument
- && action.id !== StudioItemActionId.RenameItem,
+ && action.id !== StudioItemActionId.UploadMedia,
)
expect(result).toEqual(expectedActions)
})
@@ -164,26 +170,27 @@ describe('computeActionItems', () => {
****************** Directory items ***************
**************************************************/
- it('should filter out actions for directory items without draft status', () => {
+ it('should filter out actions for content directory items without draft status', () => {
const directoryItem: TreeItem = {
+ id: 'docs/folder',
type: 'directory',
name: 'folder',
} as TreeItem
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, directoryItem)
- expect(result.find(action => action.id === StudioItemActionId.DuplicateItem)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.RevertItem)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
action.id !== StudioItemActionId.DuplicateItem
- && action.id !== StudioItemActionId.RevertItem,
+ && action.id !== StudioItemActionId.RevertItem
+ && action.id !== StudioItemActionId.UploadMedia,
)
+
expect(result).toEqual(expectedActions)
})
- it('should filter out actions for directory items with draft OPENED status', () => {
+ it('should filter out actions for content directory items with draft OPENED status', () => {
const directoryItem: TreeItem = {
+ id: 'docs/folder',
type: 'directory',
name: 'folder',
status: TreeStatus.Opened,
@@ -191,18 +198,17 @@ describe('computeActionItems', () => {
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, directoryItem)
- expect(result.find(action => action.id === StudioItemActionId.DuplicateItem)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.RevertItem)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
action.id !== StudioItemActionId.DuplicateItem
- && action.id !== StudioItemActionId.RevertItem,
+ && action.id !== StudioItemActionId.RevertItem
+ && action.id !== StudioItemActionId.UploadMedia,
)
expect(result).toEqual(expectedActions)
})
- it('should filter out actions for directory items with draft UPDATED status', () => {
+ it('should filter out actions for content directory items with draft UPDATED status', () => {
const directoryItem: TreeItem = {
+ id: 'docs/folder',
type: 'directory',
name: 'folder',
status: TreeStatus.Updated,
@@ -210,16 +216,16 @@ describe('computeActionItems', () => {
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, directoryItem)
- expect(result.find(action => action.id === StudioItemActionId.DuplicateItem)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
- action.id !== StudioItemActionId.DuplicateItem,
+ action.id !== StudioItemActionId.DuplicateItem
+ && action.id !== StudioItemActionId.UploadMedia,
)
expect(result).toEqual(expectedActions)
})
- it('should filter out actions for directory items with draft CREATED status', () => {
+ it('should filter out actions for content directory items with draft CREATED status', () => {
const directoryItem: TreeItem = {
+ id: 'docs/folder',
type: 'directory',
name: 'folder',
status: TreeStatus.Created,
@@ -227,16 +233,16 @@ describe('computeActionItems', () => {
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, directoryItem)
- expect(result.find(action => action.id === StudioItemActionId.DuplicateItem)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
- action.id !== StudioItemActionId.DuplicateItem,
+ action.id !== StudioItemActionId.DuplicateItem
+ && action.id !== StudioItemActionId.UploadMedia,
)
expect(result).toEqual(expectedActions)
})
- it('should filter out actions for directory items with draft DELETED status', () => {
+ it('should filter out actions for content directory items with draft DELETED status', () => {
const directoryItem: TreeItem = {
+ id: 'docs/folder',
type: 'directory',
name: 'folder',
status: TreeStatus.Deleted,
@@ -244,20 +250,18 @@ describe('computeActionItems', () => {
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, directoryItem)
- expect(result.find(action => action.id === StudioItemActionId.DuplicateItem)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.RenameItem)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.DeleteItem)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
action.id !== StudioItemActionId.DuplicateItem
&& action.id !== StudioItemActionId.RenameItem
- && action.id !== StudioItemActionId.DeleteItem,
+ && action.id !== StudioItemActionId.DeleteItem
+ && action.id !== StudioItemActionId.UploadMedia,
)
expect(result).toEqual(expectedActions)
})
- it('should filter out actions for directory items with draft RENAMED status', () => {
+ it('should filter out actions for content directory items with draft RENAMED status', () => {
const directoryItem: TreeItem = {
+ id: 'docs/folder',
type: 'directory',
name: 'folder',
status: TreeStatus.Renamed,
@@ -265,12 +269,24 @@ describe('computeActionItems', () => {
const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, directoryItem)
- expect(result.find(action => action.id === StudioItemActionId.DuplicateItem)).toBeUndefined()
- expect(result.find(action => action.id === StudioItemActionId.RenameItem)).toBeUndefined()
-
const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
action.id !== StudioItemActionId.DuplicateItem
- && action.id !== StudioItemActionId.RenameItem,
+ && action.id !== StudioItemActionId.UploadMedia,
+ )
+ expect(result).toEqual(expectedActions)
+ })
+
+ it('should filter out actions for media directory items', () => {
+ const directoryItem: TreeItem = {
+ id: `${TreeRootId.Media}/folder`,
+ type: 'directory',
+ } as TreeItem
+
+ const result = computeActionItems(STUDIO_ITEM_ACTION_DEFINITIONS, directoryItem)
+
+ const expectedActions = STUDIO_ITEM_ACTION_DEFINITIONS.filter(action =>
+ action.id !== StudioItemActionId.RevertItem
+ && action.id !== StudioItemActionId.DuplicateItem,
)
expect(result).toEqual(expectedActions)
})
diff --git a/src/app/test/unit/utils/draft.test.ts b/src/app/test/unit/utils/draft.test.ts
index 86ea0265..796b93c7 100644
--- a/src/app/test/unit/utils/draft.test.ts
+++ b/src/app/test/unit/utils/draft.test.ts
@@ -2,8 +2,8 @@ import { describe, it, expect } from 'vitest'
import { findDescendantsFromId, getDraftStatus } from '../../../src/utils/draft'
import { draftItemsList } from '../../../test/mocks/draft'
import { dbItemsList } from '../../../test/mocks/database'
-import { ROOT_ITEM } from '../../../src/utils/tree'
import { DraftStatus } from '../../../src/types'
+import { TreeRootId } from '../../../src/utils/tree'
describe('findDescendantsFromId', () => {
it('returns exact match for a root level file', () => {
@@ -40,7 +40,7 @@ describe('findDescendantsFromId', () => {
})
it('returns all descendants for root item', () => {
- const descendants = findDescendantsFromId(draftItemsList, ROOT_ITEM.id)
+ const descendants = findDescendantsFromId(draftItemsList, TreeRootId.Content)
expect(descendants).toHaveLength(draftItemsList.length)
})
diff --git a/src/app/test/unit/utils/tree.test.ts b/src/app/test/unit/utils/tree.test.ts
index c20cb58b..354a60fe 100644
--- a/src/app/test/unit/utils/tree.test.ts
+++ b/src/app/test/unit/utils/tree.test.ts
@@ -249,7 +249,13 @@ describe('buildTree with one level of depth', () => {
it('With same id DELETED and CREATED draft file resulting in RENAMED', () => {
const deletedDbItem: DatabaseItem & { fsPath: string } = dbItemsList[1] // 2.introduction.md
- const createdDbItem: DatabaseItem & { fsPath: string } = dbItemsList[2] // 3.installation.md
+ const createdDbItem: DatabaseItem & { fsPath: string } = {
+ ...dbItemsList[1],
+ id: 'docs/1.getting-started/2.renamed.md',
+ path: '/getting-started/renamed',
+ stem: '1.getting-started/2.renamed',
+ fsPath: '1.getting-started/2.renamed.md',
+ }
const draftList: DraftItem[] = [{
id: deletedDbItem.id,
@@ -265,9 +271,11 @@ describe('buildTree with one level of depth', () => {
original: deletedDbItem,
}]
- const dbItemsListWithoutDeletedDbItem = dbItemsList.filter(item => item.id !== deletedDbItem.id)
+ // Remove deleted item and replace with created item
+ const dbItemsWithoutDeletedWithCreated = dbItemsList.filter(item => item.id !== deletedDbItem.id)
+ dbItemsWithoutDeletedWithCreated.push(createdDbItem)
- const tree = buildTree(dbItemsListWithoutDeletedDbItem, draftList)
+ const tree = buildTree(dbItemsWithoutDeletedWithCreated, draftList)
expect(tree).toStrictEqual([
result[0],
@@ -275,11 +283,12 @@ describe('buildTree with one level of depth', () => {
...result[1],
status: TreeStatus.Updated,
children: [
+ ...result[1].children!.slice(1),
{
id: createdDbItem.id,
fsPath: createdDbItem.fsPath,
- routePath: '/getting-started/installation',
- name: 'installation',
+ routePath: createdDbItem.path,
+ name: createdDbItem.path!.split('/').pop()!,
type: 'file',
status: TreeStatus.Renamed,
},
diff --git a/src/module/src/runtime/utils/content.ts b/src/module/src/runtime/utils/content.ts
index 1df0de3b..5576751f 100644
--- a/src/module/src/runtime/utils/content.ts
+++ b/src/module/src/runtime/utils/content.ts
@@ -111,8 +111,6 @@ async function generateDocumentFromMarkdownContent(id: string, content: string):
},
})
- console.log('document =>', document)
-
// Remove nofollow from links
visit(document.body, (node: Node) => (node as MDCElement).type === 'element' && (node as MDCElement).tag === 'a', (node: Node) => {
if ((node as MDCElement).props?.rel?.join(' ') === 'nofollow') {