import 'dart:convert'; import 'package:flutter_test/flutter_test.dart'; import 'package:stadtbote/model/job.dart'; void main() { group('Job map_url', () { test('erhält die Server-URL einschließlich Query und Fragment', () { const mapUrl = 'https://vhs.example.invalid/map?job=21891302#courier'; final payload = _jobPayload()..['map_url'] = mapUrl; final job = Job.fromJson(payload); final serialized = jsonDecode(jsonEncode(job.toJson())) as Map; final restored = Job.fromJson(serialized); expect(job.mapUrl, mapUrl); expect(serialized['map_url'], mapUrl); expect(restored.mapUrl, mapUrl); expect(restored.externalId, 21891302); }); test('liest ältere Aufträge ohne map_url weiterhin ein', () { final job = Job.fromJson(_jobPayload()); final restored = Job.fromJson(job.toJson()); expect(job.mapUrl, isNull); expect(restored.mapUrl, isNull); expect(restored.externalId, 21891302); }); test('akzeptiert eine explizit fehlende map_url', () { final payload = _jobPayload()..['map_url'] = null; expect(Job.fromJson(payload).mapUrl, isNull); }); }); } Map _jobPayload() => { 'id': 21891302, 'ver': '0', 'state': 0, 'ordertime': 1791285073, 'offs_warn': 0, 'global': false, 'vht_id': 2, 'rem': '', 'delayOrderTime': 0, 'tours': >[], };