Skip to content

Commit 809f340

Browse files
committed
Add support to .lte and .gte filters
1 parent 44913af commit 809f340

File tree

2 files changed

+84
-2
lines changed

2 files changed

+84
-2
lines changed

lib/src/mock_supabase_http_client.dart

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -573,10 +573,38 @@ class MockSupabaseHttpClient extends BaseClient {
573573
}
574574
} else if (postrestFilter.startsWith('gte.')) {
575575
final value = postrestFilter.substring(4);
576-
return (row) => row[columnName] >= num.tryParse(value);
576+
577+
if (DateTime.tryParse(value) != null) {
578+
final dateTime = DateTime.parse(value);
579+
580+
return (row) {
581+
final rowDate = DateTime.tryParse(row[columnName].toString());
582+
if (rowDate == null) return false;
583+
return rowDate.isAtSameMomentAs(dateTime) ||
584+
rowDate.isAfter(dateTime);
585+
};
586+
} else if (num.tryParse(value) != null) {
587+
return (row) => row[columnName] >= num.tryParse(value);
588+
} else {
589+
throw UnimplementedError('Unsupported value type');
590+
}
577591
} else if (postrestFilter.startsWith('lte.')) {
578592
final value = postrestFilter.substring(4);
579-
return (row) => row[columnName] <= num.tryParse(value);
593+
594+
if (DateTime.tryParse(value) != null) {
595+
final dateTime = DateTime.parse(value);
596+
597+
return (row) {
598+
final rowDate = DateTime.tryParse(row[columnName].toString());
599+
if (rowDate == null) return false;
600+
return rowDate.isAtSameMomentAs(dateTime) ||
601+
rowDate.isBefore(dateTime);
602+
};
603+
} else if (num.tryParse(value) != null) {
604+
return (row) => row[columnName] <= num.tryParse(value);
605+
} else {
606+
throw UnimplementedError('Unsupported value type');
607+
}
580608
} else if (postrestFilter.startsWith('like.')) {
581609
final value = postrestFilter.substring(5);
582610
final regex = RegExp(value.replaceAll('%', '.*'));

test/mock_supabase_test.dart

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,33 @@ void main() {
717717
expect(count, 2);
718718
});
719719

720+
test('count with gte. filter with datetime format', () async {
721+
await mockSupabase.from('data').insert([
722+
{
723+
'title': 'First post',
724+
'author_id': 1,
725+
'createdAt': '2021-08-01 11:26:15.307+00'
726+
},
727+
{
728+
'title': 'Second post',
729+
'author_id': 2,
730+
'createdAt': '2021-08-02 11:26:15.307+00'
731+
},
732+
{
733+
'title': 'Third post',
734+
'author_id': 1,
735+
'createdAt': '2021-08-03 11:26:15.307+00'
736+
}
737+
]);
738+
739+
final count = await mockSupabase
740+
.from('data')
741+
.count()
742+
.gte('createdAt', '2021-08-02 11:26:15.307+00');
743+
744+
expect(count, 2);
745+
});
746+
720747
test('count with lt filter with datetime format', () async {
721748
await mockSupabase.from('data').insert([
722749
{
@@ -743,6 +770,33 @@ void main() {
743770
expect(count, 2);
744771
});
745772

773+
test('count with lte. filter with datetime format', () async {
774+
await mockSupabase.from('data').insert([
775+
{
776+
'title': 'First post',
777+
'author_id': 1,
778+
'createdAt': '2021-08-01 11:26:15.307+00'
779+
},
780+
{
781+
'title': 'Second post',
782+
'author_id': 2,
783+
'createdAt': '2021-08-02 11:26:15.307+00'
784+
},
785+
{
786+
'title': 'Third post',
787+
'author_id': 1,
788+
'createdAt': '2021-08-03 11:26:15.307+00'
789+
}
790+
]);
791+
792+
final count = await mockSupabase
793+
.from('data')
794+
.count()
795+
.lte('createdAt', '2021-08-02 11:26:15.307+00');
796+
797+
expect(count, 2);
798+
});
799+
746800
test('count with data and filter', () async {
747801
await mockSupabase.from('posts').insert([
748802
{'title': 'First post', 'author_id': 1},

0 commit comments

Comments
 (0)