Skip to content

Commit

Permalink
feat: support date compare (#113)
Browse files Browse the repository at this point in the history
* feat: support Date filter in equal

* feat: support Date in greater, greaterOrEqual, less, lessOrEqual

* chore: add changeset
  • Loading branch information
thundermiracle committed Aug 14, 2023
1 parent 85229be commit 4c804d5
Show file tree
Hide file tree
Showing 11 changed files with 341 additions and 5 deletions.
5 changes: 5 additions & 0 deletions .changeset/cyan-shirts-peel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"filter-data": minor
---

feat: support date compare
64 changes: 64 additions & 0 deletions __test__/filters/equal.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@ const searchDataArrayBoolean = {
married: [true, true],
};

const searchDataDate = {
registered: '2023-08-14T10:00:00.000Z',
};

const searchDataArrayDate = {
registered: ['2023-08-14T10:00:00.000Z', '2023-08-15T21:00:00.000Z'],
};

describe('test caseSensitive flag', () => {
test('return false if key is incorrect', () => {
const result = equal(
Expand Down Expand Up @@ -293,4 +301,60 @@ describe('test searchCondition', () => {

expect(result).toBe(false);
});

test('target value is date string and search value is Date(same)', () => {
const result = equal(
{
key: 'registered',
value: new Date('2023-08-14T10:00:00.000Z'),
type: SearchType.EQ,
},
false,
searchDataDate,
);

expect(result).toBe(true);
});

test('target value is date string and search value is Date array(same)', () => {
const result = equal(
{
key: 'registered',
value: new Date('2023-08-15T21:00:00.000Z'),
type: SearchType.EQ,
},
false,
searchDataArrayDate,
);

expect(result).toBe(true);
});

test('target value is date string and search value is Date(different)', () => {
const result = equal(
{
key: 'registered',
value: new Date('2023-08-14T09:00:00.000Z'),
type: SearchType.EQ,
},
false,
searchDataDate,
);

expect(result).toBe(false);
});

test('target value is date string and search value is Date array(different)', () => {
const result = equal(
{
key: 'registered',
value: new Date('2023-08-15T10:00:00.000Z'),
type: SearchType.EQ,
},
false,
searchDataArrayDate,
);

expect(result).toBe(false);
});
});
46 changes: 46 additions & 0 deletions __test__/filters/greater.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ const searchDataArray = {
fullName: ['Ben', 'Jackson'],
};

const searchDataDate = {
birthday: '2012-03-24',
};

describe('test caseSensitive flag', () => {
test('return false if key is incorrect', () => {
const result = greater(
Expand Down Expand Up @@ -155,4 +159,46 @@ describe('test searchCondition', () => {

expect(result).toBe(false);
});

test('target value is Date string same -> false', () => {
const result = greater(
{
key: 'birthday',
value: new Date('2012-03-24'),
type: SearchType.GT,
},
false,
searchDataDate,
);

expect(result).toBe(false);
});

test('target value is Date string -> true', () => {
const result = greater(
{
key: 'birthday',
value: new Date('2015-05-15'),
type: SearchType.GT,
},
false,
searchDataDate,
);

expect(result).toBe(true);
});

test('target value is Date string -> false', () => {
const result = greater(
{
key: 'birthday',
value: new Date('2011-05-15'),
type: SearchType.GT,
},
false,
searchDataDate,
);

expect(result).toBe(false);
});
});
46 changes: 46 additions & 0 deletions __test__/filters/greaterOrEqual.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ const searchDataArray = {
fullName: ['Ben', 'Jackson'],
};

const searchDataDate = {
birthday: '2012-03-24',
};

describe('test caseSensitive flag', () => {
test('caseSensitive=true(different alphabet case, compare to lowercase) -> false', () => {
const result = greaterOrEqual(
Expand Down Expand Up @@ -155,4 +159,46 @@ describe('test searchCondition', () => {

expect(result).toBe(true);
});

test('target value is Date string same -> true', () => {
const result = greaterOrEqual(
{
key: 'birthday',
value: new Date('2012-03-24'),
type: SearchType.GT,
},
false,
searchDataDate,
);

expect(result).toBe(true);
});

test('target value is Date string -> true', () => {
const result = greaterOrEqual(
{
key: 'birthday',
value: new Date('2015-05-15'),
type: SearchType.GT,
},
false,
searchDataDate,
);

expect(result).toBe(true);
});

test('target value is Date string -> false', () => {
const result = greaterOrEqual(
{
key: 'birthday',
value: new Date('2011-05-15'),
type: SearchType.GT,
},
false,
searchDataDate,
);

expect(result).toBe(false);
});
});
46 changes: 46 additions & 0 deletions __test__/filters/less.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ const searchDataArray = {
fullName: ['Ben', 'Jackson'],
};

const searchDataDate = {
birthday: '2012-03-24',
};

describe('test caseSensitive flag', () => {
test('caseSensitive=true(different alphabet case, compare to lowercase) -> true', () => {
const result = less(
Expand Down Expand Up @@ -141,4 +145,46 @@ describe('test searchCondition', () => {

expect(result).toBe(false);
});

test('target value is Date string same -> false', () => {
const result = less(
{
key: 'birthday',
value: new Date('2012-03-24'),
type: SearchType.GT,
},
false,
searchDataDate,
);

expect(result).toBe(false);
});

test('target value is Date string -> false', () => {
const result = less(
{
key: 'birthday',
value: new Date('2015-05-15'),
type: SearchType.GT,
},
false,
searchDataDate,
);

expect(result).toBe(false);
});

test('target value is Date string -> true', () => {
const result = less(
{
key: 'birthday',
value: new Date('2011-05-15'),
type: SearchType.GT,
},
false,
searchDataDate,
);

expect(result).toBe(true);
});
});
46 changes: 46 additions & 0 deletions __test__/filters/lessOrEqual.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ const searchDataArray = {
fullName: ['Ben', 'Jackson'],
};

const searchDataDate = {
birthday: '2012-03-24',
};

describe('test caseSensitive flag', () => {
test('caseSensitive=true(different alphabet case, compare to lowercase) -> true', () => {
const result = lessOrEqual(
Expand Down Expand Up @@ -155,4 +159,46 @@ describe('test searchCondition', () => {

expect(result).toBe(true);
});

test('target value is Date string same -> true', () => {
const result = lessOrEqual(
{
key: 'birthday',
value: new Date('2012-03-24'),
type: SearchType.GT,
},
false,
searchDataDate,
);

expect(result).toBe(true);
});

test('target value is Date string -> false', () => {
const result = lessOrEqual(
{
key: 'birthday',
value: new Date('2015-05-15'),
type: SearchType.GT,
},
false,
searchDataDate,
);

expect(result).toBe(false);
});

test('target value is Date string -> true', () => {
const result = lessOrEqual(
{
key: 'birthday',
value: new Date('2011-05-15'),
type: SearchType.GT,
},
false,
searchDataDate,
);

expect(result).toBe(true);
});
});
64 changes: 64 additions & 0 deletions __test__/filters/notEqual.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@ const searchDataArrayBoolean = {
married: [true, true],
};

const searchDataDate = {
registered: '2023-08-14T10:00:00.000Z',
};

const searchDataArrayDate = {
registered: ['2023-08-14T10:00:00.000Z', '2023-08-15T21:00:00.000Z'],
};

describe('test caseSensitive flag', () => {
test('caseSensitive=true(same string, different alphabet case) -> true', () => {
const result = notEqual(
Expand Down Expand Up @@ -251,4 +259,60 @@ describe('test searchCondition', () => {

expect(result).toBe(true);
});

test('target value is date string and search value is Date(same)', () => {
const result = notEqual(
{
key: 'registered',
value: new Date('2023-08-14T10:00:00.000Z'),
type: SearchType.EQ,
},
false,
searchDataDate,
);

expect(result).toBe(false);
});

test('target value is date string and search value is Date array(same)', () => {
const result = notEqual(
{
key: 'registered',
value: new Date('2023-08-15T21:00:00.000Z'),
type: SearchType.EQ,
},
false,
searchDataArrayDate,
);

expect(result).toBe(false);
});

test('target value is date string and search value is Date(different)', () => {
const result = notEqual(
{
key: 'registered',
value: new Date('2023-08-14T09:00:00.000Z'),
type: SearchType.EQ,
},
false,
searchDataDate,
);

expect(result).toBe(true);
});

test('target value is date string and search value is Date array(different)', () => {
const result = notEqual(
{
key: 'registered',
value: new Date('2023-08-15T10:00:00.000Z'),
type: SearchType.EQ,
},
false,
searchDataArrayDate,
);

expect(result).toBe(true);
});
});
Loading

0 comments on commit 4c804d5

Please sign in to comment.