From aefb81afafaa0faae68431a519f80a1d10dc2c02 Mon Sep 17 00:00:00 2001 From: Claudio Moscoso Date: Wed, 16 Oct 2024 14:13:19 +1300 Subject: [PATCH 1/2] Add support to datetime on gt. filter --- lib/src/mock_supabase_http_client.dart | 14 +++++++++++++- test/mock_supabase_test.dart | 26 ++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/src/mock_supabase_http_client.dart b/lib/src/mock_supabase_http_client.dart index c7543a7..af6982d 100644 --- a/lib/src/mock_supabase_http_client.dart +++ b/lib/src/mock_supabase_http_client.dart @@ -543,7 +543,19 @@ class MockSupabaseHttpClient extends BaseClient { return (row) => row[columnName].toString() != value; } else if (postrestFilter.startsWith('gt.')) { final value = postrestFilter.substring(3); - return (row) => row[columnName] > num.tryParse(value); + + if (DateTime.tryParse(value) != null) { + final dateTime = DateTime.parse(value); + + return (row) { + final rowDate = DateTime.tryParse(row[columnName].toString()); + return rowDate != null && rowDate.isAfter(dateTime); + }; + } else if (num.tryParse(value) != null) { + return (row) => row[columnName] > num.tryParse(value); + } else { + throw UnimplementedError('Unsupported value type'); + } } else if (postrestFilter.startsWith('lt.')) { final value = postrestFilter.substring(3); return (row) => row[columnName] < num.tryParse(value); diff --git a/test/mock_supabase_test.dart b/test/mock_supabase_test.dart index fac8626..a4a1fea 100644 --- a/test/mock_supabase_test.dart +++ b/test/mock_supabase_test.dart @@ -691,6 +691,32 @@ void main() { expect(count, 2); }); + test('count with gt filter with datetime format', () async { + await mockSupabase.from('data').insert([ + { + 'title': 'First post', + 'author_id': 1, + 'createdAt': '2021-08-01 11:26:15.307+00' + }, + { + 'title': 'Second post', + 'author_id': 2, + 'createdAt': '2021-08-02 11:26:15.307+00' + }, + { + 'title': 'Third post', + 'author_id': 1, + 'createdAt': '2021-08-03 11:26:15.307+00' + } + ]); + final count = await mockSupabase + .from('data') + .count() + .gt('createdAt', '2021-08-02 10:26:15.307+00'); + + expect(count, 2); + }); + test('count with data and filter', () async { await mockSupabase.from('posts').insert([ {'title': 'First post', 'author_id': 1}, From 44913afebb54afc7767c486ebd66524800e9af3a Mon Sep 17 00:00:00 2001 From: Claudio Moscoso Date: Wed, 16 Oct 2024 15:57:17 +1300 Subject: [PATCH 2/2] Refactor lt filter to support datetime values --- lib/src/mock_supabase_http_client.dart | 14 +++++++++++++- test/mock_supabase_test.dart | 26 ++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/src/mock_supabase_http_client.dart b/lib/src/mock_supabase_http_client.dart index af6982d..0f80614 100644 --- a/lib/src/mock_supabase_http_client.dart +++ b/lib/src/mock_supabase_http_client.dart @@ -558,7 +558,19 @@ class MockSupabaseHttpClient extends BaseClient { } } else if (postrestFilter.startsWith('lt.')) { final value = postrestFilter.substring(3); - return (row) => row[columnName] < num.tryParse(value); + + if (DateTime.tryParse(value) != null) { + final dateTime = DateTime.parse(value); + + return (row) { + final rowDate = DateTime.tryParse(row[columnName].toString()); + return rowDate != null && rowDate.isBefore(dateTime); + }; + } else if (num.tryParse(value) != null) { + return (row) => row[columnName] < num.tryParse(value); + } else { + throw UnimplementedError('Unsupported value type'); + } } else if (postrestFilter.startsWith('gte.')) { final value = postrestFilter.substring(4); return (row) => row[columnName] >= num.tryParse(value); diff --git a/test/mock_supabase_test.dart b/test/mock_supabase_test.dart index a4a1fea..ff97592 100644 --- a/test/mock_supabase_test.dart +++ b/test/mock_supabase_test.dart @@ -717,6 +717,32 @@ void main() { expect(count, 2); }); + test('count with lt filter with datetime format', () async { + await mockSupabase.from('data').insert([ + { + 'title': 'First post', + 'author_id': 1, + 'createdAt': '2021-08-01 11:26:15.307+00' + }, + { + 'title': 'Second post', + 'author_id': 2, + 'createdAt': '2021-08-02 11:26:15.307+00' + }, + { + 'title': 'Third post', + 'author_id': 1, + 'createdAt': '2021-08-03 11:26:15.307+00' + } + ]); + final count = await mockSupabase + .from('data') + .count() + .lt('createdAt', '2021-08-02 12:26:15.307+00'); + + expect(count, 2); + }); + test('count with data and filter', () async { await mockSupabase.from('posts').insert([ {'title': 'First post', 'author_id': 1},