diff --git a/lib/src/mock_supabase_http_client.dart b/lib/src/mock_supabase_http_client.dart index c7543a7..0f80614 100644 --- a/lib/src/mock_supabase_http_client.dart +++ b/lib/src/mock_supabase_http_client.dart @@ -543,10 +543,34 @@ 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); + + 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 fac8626..ff97592 100644 --- a/test/mock_supabase_test.dart +++ b/test/mock_supabase_test.dart @@ -691,6 +691,58 @@ 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 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},