diff --git a/packages/powersync_core/lib/src/sync/sync_status.dart b/packages/powersync_core/lib/src/sync/sync_status.dart index 61ae7c5f..86ab3fee 100644 --- a/packages/powersync_core/lib/src/sync/sync_status.dart +++ b/packages/powersync_core/lib/src/sync/sync_status.dart @@ -199,7 +199,42 @@ final class SyncStatus { @override String toString() { - return "SyncStatus"; + final buffer = StringBuffer('SyncStatus<'); + var first = true; + void addProperty(String name, Object? value) { + if (!first) { + buffer.write(' '); + } + + buffer.write('$name: $value'); + first = false; + } + + if (connected) { + addProperty('connected', connected); + } else if (connecting) { + addProperty('connected', 'connecting'); + } else { + addProperty('connected', 'offline (not connecting)'); + } + + addProperty('downloading', '$downloading (progress: $downloadProgress)'); + addProperty('uploading', uploading); + addProperty('lastSyncedAt', lastSyncedAt); + addProperty('hasSynced', hasSynced); + + if (downloadError case final downloadError?) { + addProperty('downloadError', downloadError); + } + if (uploadError case final uploadError?) { + addProperty('uploadError', uploadError); + } + if (downloadError == null && uploadError == null) { + addProperty('error', null); + } + + buffer.write('>'); + return buffer.toString(); } static const _listEquality = ListEquality(); diff --git a/packages/powersync_core/test/sync/sync_status_test.dart b/packages/powersync_core/test/sync/sync_status_test.dart new file mode 100644 index 00000000..499c1fd5 --- /dev/null +++ b/packages/powersync_core/test/sync/sync_status_test.dart @@ -0,0 +1,41 @@ +import 'package:powersync_core/powersync_core.dart'; +import 'package:test/test.dart'; + +void main() { + group('SyncStatus.toString', () { + test('default', () { + expect(SyncStatus().toString(), + 'SyncStatus'); + }); + + test('connection status', () { + expect(SyncStatus(connected: true).toString(), + contains('SyncStatus