mirror of https://github.com/nocodb/nocodb
Browse Source
* fix: use knex directly to get source list since it requires custom condition Signed-off-by: Pranav C <pranavxc@gmail.com> * fix: add missing root scope for MetaService Signed-off-by: Pranav C <pranavxc@gmail.com> * fix: invalid integration id handling Signed-off-by: Pranav C <pranavxc@gmail.com> * test: bring integration unit tests for OSS Signed-off-by: Pranav C <pranavxc@gmail.com> * fix: if NcError throw as it is Signed-off-by: Pranav C <pranavxc@gmail.com> * test: use read api instead of list Signed-off-by: Pranav C <pranavxc@gmail.com> --------- Signed-off-by: Pranav C <pranavxc@gmail.com>pull/9194/head
Pranav C
4 months ago
committed by
GitHub
7 changed files with 290 additions and 42 deletions
@ -0,0 +1,243 @@ |
|||||||
|
import { expect } from 'chai' |
||||||
|
import 'mocha' |
||||||
|
import request from 'supertest' |
||||||
|
import { IntegrationsType } from 'nocodb-sdk' |
||||||
|
import { createProject } from '../../factory/base' |
||||||
|
import init from '../../init' |
||||||
|
|
||||||
|
function integrationTests() { |
||||||
|
let context |
||||||
|
|
||||||
|
beforeEach(async function() { |
||||||
|
console.time('#### integrationTests') |
||||||
|
context = await init() |
||||||
|
await createProject(context) |
||||||
|
console.timeEnd('#### integrationTests') |
||||||
|
}) |
||||||
|
|
||||||
|
it('Create Integration', async () => { |
||||||
|
const title = 'Sakila01' |
||||||
|
const color = '#4351E8' |
||||||
|
|
||||||
|
const response = await request(context.app) |
||||||
|
.post(`/api/v2/meta/integrations`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ |
||||||
|
title, |
||||||
|
meta: { |
||||||
|
color, |
||||||
|
}, |
||||||
|
config: {}, |
||||||
|
type: IntegrationsType.Database, |
||||||
|
}) |
||||||
|
.expect(201) |
||||||
|
|
||||||
|
expect(response.body).to.have.property('id') |
||||||
|
expect(response.body).to.have.property('title') |
||||||
|
expect(response.body).to.have.property('meta') |
||||||
|
expect(response.body.meta).to.have.property('color') |
||||||
|
|
||||||
|
if (response.body.title !== title || response.body.meta.color !== color) { |
||||||
|
throw new Error('Integration creation failed') |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
it('List Integrations', async () => { |
||||||
|
const title = 'Sakila01' |
||||||
|
const color = '#4351E8' |
||||||
|
|
||||||
|
await request(context.app) |
||||||
|
.post(`/api/v2/meta/integrations`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ |
||||||
|
title, |
||||||
|
meta: { |
||||||
|
color, |
||||||
|
}, |
||||||
|
config: {}, |
||||||
|
type: IntegrationsType.Database, |
||||||
|
}) |
||||||
|
.expect(201) |
||||||
|
|
||||||
|
const response = await request(context.app) |
||||||
|
.get(`/api/v2/meta/integrations`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.expect(200) |
||||||
|
|
||||||
|
if ( |
||||||
|
response.body.list[0].title !== 'Sakila01' || |
||||||
|
response.body.list[0].meta.color !== '#4351E8' |
||||||
|
) { |
||||||
|
throw new Error('Integration listing failed') |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
it('Delete Integration', async () => { |
||||||
|
const title = 'Sakila01' |
||||||
|
const color = '#4351E8' |
||||||
|
|
||||||
|
const integration = await request(context.app) |
||||||
|
.post(`/api/v2/meta/integrations`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ |
||||||
|
title, |
||||||
|
meta: { |
||||||
|
color, |
||||||
|
}, |
||||||
|
config: {}, |
||||||
|
type: IntegrationsType.Database, |
||||||
|
}) |
||||||
|
.expect(201) |
||||||
|
await request(context.app) |
||||||
|
.delete(`/api/v2/meta/integrations/${integration.body.id}`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.expect(200) |
||||||
|
}) |
||||||
|
|
||||||
|
it('Update Integration', async () => { |
||||||
|
const title = 'Sakila01' |
||||||
|
const color = '#4351E8' |
||||||
|
|
||||||
|
const integration = await request(context.app) |
||||||
|
.post(`/api/v2/meta/integrations`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ |
||||||
|
title, |
||||||
|
meta: { |
||||||
|
color, |
||||||
|
}, |
||||||
|
config: {}, |
||||||
|
type: IntegrationsType.Database, |
||||||
|
}) |
||||||
|
.expect(201) |
||||||
|
|
||||||
|
await request(context.app) |
||||||
|
.patch(`/api/v2/meta/integrations/${integration.body.id}`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ title: 'Sakila02', config: {}, type: IntegrationsType.Database }) |
||||||
|
.expect(200) |
||||||
|
|
||||||
|
const response = await request(context.app) |
||||||
|
.get(`/api/v2/meta/integrations/${integration.body.id}`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.expect(200) |
||||||
|
|
||||||
|
if (response.body.title !== 'Sakila02') { |
||||||
|
throw new Error('Integration update failed') |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
it('Update Integration Error Test', async () => { |
||||||
|
await request(context.app) |
||||||
|
.patch(`/api/v2/meta/integrations/xxxxxxxxx`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ title: 'Sakila02', config: {}, type: IntegrationsType.Database }) |
||||||
|
.expect(404) |
||||||
|
}) |
||||||
|
|
||||||
|
it('Delete Integration Error Test', async () => { |
||||||
|
await request(context.app) |
||||||
|
.delete(`/api/v2/meta/integrations/xxxxxxxxx`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.expect(404) |
||||||
|
}) |
||||||
|
|
||||||
|
it('Create Integration Error Test', async () => { |
||||||
|
await request(context.app) |
||||||
|
.post(`/api/v2/meta/integrations`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send() |
||||||
|
.expect(400) |
||||||
|
}) |
||||||
|
|
||||||
|
it('Create Integration Unauthorized User Test', async () => { |
||||||
|
const title = 'Sakila01' |
||||||
|
const color = '#4351E8' |
||||||
|
|
||||||
|
await request(context.app) |
||||||
|
.post(`/api/v2/meta/integrations`) |
||||||
|
.send({ |
||||||
|
title, |
||||||
|
meta: { |
||||||
|
color, |
||||||
|
}, |
||||||
|
}) |
||||||
|
.expect(401) |
||||||
|
}) |
||||||
|
|
||||||
|
it('List Integration Unauthorized User Test', async () => { |
||||||
|
await request(context.app) |
||||||
|
.get(`/api/v2/meta/integrations`) |
||||||
|
.expect(401) |
||||||
|
}) |
||||||
|
|
||||||
|
it('Update Integration - where multiple sources are using the integration', async () => { |
||||||
|
const title = 'Sakila01' |
||||||
|
const color = '#4351E8' |
||||||
|
|
||||||
|
const integration = await request(context.app) |
||||||
|
.post(`/api/v2/meta/integrations`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ |
||||||
|
title, |
||||||
|
meta: { |
||||||
|
color, |
||||||
|
}, |
||||||
|
config: {}, |
||||||
|
type: IntegrationsType.Database, |
||||||
|
}) |
||||||
|
.expect(201) |
||||||
|
|
||||||
|
await request(context.app) |
||||||
|
.patch(`/api/v2/meta/integrations/${integration.body.id}`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ title: 'Sakila02', config: {}, type: IntegrationsType.Database }) |
||||||
|
.expect(200) |
||||||
|
|
||||||
|
const response = await request(context.app) |
||||||
|
.get(`/api/v2/meta/integrations/${integration.body.id}`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.expect(200) |
||||||
|
|
||||||
|
if (response.body.title !== 'Sakila02') { |
||||||
|
throw new Error('Integration update failed') |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
it('Integration list based on user roles under workspace and base', async () => { |
||||||
|
const title = 'Sakila01' |
||||||
|
const color = '#4351E8' |
||||||
|
|
||||||
|
const integration = await request(context.app) |
||||||
|
.post(`/api/v2/meta/integrations`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ |
||||||
|
title, |
||||||
|
meta: { |
||||||
|
color, |
||||||
|
}, |
||||||
|
config: {}, |
||||||
|
type: IntegrationsType.Database, |
||||||
|
}) |
||||||
|
.expect(201) |
||||||
|
|
||||||
|
await request(context.app) |
||||||
|
.patch(`/api/v2/meta/integrations/${integration.body.id}`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ title: 'Sakila02', config: {}, type: IntegrationsType.Database }) |
||||||
|
.expect(200) |
||||||
|
|
||||||
|
const response = await request(context.app) |
||||||
|
.get(`/api/v2/meta/integrations/${integration.body.id}`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.expect(200) |
||||||
|
|
||||||
|
if (response.body.title !== 'Sakila02') { |
||||||
|
throw new Error('Integration update failed') |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
export default function() { |
||||||
|
describe('Integration', integrationTests) |
||||||
|
} |
Loading…
Reference in new issue