From 48558ad585bb6f600cb078f54061f4e541db0db9 Mon Sep 17 00:00:00 2001 From: Jermaine Date: Thu, 27 Feb 2025 20:01:18 -0500 Subject: [PATCH 1/5] fix: :bug: error on select after update Track updated rows and return with response Fixes #16 --- lib/src/mock_supabase_http_client.dart | 6 +++++- test/mock_supabase_http_client_test.dart | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/src/mock_supabase_http_client.dart b/lib/src/mock_supabase_http_client.dart index d90c7d8..11e82da 100644 --- a/lib/src/mock_supabase_http_client.dart +++ b/lib/src/mock_supabase_http_client.dart @@ -373,18 +373,22 @@ class MockSupabaseHttpClient extends BaseClient { final queryParams = request.url.queryParameters; var updated = false; + // Track updated rows + final updatedRows = []; + // Update items that match the filters if (_database.containsKey(tableKey)) { for (var row in _database[tableKey]!) { if (_matchesFilters(row: row, filters: queryParams)) { row.addAll(data); updated = true; + updatedRows.add(row); } } } if (updated) { - return _createResponse(data, request: request); + return _createResponse(updatedRows, request: request); } else { return _createResponse({'error': 'Not found'}, statusCode: 404, request: request); diff --git a/test/mock_supabase_http_client_test.dart b/test/mock_supabase_http_client_test.dart index e492045..0d76215 100644 --- a/test/mock_supabase_http_client_test.dart +++ b/test/mock_supabase_http_client_test.dart @@ -63,6 +63,20 @@ void main() { expect(posts.first, {'id': 1, 'title': 'Updated title'}); }); + test('Update then select', () async { + // Test updating a record + await mockSupabase + .from('posts') + .insert({'id': 1, 'title': 'Original title'}); + final posts = await mockSupabase + .from('posts') + .update({'title': 'Updated title'}) + .eq('id', 1) + .select(); + expect(posts.length, 1); + expect(posts.first, {'id': 1, 'title': 'Updated title'}); + }); + test('Delete', () async { // Test deleting a record await mockSupabase From 1dc1ae5bf6ec28c0c400926b13ea47141d7d4a00 Mon Sep 17 00:00:00 2001 From: Jermaine Date: Thu, 27 Feb 2025 20:09:50 -0500 Subject: [PATCH 2/5] fix: :bug: error on select after delete Track removed rows and return with response Fixes #16 --- lib/src/mock_supabase_http_client.dart | 12 +++++++++--- test/mock_supabase_http_client_test.dart | 11 +++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/src/mock_supabase_http_client.dart b/lib/src/mock_supabase_http_client.dart index 11e82da..2c554a5 100644 --- a/lib/src/mock_supabase_http_client.dart +++ b/lib/src/mock_supabase_http_client.dart @@ -468,12 +468,18 @@ class MockSupabaseHttpClient extends BaseClient { statusCode: 400, request: request); } + List removedItems = []; if (_database.containsKey(tableKey)) { - _database[tableKey]!.removeWhere( - (row) => _matchesFilters(row: row, filters: queryParams)); + _database[tableKey]!.removeWhere((row) { + final matched = _matchesFilters(row: row, filters: queryParams); + if (matched) { + removedItems.add(row); + } + return matched; + }); } - return _createResponse({'message': 'Deleted'}, request: request); + return _createResponse(removedItems, request: request); } StreamedResponse _handleSelect( diff --git a/test/mock_supabase_http_client_test.dart b/test/mock_supabase_http_client_test.dart index 0d76215..23c761d 100644 --- a/test/mock_supabase_http_client_test.dart +++ b/test/mock_supabase_http_client_test.dart @@ -86,6 +86,17 @@ void main() { final posts = await mockSupabase.from('posts').select(); expect(posts.length, 0); }); + + test('Delete then select', () async { + // Test deleting a record + await mockSupabase + .from('posts') + .insert({'id': 1, 'title': 'To be deleted'}); + final posts = + await mockSupabase.from('posts').delete().eq('id', 1).select(); + expect(posts.length, 1); + }); + test('Select all columns', () async { // Test selecting all records await mockSupabase.from('posts').insert([ From 8c3d84df94fc8cb0fdd8263b3ae60d0d05d5e8e2 Mon Sep 17 00:00:00 2001 From: Jermaine Date: Thu, 27 Feb 2025 20:36:03 -0500 Subject: [PATCH 3/5] test: check that items can no longer be selected after delete --- test/mock_supabase_http_client_test.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/mock_supabase_http_client_test.dart b/test/mock_supabase_http_client_test.dart index 23c761d..dec3cf3 100644 --- a/test/mock_supabase_http_client_test.dart +++ b/test/mock_supabase_http_client_test.dart @@ -92,9 +92,11 @@ void main() { await mockSupabase .from('posts') .insert({'id': 1, 'title': 'To be deleted'}); - final posts = + final deleted = await mockSupabase.from('posts').delete().eq('id', 1).select(); - expect(posts.length, 1); + expect(deleted.length, 1); + final posts = await mockSupabase.from('posts').select(); + expect(posts.length, 0); }); test('Select all columns', () async { From 606e847ee816ec1c4f995190de6d00312bb91229 Mon Sep 17 00:00:00 2001 From: Jermaine Date: Thu, 27 Feb 2025 20:41:11 -0500 Subject: [PATCH 4/5] test: select after upsert --- test/mock_supabase_http_client_test.dart | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/mock_supabase_http_client_test.dart b/test/mock_supabase_http_client_test.dart index dec3cf3..2d680f5 100644 --- a/test/mock_supabase_http_client_test.dart +++ b/test/mock_supabase_http_client_test.dart @@ -50,6 +50,20 @@ void main() { expect(postsUfterUpdate.first, {'id': 1, 'title': 'Updated post'}); }); + test('Upsert then select', () async { + // Test upserting a record + await mockSupabase + .from('posts') + .upsert({'id': 1, 'title': 'Initial post'}); + final posts = await mockSupabase.from('posts').select(); + expect(posts.first, {'id': 1, 'title': 'Initial post'}); + final postsAfterUpdate = await mockSupabase + .from('posts') + .upsert({'id': 1, 'title': 'Updated post'}).select(); + expect(postsAfterUpdate.length, 1); + expect(postsAfterUpdate.first, {'id': 1, 'title': 'Updated post'}); + }); + test('Update', () async { // Test updating a record await mockSupabase From b0116c684b1d686bc1b79653c79a91457b069aa2 Mon Sep 17 00:00:00 2001 From: Jermaine Date: Thu, 27 Feb 2025 20:47:42 -0500 Subject: [PATCH 5/5] fix: :bug: error on select after insert Always return inserted record(s) as list with response Fixes #16 --- lib/src/mock_supabase_http_client.dart | 3 ++- test/mock_supabase_http_client_test.dart | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/src/mock_supabase_http_client.dart b/lib/src/mock_supabase_http_client.dart index 2c554a5..ebeab1c 100644 --- a/lib/src/mock_supabase_http_client.dart +++ b/lib/src/mock_supabase_http_client.dart @@ -338,9 +338,10 @@ class MockSupabaseHttpClient extends BaseClient { if (!_database.containsKey(tableKey)) { _database[tableKey] = []; } + if (data is Map) { _database[tableKey]!.add(data); - return _createResponse(data, request: request); + return _createResponse([data], request: request); } else if (data is List) { final List> items = List>.from(data); diff --git a/test/mock_supabase_http_client_test.dart b/test/mock_supabase_http_client_test.dart index 2d680f5..63a158d 100644 --- a/test/mock_supabase_http_client_test.dart +++ b/test/mock_supabase_http_client_test.dart @@ -35,6 +35,15 @@ void main() { expect(posts.first, {'title': 'Hello, world!'}); }); + test('Insert then select', () async { + // Test inserting a record + final posts = await mockSupabase + .from('posts') + .insert({'title': 'Hello, world!'}).select(); + expect(posts.length, 1); + expect(posts.first, {'title': 'Hello, world!'}); + }); + test('Upsert', () async { // Test upserting a record await mockSupabase