import 'package:flutter_test/flutter_test.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:tasq/providers/typing_provider.dart'; void main() { test( 'TypingIndicatorController ignores late remote events after dispose', () async { final client = SupabaseClient('http://localhost', 'test-key'); final controller = TypingIndicatorController(client, 'ticket-1'); // initial state should be empty expect(controller.state.userIds, isEmpty); // Simulate a remote "start typing" arriving while alive controller.debugSimulateRemoteTyping('user-2'); expect(controller.state.userIds, contains('user-2')); // Dispose the controller controller.dispose(); // Calling the remote handlers after dispose must NOT throw and must be no-ops expect( () => controller.debugSimulateRemoteTyping('user-3'), returnsNormally, ); expect( () => controller.debugSimulateRemoteTyping('user-2', stop: true), returnsNormally, ); // Ensure state was not modified after dispose expect(controller.mounted, isFalse); }, ); }