mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
466 lines
12 KiB
466 lines
12 KiB
3 years ago
|
const {expect} = require('chai');
|
||
|
|
||
|
const models = require('./models')
|
||
|
|
||
|
const country = models.country;
|
||
|
|
||
|
const city = models.city;
|
||
|
|
||
|
|
||
|
//desribe group of tests done
|
||
|
describe('xc-data-mapper tests', function () {
|
||
|
|
||
|
before(function (done) {
|
||
|
//start appln
|
||
|
done();
|
||
|
});
|
||
|
|
||
|
after(function (done) {
|
||
|
//stop appln
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
|
||
|
beforeEach(function (done) {
|
||
|
//init common variables for each test
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
|
||
|
afterEach(function (done) {
|
||
|
//term common variables for each test
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
|
||
|
it('create, read, update, delete', async function () {
|
||
|
|
||
|
let data = await country.insert({country: 'xc'});
|
||
|
expect(data['country']).to.equal('xc');
|
||
|
|
||
|
data = await country.readByPk(data.country_id);
|
||
|
expect(data['country']).to.equal('xc');
|
||
|
|
||
|
data.country = 'xgc'
|
||
|
const updated = await country.updateByPk(data.country_id, data);
|
||
|
expect(updated).to.equal(1);
|
||
|
|
||
|
data.country = 'xgc'
|
||
|
const deleted = await country.delByPk(data.country_id);
|
||
|
expect(deleted).to.equal(1);
|
||
|
|
||
|
});
|
||
|
|
||
|
it('create : transaction + commit', async function () {
|
||
|
|
||
|
let trx = null;
|
||
|
|
||
|
try {
|
||
|
|
||
|
trx = await country.transaction();
|
||
|
|
||
|
let data = await country.insert({country: 'xc'}, trx);
|
||
|
expect(data['country']).to.equal('xc');
|
||
|
|
||
|
let find = await country.findOne({where: `(country_id,eq,${data.country_id})`});
|
||
|
expect(find['country']).to.equal(undefined);
|
||
|
|
||
|
await country.commit(trx);
|
||
|
|
||
|
data = await country.findOne({where: `(country_id,eq,${data.country_id})`});
|
||
|
expect(data['country']).to.equal(data.country);
|
||
|
|
||
|
const deleted = await country.delByPk(data.country_id);
|
||
|
expect(deleted).to.equal(1);
|
||
|
|
||
|
|
||
|
} catch (e) {
|
||
|
if (trx)
|
||
|
await country.rollback(trx)
|
||
|
console.log(e);
|
||
|
throw e;
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
it('create: transaction + rollback ', async function () {
|
||
|
|
||
|
let trx = null;
|
||
|
let data = null;
|
||
|
try {
|
||
|
|
||
|
trx = await country.transaction();
|
||
|
|
||
|
data = await country.insert({country: 'xc'}, trx);
|
||
|
expect(data['country']).to.equal('xc');
|
||
|
|
||
|
data = await country.findOne({where: `(country_id,eq,${data.country_id})`});
|
||
|
expect(data['country']).to.equal(undefined);
|
||
|
|
||
|
await country.rollback(trx);
|
||
|
|
||
|
data = await country.findOne({where: `(country_id,eq,${data.country_id})`});
|
||
|
expect(data['country']).to.equal(undefined);
|
||
|
|
||
|
} catch (e) {
|
||
|
await country.rollback(trx)
|
||
|
console.log(e);
|
||
|
throw e;
|
||
|
} finally {
|
||
|
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
it('update : transaction + commit', async function () {
|
||
|
|
||
|
let trx = null;
|
||
|
let data = null;
|
||
|
try {
|
||
|
|
||
|
let data = await country.insert({country: 'xc'});
|
||
|
|
||
|
trx = await country.transaction();
|
||
|
data.country = 'xgc'
|
||
|
const updated = await country.updateByPk(data.country_id, data, trx);
|
||
|
|
||
|
await country.commit(trx);
|
||
|
|
||
|
data = await country.findOne({where: `(country_id,eq,${data.country_id})`});
|
||
|
expect(data['country']).to.equal('xgc');
|
||
|
|
||
|
} catch (e) {
|
||
|
await country.rollback(trx)
|
||
|
console.log(e);
|
||
|
throw e;
|
||
|
} finally {
|
||
|
if (data)
|
||
|
await country.delByPk(data.country_id);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
it('update: transaction + rollback ', async function () {
|
||
|
|
||
|
let trx = null;
|
||
|
let data = null;
|
||
|
try {
|
||
|
|
||
|
let data = await country.insert({country: 'xc'});
|
||
|
|
||
|
trx = await country.transaction();
|
||
|
data.country = 'xgc'
|
||
|
const updated = await country.updateByPk(data.country_id, data, trx);
|
||
|
|
||
|
await country.rollback(trx);
|
||
|
|
||
|
data = await country.findOne({where: `(country_id,eq,${data.country_id})`});
|
||
|
expect(data['country']).to.equal('xc');
|
||
|
|
||
|
} catch (e) {
|
||
|
await country.rollback(trx)
|
||
|
console.log(e);
|
||
|
throw e;
|
||
|
} finally {
|
||
|
if (data)
|
||
|
await country.delByPk(data.country_id);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
it('delete : transaction + commit', async function () {
|
||
|
|
||
|
let trx = null;
|
||
|
let data = null;
|
||
|
try {
|
||
|
|
||
|
let data = await country.insert({country: 'xc'});
|
||
|
|
||
|
trx = await country.transaction();
|
||
|
const deleted = await country.delByPk(data.country_id, trx);
|
||
|
|
||
|
await country.commit(trx);
|
||
|
|
||
|
data = await country.findOne({where: `(country_id,eq,${data.country_id})`});
|
||
|
expect(data['country']).to.equal(undefined);
|
||
|
|
||
|
data = null;
|
||
|
|
||
|
} catch (e) {
|
||
|
await country.rollback(trx)
|
||
|
console.log(e);
|
||
|
throw e;
|
||
|
} finally {
|
||
|
if (data)
|
||
|
await country.delByPk(data.country_id);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
it('delete: transaction + rollback ', async function () {
|
||
|
|
||
|
let trx = null;
|
||
|
let data = null;
|
||
|
try {
|
||
|
|
||
|
let data = await country.insert({country: 'xc'});
|
||
|
|
||
|
trx = await country.transaction();
|
||
|
const deleted = await country.delByPk(data.country_id, trx);
|
||
|
|
||
|
await country.rollback(trx);
|
||
|
|
||
|
data = await country.findOne({where: `(country_id,eq,${data.country_id})`});
|
||
|
expect(data['country']).to.equal('xc');
|
||
|
|
||
|
} catch (e) {
|
||
|
await country.rollback(trx)
|
||
|
console.log(e);
|
||
|
throw e;
|
||
|
} finally {
|
||
|
if (data)
|
||
|
await country.delByPk(data.country_id);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
|
||
|
it('read invalid', async function () {
|
||
|
data = await country.readByPk('xys');
|
||
|
expect(Object.keys(data).length).to.equal(0);
|
||
|
});
|
||
|
|
||
|
|
||
|
it('list', async function () {
|
||
|
let data = await country.list({})
|
||
|
expect(data.length).to.not.equal(0)
|
||
|
});
|
||
|
|
||
|
it('list + fields', async function () {
|
||
|
|
||
|
let data = await country.list({fields: 'country'})
|
||
|
expect(Object.keys(data[0]).length).to.equal(1)
|
||
|
expect(Object.keys(data[0])[0]).to.equal('country')
|
||
|
|
||
|
data = await country.list({f: 'country'})
|
||
|
expect(Object.keys(data[0]).length).to.equal(1)
|
||
|
expect(Object.keys(data[0])[0]).to.equal('country')
|
||
|
|
||
|
data = await country.list({f: 'country_id,country'})
|
||
|
expect(Object.keys(data[0]).length).to.equal(2)
|
||
|
expect(Object.keys(data[0])[0]).to.equal('country_id')
|
||
|
expect(Object.keys(data[0])[1]).to.equal('country')
|
||
|
|
||
|
|
||
|
});
|
||
|
|
||
|
it('list + limit', async function () {
|
||
|
let data = await country.list({limit: 2})
|
||
|
expect(data.length).to.not.equal(2)
|
||
|
|
||
|
data = await country.list({l: 2})
|
||
|
expect(data.length).to.not.equal(2)
|
||
|
|
||
|
});
|
||
|
|
||
|
it('list + offset', async function () {
|
||
|
let data = await country.list({offset: 1})
|
||
|
expect(data[0]['country']).to.not.equal('Afghanistan')
|
||
|
|
||
|
});
|
||
|
|
||
|
it('list + where', async function () {
|
||
|
|
||
|
let data = await country.list({where: '(country,eq,India)'})
|
||
|
expect(data.length).to.equal(1)
|
||
|
|
||
|
data = await country.list({w: '(country,eq,India)'})
|
||
|
expect(data.length).to.equal(1)
|
||
|
|
||
|
});
|
||
|
|
||
|
it('list + sort', async function () {
|
||
|
|
||
|
let data = await country.list({sort: 'country'})
|
||
|
expect(data[0]['country']).to.equal('Afghanistan')
|
||
|
|
||
|
data = await country.list({sort: '-country'})
|
||
|
expect(data[0]['country']).to.equal('Zambia')
|
||
|
|
||
|
});
|
||
|
|
||
|
it('list + sort', async function () {
|
||
|
|
||
|
let data = await country.list({sort: 'country'})
|
||
|
expect(data[0]['country']).to.equal('Afghanistan')
|
||
|
|
||
|
data = await country.list({sort: '-country'})
|
||
|
expect(data[0]['country']).to.equal('Zambia')
|
||
|
|
||
|
});
|
||
|
|
||
|
it('findOne', async function () {
|
||
|
|
||
|
let data = await country.findOne({where: '(country,eq,India)'})
|
||
|
expect(data['country']).to.equal('India')
|
||
|
|
||
|
data = await country.findOne({sort: '-country'})
|
||
|
expect(data['country']).to.equal('Zambia')
|
||
|
|
||
|
data = await country.findOne({offset: '1'})
|
||
|
expect(data['country']).not.to.equal('Afghanistan')
|
||
|
|
||
|
data = await country.findOne()
|
||
|
expect(data['country']).to.equal('Afghanistan')
|
||
|
|
||
|
});
|
||
|
|
||
|
it('count', async function () {
|
||
|
let data = await country.countByPk({});
|
||
|
expect(data['count']).to.be.above(100)
|
||
|
});
|
||
|
|
||
|
|
||
|
it('groupBy', async function () {
|
||
|
let data = await city.groupBy({cn: 'country_id', limit: 2});
|
||
|
expect(data[0]['count']).to.not.equal(0);
|
||
|
expect(data.length).to.be.equal(2);
|
||
|
data = await city.groupBy({cn: 'country_id', having: '(count,gt,50)'});
|
||
|
expect(data.length).to.be.equal(2);
|
||
|
});
|
||
|
|
||
|
it('aggregate', async function () {
|
||
|
|
||
|
let data = await city.aggregate({cn: 'country_id', fields: 'country_id', func: 'count,sum,avg'});
|
||
|
expect(data[0]['count']).to.not.equal(0);
|
||
|
expect(data[0]['sum']).to.not.equal(0);
|
||
|
expect(data[0]['avg']).to.not.equal(0);
|
||
|
|
||
|
data = await city.aggregate({
|
||
|
cn: 'country_id',
|
||
|
fields: 'country_id',
|
||
|
func: 'count,sum,avg',
|
||
|
having: '(count,gt,50)'
|
||
|
});
|
||
|
expect(data.length).to.be.equal(2);
|
||
|
|
||
|
});
|
||
|
|
||
|
it('distinct', async function () {
|
||
|
|
||
|
let data = await city.distinct({cn: 'country_id'});
|
||
|
expect(Object.keys(data[0]).length).to.be.equal(1);
|
||
|
expect(data[0]['country_id']).to.not.equal(0);
|
||
|
|
||
|
data = await city.distinct({cn: 'country_id', fields: 'city'});
|
||
|
expect(Object.keys(data[0]).length).to.be.equal(2);
|
||
|
|
||
|
});
|
||
|
|
||
|
it('distribution', async function () {
|
||
|
|
||
|
let data = await city.distribution({cn: 'country_id', steps: '0,20,40,100'});
|
||
|
expect(data.length).to.be.equal(3);
|
||
|
expect(data[0]['range']).to.be.equal('0-20');
|
||
|
expect(data[0]['count']).to.be.above(70);
|
||
|
expect(data[1]['range']).to.be.equal('21-40');
|
||
|
expect(data[1]['count']).to.be.equal(100);
|
||
|
expect(data[2]['range']).to.be.equal('41-100');
|
||
|
|
||
|
data = await city.distribution({cn: 'country_id', step: 20, min: 0, max: 100});
|
||
|
expect(data.length).to.be.equal(5);
|
||
|
expect(data[0]['range']).to.be.equal('0-20');
|
||
|
expect(data[0]['count']).to.be.above(70);
|
||
|
expect(data[3]['count']).to.be.equal(106);
|
||
|
|
||
|
});
|
||
|
|
||
|
it('hasManyList', async function () {
|
||
|
|
||
|
let data = await country.hasManyList({childs: 'city'})
|
||
|
for (let i = 0; i < data.length; ++i) {
|
||
|
expect(data[i].city.length).to.not.equal(0)
|
||
|
expect(Object.keys(data[i]).length).to.be.equal(4)
|
||
|
expect(Object.keys(data[i].city[0]).length).to.be.equal(4)
|
||
|
}
|
||
|
|
||
|
data = await country.hasManyList({childs: 'city', fields: 'country', fields1: 'city'})
|
||
|
for (let i = 0; i < data.length; ++i) {
|
||
|
expect(data[i].city.length).to.not.equal(0)
|
||
|
expect(Object.keys(data[i]).length).to.be.equal(3)
|
||
|
expect(Object.keys(data[i].city[0]).length).to.be.equal(2)
|
||
|
}
|
||
|
|
||
|
data = await models.film.hasManyList({childs: 'inventory.film_category'})
|
||
|
for (let i = 0; i < data.length; ++i) {
|
||
|
expect(data[i].inventory.length).to.not.equal(0)
|
||
|
expect(data[i].film_category.length).to.not.equal(0)
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
it('belongsTo', async function () {
|
||
|
|
||
|
let data = await city.belongsTo({parents: 'country'})
|
||
|
for (let i = 0; i < data.length; ++i) {
|
||
|
expect(data[i].country).to.not.equal(null)
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
it('hasManyListGQL', async function () {
|
||
|
let data = await country.hasManyListGQL({ids: [1, 2], child: 'city'})
|
||
|
expect(data['1'].length).to.not.equal(0)
|
||
|
expect(data['2'].length).to.not.equal(0)
|
||
|
});
|
||
|
|
||
|
it('bulk - create, update, delete', async function () {
|
||
|
|
||
|
// let data = await country.insertb([{country:'IN'}, {country:'US'}])
|
||
|
// console.log(data);
|
||
|
|
||
|
});
|
||
|
|
||
|
|
||
|
it('update and delete with where', async function () {
|
||
|
|
||
|
let data = await country.insertb([{country: 'abc'}, {country: 'abc'}])
|
||
|
|
||
|
let updateCount = await country.update({
|
||
|
data: {country: 'abcd'},
|
||
|
where: '(country,eq,abc)'
|
||
|
});
|
||
|
|
||
|
expect(updateCount).to.be.equal(2);
|
||
|
|
||
|
let deleteCount = await country.del({
|
||
|
where: '(country,eq,abcd)'
|
||
|
});
|
||
|
|
||
|
expect(deleteCount).to.be.equal(2);
|
||
|
});
|
||
|
|
||
|
|
||
|
});/**
|
||
|
* @copyright Copyright (c) 2021, Xgene Cloud Ltd
|
||
|
*
|
||
|
* @author Naveen MR <oof1lab@gmail.com>
|
||
|
* @author Pranav C Balan <pranavxc@gmail.com>
|
||
|
*
|
||
|
* @license GNU AGPL version 3 or any later version
|
||
|
*
|
||
|
* This program is free software: you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU Affero General Public License as
|
||
|
* published by the Free Software Foundation, either version 3 of the
|
||
|
* License, or (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU Affero General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Affero General Public License
|
||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*
|
||
|
*/
|