Files
caprover/tests/ProjectSorter.test.ts
Kasra Bigdeli 4a32cb9dc3 Updated packages (#2165)
* Updated packages

* Updated packages

* Fixed formatting

* Fixed tests
2024-10-17 21:16:25 -07:00

146 lines
4.5 KiB
TypeScript

import configstore from 'configstore'
import AppsDataStore from '../src/datastore/AppsDataStore'
import ProjectsDataStore from '../src/datastore/ProjectsDataStore'
import { ProjectDefinition } from '../src/models/ProjectDefinition'
describe('ProjectsDataStore', () => {
let projectsDataStore: ProjectsDataStore
beforeEach(() => {
// Mock the configstore and AppsDataStore
const mockConfigstore = new configstore('test')
const mockAppsDataStore = {} as AppsDataStore
projectsDataStore = new ProjectsDataStore(
mockConfigstore,
mockAppsDataStore
)
})
describe('organizeFromTheLeafsToRoot', () => {
it('should correctly organize projects from leaves to root', () => {
const input = [
{
id: '1',
name: 'Root 1',
parentProjectId: '',
description: 'Root 1 desc',
},
{
id: '2',
name: 'Child 1',
parentProjectId: '1',
description: 'Child 1 desc',
},
{
id: '3',
name: 'Child 2',
parentProjectId: '1',
description: 'Child 2 desc',
},
{
id: '4',
name: 'Grandchild 1',
parentProjectId: '2',
description: 'Grandchild 1 desc',
},
{
id: '5',
name: 'Root 2',
parentProjectId: '',
description: 'Root 2 desc',
},
{
id: '6',
name: 'Child 3',
parentProjectId: '5',
description: 'Child 3 desc',
},
]
const expected = [
{
id: '4',
name: 'Grandchild 1',
parentProjectId: '2',
description: 'Grandchild 1 desc',
},
{
id: '2',
name: 'Child 1',
parentProjectId: '1',
description: 'Child 1 desc',
},
{
id: '3',
name: 'Child 2',
parentProjectId: '1',
description: 'Child 2 desc',
},
{
id: '1',
name: 'Root 1',
parentProjectId: '',
description: 'Root 1 desc',
},
{
id: '6',
name: 'Child 3',
parentProjectId: '5',
description: 'Child 3 desc',
},
{
id: '5',
name: 'Root 2',
parentProjectId: '',
description: 'Root 2 desc',
},
]
const result = projectsDataStore.organizeFromTheLeafsToRoot(input)
expect(result).toEqual(expected)
})
it('should handle empty input', () => {
const input: ProjectDefinition[] = []
const result = projectsDataStore.organizeFromTheLeafsToRoot(input)
expect(result).toEqual([])
})
it('should handle projects with no parent', () => {
const input = [
{
id: '1',
name: 'Root 1',
parentProjectId: '',
description: 'Root 1 desc',
},
{
id: '2',
name: 'Root 2',
parentProjectId: '',
description: 'Root 2 desc',
},
]
const expected = [
{
id: '1',
name: 'Root 1',
parentProjectId: '',
description: 'Root 1 desc',
},
{
id: '2',
name: 'Root 2',
parentProjectId: '',
description: 'Root 2 desc',
},
]
const result = projectsDataStore.organizeFromTheLeafsToRoot(input)
expect(result).toEqual(expected)
})
})
})