const assert = require('assert');
const uuid = require('uuid');
const ORM = require('../');
ORM.setup({
objectSchemaPath: `${__dirname}/config/object/schema`,
objectRouterPath: `${__dirname}/config/object/router`,
relationSchemaPath: `${__dirname}/config/relation/schema`,
relationRouterPath: `${__dirname}/config/relation/router`,
strict: true
});
const ObjectUser = new ORM.Object('user');
const ObjectMessage = new ORM.Object('message');
const ObjectAutoFix = new ORM.Object('auto_fix');
const ObjectAutoFixBefore = new ORM.Object('auto_fix_before');
const RelationUserMessage = new ORM.Relation('user.message');
const RelationObjectAutoFix = new ORM.Relation('user.auto_fix');
const RelationObjectAutoFixBefore = new ORM.Relation('user.auto_fix_before');
const { Users, Messages, UserMessages } = require('./data');
describe('#basic', function () {
after(async function () {
await Promise.all([
RelationUserMessage.clear(UserMessages[0].subject),
RelationUserMessage.clear(UserMessages[1].subject),
ObjectUser.del(Users[0].id),
ObjectUser.del(Users[1].id),
ObjectUser.del(Users[2].id),
ObjectMessage.del(Messages[0].id),
ObjectMessage.del(Messages[1].id),
ObjectAutoFix.del("0000000000000000"),
RelationObjectAutoFix.clear("0000000000000000")
])
});
it('[object-set]', async function () {
this.timeout(10000);
await ObjectUser.set(Users[0]);
assert(await ObjectUser.has(Users[0].id), `object set failed`);
});
it('[object-has]', async function () {
await ObjectUser.set(Users[2]);
assert(await ObjectUser.has(Users[2].id) === true, 'user id should exists');
assert((await ObjectUser.has(Users[2].id) === true) && (await ObjectUser.has(Users[2].id.toUpperCase()) === false), 'user id should exists');
assert(await ObjectMessage.has(100) === false, 'message id should not exists');
});
it('[object-get]', async function () {
await ObjectUser.set(Users[0]);
assert((await ObjectUser.get(Users[0].id)).id === Users[0].id, `object get failed`);
});
it('[object-del]', async function () {
await ObjectUser.set(Users[0]);
await ObjectUser.del(Users[0].id);
assert(!await ObjectUser.has(Users[0].id), `object del failed`);
});
it('[object-array-append]', async function () {
await ObjectUser.set(Users[0]);
let friend1 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
let friend2 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
let friend3 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
await ObjectUser.arrayNodeAppend(Users[0].id, '.friends', friend1);
await ObjectUser.arrayNodeAppend(Users[0].id, '.friends', friend2, friend3);
let { friends: [{ fid: friend1Id }, { fid: friend2Id }, { fid: friend3Id }] } = await ObjectUser.get(Users[0].id);
assert(friend1Id === friend1.fid && friend2Id === friend2.fid && friend3Id === friend3.fid, `object array append failed`);
});
it('[object-array-unshift]', async function () {
await ObjectUser.set(Users[0]);
let friend1 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
let friend2 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
let friend3 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
await ObjectUser.arrayNodeUnshift(Users[0].id, '.friends', friend1);
await ObjectUser.arrayNodeUnshift(Users[0].id, '.friends', friend2, friend3);
let { friends: [{ fid: friend1Id }, { fid: friend2Id }, { fid: friend3Id }] } = await ObjectUser.get(Users[0].id);
assert(friend1Id === friend3.fid && friend2Id === friend2.fid && friend3Id === friend1.fid, `object array unshift failed`);
});
it('[object-array-insert]', async function () {
await ObjectUser.set(Users[0]);
let friend1 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
let friend2 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
let friend3 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
await ObjectUser.arrayNodeAppend(Users[0].id, '.friends', friend1, friend3);
await ObjectUser.arrayNodeInsert(Users[0].id, '.friends', 1, friend2);
let { friends: [{ fid: friend1Id }, { fid: friend2Id }, { fid: friend3Id }] } = await ObjectUser.get(Users[0].id);
assert(friend2Id === friend2.fid, `object array insert failed`);
});
it('[object-array-del]', async function () {
await ObjectUser.set(Users[0]);
let friend1 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
let friend2 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
let friend3 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
await ObjectUser.arrayNodeAppend(Users[0].id, '.friends', friend1, friend2, friend3);
await ObjectUser.arrayNodeDel(Users[0].id, '.friends', 1);
let { friends: [{ fid: friend1Id }, { fid: friend3Id }] } = await ObjectUser.get(Users[0].id);
assert(friend1Id === friend1.fid && friend3Id === friend3.fid, `object array del failed`);
});
it('[object-array-pop]', async function () {
await ObjectUser.set(Users[0]);
let friend1 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
let friend2 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
await ObjectUser.arrayNodeAppend(Users[0].id, '.friends', friend1, friend2);
let { fid: friend2Id } = await ObjectUser.arrayNodePop(Users[0].id, '.friends');
assert(friend2Id === friend2.fid && (await ObjectUser.get(Users[0].id)).friends.length === 1, `object array pop failed`);
});
it('[object-array-shift]', async function () {
await ObjectUser.set(Users[0]);
let friend1 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
let friend2 = { fid: uuid().replace(/-/g, ""), time: parseInt(Math.random() * 100) };
await ObjectUser.arrayNodeAppend(Users[0].id, '.friends', friend1, friend2);
let { fid: friend1Id } = await ObjectUser.arrayNodeShift(Users[0].id, '.friends');
assert(friend1Id === friend1.fid && (await ObjectUser.get(Users[0].id)).friends.length === 1, `object array shift failed`);
});
it('[object-query]', async function () {
await Promise.all([
ObjectUser.set(Users[0]),
ObjectUser.set(Users[1]),
ObjectUser.set(Users[2]),
ObjectMessage.set(Messages[0]),
ObjectMessage.set(Messages[1]),
]);
let result = await ObjectUser.query("select * from
")
assert(result.length == 3, `object query failed`);
result = await ObjectUser.query("select doc from where `.gender` =1 ")
assert(result.length == 1 && result[0].doc && result[0].doc.gender == 1, `object query where failed`);
});
it('[object-count]', async function () {
await Promise.all([
ObjectUser.set(Users[0]),
ObjectUser.set(Users[1]),
ObjectUser.set(Users[2]),
ObjectMessage.set(Messages[0]),
ObjectMessage.set(Messages[1]),
]);
assert((await ObjectUser.count()) === 3, `object count failed`);
let result = await ObjectUser.count(ORM.Logic.whereEq('.id', Users[0].id));
assert(result === 1, `object count = failed`);
result = await ObjectUser.count(ORM.Logic.whereEq('.id', Users[0].id).toJson());
assert(result === 1, `[toJson]object count = failed`);
result = await ObjectUser.count(undefined, ORM.Logic.group('.gender'));
assert(result === 2, ` not where object count group gender = failed`);
result = await ObjectUser.count(ORM.Logic.whereEq('.name', Users[0].name), ORM.Logic.group('.gender'));
assert(result === 1, `object count where name group gender = failed`);
result = await ObjectUser.count(undefined, [ORM.Logic.group('.gender'), ORM.Logic.group('.name')]);
assert(result === 3, ` not where object count where name group[] gender = failed`);
result = await ObjectUser.count(ORM.Logic.whereEq('.name', Users[0].name));
assert(result === 1, `object count name = failed`);
result = await ObjectUser.count(ORM.Logic.whereEq('.name', Users[0].name).toJson());
assert(result === 1, `[toJson]object count name = failed`);
result = await ObjectUser.count(ORM.Logic.whereNot(ORM.Logic.whereEq('.name', Users[0].name)));
assert(result === 2, `object count not failed`);
result = await ObjectUser.count(ORM.Logic.whereNot(ORM.Logic.whereEq('.name', Users[0].name)).toJson());
assert(result === 2, `[toJson]object count not failed`);
result = await ObjectUser.count(ORM.Logic.whereIn('.name', Users[0].name, Users[1].name));
assert(result === 2, `object count in failed`);
result = await ObjectUser.count(ORM.Logic.whereIn('.name', Users[0].name, Users[1].name).toJson());
assert(result === 2, `[toJson]object count in failed`);
result = await ObjectUser.count(ORM.Logic.whereAnd(
ORM.Logic.whereEq('.name', Users[0].name),
ORM.Logic.whereEq('.id', Users[0].id)
));
assert(result === 1, `object count and failed`);
result = await ObjectUser.count(ORM.Logic.whereAnd(
ORM.Logic.whereEq('.name', Users[0].name),
ORM.Logic.whereEq('.id', Users[0].id)
).toJson());
assert(result === 1, `[toJson]object count and failed`);
result = await ObjectUser.count(ORM.Logic.whereOr(
ORM.Logic.whereEq('.name', Users[0].name),
ORM.Logic.whereEq('.name', Users[1].name)
));
assert(result === 2, `object count or failed`);
result = await ObjectUser.count(ORM.Logic.whereOr(
ORM.Logic.whereEq('.name', Users[0].name),
ORM.Logic.whereEq('.name', Users[1].name)
).toJson());
assert(result === 2, `[toJson]object count or failed`);
result = await ObjectUser.count(ORM.Logic.whereLike('.name', `%${Users[0].name.substr(1, 3)}%`));
assert(result === 1, `object count like failed`);
result = await ObjectUser.count(ORM.Logic.whereLike('.name', `%${Users[0].name.substr(1, 3)}%`).toJson());
assert(result === 1, `[toJson]object count like failed`);
result = await ObjectUser.count(ORM.Logic.whereBetween('.money', 1, 111));
assert(result === 1, `object count between failed`);
result = await ObjectUser.count(ORM.Logic.whereBetween('.money', 1, 111).toJson());
assert(result === 1, `[toJson]object count between failed`);
result = await ObjectUser.count(ORM.Logic.whereContain('.friends[*].fid', '0000000000000002'));
assert(result === 1, `object count where [.friends[*].fid] failed`);
result = await ObjectUser.count(ORM.Logic.whereContain('.friends[*].fid', '0000000000000002').toJson());
assert(result === 1, `[toJson]object count where [.friends[*].fid] failed`);
result = await ObjectMessage.count(ORM.Logic.whereIsUndef('.maybeUndef'));
assert(result === 1, `object count where integer in [maybeUndef where operator is null] failed`);
result = await ObjectMessage.count(ORM.Logic.whereIsUndef('.maybeUndef').toJson());
assert(result === 1, `[toJson]object count where integer in [maybeUndef where operator is null] failed`);
result = await ObjectMessage.count(ORM.Logic.whereIsDef('.maybeUndef'));
assert(result === 1, `object count where integer in [maybeUndef where operator is not null] failed`);
result = await ObjectMessage.count(ORM.Logic.whereIsDef('.maybeUndef').toJson());
assert(result === 1, `[toJson]object count where integer in [maybeUndef where operator is not null] failed`);
});
it('[object-fieldFind-field]', async function () {
await Promise.all([
ObjectUser.set(Users[0]),
ObjectUser.set(Users[1]),
ObjectUser.set(Users[2]),
ObjectMessage.set(Messages[0]),
ObjectMessage.set(Messages[1]),
]);
assert((await ObjectUser.fieldFind()).length === 3, `object fieldFind [.fieldFind()] failed`);
let result = await ObjectUser.fieldFind({ field: ORM.Logic.field(".name", "nameS") })
assert(result.length === 3 && result[0].nameS === Users[0].name, `object fieldFind filed [.fieldFind(field operator =.name)] failed`);
result = await ObjectUser.fieldFind({ field: [ORM.Logic.field(".name", "nameS"), ORM.Logic.field(".gender", "genderS")] })
assert(result.length === 3 && result[0].genderS === Users[0].gender, `object fieldFind filed [.find(field operator =.gender)] failed`);
result = await ObjectUser.fieldFind({ field: ORM.Logic.field("count(1)", "count") })
assert(result.length === 1 && result[0].count === 3, `object fieldFind filed [.find(field operator =count(1))] failed`);
})
it('[object-fieldFind-field-groud]', async function () {
await Promise.all([
ObjectUser.set(Users[0]),
ObjectUser.set(Users[1]),
ObjectUser.set(Users[2]),
ObjectMessage.set(Messages[0]),
ObjectMessage.set(Messages[1]),
]);
assert((await ObjectUser.fieldFind()).length === 3, `object fieldFind [.fieldFind()] failed`);
let result = await ObjectUser.fieldFind({ field: [ORM.Logic.field("count(1)", "count"), ORM.Logic.field(".gender", "genderS")], group: ORM.Logic.group('.gender') })
assert(result.length === 2 && result[0].count === 2 && result[0].genderS === 0, `object fieldFind filed [.fieldFind(field operator =.name)] failed`);
})
it('[object-find-group]', async function () {
await Promise.all([
ObjectUser.set(Users[0]),
ObjectUser.set(Users[1]),
ObjectUser.set(Users[2]),
ObjectMessage.set(Messages[0]),
ObjectMessage.set(Messages[1]),
]);
assert((await ObjectUser.find()).length === 3, `object find where [.find()] failed`);
let result = await ObjectUser.find({ group: ORM.Logic.group('.gender') })
assert(result.length === 2 && result[0].gender !== result[1].gender, `object fieldFind filed [.fieldFind(field operator =.gender)] failed`);
result = await ObjectUser.find({ group: ORM.Logic.group('.gender'), limit: ORM.Logic.limit(1), sort: ORM.Logic.sort('.id') });
assert(result.length === 1 && result[0].id === Users[0].id, `object find limit failed`);
result = await ObjectUser.find({ group: ORM.Logic.group('.gender'), limit: ORM.Logic.limit(1).toJson(), sort: ORM.Logic.sort('.id').toJson() });
assert(result.length === 1 && result[0].id === Users[0].id, `[toJson]object find limit failed`);
result = await ObjectUser.find({ group: ORM.Logic.group('.gender'), limit: ORM.Logic.limit(1, 1), sort: ORM.Logic.sort('.id') });
assert(result.length === 1 && result[0].id === Users[2].id, `object find limit skip failed`);
result = await ObjectUser.find({ group: ORM.Logic.group('.gender'), limit: ORM.Logic.limit(1, 1).toJson(), sort: ORM.Logic.sort('.id').toJson() });
assert(result.length === 1 && result[0].id === Users[2].id, `[toJson]object find limit skip failed`);
})
it('[object-find-where]', async function () {
await Promise.all([
ObjectUser.set(Users[0]),
ObjectUser.set(Users[1]),
ObjectUser.set(Users[2]),
ObjectMessage.set(Messages[0]),
ObjectMessage.set(Messages[1]),
]);
assert((await ObjectUser.find()).length === 3, `object find where [.find()] failed`);
let result = await ObjectUser.find({ where: ORM.Logic.whereEq('.id', Users[0].id) });
assert(result.length === 1 && result[0].id === Users[0].id, `object find where [.find(id where operator =)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereEq('.id', Users[0].id).toJson() });
assert(result.length === 1 && result[0].id === Users[0].id, `[toJson]object find where [.find(id where operator =)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereEq('.name', Users[0].name) });
assert(result.length === 1 && result[0].id === Users[0].id, `object find where [.find(name where operator =)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereEq('.name', Users[0].name).toJson() });
assert(result.length === 1 && result[0].id === Users[0].id, `[toJson]object find where [.find(name where operator =)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereNot(ORM.Logic.whereEq('.name', Users[0].name)) });
assert(result.length === 2 && [Users[2].id, Users[1].id].includes(result[0].id) && [Users[2].id, Users[1].id].includes(result[1].id), `object find where [.find(where not)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereNot(ORM.Logic.whereEq('.name', Users[0].name)).toJson() });
assert(result.length === 2 && [Users[2].id, Users[1].id].includes(result[0].id) && [Users[2].id, Users[1].id].includes(result[1].id), `[toJson]object find where [.find(where not)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereIn('.name', Users[0].name, Users[1].name) });
assert(result.length === 2 && [Users[0].id, Users[1].id].includes(result[0].id) && [Users[0].id, Users[1].id].includes(result[1].id), `object find where [.find(where in)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereIn('.name', Users[0].name, Users[1].name).toJson() });
assert(result.length === 2 && [Users[0].id, Users[1].id].includes(result[0].id) && [Users[0].id, Users[1].id].includes(result[1].id), `[toJson]object find where [.find(where in)] failed`);
result = await ObjectUser.find({
where: ORM.Logic.whereAnd(
ORM.Logic.whereEq('.name', Users[0].name),
ORM.Logic.whereEq('.id', Users[0].id)
)
});
assert(result.length === 1 && result[0].id === Users[0].id, `object find where [.find(id where and)] failed`);
result = await ObjectUser.find({
where: ORM.Logic.whereAnd(
ORM.Logic.whereEq('.name', Users[0].name),
ORM.Logic.whereEq('.id', Users[0].id)
).toJson()
});
assert(result.length === 1 && result[0].id === Users[0].id, `[toJson]object find where [.find(id where and)] failed`);
result = await ObjectUser.find({
where: ORM.Logic.whereOr(
ORM.Logic.whereEq('.name', Users[0].name),
ORM.Logic.whereEq('.name', Users[1].name)
)
});
assert(result.length === 2 && [Users[0].id, Users[1].id].includes(result[0].id) && [Users[0].id, Users[1].id].includes(result[1].id), `object find where [.find(where or)] failed`);
let js = ORM.Logic.normalize(ORM.Logic.whereOr(
ORM.Logic.whereEq('.name', Users[0].name),
ORM.Logic.whereEq('.name', Users[1].name)
).toJson())
result = await ObjectUser.find({
where: ORM.Logic.whereOr(
ORM.Logic.whereEq('.name', Users[0].name),
ORM.Logic.whereEq('.name', Users[1].name)
).toJson()
});
assert(result.length === 2 && [Users[0].id, Users[1].id].includes(result[0].id) && [Users[0].id, Users[1].id].includes(result[1].id), `[toJson]object find where [.find(where or)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereLike('.name', `%${Users[0].name.substr(1, 3)}%`) });
assert(result.length === 1 && result[0].id === Users[0].id, `object find where [.find(id where like)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereLike('.name', `%${Users[0].name.substr(1, 3)}%`).toJson() });
assert(result.length === 1 && result[0].id === Users[0].id, `[toJson]object find where [.find(id where like)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereBetween('.money', 1, 111) });
assert(result.length === 1 && result[0].id === Users[0].id, `object find where [.find(id where between)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereBetween('.money', 1, 111).toJson() });
assert(result.length === 1 && result[0].id === Users[0].id, `[toJson]object find where [.find(id where between)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereContain('.friends[*].fid', '0000000000000002') });
assert(result.length === 1 && result[0].id === Users[2].id, `object find where [.friends[*].fid] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereContain('.friends[*].fid', '0000000000000002').toJson() });
assert(result.length === 1 && result[0].id === Users[2].id, `[toJson]object find where [.friends[*].fid] failed`);
result = await ObjectUser.find({ where: ORM.Logic.WhereContainBoolean('.friends[*].fid', '0000000000000002*') });
assert(result.length === 1 && result[0].id === Users[2].id, `object find WhereContainBoolean [.friends[*].fid] failed`);
result = await ObjectUser.find({ where: ORM.Logic.WhereContainBoolean('.friends[*].fid', '000000000000000*').toJson() });
assert(result.length === 2, `[toJson]object find WhereContainBoolean [.friends[*].fid] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereEq('.isVip', true) });
assert(result.length === 2, `object find where boolean [.find(isVip where operator =)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereEq('.isVip', true).toJson() });
assert(result.length === 2, `[toJson]object find where boolean [.find(isVip where operator =)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereNq('.isVip', true) });
assert(result.length === 1, `object find where boolean nq [.find(isVip where operator =)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereNq('.isVip', true).toJson() });
assert(result.length === 1, `[toJson]object find where boolean nq [.find(isVip where operator =)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereIn('.isVip', true) });
assert(result.length === 2, `object find where boolean in [.find(isVip where operator =)] failed`);
result = await ObjectUser.find({ where: ORM.Logic.whereIn('.isVip', true).toJson() });
assert(result.length === 2, `[toJson]object find where boolean in [.find(isVip where operator =)] failed`);
result = await ObjectMessage.find({ where: ORM.Logic.whereIsUndef('.maybeUndef') });
assert(result.length === 1, `object find where integer in [.find(maybeUndef where operator is null)] failed`);
result = await ObjectMessage.find({ where: ORM.Logic.whereIsUndef('.maybeUndef').toJson() });
assert(result.length === 1, `[toJson]object find where integer in [.find(maybeUndef where operator is null)] failed`);
result = await ObjectMessage.find({ where: ORM.Logic.whereIsDef('.maybeUndef') });
assert(result.length === 1, `object find where integer in [.find(maybeUndef where operator is not null)] failed`);
result = await ObjectMessage.find({ where: ORM.Logic.whereIsDef('.maybeUndef').toJson() });
assert(result.length === 1, `[toJson]object find where integer in [.find(maybeUndef where operator is not null)] failed`);
});
it('[object-find-sort]', async function () {
await Promise.all([
ObjectUser.set(Users[0]),
ObjectUser.set(Users[1]),
ObjectUser.set(Users[2])
]);
let [{ id: user3Id }, { id: user2Id }, { id: user1Id }] = await ObjectUser.find({ sort: ORM.Logic.sort('.id', "desc") });
assert(user1Id === Users[0].id && user2Id === Users[1].id && user3Id === Users[2].id, `object find sort failed`);
[{ id: user3Id }, { id: user2Id }, { id: user1Id }] = await ObjectUser.find({ sort: ORM.Logic.sort('.id', "desc").toJson() });
assert(user1Id === Users[0].id && user2Id === Users[1].id && user3Id === Users[2].id, `[toJson]object find sort failed`);
[{ id: user3Id }, { id: user1Id }, { id: user2Id }] = await ObjectUser.find({ sort: [ORM.Logic.sort('.gender', "desc"), ORM.Logic.sort('.id', "asc")] });
assert(user1Id === Users[0].id && user2Id === Users[1].id && user3Id === Users[2].id, `object find double sort failed`);
[{ id: user3Id }, { id: user1Id }, { id: user2Id }] = await ObjectUser.find({ sort: [ORM.Logic.sort('.gender', "desc").toJson(), ORM.Logic.sort('.id', "asc").toJson()] });
assert(user1Id === Users[0].id && user2Id === Users[1].id && user3Id === Users[2].id, `[toJson]object find double sort failed`);
});
it('[object-find-skip-limit]', async function () {
await Promise.all([
ObjectUser.set(Users[0]),
ObjectUser.set(Users[1]),
ObjectUser.set(Users[2])
]);
let result = await ObjectUser.find({ limit: ORM.Logic.limit(1), sort: ORM.Logic.sort('.id') });
assert(result.length === 1 && result[0].id === Users[0].id, `object find limit failed`);
result = await ObjectUser.find({ limit: ORM.Logic.limit(1).toJson(), sort: ORM.Logic.sort('.id').toJson() });
assert(result.length === 1 && result[0].id === Users[0].id, `[toJson]object find limit failed`);
result = await ObjectUser.find({ limit: ORM.Logic.limit(1, 1), sort: ORM.Logic.sort('.id') });
assert(result.length === 1 && result[0].id === Users[1].id, `object find limit skip failed`);
result = await ObjectUser.find({ limit: ORM.Logic.limit(1, 1).toJson(), sort: ORM.Logic.sort('.id').toJson() });
assert(result.length === 1 && result[0].id === Users[1].id, `[toJson]object find limit skip failed`);
});
it('[relation-put]', async function () {
await RelationUserMessage.put(UserMessages[0]);
assert(await RelationUserMessage.fetch(UserMessages[0].subject, UserMessages[0].object) != undefined, `relation put failed`);
});
it('[relation-has]', async function () {
await RelationUserMessage.put(UserMessages[0]);
assert(await RelationUserMessage.has(Users[0].id, Messages[0].id) === true, 'relation has failed');
assert(await RelationUserMessage.has(Users[1].id, Messages[1].id) === false, 'relation has failed');
});
it('[relation-fetch]', async function () {
await RelationUserMessage.put(UserMessages[0]);
assert((await RelationUserMessage.fetch(Users[0].id, Messages[0].id)).readTime === UserMessages[0].readTime, 'relation fetch failed');
});
it('[relation-remove]', async function () {
await RelationUserMessage.put(UserMessages[0]);
await RelationUserMessage.put(UserMessages[1]);
await RelationUserMessage.remove(Users[0].id, Messages[0].id);
assert(await RelationUserMessage.fetch(Users[0].id, Messages[0].id) === undefined, 'relation remove failed');
});
it('[relation-count]', async function () {
await RelationUserMessage.put(UserMessages[0]);
await RelationUserMessage.put(UserMessages[1]);
assert(await RelationUserMessage.count(Users[0].id) === 2, 'relation count failed');
let filter = ORM.Logic.whereEq('.status', 2);
assert(await RelationUserMessage.count(Users[0].id, filter) === 1, 'relation count filter = failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 1, '[toJson]relation count filter = failed');
filter = ORM.Logic.whereIn('.status', 1, 2);
assert(await RelationUserMessage.count(Users[0].id, filter) === 2, 'relation count filter in failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 2, '[toJson]relation count filter in failed');
filter = ORM.Logic.whereBetween('.status', 0, 2);
assert(await RelationUserMessage.count(Users[0].id, filter) === 2, 'relation count filter between failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 2, '[toJson]relation count filter between failed');
filter = ORM.Logic.whereAnd(ORM.Logic.whereEq('.status', 1), ORM.Logic.whereEq('.status', 2));
assert(await RelationUserMessage.count(Users[0].id, filter) === 0, 'relation count filter where failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 0, '[toJson]relation count filter where failed');
filter = ORM.Logic.whereOr(ORM.Logic.whereEq('.status', 1), ORM.Logic.whereEq('.status', 2));
assert(await RelationUserMessage.count(Users[0].id, filter) === 2, 'relation count filter or failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 2, '[toJson]relation count filter or failed');
filter = ORM.Logic.whereNot(ORM.Logic.whereEq('.status', 1));
assert(await RelationUserMessage.count(Users[0].id, filter) === 1, 'relation count filter not failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 1, '[toJson]relation count filter not failed');
filter = ORM.Logic.whereLike('.text', '%a%');
assert(await RelationUserMessage.count(Users[0].id, filter) === 2, 'relation count filter like %a% failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 2, '[toJson]relation count filter like %a% failed');
filter = ORM.Logic.whereLike('.text', 'a%');
assert(await RelationUserMessage.count(Users[0].id, filter) === 1, 'relation count filter like a% failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 1, '[toJson]relation count filter like a% failed');
filter = ORM.Logic.whereLike('.text', 'a');
assert(await RelationUserMessage.count(Users[0].id, filter) === 0, 'relation count filter like a failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 0, '[toJson]relation count filter like a failed');
filter = ORM.Logic.whereLike('.text', 'a%d');
assert(await RelationUserMessage.count(Users[0].id, filter) === 1, 'relation count filter like a%d failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 1, '[toJson]relation count filter like a%d failed');
filter = ORM.Logic.whereLike('.text', '_bcd');
assert(await RelationUserMessage.count(Users[0].id, filter) === 1, 'relation count filter like _bcd failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 1, '[toJson]relation count filter like _bcd failed');
filter = ORM.Logic.whereLike('.text', 'ab_d');
assert(await RelationUserMessage.count(Users[0].id, filter) === 1, 'relation count filter like ab_d failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 1, '[toJson]relation count filter like ab_d failed');
filter = ORM.Logic.whereLike('.text', 'abc_');
assert(await RelationUserMessage.count(Users[0].id, filter) === 1, 'relation count filter like abc_ failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 1, '[toJson]relation count filter like abc_ failed');
filter = ORM.Logic.whereLike('.text', '%bc_');
assert(await RelationUserMessage.count(Users[0].id, filter) === 1, 'relation count filter like %bc_ failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 1, '[toJson]relation count filter like %bc_ failed');
filter = ORM.Logic.whereLike('.text', 'abcd');
assert(await RelationUserMessage.count(Users[0].id, filter) === 1, 'relation count filter like abcd failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 1, '[toJson]relation count filter like abcd failed');
filter = ORM.Logic.whereContain('.arr[*]', 'abc');
assert(await RelationUserMessage.count(Users[0].id, filter) === 1, 'relation count filter contain abcd failed');
assert(await RelationUserMessage.count(Users[0].id, filter.toJson()) === 1, '[toJson]relation count filter contain abcd failed');
filter = ORM.Logic.whereIsUndef('.maybeUndef');
result = await RelationUserMessage.count(Users[0].id, filter);
assert(result === 1, 'relation list filter maybeUndef is null failed');
result = await RelationUserMessage.count(Users[0].id, filter.toJson());
assert(result === 1, '[toJson]relation list filter maybeUndef is null failed');
filter = ORM.Logic.whereIsUndef('.maybeUndef');
result = await RelationUserMessage.count(Users[0].id, filter);
assert(result === 1, 'relation count filter maybeUndef is not null failed');
result = await RelationUserMessage.count(Users[0].id, filter.toJson());
assert(result === 1, '[toJson]relation count filter maybeUndef is not null failed');
});
it('[relation-list]', async function () {
await RelationUserMessage.put(UserMessages[0]);
await RelationUserMessage.put(UserMessages[1]);
let result = await RelationUserMessage.list(Users[0].id);
assert(result.length === 2, 'relation list failed');
result = await RelationUserMessage.list(Users[0].id, ORM.Logic.sort('.status', "DESC"));
assert(result.length === 2 && result[0].status === UserMessages[1].status && result[1].status === UserMessages[0].status, 'relation list sort failed');
result = await RelationUserMessage.list(Users[0].id, ORM.Logic.sort('.status', "DESC").toJson());
assert(result.length === 2 && result[0].status === UserMessages[1].status && result[1].status === UserMessages[0].status, '[toJson]relation list sort failed');
result = await RelationUserMessage.list(Users[0].id, ORM.Logic.sort('.status', "DESC"), ORM.Logic.limit(1));
assert(result.length === 1 && result[0].status === UserMessages[1].status, 'relation list sort limit failed');
result = await RelationUserMessage.list(Users[0].id, ORM.Logic.sort('.status', "DESC").toJson(), ORM.Logic.limit(1).toJson());
assert(result.length === 1 && result[0].status === UserMessages[1].status, '[toJson]relation list sort limit failed');
result = await RelationUserMessage.list(Users[0].id, ORM.Logic.sort('.status', "DESC"), ORM.Logic.limit(1, 1));
assert(result.length === 1 && result[0].status === UserMessages[0].status, 'relation list sort limit skip failed');
result = await RelationUserMessage.list(Users[0].id, ORM.Logic.sort('.status', "DESC").toJson(), ORM.Logic.limit(1, 1).toJson());
assert(result.length === 1 && result[0].status === UserMessages[0].status, '[toJson]relation list sort limit skip failed');
result = await RelationUserMessage.list(Users[0].id, ORM.Logic.sort('.status', "DESC"), undefined, ORM.Logic.whereEq('.status', 2));
assert(result.length === 1 && result[0].status === UserMessages[1].status, 'relation list filter sort failed');
result = await RelationUserMessage.list(Users[0].id, ORM.Logic.sort('.status', "DESC").toJson(), undefined, ORM.Logic.whereEq('.status', 2).toJson());
assert(result.length === 1 && result[0].status === UserMessages[1].status, '[toJson]relation list filter sort failed');
result = await RelationUserMessage.list(Users[0].id, ORM.Logic.sort('.status', "DESC"), ORM.Logic.limit(1), ORM.Logic.whereEq('.status', 2));
assert(result.length === 1 && result[0].status === UserMessages[1].status, 'relation list filter sort limit failed');
result = await RelationUserMessage.list(Users[0].id, ORM.Logic.sort('.status', "DESC").toJson(), ORM.Logic.limit(1).toJson(), ORM.Logic.whereEq('.status', 2).toJson());
assert(result.length === 1 && result[0].status === UserMessages[1].status, '[toJson]relation list filter sort limit failed');
result = await RelationUserMessage.list(Users[0].id, ORM.Logic.sort('.status', "DESC"), ORM.Logic.limit(1, 1), ORM.Logic.whereEq('.status', 2));
assert(result.length === 0, 'relation list filter sort limit skip failed');
result = await RelationUserMessage.list(Users[0].id, ORM.Logic.sort('.status', "DESC").toJson(), ORM.Logic.limit(1, 1).toJson(), ORM.Logic.whereEq('.status', 2).toJson());
assert(result.length === 0, '[toJson]relation list filter sort limit skip failed');
let filter = ORM.Logic.whereEq('.status', 2);
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result[0].id === UserMessages[1].id, 'relation list filter = failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result[0].id === UserMessages[1].id, '[toJson]relation list filter = failed');
filter = ORM.Logic.whereIsUndef('.maybeUndef');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result[0].id === UserMessages[1].id, 'relation list filter maybeUndef is null failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result[0].id === UserMessages[1].id, '[toJson]relation list filter maybeUndef is null failed');
filter = ORM.Logic.whereIsUndef('.maybeUndef');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result[0].id === UserMessages[0].id, 'relation list filter maybeUndef is not null failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result[0].id === UserMessages[0].id, '[toJson]relation list filter maybeUndef is not null failed');
filter = ORM.Logic.whereIn('.status', 1, 2);
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result.length === 2, 'relation list filter in failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result.length === 2, '[toJson]relation list filter in failed');
filter = ORM.Logic.whereBetween('.status', 0, 2);
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result.length === 2, 'relation list filter between failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result.length === 2, '[toJson]relation list filter between failed');
filter = ORM.Logic.whereAnd(ORM.Logic.whereEq('.status', 1), ORM.Logic.whereEq('.status', 2));
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result.length === 0, 'relation list filter where failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result.length === 0, '[toJson]relation list filter where failed');
filter = ORM.Logic.whereOr(ORM.Logic.whereEq('.status', 1), ORM.Logic.whereEq('.status', 2));
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result.length === 2, 'relation list filter or failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result.length === 2, '[toJson]relation list filter or failed');
filter = ORM.Logic.whereNot(ORM.Logic.whereEq('.status', 1));
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result[0].text === 'dcba', 'relation list filter not failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result[0].text === 'dcba', '[toJson]relation list filter not failed');
filter = ORM.Logic.whereLike('.text', '%a%');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result.length === 2, 'relation list filter like %a% failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result.length === 2, '[toJson]relation list filter like %a% failed');
filter = ORM.Logic.whereLike('.text', 'a%');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result[0].text === 'abcd', 'relation list filter like a% failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result[0].text === 'abcd', '[toJson]relation list filter like a% failed');
filter = ORM.Logic.whereLike('.text', 'a');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result.length === 0, 'relation list filter like a failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result.length === 0, '[toJson]relation list filter like a failed');
filter = ORM.Logic.whereLike('.text', 'a%d');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result[0].text === 'abcd', 'relation list filter like a%d failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result[0].text === 'abcd', '[toJson]relation list filter like a%d failed');
filter = ORM.Logic.whereLike('.text', '_bcd');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result[0].text === 'abcd', 'relation list filter like _bcd failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result[0].text === 'abcd', '[toJson]relation list filter like _bcd failed');
filter = ORM.Logic.whereLike('.text', 'ab_d');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result[0].text === 'abcd', 'relation list filter like ab_d failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result[0].text === 'abcd', '[toJson]relation list filter like ab_d failed');
filter = ORM.Logic.whereLike('.text', 'abc_');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result[0].text === 'abcd', 'relation list filter like abc_ failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result[0].text === 'abcd', '[toJson]relation list filter like abc_ failed');
filter = ORM.Logic.whereLike('.text', '%bc_');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result[0].text === 'abcd', 'relation list filter like %bc_ failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result[0].text === 'abcd', '[toJson]relation list filter like %bc_ failed');
filter = ORM.Logic.whereLike('.text', 'abcd');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result[0].text === 'abcd', 'relation list filter like abcd failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result[0].text === 'abcd', '[toJson]relation list filter like abcd failed');
filter = ORM.Logic.whereContain('.arr[*]', 'abc');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter);
assert(result[0].subject === UserMessages[0].subject, 'relation count filter contain abcd failed');
result = await RelationUserMessage.list(Users[0].id, undefined, undefined, filter.toJson());
assert(result[0].subject === UserMessages[0].subject, '[toJson]relation count filter contain abcd failed');
})
it('[relation-clear]', async function () {
await RelationUserMessage.put(UserMessages[0]);
await RelationUserMessage.put(UserMessages[1]);
await RelationUserMessage.clear(Users[0].id);
assert(await RelationUserMessage.count(Users[0].id) === 0, 'relation clear fail');
});
it('[auto-fix-object-get]', async function () {
await ObjectAutoFixBefore.set({
id: "0000000000000000",
autoFixHalfRequireObject: {
oldExistValue: "oldExistValue"
}
});
let fix = await ObjectAutoFix.get("0000000000000000");
assert(
fix.autoFixObject != undefined &&
fix.autoFixObject.count === 10 &&
Array.isArray(fix.friends) &&
fix.friends.length === 2 &&
fix.friends.every(_ => {
return _ !== undefined && _.fid === "fid" && _.time === 1
}) &&
Array.isArray(fix.autoFixArray) &&
fix.autoFixArray.length === 2 &&
fix.autoFixArray.every(_ => {
return _ === "111"
}) &&
fix.autoFixInteger === 0 &&
fix.autoFixNumber === 0.9 &&
fix.autoFixBoolean === false &&
fix.autoFixString === "default" &&
fix.autoFixNull === null &&
fix.autoFixEmpty === null &&
fix.autoFixArrayDefaultEmpty.length === 0 &&
Object.keys(fix.autoFixObjectDefaultEmpty).length === 0 &&
fix.autoFixHalfRequireObject !== undefined &&
fix.autoFixHalfRequireObject.oldExistValue === 'oldExistValue' &&
fix.autoFixHalfRequireObject.autoFixObject !== undefined &&
fix.autoFixHalfRequireObject.autoFixObject.count === 10
,
'auto fix object get failed'
);
});
it('[auto-fix-object-get-half]', async function () {
await ObjectAutoFixBefore.set({
id: "0000000000000000",
friends: [{
fid: "fid"
}],
});
let fix = await ObjectAutoFix.get("0000000000000000");
assert(
fix.autoFixObject != undefined &&
fix.autoFixObject.count === 10 &&
Array.isArray(fix.friends) &&
fix.friends.length === 2 &&
fix.friends.every(_ => {
return _ !== undefined && _.fid === "fid" && _.time === 1
}) &&
Array.isArray(fix.autoFixArray) &&
fix.autoFixArray.length === 2 &&
fix.autoFixArray.every(_ => {
return _ === "111"
}) &&
fix.autoFixInteger === 0 &&
fix.autoFixNumber === 0.9 &&
fix.autoFixBoolean === false &&
fix.autoFixString === "default" &&
fix.autoFixNull === null &&
fix.autoFixEmpty === null
,
'auto fix object get failed'
);
});
it('[auto-fix-object-find]', async function () {
await ObjectAutoFixBefore.set({
id: "0000000000000000"
});
let fixes = await ObjectAutoFix.find();
assert(
fixes.every(fix =>
fix.autoFixObject != undefined &&
fix.autoFixObject.count === 10 &&
Array.isArray(fix.friends) &&
fix.friends.length === 2 &&
fix.friends.every(_ => {
return _ !== undefined && _.fid === "fid" && _.time === 1
}) &&
Array.isArray(fix.autoFixArray) &&
fix.autoFixArray.length === 2 &&
fix.autoFixArray.every(_ => {
return _ === "111"
}) &&
fix.autoFixInteger === 0 &&
fix.autoFixNumber === 0.9 &&
fix.autoFixBoolean === false &&
fix.autoFixString === "default" &&
fix.autoFixNull === null &&
fix.autoFixEmpty === null &&
fix.autoFixArrayDefaultEmpty.length === 0 &&
Object.keys(fix.autoFixObjectDefaultEmpty).length === 0
),
"auto-fix-object-find failed"
);
});
it('[auto-fix-object-array-node-pop]', async function () {
await ObjectAutoFixBefore.set({
id: "0000000000000000"
});
let fix = await ObjectAutoFix.arrayNodePop(
"0000000000000000",
".friends"
);
assert(
fix.fid === "fid" && fix.time === 1,
"auto-fix-object-array-node-pop failed"
);
});
it('[auto-fix-object-array-node-shift]', async function () {
await ObjectAutoFixBefore.set({
id: "0000000000000000"
});
let fix = await ObjectAutoFix.arrayNodeShift(
"0000000000000000",
".friends"
);
assert(
fix.fid === "fid" && fix.time === 1,
"auto-fix-object-array-node-shift failed"
);
});
it('[auto-fix-relation-fetch]', async function () {
await RelationObjectAutoFixBefore.put({
subject: "0000000000000000",
object: "0000000000000000"
});
let fix = await RelationObjectAutoFix.fetch(
"0000000000000000",
"0000000000000000"
);
assert(
fix.autoFixObject != undefined &&
fix.autoFixObject.count === 10 &&
Array.isArray(fix.friends) &&
fix.friends.length === 2 &&
fix.friends.every(_ => {
return _ !== undefined && _.fid === "fid" && _.time === 1
}) &&
Array.isArray(fix.autoFixArray) &&
fix.autoFixArray.length === 2 &&
fix.autoFixArray.every(_ => {
return _ === "111"
}) &&
fix.autoFixInteger === 0 &&
fix.autoFixNumber === 0.9 &&
fix.autoFixBoolean === false &&
fix.autoFixString === "default" &&
fix.autoFixNull === null &&
fix.autoFixEmpty === null
,
"auto-fix-relation-fetch failed"
);
});
it('[auto-fix-relation-list]', async function () {
await RelationObjectAutoFixBefore.put({
subject: "0000000000000000",
object: "0000000000000000"
});
let fixes = await RelationObjectAutoFix.list(
"0000000000000000"
);
assert(
fixes.every(fix =>
fix.autoFixObject != undefined &&
fix.autoFixObject.count === 10 &&
Array.isArray(fix.friends) &&
fix.friends.length === 2 &&
fix.friends.every(_ => {
return _ !== undefined && _.fid === "fid" && _.time === 1
}) &&
Array.isArray(fix.autoFixArray) &&
fix.autoFixArray.length === 2 &&
fix.autoFixArray.every(_ => {
return _ === "111"
}) &&
fix.autoFixInteger === 0 &&
fix.autoFixNumber === 0.9 &&
fix.autoFixBoolean === false &&
fix.autoFixString === "default" &&
fix.autoFixNull === null &&
fix.autoFixEmpty === null
),
"auto-fix-relation-list failed"
);
});
});