mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-16 12:50:38 +00:00
352 lines
11 KiB
JavaScript
352 lines
11 KiB
JavaScript
import { request, expect, create } from '~/testInit';
|
|
import View from '@/models/View';
|
|
import ViewRole from '@/models/ViewRole';
|
|
import '@/models/ResourceField';
|
|
|
|
describe('routes: `/views`', () => {
|
|
describe('POST: `/views`', () => {
|
|
it('Should `label` be required.', async () => {
|
|
await create('resource');
|
|
const res = await request().post('/api/views');
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
|
|
const paramsErrors = res.body.errors.map((error) => error.param);
|
|
expect(paramsErrors).to.include('label');
|
|
});
|
|
|
|
it('Should `resource_name` be required.', async () => {
|
|
await create('resource');
|
|
const res = await request().post('/api/views');
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
});
|
|
|
|
it('Should `columns` be minimum limited', async () => {
|
|
await create('resource');
|
|
const res = await request().post('/api/views', {
|
|
label: 'View Label',
|
|
columns: [],
|
|
});
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
|
|
const paramsErrors = res.body.errors.map((error) => error.param);
|
|
expect(paramsErrors).to.include('columns');
|
|
});
|
|
|
|
it('Should `columns` be array.', async () => {
|
|
await create('resource');
|
|
const res = await request().post('/api/views', {
|
|
label: 'View Label',
|
|
columns: 'not_array',
|
|
});
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
|
|
const paramsErrors = res.body.errors.map((error) => error.param);
|
|
expect(paramsErrors).to.include('columns');
|
|
});
|
|
|
|
it('Should `roles.*.field` be required.', async () => {
|
|
const resource = await create('resource');
|
|
const res = await request().post('/api/views').send({
|
|
resource_name: resource.name,
|
|
label: 'View Label',
|
|
roles: [{}],
|
|
});
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
|
|
const paramsErrors = res.body.errors.map((error) => error.param);
|
|
expect(paramsErrors).to.include('roles[0].field');
|
|
});
|
|
|
|
it('Should `roles.*.comparator` be valid.', async () => {
|
|
const resource = await create('resource');
|
|
const res = await request().post('/api/views').send({
|
|
resource_name: resource.name,
|
|
label: 'View Label',
|
|
roles: [{}],
|
|
});
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
|
|
const paramsErrors = res.body.errors.map((error) => error.param);
|
|
expect(paramsErrors).to.include('roles[0].comparator');
|
|
});
|
|
|
|
it('Should `roles.*.index` be number as integer.', async () => {
|
|
const resource = await create('resource');
|
|
const res = await request().post('/api/views').send({
|
|
resource_name: resource.name,
|
|
label: 'View Label',
|
|
roles: [{ index: 'not_numeric' }],
|
|
});
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
|
|
const paramsErrors = res.body.errors.map((error) => error.param);
|
|
expect(paramsErrors).to.include('roles[0].index');
|
|
});
|
|
|
|
it('Should response not found in case resource was not exist.', async () => {
|
|
const res = await request().post('/api/views').send({
|
|
resource_name: 'not_found',
|
|
label: 'View Label',
|
|
columns: ['amount', 'thumbnail', 'status'],
|
|
roles: [{
|
|
index: 1,
|
|
field: 'amount',
|
|
comparator: 'equals',
|
|
value: '100',
|
|
}],
|
|
});
|
|
|
|
expect(res.status).equals(404);
|
|
expect(res.body.errors).include.something.that.deep.equals({
|
|
type: 'RESOURCE_NOT_FOUND', code: 100,
|
|
});
|
|
});
|
|
|
|
it('Should response the roles fields not exist in case role field was not exist.', async () => {
|
|
const resource = await create('resource');
|
|
await create('resource_field', { resource_id: resource.id, label_name: 'Amount' });
|
|
|
|
const res = await request().post('/api/views').send({
|
|
resource_name: resource.name,
|
|
label: 'View Label',
|
|
columns: ['amount', 'thumbnail', 'status'],
|
|
roles: [{
|
|
index: 1,
|
|
field: 'price',
|
|
comparator: 'equals',
|
|
value: '100',
|
|
}],
|
|
});
|
|
|
|
expect(res.body.errors).include.something.that.deep.equals({
|
|
type: 'RESOURCE_FIELDS_NOT_EXIST', code: 100, fields: ['price'],
|
|
});
|
|
});
|
|
|
|
it('Should response the columns not exists in case column was not exist.', async () => {
|
|
const resource = await create('resource');
|
|
await create('resource_field', {
|
|
resource_id: resource.id, label_name: 'Amount', slug: 'amount',
|
|
});
|
|
const res = await request().post('/api/views').send({
|
|
resource_name: resource.name,
|
|
label: 'View Label',
|
|
columns: ['amount', 'thumbnail', 'status'],
|
|
roles: [{
|
|
index: 1,
|
|
field: 'price',
|
|
comparator: 'equals',
|
|
value: '100',
|
|
}],
|
|
});
|
|
|
|
expect(res.body.errors).include.something.that.deep.equals({
|
|
type: 'COLUMNS_NOT_EXIST',
|
|
code: 200,
|
|
columns: ['thumbnail', 'status'],
|
|
});
|
|
});
|
|
|
|
it('Should save the given details of the view.', async () => {
|
|
const resource = await create('resource');
|
|
await create('resource_field', {
|
|
resource_id: resource.id, label_name: 'Amount', slug: 'amount',
|
|
});
|
|
const res = await request().post('/api/views').send({
|
|
resource_name: resource.name,
|
|
label: 'View Label',
|
|
columns: ['amount'],
|
|
roles: [{
|
|
index: 1,
|
|
field: 'amount',
|
|
comparator: 'equals',
|
|
value: '100',
|
|
}],
|
|
});
|
|
|
|
const storedView = await View.query().where('name', 'View Label').first();
|
|
|
|
expect(storedView.name).equals('View Label');
|
|
expect(storedView.predefined).equals(0);
|
|
expect(storedView.resourceId).equals(resource.id);
|
|
});
|
|
|
|
it('Should save the given details of view fields that associated to the given view id.', () => {
|
|
|
|
});
|
|
|
|
it('Should save the given details of view roles that associated to the given view.', async () => {
|
|
|
|
});
|
|
});
|
|
|
|
describe('POST: `/views/:view_id`', () => {
|
|
it('Should `label` be required.', async () => {
|
|
const view = await create('view');
|
|
const res = await request().post(`/api/views/${view.id}`);
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
|
|
const paramsErrors = res.body.errors.map((error) => error.param);
|
|
expect(paramsErrors).to.include('label');
|
|
});
|
|
|
|
it('Should columns be minimum limited', async () => {
|
|
const view = await create('view');
|
|
const res = await request().post(`/api/views/${view.id}`, {
|
|
label: 'View Label',
|
|
columns: [],
|
|
});
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
|
|
const paramsErrors = res.body.errors.map((error) => error.param);
|
|
expect(paramsErrors).to.include('columns');
|
|
});
|
|
|
|
it('Should columns be array.', async () => {
|
|
const view = await create('view');
|
|
const res = await request().post(`/api/views/${view.id}`, {
|
|
label: 'View Label',
|
|
columns: 'not_array',
|
|
});
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
|
|
const paramsErrors = res.body.errors.map((error) => error.param);
|
|
expect(paramsErrors).to.include('columns');
|
|
});
|
|
|
|
it('Should `roles.*.field` be required.', async () => {
|
|
const view = await create('view');
|
|
const res = await request().post(`/api/views/${view.id}`).send({
|
|
label: 'View Label',
|
|
roles: [{}],
|
|
});
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
|
|
const paramsErrors = res.body.errors.map((error) => error.param);
|
|
expect(paramsErrors).to.include('roles[0].field');
|
|
});
|
|
|
|
it('Should `roles.*.comparator` be valid.', async () => {
|
|
const view = await create('view');
|
|
const res = await request().post(`/api/views/${view.id}`).send({
|
|
label: 'View Label',
|
|
roles: [{}],
|
|
});
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
|
|
const paramsErrors = res.body.errors.map((error) => error.param);
|
|
expect(paramsErrors).to.include('roles[0].comparator');
|
|
});
|
|
|
|
it('Should `roles.*.index` be number as integer.', async () => {
|
|
const view = await create('view');
|
|
const res = await request().post(`/api/views/${view.id}`).send({
|
|
label: 'View Label',
|
|
roles: [{ index: 'not_numeric' }],
|
|
});
|
|
|
|
expect(res.status).equals(422);
|
|
expect(res.body.code).equals('validation_error');
|
|
|
|
const paramsErrors = res.body.errors.map((error) => error.param);
|
|
expect(paramsErrors).to.include('roles[0].index');
|
|
});
|
|
|
|
it('Should response not found in case resource was not exist.', async () => {
|
|
const res = await request().post('/api/views/100').send({
|
|
label: 'View Label',
|
|
columns: ['amount', 'thumbnail', 'status'],
|
|
roles: [{
|
|
index: 1,
|
|
field: 'amount',
|
|
comparator: 'equals',
|
|
value: '100',
|
|
}],
|
|
});
|
|
|
|
expect(res.status).equals(404);
|
|
});
|
|
|
|
it('Should response the roles fields not exist in case role field was not exist.', async () => {
|
|
const view = await create('view');
|
|
await create('resource_field', {
|
|
resource_id: view.resource_id,
|
|
label_name: 'Amount',
|
|
});
|
|
const res = await request().post(`/api/views/${view.id}`).send({
|
|
label: 'View Label',
|
|
columns: ['amount', 'thumbnail', 'status'],
|
|
roles: [{
|
|
index: 1,
|
|
field: 'price',
|
|
comparator: 'equals',
|
|
value: '100',
|
|
}],
|
|
});
|
|
|
|
expect(res.body.errors).include.something.that.deep.equals({
|
|
type: 'RESOURCE_FIELDS_NOT_EXIST', code: 100, fields: ['price'],
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('DELETE: `/views/:resource_id`', () => {
|
|
it('Should not delete predefined view.', async () => {
|
|
const view = await create('view', { predefined: true });
|
|
const res = await request().delete(`/api/views/${view.id}`).send();
|
|
|
|
expect(res.status).equals(400);
|
|
expect(res.body.errors).include.something.that.deep.equals({
|
|
type: 'PREDEFINED_VIEW', code: 200,
|
|
});
|
|
});
|
|
|
|
it('Should response not found in case view was not exist.', async () => {
|
|
const res = await request().delete('/api/views/100').send();
|
|
|
|
expect(res.status).equals(404);
|
|
expect(res.body.errors).include.something.that.deep.equals({
|
|
type: 'VIEW_NOT_FOUND', code: 100,
|
|
});
|
|
});
|
|
|
|
it('Should delete the given view and associated view columns and roles.', async () => {
|
|
const view = await create('view', { predefined: false });
|
|
await create('view_role', { view_id: view.id });
|
|
await create('view_has_columns', { view_id: view.id });
|
|
|
|
await request().delete(`/api/views/${view.id}`).send();
|
|
|
|
const foundViews = await View.query().where('id', view.id).first();
|
|
const foundViewRoles = await ViewRole.query().where('view_id', view.id).first();
|
|
|
|
expect(foundViews).to.have.lengthOf(0);
|
|
expect(foundViewRoles).to.have.lengthOf(0);
|
|
});
|
|
});
|
|
});
|