mirror of https://github.com/nocodb/nocodb
Pranav C
6 months ago
4 changed files with 160 additions and 4 deletions
@ -0,0 +1,153 @@ |
|||||||
|
import 'mocha'; |
||||||
|
import request from 'supertest'; |
||||||
|
import { beforeEach } from 'mocha'; |
||||||
|
import { Exception } from 'handlebars'; |
||||||
|
import { expect } from 'chai'; |
||||||
|
import { Base } from '../../../../src/models'; |
||||||
|
import { createTable, getTable } from '../../factory/table'; |
||||||
|
import init from '../../init'; |
||||||
|
import { |
||||||
|
createProject, |
||||||
|
createSakilaProject, |
||||||
|
createSharedBase, |
||||||
|
} from '../../factory/base'; |
||||||
|
import { RootScopes } from '../../../../src/utils/globals'; |
||||||
|
import { generateDefaultRowAttributes } from '../../factory/row'; |
||||||
|
import { defaultColumns } from '../../factory/column'; |
||||||
|
|
||||||
|
// Test case list
|
||||||
|
// 1. Create data readonly source
|
||||||
|
// 2. Create schema readonly source
|
||||||
|
|
||||||
|
function sourceTest() { |
||||||
|
let context; |
||||||
|
|
||||||
|
beforeEach(async function () { |
||||||
|
console.time('#### readonlySourceTest'); |
||||||
|
context = await init(); |
||||||
|
console.timeEnd('#### readonlySourceTest'); |
||||||
|
}); |
||||||
|
|
||||||
|
it('Readonly data', async () => { |
||||||
|
const base = await createSakilaProject(context, { |
||||||
|
is_schema_readonly: false, |
||||||
|
is_data_readonly: true, |
||||||
|
}); |
||||||
|
|
||||||
|
const countryTable = await getTable({ |
||||||
|
base, |
||||||
|
name: 'country', |
||||||
|
}); |
||||||
|
|
||||||
|
const sakilaCtx = { |
||||||
|
workspace_id: base.fk_workspace_id, |
||||||
|
base_id: base.id, |
||||||
|
}; |
||||||
|
|
||||||
|
const countryColumns = await countryTable.getColumns(sakilaCtx); |
||||||
|
const rowAttributes = Array(99) |
||||||
|
.fill(0) |
||||||
|
.map((index) => |
||||||
|
generateDefaultRowAttributes({ columns: countryColumns, index }), |
||||||
|
); |
||||||
|
|
||||||
|
await request(context.app) |
||||||
|
.post(`/api/v1/db/data/bulk/noco/${base.id}/${countryTable.id}`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send(rowAttributes) |
||||||
|
.expect(403); |
||||||
|
|
||||||
|
await request(context.app) |
||||||
|
.post(`/api/v1/db/meta/projects/${base.id}/tables`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ |
||||||
|
table_name: 'new_title', |
||||||
|
title: 'new_title', |
||||||
|
columns: defaultColumns(context), |
||||||
|
}) |
||||||
|
.expect(200); |
||||||
|
}); |
||||||
|
|
||||||
|
it('Readonly schema', async () => { |
||||||
|
const base = await createSakilaProject(context, { |
||||||
|
is_schema_readonly: true, |
||||||
|
is_data_readonly: false, |
||||||
|
}); |
||||||
|
|
||||||
|
const countryTable = await getTable({ |
||||||
|
base, |
||||||
|
name: 'country', |
||||||
|
}); |
||||||
|
|
||||||
|
const sakilaCtx = { |
||||||
|
workspace_id: base.fk_workspace_id, |
||||||
|
base_id: base.id, |
||||||
|
}; |
||||||
|
|
||||||
|
const countryColumns = await countryTable.getColumns(sakilaCtx); |
||||||
|
const rowAttributes = Array(99) |
||||||
|
.fill(0) |
||||||
|
.map((index) => |
||||||
|
generateDefaultRowAttributes({ columns: countryColumns, index }), |
||||||
|
); |
||||||
|
|
||||||
|
await request(context.app) |
||||||
|
.post(`/api/v1/db/data/bulk/noco/${base.id}/${countryTable.id}`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send(rowAttributes) |
||||||
|
.expect(200); |
||||||
|
|
||||||
|
await request(context.app) |
||||||
|
.post(`/api/v1/db/meta/projects/${base.id}/tables`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ |
||||||
|
table_name: 'new_title', |
||||||
|
title: 'new_title', |
||||||
|
columns: defaultColumns(context), |
||||||
|
}) |
||||||
|
.expect(403); |
||||||
|
}); |
||||||
|
it('Readonly schema & data', async () => { |
||||||
|
const base = await createSakilaProject(context, { |
||||||
|
is_schema_readonly: true, |
||||||
|
is_data_readonly: true, |
||||||
|
}); |
||||||
|
|
||||||
|
const countryTable = await getTable({ |
||||||
|
base, |
||||||
|
name: 'country', |
||||||
|
}); |
||||||
|
|
||||||
|
const sakilaCtx = { |
||||||
|
workspace_id: base.fk_workspace_id, |
||||||
|
base_id: base.id, |
||||||
|
}; |
||||||
|
|
||||||
|
const countryColumns = await countryTable.getColumns(sakilaCtx); |
||||||
|
const rowAttributes = Array(99) |
||||||
|
.fill(0) |
||||||
|
.map((index) => |
||||||
|
generateDefaultRowAttributes({ columns: countryColumns, index }), |
||||||
|
); |
||||||
|
|
||||||
|
await request(context.app) |
||||||
|
.post(`/api/v1/db/data/bulk/noco/${base.id}/${countryTable.id}`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send(rowAttributes) |
||||||
|
.expect(403); |
||||||
|
|
||||||
|
await request(context.app) |
||||||
|
.post(`/api/v1/db/meta/projects/${base.id}/tables`) |
||||||
|
.set('xc-auth', context.token) |
||||||
|
.send({ |
||||||
|
table_name: 'new_title', |
||||||
|
title: 'new_title', |
||||||
|
columns: defaultColumns(context), |
||||||
|
}) |
||||||
|
.expect(403); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
export default function () { |
||||||
|
describe('SourceRestriction', sourceTest); |
||||||
|
} |
Loading…
Reference in new issue