mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-11 14:28:56 +00:00
Merge pull request #4690 from Infisical/fix/error-on-duplicate-folder-creation
fix: returns error on duplicate folder creation
This commit is contained in:
@@ -40,7 +40,7 @@ describe("Secret Folder Router", async () => {
|
||||
{ name: "folder1", path: "/" }, // one in root
|
||||
{ name: "folder1", path: "/level1/level2" }, // then create a deep one creating intermediate ones
|
||||
{ name: "folder2", path: "/" },
|
||||
{ name: "folder1", path: "/level1/level2" } // this should not create folder return same thing
|
||||
{ name: "folder3", path: "/level1/level2" }
|
||||
])("Create folder $name in $path", async ({ name, path }) => {
|
||||
const createdFolder = await createFolder({ path, name });
|
||||
// check for default environments
|
||||
@@ -57,7 +57,7 @@ describe("Secret Folder Router", async () => {
|
||||
{
|
||||
path: "/",
|
||||
expected: {
|
||||
folders: [{ name: "folder1" }, { name: "level1" }, { name: "folder2" }],
|
||||
folders: [{ name: "folder4" }, { name: "level2" }, { name: "folder5" }],
|
||||
length: 3
|
||||
}
|
||||
},
|
||||
@@ -162,4 +162,25 @@ describe("Secret Folder Router", async () => {
|
||||
expect(updatedFolderList).toHaveProperty("folders");
|
||||
expect(updatedFolderList.folders.length).toEqual(0);
|
||||
});
|
||||
test("Creating a duplicate folder should return a 400 error", async () => {
|
||||
const newFolder = await createFolder({ name: "folder-duplicate", path: "/level1/level2" });
|
||||
|
||||
const res = await testServer.inject({
|
||||
method: "POST",
|
||||
url: `/api/v1/folders`,
|
||||
headers: {
|
||||
authorization: `Bearer ${jwtAuthToken}`
|
||||
},
|
||||
body: {
|
||||
workspaceId: seedData1.project.id,
|
||||
environment: seedData1.environment.slug,
|
||||
name: "folder-duplicate",
|
||||
path: "/level1/level2"
|
||||
}
|
||||
});
|
||||
expect(res.statusCode).toBe(400);
|
||||
const payload = JSON.parse(res.payload);
|
||||
expect(payload).toHaveProperty("error");
|
||||
await deleteFolder({ path: "/level1/level2", id: newFolder.id });
|
||||
});
|
||||
});
|
||||
|
||||
@@ -41,7 +41,7 @@ describe("Secret Folder Router", async () => {
|
||||
{ name: "folder1", path: "/" }, // one in root
|
||||
{ name: "folder1", path: "/level1/level2" }, // then create a deep one creating intermediate ones
|
||||
{ name: "folder2", path: "/" },
|
||||
{ name: "folder1", path: "/level1/level2" } // this should not create folder return same thing
|
||||
{ name: "folder3", path: "/level1/level2" }
|
||||
])("Create folder $name in $path", async ({ name, path }) => {
|
||||
const createdFolder = await createFolder({ path, name });
|
||||
// check for default environments
|
||||
@@ -58,7 +58,7 @@ describe("Secret Folder Router", async () => {
|
||||
{
|
||||
path: "/",
|
||||
expected: {
|
||||
folders: [{ name: "folder1" }, { name: "level1" }, { name: "folder2" }],
|
||||
folders: [{ name: "folder4" }, { name: "level2" }, { name: "folder5" }],
|
||||
length: 3
|
||||
}
|
||||
},
|
||||
@@ -163,4 +163,26 @@ describe("Secret Folder Router", async () => {
|
||||
expect(updatedFolderList).toHaveProperty("folders");
|
||||
expect(updatedFolderList.folders.length).toEqual(0);
|
||||
});
|
||||
|
||||
test("Creating a duplicate folder should return a 400 error", async () => {
|
||||
const newFolder = await createFolder({ name: "folder-duplicate", path: "/level1/level2" });
|
||||
|
||||
const res = await testServer.inject({
|
||||
method: "POST",
|
||||
url: `/api/v2/folders`,
|
||||
headers: {
|
||||
authorization: `Bearer ${jwtAuthToken}`
|
||||
},
|
||||
body: {
|
||||
projectId: seedData1.project.id,
|
||||
environment: seedData1.environment.slug,
|
||||
name: "folder-duplicate",
|
||||
path: "/level1/level2"
|
||||
}
|
||||
});
|
||||
expect(res.statusCode).toBe(400);
|
||||
const payload = JSON.parse(res.payload);
|
||||
expect(payload).toHaveProperty("error");
|
||||
await deleteFolder({ path: "/level1/level2", id: newFolder.id });
|
||||
});
|
||||
});
|
||||
|
||||
@@ -118,24 +118,11 @@ export const secretFolderServiceFactory = ({
|
||||
});
|
||||
}
|
||||
|
||||
// check if the exact folder already exists
|
||||
const existingFolder = await folderDAL.findOne(
|
||||
{
|
||||
envId: env.id,
|
||||
parentId: parentFolder.id,
|
||||
name,
|
||||
isReserved: false
|
||||
},
|
||||
tx
|
||||
);
|
||||
|
||||
if (existingFolder) {
|
||||
return existingFolder;
|
||||
}
|
||||
|
||||
// exact folder case
|
||||
if (parentFolder.path === pathWithFolder) {
|
||||
return parentFolder;
|
||||
throw new BadRequestError({
|
||||
message: `Folder with name '${name}' already exists in path '${secretPath}'`
|
||||
});
|
||||
}
|
||||
|
||||
let currentParentId = parentFolder.id;
|
||||
|
||||
Reference in New Issue
Block a user