Files
deflock-app/test/services/node_spatial_cache_test.dart
T

66 lines
1.9 KiB
Dart

import 'package:deflockapp/models/osm_node.dart';
import 'package:deflockapp/services/node_spatial_cache.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:latlong2/latlong.dart';
void main() {
group('NodeSpatialCache constrained flag', () {
setUp(() {
// NodeSpatialCache is a singleton - start each test from a clean slate.
NodeSpatialCache().clear();
});
test('stays constrained after an update that omits the flag', () {
final cache = NodeSpatialCache();
const nodeId = 123;
cache.addOrUpdateNodes([
OsmNode(
id: nodeId,
coord: const LatLng(0, 0),
tags: const {},
isConstrained: true,
),
]);
// Simulate what happens after an edit upload succeeds: a brand-new
// OsmNode is built from upload data, which has no way/relation
// information and so defaults isConstrained to false.
cache.addOrUpdateNodes([
OsmNode(
id: nodeId,
coord: const LatLng(1, 1),
tags: const {'amenity': 'surveillance'},
),
]);
final updated = cache.getNodeById(nodeId);
expect(updated, isNotNull);
expect(updated!.isConstrained, isTrue);
// Non-constraint fields should still be updated as normal.
expect(updated.coord, const LatLng(1, 1));
expect(updated.tags['amenity'], 'surveillance');
});
test('becomes constrained if a later update says it is', () {
final cache = NodeSpatialCache();
const nodeId = 456;
cache.addOrUpdateNodes([
OsmNode(id: nodeId, coord: const LatLng(0, 0), tags: const {}),
]);
cache.addOrUpdateNodes([
OsmNode(
id: nodeId,
coord: const LatLng(0, 0),
tags: const {},
isConstrained: true,
),
]);
expect(cache.getNodeById(nodeId)!.isConstrained, isTrue);
});
});
}