Add uniqueness check to "Create project" command (#5100)
* Add failing playwright test * Make create generate a unique name if the given one collides * Add a new consolidated getUniqueProjectName function with tests * Use getUniqueProjectName * Replace "New project" button text with "Create project" cc @pierremtb * Extend the e2e test to show the incrementing behavior cc @lf94
This commit is contained in:
58
src/lib/desktopFS.test.ts
Normal file
58
src/lib/desktopFS.test.ts
Normal file
@ -0,0 +1,58 @@
|
||||
import { getUniqueProjectName } from './desktopFS'
|
||||
import { FileEntry } from './project'
|
||||
|
||||
/** Create a dummy project */
|
||||
function project(name: string, children?: FileEntry[]): FileEntry {
|
||||
return {
|
||||
name,
|
||||
children: children || [
|
||||
{ name: 'main.kcl', children: null, path: 'main.kcl' },
|
||||
],
|
||||
path: `/projects/${name}`,
|
||||
}
|
||||
}
|
||||
|
||||
describe(`Getting unique project names`, () => {
|
||||
it(`should return the same name if no conflicts`, () => {
|
||||
const projectName = 'new-project'
|
||||
const projects = [project('existing-project'), project('another-project')]
|
||||
const result = getUniqueProjectName(projectName, projects)
|
||||
expect(result).toBe(projectName)
|
||||
})
|
||||
it(`should return a unique name if there is a conflict`, () => {
|
||||
const projectName = 'existing-project'
|
||||
const projects = [project('existing-project'), project('another-project')]
|
||||
const result = getUniqueProjectName(projectName, projects)
|
||||
expect(result).toBe('existing-project-1')
|
||||
})
|
||||
it(`should increment an ending index until a unique one is found`, () => {
|
||||
const projectName = 'existing-project-1'
|
||||
const projects = [
|
||||
project('existing-project'),
|
||||
project('existing-project-1'),
|
||||
project('existing-project-2'),
|
||||
]
|
||||
const result = getUniqueProjectName(projectName, projects)
|
||||
expect(result).toBe('existing-project-3')
|
||||
})
|
||||
it(`should prefer the formatting of the index identifier if present`, () => {
|
||||
const projectName = 'existing-project-$nn'
|
||||
const projects = [
|
||||
project('existing-project'),
|
||||
project('existing-project-1'),
|
||||
project('existing-project-2'),
|
||||
]
|
||||
const result = getUniqueProjectName(projectName, projects)
|
||||
expect(result).toBe('existing-project-03')
|
||||
})
|
||||
it(`be able to get an incrementing index regardless of padding zeroes`, () => {
|
||||
const projectName = 'existing-project-$nn'
|
||||
const projects = [
|
||||
project('existing-project'),
|
||||
project('existing-project-01'),
|
||||
project('existing-project-2'),
|
||||
]
|
||||
const result = getUniqueProjectName(projectName, projects)
|
||||
expect(result).toBe('existing-project-03')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user