import 'package:flat_buffers/flat_buffers.dart' as fb; import 'package:flutter_test/flutter_test.dart'; import 'package:objectbox/internal.dart' show EntityDefinition; import 'package:stadtbote/model/chat_message.dart'; import 'package:stadtbote/objectbox.g.dart'; void main() { group('ChatMessage IDs', () { test('initialisiert ausgehende Nachrichten vollständig', () { final message = _outgoingMessage(); expect(message.id, 0); expect(message.toJson(), { 'id': 42, 'time': 1791366832, 'from': 'courier-123', 'subj': '', 'text': 'Auftrag erledigt', 'read': true, }); }); test('serialisiert ausgehende Nachrichten für ObjectBox ohne Fehler', () { final message = _outgoingMessage(); final definition = getObjectBoxModel().bindings[ChatMessage]! as EntityDefinition; final builder = fb.Builder(); expect(definition.objectToFB(message, builder), 0); final buffer = fb.BufferContext.fromBytes(builder.buffer); final root = buffer.derefObject(0); const intReader = fb.Int64Reader(); const stringReader = fb.StringReader(); expect(intReader.vTableGet(buffer, root, 4, -1), 0); expect(intReader.vTableGet(buffer, root, 6, -1), 42); expect(intReader.vTableGet(buffer, root, 8, -1), 1791366832); expect(stringReader.vTableGet(buffer, root, 10, ''), 'courier-123'); expect(stringReader.vTableGet(buffer, root, 12, 'missing'), ''); expect(stringReader.vTableGet(buffer, root, 14, ''), 'Auftrag erledigt'); expect(const fb.BoolReader().vTableGet(buffer, root, 16, false), isTrue); }); test('verwendet nach lokaler ID-Vergabe weiterhin die Nachrichten-ID', () { final message = _outgoingMessage(); final definition = getObjectBoxModel().bindings[ChatMessage]! as EntityDefinition; definition.setId(message, 99); expect(message.id, 99); expect(message.externalId, 42); expect(message.toJson()['id'], 42); }); test('übernimmt empfangene Server-IDs getrennt von der lokalen ID', () { final message = ChatMessage.fromJson({ 'id': 21891302, 'time': 1791366832, 'from': 'Zentrale', 'subj': 'Rückfrage', 'text': 'Bitte melden', }); expect(message.id, 0); expect(message.externalId, 21891302); expect(message.read, isFalse); expect(message.toJson(), { 'id': 21891302, 'time': 1791366832, 'from': 'Zentrale', 'subj': 'Rückfrage', 'text': 'Bitte melden', 'read': false, }); }); }); } ChatMessage _outgoingMessage() => ChatMessage.outgoing( externalId: 42, time: 1791366832, from: 'courier-123', text: 'Auftrag erledigt', );