mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-12 15:44:06 -08:00
fix(API): PUT /credentials/:id
should move the specified credential, not the first one in the database (#11365)
This commit is contained in:
parent
5d0e0e0889
commit
e6b2f8e7e6
|
@ -140,11 +140,7 @@ export declare namespace CredentialRequest {
|
|||
|
||||
type Delete = AuthenticatedRequest<{ id: string }, {}, {}, Record<string, string>>;
|
||||
|
||||
type Transfer = AuthenticatedRequest<
|
||||
{ workflowId: string },
|
||||
{},
|
||||
{ destinationProjectId: string }
|
||||
>;
|
||||
type Transfer = AuthenticatedRequest<{ id: string }, {}, { destinationProjectId: string }>;
|
||||
}
|
||||
|
||||
export type OperationID = 'getUsers' | 'getUser';
|
||||
|
|
|
@ -53,7 +53,7 @@ export = {
|
|||
|
||||
await Container.get(EnterpriseCredentialsService).transferOne(
|
||||
req.user,
|
||||
req.params.workflowId,
|
||||
req.params.id,
|
||||
body.destinationProjectId,
|
||||
);
|
||||
|
||||
|
|
|
@ -6,7 +6,11 @@ import { CredentialsRepository } from '@/databases/repositories/credentials.repo
|
|||
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
|
||||
import { createTeamProject } from '@test-integration/db/projects';
|
||||
|
||||
import { affixRoleToSaveCredential, createCredentials } from '../shared/db/credentials';
|
||||
import {
|
||||
affixRoleToSaveCredential,
|
||||
createCredentials,
|
||||
getCredentialSharings,
|
||||
} from '../shared/db/credentials';
|
||||
import { createMemberWithApiKey, createOwnerWithApiKey } from '../shared/db/users';
|
||||
import { randomName } from '../shared/random';
|
||||
import * as testDb from '../shared/test-db';
|
||||
|
@ -282,6 +286,41 @@ describe('PUT /credentials/:id/transfer', () => {
|
|||
expect(response.statusCode).toBe(204);
|
||||
});
|
||||
|
||||
test('should transfer the right credential, not the first one it finds', async () => {
|
||||
// ARRANGE
|
||||
const [firstProject, secondProject] = await Promise.all([
|
||||
createTeamProject('first-project', owner),
|
||||
createTeamProject('second-project', owner),
|
||||
]);
|
||||
|
||||
const [firstCredential, secondCredential] = await Promise.all([
|
||||
createCredentials({ name: 'Test', type: 'test', data: '' }, firstProject),
|
||||
createCredentials({ name: 'Test', type: 'test', data: '' }, firstProject),
|
||||
]);
|
||||
|
||||
// ACT
|
||||
const response = await authOwnerAgent.put(`/credentials/${secondCredential.id}/transfer`).send({
|
||||
destinationProjectId: secondProject.id,
|
||||
});
|
||||
|
||||
// ASSERT
|
||||
expect(response.statusCode).toBe(204);
|
||||
|
||||
{
|
||||
// second credential was moved
|
||||
const sharings = await getCredentialSharings(secondCredential);
|
||||
expect(sharings).toHaveLength(1);
|
||||
expect(sharings[0]).toMatchObject({ projectId: secondProject.id });
|
||||
}
|
||||
|
||||
{
|
||||
// first credential was untouched
|
||||
const sharings = await getCredentialSharings(firstCredential);
|
||||
expect(sharings).toHaveLength(1);
|
||||
expect(sharings[0]).toMatchObject({ projectId: firstProject.id });
|
||||
}
|
||||
});
|
||||
|
||||
test('if no destination project, should reject', async () => {
|
||||
/**
|
||||
* Arrange
|
||||
|
|
Loading…
Reference in a new issue