Compare commits
1 Commits
aut-1332
...
dependabot
Author | SHA1 | Date | |
---|---|---|---|
![]() |
015d65ac98 |
@@ -32,7 +32,7 @@ describe('POST /api/v1/access-tokens', () => {
|
|||||||
})
|
})
|
||||||
.expect(422);
|
.expect(422);
|
||||||
|
|
||||||
expect(response.body.errors.general).toStrictEqual([
|
expect(response.body.errors.general).toEqual([
|
||||||
'Incorrect email or password.',
|
'Incorrect email or password.',
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
@@ -83,7 +83,7 @@ describe('POST /api/v1/admin/apps/:appKey/auth-clients', () => {
|
|||||||
.send(appAuthClient)
|
.send(appAuthClient)
|
||||||
.expect(422);
|
.expect(422);
|
||||||
|
|
||||||
expect(response.body.meta.type).toStrictEqual('ModelValidation');
|
expect(response.body.meta.type).toEqual('ModelValidation');
|
||||||
expect(response.body.errors).toMatchObject({
|
expect(response.body.errors).toMatchObject({
|
||||||
name: ["must have required property 'name'"],
|
name: ["must have required property 'name'"],
|
||||||
formattedAuthDefaults: [
|
formattedAuthDefaults: [
|
||||||
|
@@ -59,7 +59,7 @@ describe('POST /api/v1/admin/apps/:appKey/config', () => {
|
|||||||
})
|
})
|
||||||
.expect(422);
|
.expect(422);
|
||||||
|
|
||||||
expect(response.body.meta.type).toStrictEqual('UniqueViolationError');
|
expect(response.body.meta.type).toEqual('UniqueViolationError');
|
||||||
expect(response.body.errors).toMatchObject({
|
expect(response.body.errors).toMatchObject({
|
||||||
key: ["'key' must be unique."],
|
key: ["'key' must be unique."],
|
||||||
});
|
});
|
||||||
|
@@ -32,7 +32,7 @@ describe('GET /api/v1/admin/apps/:appKey/auth-clients/:appAuthClientId', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getAppAuthClientMock(currentAppAuthClient);
|
const expectedPayload = getAppAuthClientMock(currentAppAuthClient);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing app auth client ID', async () => {
|
it('should return not found response for not existing app auth client ID', async () => {
|
||||||
|
@@ -39,6 +39,6 @@ describe('GET /api/v1/admin/apps/:appKey/auth-clients', () => {
|
|||||||
appAuthClientOne,
|
appAuthClientOne,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -83,7 +83,7 @@ describe('PATCH /api/v1/admin/apps/:appKey/config', () => {
|
|||||||
})
|
})
|
||||||
.expect(422);
|
.expect(422);
|
||||||
|
|
||||||
expect(response.body.meta.type).toStrictEqual('ModelValidation');
|
expect(response.body.meta.type).toEqual('ModelValidation');
|
||||||
expect(response.body.errors).toMatchObject({
|
expect(response.body.errors).toMatchObject({
|
||||||
disabled: ['must be boolean'],
|
disabled: ['must be boolean'],
|
||||||
});
|
});
|
||||||
|
@@ -50,8 +50,8 @@ describe('PATCH /api/v1/admin/config', () => {
|
|||||||
.send(newConfigValues)
|
.send(newConfigValues)
|
||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
expect(response.body.data.title).toStrictEqual(newTitle);
|
expect(response.body.data.title).toEqual(newTitle);
|
||||||
expect(response.body.meta.type).toStrictEqual('Config');
|
expect(response.body.meta.type).toEqual('Config');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return created config for unexisting config', async () => {
|
it('should return created config for unexisting config', async () => {
|
||||||
@@ -67,8 +67,8 @@ describe('PATCH /api/v1/admin/config', () => {
|
|||||||
.send(newConfigValues)
|
.send(newConfigValues)
|
||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
expect(response.body.data.title).toStrictEqual(newTitle);
|
expect(response.body.data.title).toEqual(newTitle);
|
||||||
expect(response.body.meta.type).toStrictEqual('Config');
|
expect(response.body.meta.type).toEqual('Config');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return null for deleted config entry', async () => {
|
it('should return null for deleted config entry', async () => {
|
||||||
@@ -83,6 +83,6 @@ describe('PATCH /api/v1/admin/config', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
expect(response.body.data.title).toBeNull();
|
expect(response.body.data.title).toBeNull();
|
||||||
expect(response.body.meta.type).toStrictEqual('Config');
|
expect(response.body.meta.type).toEqual('Config');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -27,6 +27,6 @@ describe('GET /api/v1/admin/permissions/catalog', () => {
|
|||||||
|
|
||||||
const expectedPayload = await getPermissionsCatalogMock();
|
const expectedPayload = await getPermissionsCatalogMock();
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -58,7 +58,7 @@ describe('POST /api/v1/admin/roles', () => {
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return unprocessable entity response for invalid role data', async () => {
|
it('should return unprocessable entity response for invalid role data', async () => {
|
||||||
|
@@ -92,4 +92,21 @@ describe('DELETE /api/v1/admin/roles/:roleId', () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should not delete role and permissions on unsuccessful response', async () => {
|
||||||
|
const role = await createRole();
|
||||||
|
const permission = await createPermission({ roleId: role.id });
|
||||||
|
await createUser({ roleId: role.id });
|
||||||
|
|
||||||
|
await request(app)
|
||||||
|
.delete(`/api/v1/admin/roles/${role.id}`)
|
||||||
|
.set('Authorization', token)
|
||||||
|
.expect(422);
|
||||||
|
|
||||||
|
const refetchedRole = await role.$query();
|
||||||
|
const refetchedPermission = await permission.$query();
|
||||||
|
|
||||||
|
expect(refetchedRole).toStrictEqual(role);
|
||||||
|
expect(refetchedPermission).toStrictEqual(permission);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -34,7 +34,7 @@ describe('GET /api/v1/admin/roles/:roleId', () => {
|
|||||||
permissionTwo,
|
permissionTwo,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing role UUID', async () => {
|
it('should return not found response for not existing role UUID', async () => {
|
||||||
|
@@ -28,6 +28,6 @@ describe('GET /api/v1/admin/roles', () => {
|
|||||||
|
|
||||||
const expectedPayload = await getRolesMock([roleOne, roleTwo]);
|
const expectedPayload = await getRolesMock([roleOne, roleTwo]);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -46,6 +46,6 @@ describe('GET /api/v1/admin/saml-auth-providers/:samlAuthProviderId/role-mapping
|
|||||||
roleMappingTwo,
|
roleMappingTwo,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -30,7 +30,7 @@ describe('GET /api/v1/admin/saml-auth-provider/:samlAuthProviderId', () => {
|
|||||||
|
|
||||||
const expectedPayload = await getSamlAuthProviderMock(samlAuthProvider);
|
const expectedPayload = await getSamlAuthProviderMock(samlAuthProvider);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing saml auth provider UUID', async () => {
|
it('should return not found response for not existing saml auth provider UUID', async () => {
|
||||||
|
@@ -34,6 +34,6 @@ describe('GET /api/v1/admin/saml-auth-providers', () => {
|
|||||||
samlAuthProviderOne,
|
samlAuthProviderOne,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -30,7 +30,7 @@ describe('GET /api/v1/admin/users/:userId', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getUserMock(anotherUser, anotherUserRole);
|
const expectedPayload = getUserMock(anotherUser, anotherUserRole);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing user UUID', async () => {
|
it('should return not found response for not existing user UUID', async () => {
|
||||||
|
@@ -40,6 +40,6 @@ describe('GET /api/v1/admin/users', () => {
|
|||||||
[anotherUserRole, currentUserRole]
|
[anotherUserRole, currentUserRole]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedResponsePayload);
|
expect(response.body).toEqual(expectedResponsePayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -61,8 +61,7 @@ describe('PATCH /api/v1/admin/users/:userId', () => {
|
|||||||
.send(anotherUserUpdatedData)
|
.send(anotherUserUpdatedData)
|
||||||
.expect(422);
|
.expect(422);
|
||||||
|
|
||||||
expect(response.body.meta.type).toStrictEqual('ModelValidation');
|
expect(response.body.meta.type).toEqual('ModelValidation');
|
||||||
|
|
||||||
expect(response.body.errors).toMatchObject({
|
expect(response.body.errors).toMatchObject({
|
||||||
email: ['must be string'],
|
email: ['must be string'],
|
||||||
fullName: ['must be string'],
|
fullName: ['must be string'],
|
||||||
|
@@ -29,7 +29,7 @@ describe('GET /api/v1/apps/:appKey/actions/:actionKey/substeps', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getActionSubstepsMock(exampleAction.substeps);
|
const expectedPayload = getActionSubstepsMock(exampleAction.substeps);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for invalid app key', async () => {
|
it('should return not found response for invalid app key', async () => {
|
||||||
@@ -47,6 +47,6 @@ describe('GET /api/v1/apps/:appKey/actions/:actionKey/substeps', () => {
|
|||||||
.set('Authorization', token)
|
.set('Authorization', token)
|
||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
expect(response.body.data).toStrictEqual([]);
|
expect(response.body.data).toEqual([]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -23,7 +23,7 @@ describe('GET /api/v1/apps/:appKey/actions', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getActionsMock(exampleApp.actions);
|
const expectedPayload = getActionsMock(exampleApp.actions);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for invalid app key', async () => {
|
it('should return not found response for invalid app key', async () => {
|
||||||
|
@@ -23,7 +23,7 @@ describe('GET /api/v1/apps/:appKey', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getAppMock(exampleApp);
|
const expectedPayload = getAppMock(exampleApp);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for invalid app key', async () => {
|
it('should return not found response for invalid app key', async () => {
|
||||||
|
@@ -22,7 +22,7 @@ describe('GET /api/v1/apps', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getAppsMock(apps);
|
const expectedPayload = getAppsMock(apps);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return all apps filtered by name', async () => {
|
it('should return all apps filtered by name', async () => {
|
||||||
@@ -34,7 +34,7 @@ describe('GET /api/v1/apps', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getAppsMock(appsWithNameGit);
|
const expectedPayload = getAppsMock(appsWithNameGit);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return only the apps with triggers', async () => {
|
it('should return only the apps with triggers', async () => {
|
||||||
@@ -46,7 +46,7 @@ describe('GET /api/v1/apps', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getAppsMock(appsWithTriggers);
|
const expectedPayload = getAppsMock(appsWithTriggers);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return only the apps with actions', async () => {
|
it('should return only the apps with actions', async () => {
|
||||||
@@ -58,6 +58,6 @@ describe('GET /api/v1/apps', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getAppsMock(appsWithActions);
|
const expectedPayload = getAppsMock(appsWithActions);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -29,7 +29,7 @@ describe('GET /api/v1/apps/:appKey/auth-clients/:appAuthClientId', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getAppAuthClientMock(currentAppAuthClient);
|
const expectedPayload = getAppAuthClientMock(currentAppAuthClient);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing app auth client ID', async () => {
|
it('should return not found response for not existing app auth client ID', async () => {
|
||||||
|
@@ -37,6 +37,6 @@ describe('GET /api/v1/apps/:appKey/auth-clients', () => {
|
|||||||
appAuthClientOne,
|
appAuthClientOne,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -23,7 +23,7 @@ describe('GET /api/v1/apps/:appKey/auth', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getAuthMock(exampleApp.auth);
|
const expectedPayload = getAuthMock(exampleApp.auth);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for invalid app key', async () => {
|
it('should return not found response for invalid app key', async () => {
|
||||||
|
@@ -32,7 +32,7 @@ describe('GET /api/v1/apps/:appKey/config', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getAppConfigMock(appConfig);
|
const expectedPayload = getAppConfigMock(appConfig);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing app key', async () => {
|
it('should return not found response for not existing app key', async () => {
|
||||||
|
@@ -47,7 +47,7 @@ describe('GET /api/v1/apps/:appKey/connections', () => {
|
|||||||
currentUserConnectionOne,
|
currentUserConnectionOne,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the connections data of specified app for another user', async () => {
|
it('should return the connections data of specified app for another user', async () => {
|
||||||
@@ -82,7 +82,7 @@ describe('GET /api/v1/apps/:appKey/connections', () => {
|
|||||||
anotherUserConnectionOne,
|
anotherUserConnectionOne,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for invalid connection UUID', async () => {
|
it('should return not found response for invalid connection UUID', async () => {
|
||||||
|
@@ -62,7 +62,7 @@ describe('GET /api/v1/apps/:appKey/flows', () => {
|
|||||||
[triggerStepFlowOne, actionStepFlowOne]
|
[triggerStepFlowOne, actionStepFlowOne]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the flows data of specified app for another user', async () => {
|
it('should return the flows data of specified app for another user', async () => {
|
||||||
@@ -110,7 +110,7 @@ describe('GET /api/v1/apps/:appKey/flows', () => {
|
|||||||
[triggerStepFlowOne, actionStepFlowOne]
|
[triggerStepFlowOne, actionStepFlowOne]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for invalid app key', async () => {
|
it('should return not found response for invalid app key', async () => {
|
||||||
|
@@ -29,7 +29,7 @@ describe('GET /api/v1/apps/:appKey/triggers/:triggerKey/substeps', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getTriggerSubstepsMock(exampleTrigger.substeps);
|
const expectedPayload = getTriggerSubstepsMock(exampleTrigger.substeps);
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for invalid app key', async () => {
|
it('should return not found response for invalid app key', async () => {
|
||||||
@@ -47,6 +47,6 @@ describe('GET /api/v1/apps/:appKey/triggers/:triggerKey/substeps', () => {
|
|||||||
.set('Authorization', token)
|
.set('Authorization', token)
|
||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
expect(response.body.data).toStrictEqual([]);
|
expect(response.body.data).toEqual([]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -23,7 +23,7 @@ describe('GET /api/v1/apps/:appKey/triggers', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getTriggersMock(exampleApp.triggers);
|
const expectedPayload = getTriggersMock(exampleApp.triggers);
|
||||||
expect(expectedPayload).toMatchObject(response.body);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for invalid app key', async () => {
|
it('should return not found response for invalid app key', async () => {
|
||||||
|
@@ -20,6 +20,6 @@ describe('GET /api/v1/automatisch/info', () => {
|
|||||||
|
|
||||||
const expectedPayload = infoMock();
|
const expectedPayload = infoMock();
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -18,6 +18,6 @@ describe('GET /api/v1/automatisch/license', () => {
|
|||||||
|
|
||||||
const expectedPayload = licenseMock();
|
const expectedPayload = licenseMock();
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -21,6 +21,6 @@ describe('GET /api/v1/automatisch/version', () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -69,7 +69,7 @@ describe('GET /api/v1/connections/:connectionId/flows', () => {
|
|||||||
[triggerStepFlowOne, actionStepFlowOne]
|
[triggerStepFlowOne, actionStepFlowOne]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the flows data of specified connection for another user', async () => {
|
it('should return the flows data of specified connection for another user', async () => {
|
||||||
@@ -123,6 +123,6 @@ describe('GET /api/v1/connections/:connectionId/flows', () => {
|
|||||||
[triggerStepFlowOne, actionStepFlowOne]
|
[triggerStepFlowOne, actionStepFlowOne]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -43,7 +43,7 @@ describe('POST /api/v1/connections/:connectionId/test', () => {
|
|||||||
.set('Authorization', token)
|
.set('Authorization', token)
|
||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
expect(response.body.data.verified).toStrictEqual(false);
|
expect(response.body.data.verified).toEqual(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should update the connection as not verified for another user', async () => {
|
it('should update the connection as not verified for another user', async () => {
|
||||||
@@ -74,7 +74,7 @@ describe('POST /api/v1/connections/:connectionId/test', () => {
|
|||||||
.set('Authorization', token)
|
.set('Authorization', token)
|
||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
expect(response.body.data.verified).toStrictEqual(false);
|
expect(response.body.data.verified).toEqual(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing connection UUID', async () => {
|
it('should return not found response for not existing connection UUID', async () => {
|
||||||
|
@@ -47,7 +47,7 @@ describe('POST /api/v1/connections/:connectionId/verify', () => {
|
|||||||
.set('Authorization', token)
|
.set('Authorization', token)
|
||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
expect(response.body.data.verified).toStrictEqual(true);
|
expect(response.body.data.verified).toEqual(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing connection UUID', async () => {
|
it('should return not found response for not existing connection UUID', async () => {
|
||||||
|
@@ -69,7 +69,7 @@ describe('GET /api/v1/executions/:executionId/execution-steps', () => {
|
|||||||
[stepOne, stepTwo]
|
[stepOne, stepTwo]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the execution steps of another user execution', async () => {
|
it('should return the execution steps of another user execution', async () => {
|
||||||
@@ -118,7 +118,7 @@ describe('GET /api/v1/executions/:executionId/execution-steps', () => {
|
|||||||
[stepOne, stepTwo]
|
[stepOne, stepTwo]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing execution step UUID', async () => {
|
it('should return not found response for not existing execution step UUID', async () => {
|
||||||
|
@@ -57,7 +57,7 @@ describe('GET /api/v1/executions/:executionId', () => {
|
|||||||
[stepOne, stepTwo]
|
[stepOne, stepTwo]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the execution data of another user', async () => {
|
it('should return the execution data of another user', async () => {
|
||||||
@@ -99,7 +99,7 @@ describe('GET /api/v1/executions/:executionId', () => {
|
|||||||
[stepOne, stepTwo]
|
[stepOne, stepTwo]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing execution UUID', async () => {
|
it('should return not found response for not existing execution UUID', async () => {
|
||||||
|
@@ -66,7 +66,7 @@ describe('GET /api/v1/executions', () => {
|
|||||||
[stepOne, stepTwo]
|
[stepOne, stepTwo]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the executions of another user', async () => {
|
it('should return the executions of another user', async () => {
|
||||||
@@ -114,6 +114,6 @@ describe('GET /api/v1/executions', () => {
|
|||||||
[stepOne, stepTwo]
|
[stepOne, stepTwo]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -41,7 +41,7 @@ describe('GET /api/v1/flows/:flowId', () => {
|
|||||||
actionStep,
|
actionStep,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the flow data of another user', async () => {
|
it('should return the flow data of another user', async () => {
|
||||||
@@ -67,7 +67,7 @@ describe('GET /api/v1/flows/:flowId', () => {
|
|||||||
actionStep,
|
actionStep,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing flow UUID', async () => {
|
it('should return not found response for not existing flow UUID', async () => {
|
||||||
|
@@ -63,7 +63,7 @@ describe('GET /api/v1/flows', () => {
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the flows data of another user', async () => {
|
it('should return the flows data of another user', async () => {
|
||||||
@@ -113,6 +113,6 @@ describe('GET /api/v1/flows', () => {
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -53,7 +53,7 @@ describe('POST /api/v1/installation/users', () => {
|
|||||||
|
|
||||||
const usersCountAfter = await User.query().resultSize();
|
const usersCountAfter = await User.query().resultSize();
|
||||||
|
|
||||||
expect(usersCountBefore).toStrictEqual(usersCountAfter);
|
expect(usersCountBefore).toEqual(usersCountAfter);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -28,6 +28,6 @@ describe('GET /api/v1/payment/paddle-info', () => {
|
|||||||
|
|
||||||
const expectedResponsePayload = await getPaddleInfoMock();
|
const expectedResponsePayload = await getPaddleInfoMock();
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedResponsePayload);
|
expect(response.body).toEqual(expectedResponsePayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -24,6 +24,6 @@ describe('GET /api/v1/payment/plans', () => {
|
|||||||
|
|
||||||
const expectedResponsePayload = await getPaymentPlansMock();
|
const expectedResponsePayload = await getPaymentPlansMock();
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedResponsePayload);
|
expect(response.body).toEqual(expectedResponsePayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -25,6 +25,6 @@ describe('GET /api/v1/saml-auth-providers', () => {
|
|||||||
samlAuthProviderOne,
|
samlAuthProviderOne,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -78,7 +78,7 @@ describe('POST /api/v1/steps/:stepId/dynamic-data', () => {
|
|||||||
})
|
})
|
||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
expect(response.body.data).toStrictEqual(repositories);
|
expect(response.body.data).toEqual(repositories);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('of the another users step', async () => {
|
it('of the another users step', async () => {
|
||||||
@@ -117,7 +117,7 @@ describe('POST /api/v1/steps/:stepId/dynamic-data', () => {
|
|||||||
})
|
})
|
||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
expect(response.body.data).toStrictEqual(repositories);
|
expect(response.body.data).toEqual(repositories);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -171,7 +171,7 @@ describe('POST /api/v1/steps/:stepId/dynamic-data', () => {
|
|||||||
})
|
})
|
||||||
.expect(422);
|
.expect(422);
|
||||||
|
|
||||||
expect(response.body.errors).toStrictEqual(errors);
|
expect(response.body.errors).toEqual(errors);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -56,7 +56,7 @@ describe('POST /api/v1/steps/:stepId/dynamic-fields', () => {
|
|||||||
|
|
||||||
const expectedPayload = await createDynamicFieldsMock();
|
const expectedPayload = await createDynamicFieldsMock();
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return dynamically created fields of the another users step', async () => {
|
it('should return dynamically created fields of the another users step', async () => {
|
||||||
@@ -97,7 +97,7 @@ describe('POST /api/v1/steps/:stepId/dynamic-fields', () => {
|
|||||||
|
|
||||||
const expectedPayload = await createDynamicFieldsMock();
|
const expectedPayload = await createDynamicFieldsMock();
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing step UUID', async () => {
|
it('should return not found response for not existing step UUID', async () => {
|
||||||
|
@@ -43,7 +43,7 @@ describe('GET /api/v1/steps/:stepId/connection', () => {
|
|||||||
|
|
||||||
const expectedPayload = await getConnectionMock(currentUserConnection);
|
const expectedPayload = await getConnectionMock(currentUserConnection);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the current user connection data of specified step', async () => {
|
it('should return the current user connection data of specified step', async () => {
|
||||||
@@ -70,7 +70,7 @@ describe('GET /api/v1/steps/:stepId/connection', () => {
|
|||||||
|
|
||||||
const expectedPayload = await getConnectionMock(anotherUserConnection);
|
const expectedPayload = await getConnectionMock(anotherUserConnection);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing step without connection', async () => {
|
it('should return not found response for not existing step without connection', async () => {
|
||||||
|
@@ -70,7 +70,7 @@ describe('GET /api/v1/steps/:stepId/previous-steps', () => {
|
|||||||
[executionStepOne, executionStepTwo]
|
[executionStepOne, executionStepTwo]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the previous steps of the specified step of another user', async () => {
|
it('should return the previous steps of the specified step of another user', async () => {
|
||||||
@@ -124,7 +124,7 @@ describe('GET /api/v1/steps/:stepId/previous-steps', () => {
|
|||||||
[executionStepOne, executionStepTwo]
|
[executionStepOne, executionStepTwo]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response for not existing step UUID', async () => {
|
it('should return not found response for not existing step UUID', async () => {
|
||||||
|
@@ -79,7 +79,7 @@ describe('GET /api/v1/users/:userId/apps', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getAppsMock();
|
const expectedPayload = getAppsMock();
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return all apps of the another user', async () => {
|
it('should return all apps of the another user', async () => {
|
||||||
@@ -143,7 +143,7 @@ describe('GET /api/v1/users/:userId/apps', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedPayload = getAppsMock();
|
const expectedPayload = getAppsMock();
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return specified app of the current user', async () => {
|
it('should return specified app of the current user', async () => {
|
||||||
@@ -204,7 +204,7 @@ describe('GET /api/v1/users/:userId/apps', () => {
|
|||||||
.set('Authorization', token)
|
.set('Authorization', token)
|
||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
expect(response.body.data.length).toStrictEqual(1);
|
expect(response.body.data.length).toEqual(1);
|
||||||
expect(response.body.data[0].key).toStrictEqual('deepl');
|
expect(response.body.data[0].key).toEqual('deepl');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -39,6 +39,6 @@ describe('GET /api/v1/users/me', () => {
|
|||||||
permissionTwo,
|
permissionTwo,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -29,6 +29,6 @@ describe('GET /api/v1/user/invoices', () => {
|
|||||||
|
|
||||||
const expectedPayload = await getInvoicesMock(invoices);
|
const expectedPayload = await getInvoicesMock(invoices);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -36,7 +36,7 @@ describe('GET /api/v1/users/:userId/plan-and-usage', () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(response.body.data).toStrictEqual(expectedResponseData);
|
expect(response.body.data).toEqual(expectedResponseData);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return current plan and usage data', async () => {
|
it('should return current plan and usage data', async () => {
|
||||||
@@ -63,6 +63,6 @@ describe('GET /api/v1/users/:userId/plan-and-usage', () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(response.body.data).toStrictEqual(expectedResponseData);
|
expect(response.body.data).toEqual(expectedResponseData);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -33,7 +33,7 @@ describe('GET /api/v1/users/:userId/subscription', () => {
|
|||||||
|
|
||||||
const expectedPayload = getSubscriptionMock(subscription);
|
const expectedPayload = getSubscriptionMock(subscription);
|
||||||
|
|
||||||
expect(response.body).toStrictEqual(expectedPayload);
|
expect(response.body).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return not found response if there is no current subscription', async () => {
|
it('should return not found response if there is no current subscription', async () => {
|
||||||
|
@@ -32,7 +32,7 @@ describe('GET /api/v1/users/:userId/trial', () => {
|
|||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
const expectedResponsePayload = await getUserTrialMock(user);
|
const expectedResponsePayload = await getUserTrialMock(user);
|
||||||
expect(response.body).toStrictEqual(expectedResponsePayload);
|
expect(response.body).toEqual(expectedResponsePayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -43,7 +43,7 @@ describe('PATCH /api/v1/users/:userId/password', () => {
|
|||||||
.send(userData)
|
.send(userData)
|
||||||
.expect(422);
|
.expect(422);
|
||||||
|
|
||||||
expect(response.body.meta.type).toStrictEqual('ValidationError');
|
expect(response.body.meta.type).toEqual('ValidationError');
|
||||||
expect(response.body.errors).toMatchObject({
|
expect(response.body.errors).toMatchObject({
|
||||||
currentPassword: ['is incorrect.'],
|
currentPassword: ['is incorrect.'],
|
||||||
});
|
});
|
||||||
|
@@ -47,8 +47,7 @@ describe('PATCH /api/v1/users/:userId', () => {
|
|||||||
.send(userData)
|
.send(userData)
|
||||||
.expect(422);
|
.expect(422);
|
||||||
|
|
||||||
expect(response.body.meta.type).toStrictEqual('ModelValidation');
|
expect(response.body.meta.type).toEqual('ModelValidation');
|
||||||
|
|
||||||
expect(response.body.errors).toMatchObject({
|
expect(response.body.errors).toMatchObject({
|
||||||
email: ['must be string'],
|
email: ['must be string'],
|
||||||
fullName: ['must be string'],
|
fullName: ['must be string'],
|
||||||
|
@@ -1,33 +0,0 @@
|
|||||||
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
||||||
|
|
||||||
exports[`Role model > jsonSchema should have correct validations 1`] = `
|
|
||||||
{
|
|
||||||
"properties": {
|
|
||||||
"createdAt": {
|
|
||||||
"type": "string",
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"maxLength": 255,
|
|
||||||
"type": [
|
|
||||||
"string",
|
|
||||||
"null",
|
|
||||||
],
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"format": "uuid",
|
|
||||||
"type": "string",
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"minLength": 1,
|
|
||||||
"type": "string",
|
|
||||||
},
|
|
||||||
"updatedAt": {
|
|
||||||
"type": "string",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"required": [
|
|
||||||
"name",
|
|
||||||
],
|
|
||||||
"type": "object",
|
|
||||||
}
|
|
||||||
`;
|
|
@@ -69,9 +69,7 @@ describe('AppAuthClient model', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
expect(formattedAuthDefaults).toStrictEqual(expectedDecryptedValue);
|
expect(formattedAuthDefaults).toStrictEqual(expectedDecryptedValue);
|
||||||
expect(appAuthClient.authDefaults).not.toStrictEqual(
|
expect(appAuthClient.authDefaults).not.toEqual(formattedAuthDefaults);
|
||||||
formattedAuthDefaults
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should encrypt formattedAuthDefaults and remove formattedAuthDefaults', async () => {
|
it('should encrypt formattedAuthDefaults and remove formattedAuthDefaults', async () => {
|
||||||
@@ -126,9 +124,7 @@ describe('AppAuthClient model', () => {
|
|||||||
expect(appAuthClient.formattedAuthDefaults).toStrictEqual(
|
expect(appAuthClient.formattedAuthDefaults).toStrictEqual(
|
||||||
formattedAuthDefaults
|
formattedAuthDefaults
|
||||||
);
|
);
|
||||||
expect(appAuthClient.authDefaults).not.toStrictEqual(
|
expect(appAuthClient.authDefaults).not.toEqual(formattedAuthDefaults);
|
||||||
formattedAuthDefaults
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -193,7 +193,7 @@ describe('Connection model', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
expect(formattedData).toStrictEqual(expectedDecryptedValue);
|
expect(formattedData).toStrictEqual(expectedDecryptedValue);
|
||||||
expect(connection.data).not.toStrictEqual(formattedData);
|
expect(connection.data).not.toEqual(formattedData);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should encrypt formattedData and remove formattedData', async () => {
|
it('should encrypt formattedData and remove formattedData', async () => {
|
||||||
@@ -243,7 +243,7 @@ describe('Connection model', () => {
|
|||||||
connection.decryptData();
|
connection.decryptData();
|
||||||
|
|
||||||
expect(connection.formattedData).toStrictEqual(formattedData);
|
expect(connection.formattedData).toStrictEqual(formattedData);
|
||||||
expect(connection.data).not.toStrictEqual(formattedData);
|
expect(connection.data).not.toEqual(formattedData);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -52,19 +52,16 @@ class Role extends Base {
|
|||||||
return await this.query().findOne({ name: 'Admin' });
|
return await this.query().findOne({ name: 'Admin' });
|
||||||
}
|
}
|
||||||
|
|
||||||
async preventAlteringAdmin() {
|
async updateWithPermissions(data) {
|
||||||
const currentRole = await Role.query().findById(this.id);
|
if (this.isAdmin) {
|
||||||
|
|
||||||
if (currentRole.isAdmin) {
|
|
||||||
throw new NotAuthorizedError('The admin role cannot be altered!');
|
throw new NotAuthorizedError('The admin role cannot be altered!');
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
async deletePermissions() {
|
const { name, description, permissions } = data;
|
||||||
return await this.$relatedQuery('permissions').delete();
|
|
||||||
}
|
return await Role.transaction(async (trx) => {
|
||||||
|
await this.$relatedQuery('permissions', trx).delete();
|
||||||
|
|
||||||
async createPermissions(permissions) {
|
|
||||||
if (permissions?.length) {
|
if (permissions?.length) {
|
||||||
const validPermissions = Permission.filter(permissions).map(
|
const validPermissions = Permission.filter(permissions).map(
|
||||||
(permission) => ({
|
(permission) => ({
|
||||||
@@ -75,41 +72,37 @@ class Role extends Base {
|
|||||||
|
|
||||||
await Permission.query().insert(validPermissions);
|
await Permission.query().insert(validPermissions);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
async updatePermissions(permissions) {
|
await this.$query(trx).patch({
|
||||||
await this.deletePermissions();
|
|
||||||
|
|
||||||
await this.createPermissions(permissions);
|
|
||||||
}
|
|
||||||
|
|
||||||
async updateWithPermissions(data) {
|
|
||||||
const { name, description, permissions } = data;
|
|
||||||
|
|
||||||
await this.updatePermissions(permissions);
|
|
||||||
|
|
||||||
await this.$query().patchAndFetch({
|
|
||||||
id: this.id,
|
|
||||||
name,
|
name,
|
||||||
description,
|
description,
|
||||||
});
|
});
|
||||||
|
|
||||||
return await this.$query()
|
return await this.$query(trx)
|
||||||
.leftJoinRelated({
|
.leftJoinRelated({
|
||||||
permissions: true,
|
permissions: true,
|
||||||
})
|
})
|
||||||
.withGraphFetched({
|
.withGraphFetched({
|
||||||
permissions: true,
|
permissions: true,
|
||||||
});
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteWithPermissions() {
|
async deleteWithPermissions() {
|
||||||
await this.deletePermissions();
|
return await Role.transaction(async (trx) => {
|
||||||
|
await this.$relatedQuery('permissions', trx).delete();
|
||||||
|
|
||||||
return await this.$query().delete();
|
return await this.$query(trx).delete();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async $beforeDelete(queryContext) {
|
||||||
|
await super.$beforeDelete(queryContext);
|
||||||
|
|
||||||
|
if (this.isAdmin) {
|
||||||
|
throw new NotAuthorizedError('The admin role cannot be deleted!');
|
||||||
}
|
}
|
||||||
|
|
||||||
async assertNoRoleUserExists() {
|
|
||||||
const userCount = await this.$relatedQuery('users').limit(1).resultSize();
|
const userCount = await this.$relatedQuery('users').limit(1).resultSize();
|
||||||
const hasUsers = userCount > 0;
|
const hasUsers = userCount > 0;
|
||||||
|
|
||||||
@@ -125,9 +118,7 @@ class Role extends Base {
|
|||||||
type: 'ValidationError',
|
type: 'ValidationError',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
async assertNoConfigurationUsage() {
|
|
||||||
const samlAuthProviderUsingDefaultRole = await SamlAuthProvider.query()
|
const samlAuthProviderUsingDefaultRole = await SamlAuthProvider.query()
|
||||||
.where({
|
.where({
|
||||||
default_role_id: this.id,
|
default_role_id: this.id,
|
||||||
@@ -149,26 +140,6 @@ class Role extends Base {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async assertRoleIsNotUsed() {
|
|
||||||
await this.assertNoRoleUserExists();
|
|
||||||
|
|
||||||
await this.assertNoConfigurationUsage();
|
|
||||||
}
|
|
||||||
|
|
||||||
async $beforeUpdate(opt, queryContext) {
|
|
||||||
await super.$beforeUpdate(opt, queryContext);
|
|
||||||
|
|
||||||
await this.preventAlteringAdmin();
|
|
||||||
}
|
|
||||||
|
|
||||||
async $beforeDelete(queryContext) {
|
|
||||||
await super.$beforeDelete(queryContext);
|
|
||||||
|
|
||||||
await this.preventAlteringAdmin();
|
|
||||||
|
|
||||||
await this.assertRoleIsNotUsed();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Role;
|
export default Role;
|
||||||
|
@@ -1,287 +0,0 @@
|
|||||||
import { describe, it, expect, vi } from 'vitest';
|
|
||||||
import Role from './role';
|
|
||||||
import Base from './base.js';
|
|
||||||
import Permission from './permission.js';
|
|
||||||
import User from './user.js';
|
|
||||||
import { createRole } from '../../test/factories/role.js';
|
|
||||||
import { createPermission } from '../../test/factories/permission.js';
|
|
||||||
import { createUser } from '../../test/factories/user.js';
|
|
||||||
import { createSamlAuthProvider } from '../../test/factories/saml-auth-provider.ee.js';
|
|
||||||
|
|
||||||
describe('Role model', () => {
|
|
||||||
it('tableName should return correct name', () => {
|
|
||||||
expect(Role.tableName).toBe('roles');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('jsonSchema should have correct validations', () => {
|
|
||||||
expect(Role.jsonSchema).toMatchSnapshot();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('relationMappingsshould return correct associations', () => {
|
|
||||||
const relationMappings = Role.relationMappings();
|
|
||||||
|
|
||||||
const expectedRelations = {
|
|
||||||
users: {
|
|
||||||
relation: Base.HasManyRelation,
|
|
||||||
modelClass: User,
|
|
||||||
join: {
|
|
||||||
from: 'roles.id',
|
|
||||||
to: 'users.role_id',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
permissions: {
|
|
||||||
relation: Base.HasManyRelation,
|
|
||||||
modelClass: Permission,
|
|
||||||
join: {
|
|
||||||
from: 'roles.id',
|
|
||||||
to: 'permissions.role_id',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
expect(relationMappings).toStrictEqual(expectedRelations);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('virtualAttributes should return correct attributes', () => {
|
|
||||||
expect(Role.virtualAttributes).toStrictEqual(['isAdmin']);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('isAdmin', () => {
|
|
||||||
it('should return true for admin named role', () => {
|
|
||||||
const role = new Role();
|
|
||||||
role.name = 'Admin';
|
|
||||||
|
|
||||||
expect(role.isAdmin).toBe(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return false for not admin named roles', () => {
|
|
||||||
const role = new Role();
|
|
||||||
role.name = 'User';
|
|
||||||
|
|
||||||
expect(role.isAdmin).toBe(false);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('findAdmin should return admin role', async () => {
|
|
||||||
const createdAdminRole = await createRole({ name: 'Admin' });
|
|
||||||
|
|
||||||
const adminRole = await Role.findAdmin();
|
|
||||||
|
|
||||||
expect(createdAdminRole).toStrictEqual(adminRole);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('preventAlteringAdmin', () => {
|
|
||||||
it('preventAlteringAdmin should throw an error when altering admin role', async () => {
|
|
||||||
const role = await createRole({ name: 'Admin' });
|
|
||||||
|
|
||||||
await expect(() => role.preventAlteringAdmin()).rejects.toThrowError(
|
|
||||||
'The admin role cannot be altered!'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('preventAlteringAdmin should not throw an error when altering non-admin roles', async () => {
|
|
||||||
const role = await createRole({ name: 'User' });
|
|
||||||
|
|
||||||
expect(await role.preventAlteringAdmin()).toBe(undefined);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("deletePermissions should delete role's permissions", async () => {
|
|
||||||
const role = await createRole({ name: 'User' });
|
|
||||||
await createPermission({ roleId: role.id });
|
|
||||||
|
|
||||||
await role.deletePermissions();
|
|
||||||
|
|
||||||
expect(await role.$relatedQuery('permissions')).toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('createPermissions', () => {
|
|
||||||
it('should create permissions', async () => {
|
|
||||||
const role = await createRole({ name: 'User' });
|
|
||||||
|
|
||||||
await role.createPermissions([
|
|
||||||
{ action: 'read', subject: 'Flow', conditions: [] },
|
|
||||||
]);
|
|
||||||
|
|
||||||
expect(await role.$relatedQuery('permissions')).toMatchObject([
|
|
||||||
{
|
|
||||||
action: 'read',
|
|
||||||
subject: 'Flow',
|
|
||||||
conditions: [],
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should call Permission.filter', async () => {
|
|
||||||
const role = await createRole({ name: 'User' });
|
|
||||||
|
|
||||||
const permissions = [{ action: 'read', subject: 'Flow', conditions: [] }];
|
|
||||||
|
|
||||||
const permissionFilterSpy = vi
|
|
||||||
.spyOn(Permission, 'filter')
|
|
||||||
.mockReturnValue(permissions);
|
|
||||||
|
|
||||||
await role.createPermissions(permissions);
|
|
||||||
|
|
||||||
expect(permissionFilterSpy).toHaveBeenCalledWith(permissions);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('updatePermissions should delete existing permissions and create new permissions', async () => {
|
|
||||||
const permissionsData = [
|
|
||||||
{ action: 'read', subject: 'Flow', conditions: [] },
|
|
||||||
];
|
|
||||||
|
|
||||||
const deletePermissionsSpy = vi
|
|
||||||
.spyOn(Role.prototype, 'deletePermissions')
|
|
||||||
.mockResolvedValueOnce();
|
|
||||||
const createPermissionsSpy = vi
|
|
||||||
.spyOn(Role.prototype, 'createPermissions')
|
|
||||||
.mockResolvedValueOnce();
|
|
||||||
|
|
||||||
const role = await createRole({ name: 'User' });
|
|
||||||
|
|
||||||
await role.updatePermissions(permissionsData);
|
|
||||||
|
|
||||||
expect(deletePermissionsSpy.mock.invocationCallOrder[0]).toBeLessThan(
|
|
||||||
createPermissionsSpy.mock.invocationCallOrder[0]
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(deletePermissionsSpy).toHaveBeenNthCalledWith(1);
|
|
||||||
expect(createPermissionsSpy).toHaveBeenNthCalledWith(1, permissionsData);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('updateWithPermissions', () => {
|
|
||||||
it('should update role along with given permissions', async () => {
|
|
||||||
const role = await createRole({ name: 'User' });
|
|
||||||
await createPermission({
|
|
||||||
roleId: role.id,
|
|
||||||
subject: 'Flow',
|
|
||||||
action: 'read',
|
|
||||||
conditions: [],
|
|
||||||
});
|
|
||||||
|
|
||||||
const newRoleData = {
|
|
||||||
name: 'Updated user',
|
|
||||||
description: 'Updated description',
|
|
||||||
permissions: [
|
|
||||||
{
|
|
||||||
action: 'update',
|
|
||||||
subject: 'Flow',
|
|
||||||
conditions: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
await role.updateWithPermissions(newRoleData);
|
|
||||||
|
|
||||||
const roleWithPermissions = await role
|
|
||||||
.$query()
|
|
||||||
.leftJoinRelated({ permissions: true })
|
|
||||||
.withGraphFetched({ permissions: true });
|
|
||||||
|
|
||||||
expect(roleWithPermissions).toMatchObject(newRoleData);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('deleteWithPermissions', () => {
|
|
||||||
it('should delete role along with given permissions', async () => {
|
|
||||||
const role = await createRole({ name: 'User' });
|
|
||||||
await createPermission({
|
|
||||||
roleId: role.id,
|
|
||||||
subject: 'Flow',
|
|
||||||
action: 'read',
|
|
||||||
conditions: [],
|
|
||||||
});
|
|
||||||
|
|
||||||
await role.deleteWithPermissions();
|
|
||||||
|
|
||||||
const refetchedRole = await role.$query();
|
|
||||||
const rolePermissions = await Permission.query().where({
|
|
||||||
roleId: role.id,
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(refetchedRole).toBe(undefined);
|
|
||||||
expect(rolePermissions).toStrictEqual([]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('assertNoRoleUserExists', () => {
|
|
||||||
it('should reject with an error when the role has users', async () => {
|
|
||||||
const role = await createRole({ name: 'User' });
|
|
||||||
await createUser({ roleId: role.id });
|
|
||||||
|
|
||||||
await expect(() => role.assertNoRoleUserExists()).rejects.toThrowError(
|
|
||||||
`All users must be migrated away from the "User" role.`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should resolve when the role does not have any users', async () => {
|
|
||||||
const role = await createRole();
|
|
||||||
|
|
||||||
expect(await role.assertNoRoleUserExists()).toBe(undefined);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('assertNoConfigurationUsage', () => {
|
|
||||||
it('should reject with an error when the role is used in configuration', async () => {
|
|
||||||
const role = await createRole();
|
|
||||||
await createSamlAuthProvider({ defaultRoleId: role.id });
|
|
||||||
|
|
||||||
await expect(() =>
|
|
||||||
role.assertNoConfigurationUsage()
|
|
||||||
).rejects.toThrowError(
|
|
||||||
'samlAuthProvider: You need to change the default role in the SAML configuration before deleting this role.'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should resolve when the role does not have any users', async () => {
|
|
||||||
const role = await createRole();
|
|
||||||
|
|
||||||
expect(await role.assertNoConfigurationUsage()).toBe(undefined);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('assertRoleIsNotUsed should call assertNoRoleUserExists and assertNoConfigurationUsage', async () => {
|
|
||||||
const role = new Role();
|
|
||||||
|
|
||||||
const assertNoRoleUserExistsSpy = vi
|
|
||||||
.spyOn(role, 'assertNoRoleUserExists')
|
|
||||||
.mockResolvedValue();
|
|
||||||
|
|
||||||
const assertNoConfigurationUsageSpy = vi
|
|
||||||
.spyOn(role, 'assertNoConfigurationUsage')
|
|
||||||
.mockResolvedValue();
|
|
||||||
|
|
||||||
await role.assertRoleIsNotUsed();
|
|
||||||
|
|
||||||
expect(assertNoRoleUserExistsSpy).toHaveBeenCalledOnce();
|
|
||||||
expect(assertNoConfigurationUsageSpy).toHaveBeenCalledOnce();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('$beforeDelete', () => {
|
|
||||||
it('should call preventAlteringAdmin', async () => {
|
|
||||||
const role = await createRole({ name: 'User' });
|
|
||||||
|
|
||||||
const preventAlteringAdminSpy = vi
|
|
||||||
.spyOn(role, 'preventAlteringAdmin')
|
|
||||||
.mockResolvedValue();
|
|
||||||
|
|
||||||
await role.$query().delete();
|
|
||||||
|
|
||||||
expect(preventAlteringAdminSpy).toHaveBeenCalledOnce();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should call assertRoleIsNotUsed', async () => {
|
|
||||||
const role = await createRole({ name: 'User' });
|
|
||||||
|
|
||||||
const assertRoleIsNotUsedSpy = vi
|
|
||||||
.spyOn(role, 'assertRoleIsNotUsed')
|
|
||||||
.mockResolvedValue();
|
|
||||||
|
|
||||||
await role.$query().delete();
|
|
||||||
|
|
||||||
expect(assertRoleIsNotUsedSpy).toHaveBeenCalledOnce();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@@ -16,6 +16,6 @@ describe('actionSerializer', () => {
|
|||||||
type: action.type,
|
type: action.type,
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(expectedPayload).toMatchObject(actionSerializer(action));
|
expect(actionSerializer(action)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -25,7 +25,7 @@ describe('adminSamlAuthProviderSerializer', () => {
|
|||||||
defaultRoleId: samlAuthProvider.defaultRoleId,
|
defaultRoleId: samlAuthProvider.defaultRoleId,
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(adminSamlAuthProviderSerializer(samlAuthProvider)).toStrictEqual(
|
expect(adminSamlAuthProviderSerializer(samlAuthProvider)).toEqual(
|
||||||
expectedPayload
|
expectedPayload
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@@ -12,7 +12,7 @@ describe('adminUserSerializer', () => {
|
|||||||
it('should return user data with accept invitation url', async () => {
|
it('should return user data with accept invitation url', async () => {
|
||||||
const serializedUser = adminUserSerializer(user);
|
const serializedUser = adminUserSerializer(user);
|
||||||
|
|
||||||
expect(serializedUser.acceptInvitationUrl).toStrictEqual(
|
expect(serializedUser.acceptInvitationUrl).toEqual(
|
||||||
user.acceptInvitationUrl
|
user.acceptInvitationUrl
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@@ -17,8 +17,6 @@ describe('appAuthClient serializer', () => {
|
|||||||
active: appAuthClient.active,
|
active: appAuthClient.active,
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(appAuthClientSerializer(appAuthClient)).toStrictEqual(
|
expect(appAuthClientSerializer(appAuthClient)).toEqual(expectedPayload);
|
||||||
expectedPayload
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
const appConfigSerializer = (appConfig) => {
|
const appConfigSerializer = (appConfig) => {
|
||||||
return {
|
return {
|
||||||
|
id: appConfig.id,
|
||||||
key: appConfig.key,
|
key: appConfig.key,
|
||||||
customConnectionAllowed: appConfig.customConnectionAllowed,
|
customConnectionAllowed: appConfig.customConnectionAllowed,
|
||||||
shared: appConfig.shared,
|
shared: appConfig.shared,
|
||||||
|
@@ -11,6 +11,7 @@ describe('appConfig serializer', () => {
|
|||||||
|
|
||||||
it('should return app config data', async () => {
|
it('should return app config data', async () => {
|
||||||
const expectedPayload = {
|
const expectedPayload = {
|
||||||
|
id: appConfig.id,
|
||||||
key: appConfig.key,
|
key: appConfig.key,
|
||||||
customConnectionAllowed: appConfig.customConnectionAllowed,
|
customConnectionAllowed: appConfig.customConnectionAllowed,
|
||||||
shared: appConfig.shared,
|
shared: appConfig.shared,
|
||||||
@@ -20,6 +21,6 @@ describe('appConfig serializer', () => {
|
|||||||
updatedAt: appConfig.updatedAt.getTime(),
|
updatedAt: appConfig.updatedAt.getTime(),
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(appConfigSerializer(appConfig)).toStrictEqual(expectedPayload);
|
expect(appConfigSerializer(appConfig)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -15,6 +15,6 @@ describe('appSerializer', () => {
|
|||||||
primaryColor: app.primaryColor,
|
primaryColor: app.primaryColor,
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(appSerializer(app)).toStrictEqual(expectedPayload);
|
expect(appSerializer(app)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -12,6 +12,6 @@ describe('authSerializer', () => {
|
|||||||
reconnectionSteps: auth.reconnectionSteps,
|
reconnectionSteps: auth.reconnectionSteps,
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(authSerializer(auth)).toStrictEqual(expectedPayload);
|
expect(authSerializer(auth)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -27,6 +27,6 @@ describe('configSerializer', () => {
|
|||||||
updatedAt: config.updatedAt.getTime(),
|
updatedAt: config.updatedAt.getTime(),
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(configSerializer(config)).toStrictEqual(expectedPayload);
|
expect(configSerializer(config)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -23,6 +23,6 @@ describe('connectionSerializer', () => {
|
|||||||
updatedAt: connection.updatedAt.getTime(),
|
updatedAt: connection.updatedAt.getTime(),
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(connectionSerializer(connection)).toStrictEqual(expectedPayload);
|
expect(connectionSerializer(connection)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -26,9 +26,7 @@ describe('executionStepSerializer', () => {
|
|||||||
updatedAt: executionStep.updatedAt.getTime(),
|
updatedAt: executionStep.updatedAt.getTime(),
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(executionStepSerializer(executionStep)).toStrictEqual(
|
expect(executionStepSerializer(executionStep)).toEqual(expectedPayload);
|
||||||
expectedPayload
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the execution step data with the step', async () => {
|
it('should return the execution step data with the step', async () => {
|
||||||
|
@@ -23,7 +23,7 @@ describe('executionSerializer', () => {
|
|||||||
updatedAt: execution.updatedAt.getTime(),
|
updatedAt: execution.updatedAt.getTime(),
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(executionSerializer(execution)).toStrictEqual(expectedPayload);
|
expect(executionSerializer(execution)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the execution data with status', async () => {
|
it('should return the execution data with status', async () => {
|
||||||
@@ -37,7 +37,7 @@ describe('executionSerializer', () => {
|
|||||||
status: 'success',
|
status: 'success',
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(executionSerializer(execution)).toStrictEqual(expectedPayload);
|
expect(executionSerializer(execution)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the execution data with the flow', async () => {
|
it('should return the execution data with the flow', async () => {
|
||||||
|
@@ -31,7 +31,7 @@ describe('flowSerializer', () => {
|
|||||||
updatedAt: flow.updatedAt.getTime(),
|
updatedAt: flow.updatedAt.getTime(),
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(flowSerializer(flow)).toStrictEqual(expectedPayload);
|
expect(flowSerializer(flow)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return flow data with the steps', async () => {
|
it('should return flow data with the steps', async () => {
|
||||||
|
@@ -20,6 +20,6 @@ describe('permissionSerializer', () => {
|
|||||||
updatedAt: permission.updatedAt.getTime(),
|
updatedAt: permission.updatedAt.getTime(),
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(permissionSerializer(permission)).toStrictEqual(expectedPayload);
|
expect(permissionSerializer(permission)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -34,7 +34,7 @@ describe('roleSerializer', () => {
|
|||||||
isAdmin: role.isAdmin,
|
isAdmin: role.isAdmin,
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(roleSerializer(role)).toStrictEqual(expectedPayload);
|
expect(roleSerializer(role)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return role data with the permissions', async () => {
|
it('should return role data with the permissions', async () => {
|
||||||
|
@@ -17,7 +17,7 @@ describe('samlAuthProviderSerializer', () => {
|
|||||||
issuer: samlAuthProvider.issuer,
|
issuer: samlAuthProvider.issuer,
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(samlAuthProviderSerializer(samlAuthProvider)).toStrictEqual(
|
expect(samlAuthProviderSerializer(samlAuthProvider)).toEqual(
|
||||||
expectedPayload
|
expectedPayload
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@@ -24,7 +24,7 @@ describe('stepSerializer', () => {
|
|||||||
parameters: step.parameters,
|
parameters: step.parameters,
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(stepSerializer(step)).toStrictEqual(expectedPayload);
|
expect(stepSerializer(step)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return step data with the last execution step', async () => {
|
it('should return step data with the last execution step', async () => {
|
||||||
|
@@ -30,6 +30,6 @@ describe('subscriptionSerializer', () => {
|
|||||||
cancellationEffectiveDate: subscription.cancellationEffectiveDate,
|
cancellationEffectiveDate: subscription.cancellationEffectiveDate,
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(subscriptionSerializer(subscription)).toStrictEqual(expectedPayload);
|
expect(subscriptionSerializer(subscription)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -16,6 +16,6 @@ describe('triggerSerializer', () => {
|
|||||||
type: trigger.type,
|
type: trigger.type,
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(triggerSerializer(trigger)).toStrictEqual(expectedPayload);
|
expect(triggerSerializer(trigger)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -39,7 +39,7 @@ describe('userSerializer', () => {
|
|||||||
updatedAt: user.updatedAt.getTime(),
|
updatedAt: user.updatedAt.getTime(),
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(userSerializer(user)).toStrictEqual(expectedPayload);
|
expect(userSerializer(user)).toEqual(expectedPayload);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return user data with the role', async () => {
|
it('should return user data with the role', async () => {
|
||||||
|
@@ -3,6 +3,7 @@ const getAppAuthClientMock = (appAuthClient) => {
|
|||||||
data: {
|
data: {
|
||||||
name: appAuthClient.name,
|
name: appAuthClient.name,
|
||||||
id: appAuthClient.id,
|
id: appAuthClient.id,
|
||||||
|
appConfigId: appAuthClient.appConfigId,
|
||||||
active: appAuthClient.active,
|
active: appAuthClient.active,
|
||||||
},
|
},
|
||||||
meta: {
|
meta: {
|
||||||
|
@@ -10,6 +10,7 @@ const getUserMock = (currentUser, role) => {
|
|||||||
description: null,
|
description: null,
|
||||||
id: role.id,
|
id: role.id,
|
||||||
isAdmin: role.isAdmin,
|
isAdmin: role.isAdmin,
|
||||||
|
key: role.key,
|
||||||
name: role.name,
|
name: role.name,
|
||||||
updatedAt: role.updatedAt.getTime(),
|
updatedAt: role.updatedAt.getTime(),
|
||||||
},
|
},
|
||||||
|
@@ -13,6 +13,7 @@ const getUsersMock = async (users, roles) => {
|
|||||||
description: role.description,
|
description: role.description,
|
||||||
id: role.id,
|
id: role.id,
|
||||||
isAdmin: role.isAdmin,
|
isAdmin: role.isAdmin,
|
||||||
|
key: role.key,
|
||||||
name: role.name,
|
name: role.name,
|
||||||
updatedAt: role.updatedAt.getTime(),
|
updatedAt: role.updatedAt.getTime(),
|
||||||
}
|
}
|
||||||
|
@@ -3,6 +3,7 @@ const getAppAuthClientMock = (appAuthClient) => {
|
|||||||
data: {
|
data: {
|
||||||
name: appAuthClient.name,
|
name: appAuthClient.name,
|
||||||
id: appAuthClient.id,
|
id: appAuthClient.id,
|
||||||
|
appConfigId: appAuthClient.appConfigId,
|
||||||
active: appAuthClient.active,
|
active: appAuthClient.active,
|
||||||
},
|
},
|
||||||
meta: {
|
meta: {
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
const getAppConfigMock = (appConfig) => {
|
const getAppConfigMock = (appConfig) => {
|
||||||
return {
|
return {
|
||||||
data: {
|
data: {
|
||||||
|
id: appConfig.id,
|
||||||
key: appConfig.key,
|
key: appConfig.key,
|
||||||
customConnectionAllowed: appConfig.customConnectionAllowed,
|
customConnectionAllowed: appConfig.customConnectionAllowed,
|
||||||
shared: appConfig.shared,
|
shared: appConfig.shared,
|
||||||
|
@@ -19,6 +19,7 @@ const getCurrentUserMock = (currentUser, role, permissions) => {
|
|||||||
description: null,
|
description: null,
|
||||||
id: role.id,
|
id: role.id,
|
||||||
isAdmin: role.isAdmin,
|
isAdmin: role.isAdmin,
|
||||||
|
key: role.key,
|
||||||
name: role.name,
|
name: role.name,
|
||||||
updatedAt: role.updatedAt.getTime(),
|
updatedAt: role.updatedAt.getTime(),
|
||||||
},
|
},
|
||||||
|
16
yarn.lock
16
yarn.lock
@@ -4111,10 +4111,10 @@
|
|||||||
resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz"
|
resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz"
|
||||||
integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
|
integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
|
||||||
|
|
||||||
"@types/http-proxy@^1.17.5":
|
"@types/http-proxy@^1.17.8":
|
||||||
version "1.17.8"
|
version "1.17.15"
|
||||||
resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz"
|
resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.15.tgz#12118141ce9775a6499ecb4c01d02f90fc839d36"
|
||||||
integrity sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==
|
integrity sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
@@ -9451,11 +9451,11 @@ http-proxy-agent@^7.0.0:
|
|||||||
debug "^4.3.4"
|
debug "^4.3.4"
|
||||||
|
|
||||||
http-proxy-middleware@^2.0.0:
|
http-proxy-middleware@^2.0.0:
|
||||||
version "2.0.1"
|
version "2.0.7"
|
||||||
resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz"
|
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz#915f236d92ae98ef48278a95dedf17e991936ec6"
|
||||||
integrity sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==
|
integrity sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/http-proxy" "^1.17.5"
|
"@types/http-proxy" "^1.17.8"
|
||||||
http-proxy "^1.18.1"
|
http-proxy "^1.18.1"
|
||||||
is-glob "^4.0.1"
|
is-glob "^4.0.1"
|
||||||
is-plain-obj "^3.0.0"
|
is-plain-obj "^3.0.0"
|
||||||
|
Reference in New Issue
Block a user