import 'package:flutter_test/flutter_test.dart'; import 'package:uvok_epaper_badge/extensions/list_ext.dart'; import 'test_device.dart'; void main() { group('ListExt.addOrReplaceKey with Device', () { test('adds device when no key matches', () { final list = [TestDevice(1, 'A'), TestDevice(2, 'B')]; final newDevice = TestDevice(3, 'C'); list.addOrReplaceKey(newDevice, keySelector: (d) => d.id); expect(list.length, 3); expect(list.contains(newDevice), isTrue); }); test('replaces device when key matches and no replaceCondition', () { final list = [TestDevice(1, 'A'), TestDevice(2, 'B')]; final replacement = TestDevice(2, 'Z'); list.addOrReplaceKey(replacement, keySelector: (d) => d.id); expect(list[1], equals(replacement)); }); test('does not replace when replaceCondition is false', () { final list = [TestDevice(1, 'A'), TestDevice(2, 'B')]; final attemptedReplace = TestDevice(2, 'Z'); list.addOrReplaceKey( attemptedReplace, keySelector: (d) => d.id, replaceCondition: (existing) => false, ); expect(list[1].name, equals('B')); }); test('replaces when replaceCondition is true', () { final list = [TestDevice(1, 'A'), TestDevice(2, 'B')]; final attemptedReplace = TestDevice(2, 'Z'); list.addOrReplaceKey( attemptedReplace, keySelector: (d) => d.id, replaceCondition: (existing) => true, ); expect(list[1], equals(attemptedReplace)); }); test('replaces only the first matching key', () { final list = [TestDevice(2, 'B1'), TestDevice(2, 'B2')]; final newDevice = TestDevice(2, 'B0'); list.addOrReplaceKey(newDevice, keySelector: (d) => d.id); expect(list[0], equals(newDevice)); expect(list[1].name, equals('B2')); }); }); }