fix: filter parser with number in key (#219)
* fix: filter parser with number in key * fix:test
This commit is contained in:
parent
2efbe84fa6
commit
b4dc7f6199
@ -141,6 +141,21 @@ describe('array field operator', function () {
|
|||||||
expect(filter1[0].get('name')).toEqual(t1.get('name'));
|
expect(filter1[0].get('name')).toEqual(t1.get('name'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('$match with $and', async () => {
|
||||||
|
const filter1 = await Test.repository.find({
|
||||||
|
filter: {
|
||||||
|
$and: [
|
||||||
|
{
|
||||||
|
selected: { $match: [2, 1, 'a', 'b'] },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(filter1.length).toEqual(1);
|
||||||
|
expect(filter1[0].get('name')).toEqual(t1.get('name'));
|
||||||
|
});
|
||||||
|
|
||||||
test('$notMatch', async () => {
|
test('$notMatch', async () => {
|
||||||
const filter2 = await Test.repository.find({
|
const filter2 = await Test.repository.find({
|
||||||
filter: {
|
filter: {
|
||||||
|
@ -8,6 +8,7 @@ describe('repository find', () => {
|
|||||||
let User: Collection;
|
let User: Collection;
|
||||||
let Post: Collection;
|
let Post: Collection;
|
||||||
let Comment: Collection;
|
let Comment: Collection;
|
||||||
|
let Tag: Collection;
|
||||||
|
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
await db.close();
|
await db.close();
|
||||||
@ -15,6 +16,7 @@ describe('repository find', () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
db = mockDatabase();
|
db = mockDatabase();
|
||||||
|
|
||||||
User = db.collection<{ id: number; name: string }, { name: string }>({
|
User = db.collection<{ id: number; name: string }, { name: string }>({
|
||||||
name: 'users',
|
name: 'users',
|
||||||
fields: [
|
fields: [
|
||||||
@ -36,6 +38,11 @@ describe('repository find', () => {
|
|||||||
type: 'hasMany',
|
type: 'hasMany',
|
||||||
name: 'comments',
|
name: 'comments',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
type: 'belongsToMany',
|
||||||
|
name: 'abc1',
|
||||||
|
target: 'tags',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -47,6 +54,16 @@ describe('repository find', () => {
|
|||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Tag = db.collection({
|
||||||
|
name: 'tags',
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
type: 'string',
|
||||||
|
name: 'name',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
await db.sync();
|
await db.sync();
|
||||||
const repository = User.repository;
|
const repository = User.repository;
|
||||||
|
|
||||||
@ -55,7 +72,7 @@ describe('repository find', () => {
|
|||||||
{
|
{
|
||||||
name: 'u1',
|
name: 'u1',
|
||||||
age: 10,
|
age: 10,
|
||||||
posts: [{ title: 'u1t1', comments: [{ content: 'u1t1c1' }] }],
|
posts: [{ title: 'u1t1', comments: [{ content: 'u1t1c1' }], abc1: [{ name: 't1' }] }],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'u2',
|
name: 'u2',
|
||||||
@ -216,5 +233,15 @@ describe('repository find', () => {
|
|||||||
|
|
||||||
expect(results.length).toEqual(1);
|
expect(results.length).toEqual(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('find with association with $and', async () => {
|
||||||
|
const results = await Post.repository.find({
|
||||||
|
filter: {
|
||||||
|
'abc1.name': 't1',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(results.length).toEqual(1);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -81,6 +81,7 @@ export default class FilterParser {
|
|||||||
|
|
||||||
let skipPrefix = null;
|
let skipPrefix = null;
|
||||||
const associations = model.associations;
|
const associations = model.associations;
|
||||||
|
|
||||||
debug('associations %O', associations);
|
debug('associations %O', associations);
|
||||||
|
|
||||||
for (let [key, value] of Object.entries(flattenedFilter)) {
|
for (let [key, value] of Object.entries(flattenedFilter)) {
|
||||||
@ -138,7 +139,7 @@ export default class FilterParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// firstKey is number
|
// firstKey is number
|
||||||
if (/\d+/.test(firstKey)) {
|
if (!lodash.isNaN(parseInt(firstKey))) {
|
||||||
paths.push(firstKey);
|
paths.push(firstKey);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -182,6 +183,7 @@ export default class FilterParser {
|
|||||||
}
|
}
|
||||||
assoc.push(associationKey);
|
assoc.push(associationKey);
|
||||||
});
|
});
|
||||||
|
|
||||||
_.set(include, assoc, {
|
_.set(include, assoc, {
|
||||||
association: attr,
|
association: attr,
|
||||||
attributes: [],
|
attributes: [],
|
||||||
|
Loading…
Reference in New Issue
Block a user