多维表格
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.
 
 
 
 
 
 

465 lines
12 KiB

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/>.
*
*/