mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 01:56:46 +00:00
feat(core): Allow transferring credentials in Public API (#10259)
This commit is contained in:
@@ -9,9 +9,10 @@ import { randomApiKey, randomName } from '../shared/random';
|
||||
import * as utils from '../shared/utils/';
|
||||
import type { CredentialPayload, SaveCredentialFunction } from '../shared/types';
|
||||
import * as testDb from '../shared/testDb';
|
||||
import { affixRoleToSaveCredential } from '../shared/db/credentials';
|
||||
import { affixRoleToSaveCredential, createCredentials } from '../shared/db/credentials';
|
||||
import { addApiKey, createUser, createUserShell } from '../shared/db/users';
|
||||
import type { SuperAgentTest } from '../shared/types';
|
||||
import { createTeamProject } from '@test-integration/db/projects';
|
||||
|
||||
let owner: User;
|
||||
let member: User;
|
||||
@@ -256,6 +257,53 @@ describe('GET /credentials/schema/:credentialType', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('PUT /credentials/:id/transfer', () => {
|
||||
test('should transfer credential to project', async () => {
|
||||
/**
|
||||
* Arrange
|
||||
*/
|
||||
const [firstProject, secondProject] = await Promise.all([
|
||||
createTeamProject('first-project', owner),
|
||||
createTeamProject('second-project', owner),
|
||||
]);
|
||||
|
||||
const credentials = await createCredentials(
|
||||
{ name: 'Test', type: 'test', data: '' },
|
||||
firstProject,
|
||||
);
|
||||
|
||||
/**
|
||||
* Act
|
||||
*/
|
||||
const response = await authOwnerAgent.put(`/credentials/${credentials.id}/transfer`).send({
|
||||
destinationProjectId: secondProject.id,
|
||||
});
|
||||
|
||||
/**
|
||||
* Assert
|
||||
*/
|
||||
expect(response.statusCode).toBe(204);
|
||||
});
|
||||
|
||||
test('if no destination project, should reject', async () => {
|
||||
/**
|
||||
* Arrange
|
||||
*/
|
||||
const project = await createTeamProject('first-project', member);
|
||||
const credentials = await createCredentials({ name: 'Test', type: 'test', data: '' }, project);
|
||||
|
||||
/**
|
||||
* Act
|
||||
*/
|
||||
const response = await authOwnerAgent.put(`/credentials/${credentials.id}/transfer`).send({});
|
||||
|
||||
/**
|
||||
* Assert
|
||||
*/
|
||||
expect(response.statusCode).toBe(400);
|
||||
});
|
||||
});
|
||||
|
||||
const credentialPayload = (): CredentialPayload => ({
|
||||
name: randomName(),
|
||||
type: 'githubApi',
|
||||
|
||||
@@ -1493,7 +1493,7 @@ describe('PUT /workflows/:id/transfer', () => {
|
||||
* Arrange
|
||||
*/
|
||||
const firstProject = await createTeamProject('first-project', member);
|
||||
const secondProject = await createTeamProject('secon-project', member);
|
||||
const secondProject = await createTeamProject('second-project', member);
|
||||
const workflow = await createWorkflow({}, firstProject);
|
||||
|
||||
/**
|
||||
|
||||
@@ -38,11 +38,24 @@ export async function createManyCredentials(
|
||||
);
|
||||
}
|
||||
|
||||
export async function createCredentials(attributes: Partial<CredentialsEntity> = emptyAttributes) {
|
||||
export async function createCredentials(
|
||||
attributes: Partial<CredentialsEntity> = emptyAttributes,
|
||||
project?: Project,
|
||||
) {
|
||||
const credentialsRepository = Container.get(CredentialsRepository);
|
||||
const entity = credentialsRepository.create(attributes);
|
||||
const credentials = await credentialsRepository.save(credentialsRepository.create(attributes));
|
||||
|
||||
return await credentialsRepository.save(entity);
|
||||
if (project) {
|
||||
await Container.get(SharedCredentialsRepository).save(
|
||||
Container.get(SharedCredentialsRepository).create({
|
||||
project,
|
||||
credentials,
|
||||
role: 'credential:owner',
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
return credentials;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user