Skip to content

Commit 71d2b1a

Browse files
committed
feat: Add not equal filter, add tests.
1 parent c6dbcc8 commit 71d2b1a

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

src/introspection/getFilterTypesFromData.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
GraphQLBoolean,
23
GraphQLInputObjectType,
34
GraphQLString,
45
GraphQLInt,
@@ -29,6 +30,10 @@ const getRangeFiltersFromEntities = (entities) => {
2930
fields[`${fieldName}_gt`] = { type: fieldType };
3031
fields[`${fieldName}_gte`] = { type: fieldType };
3132
}
33+
34+
if (fieldType != GraphQLBoolean && fieldType != GraphQLList) {
35+
fields[`${fieldName}_neq`] = { type: fieldType };
36+
}
3237
return fields;
3338
}, {});
3439
};

src/resolver/Query/applyFilters.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ export default (entityData = [], filter = {}) => {
77
Object.keys(filter)
88
.filter((key) => key !== 'q')
99
.forEach((key) => {
10+
if (key.indexOf('_neq') !== -1) {
11+
// not equal to
12+
const realKey = key.replace(/(_neq)$/, '');
13+
items = items.filter((d) => d[realKey] != filter[key]);
14+
return;
15+
}
1016
if (key.indexOf('_lte') !== -1) {
1117
// less than or equal
1218
const realKey = key.replace(/(_lte)$/, '');

src/resolver/Query/applyFilters.spec.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,19 @@ test('filters by value on each field using the related filter', () => {
9595
]);
9696
});
9797

98+
test('filters by not equals given fields', () => {
99+
expect(applyFilters(data, { id_neq: 2 })).toEqual([
100+
{
101+
id: 1,
102+
title: 'Lorem Ipsum',
103+
user_id: 123,
104+
views: 254,
105+
tags: ['foo', 'bar'],
106+
},
107+
{ id: 3, title: 'Sic Dolor amet', user_id: 123, views: 76, tags: [] },
108+
]);
109+
});
110+
98111
test('filters by value range on each integer field using the related filters', () => {
99112
expect(applyFilters(data, { views_lt: 76 })).toEqual([
100113
{

0 commit comments

Comments
 (0)