import 'package:consumer_app/core/navigation/canonical_module_routes.dart';
import 'package:consumer_app/core/config/app_config.dart';
import 'package:consumer_app/models/content_models.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
test('defines one canonical route for every public discovery module', () {
expect(
CanonicalModuleRoutes.ids,
containsAll(<String>[
'places',
'services',
'events',
'classifieds',
'jobs',
'real-estate',
]),
);
expect(
CanonicalModuleRoutes.ids.toSet().length,
CanonicalModuleRoutes.ids.length,
);
expect(
CanonicalModuleRoutes.ids
.map(CanonicalModuleRoutes.pathFor)
.whereType<String>()
.toSet()
.length,
CanonicalModuleRoutes.ids.length,
);
expect(
CanonicalModuleRoutes.fallbackPrimaryIds,
containsAll(<String>[
'places',
'events',
'map',
'classifieds',
'jobs',
'real-estate',
]),
);
});
test('navigation defaults reuse the canonical path constants', () {
final defaults = {
for (final item in NavigationItem.defaults) item.id: item.route,
};
for (final id in CanonicalModuleRoutes.ids) {
expect(defaults[id], CanonicalModuleRoutes.pathFor(id));
}
});
test(
'does not treat navigation-only surfaces as duplicate content routes',
() {
expect(CanonicalModuleRoutes.contains('map'), isFalse);
expect(CanonicalModuleRoutes.contains('saved'), isFalse);
expect(CanonicalModuleRoutes.contains('community'), isFalse);
},
);
test('keeps editorial resources outside the shared geo surface', () {
expect(CanonicalModuleRoutes.isGeoResource('news'), isFalse);
expect(CanonicalModuleRoutes.isGeoResource('guides'), isFalse);
expect(CanonicalModuleRoutes.isGeoResource('places'), isTrue);
});
test('fallback module definitions preserve canonical content ids', () {
for (final id in CanonicalModuleRoutes.ids) {
final fallback = ResourceDefinition(
id: id,
label: '',
endpoint: '',
geo: true,
);
expect(fallback.id, id);
expect(CanonicalModuleRoutes.pathFor(fallback.id), isNotNull);
}
});
test('resolves path and hash deep links to the canonical module', () {
for (final id in CanonicalModuleRoutes.ids) {
expect(
CanonicalModuleRoutes.idForPath(CanonicalModuleRoutes.pathFor(id)),
id,
);
}
expect(CanonicalModuleRoutes.idForPath('/immobilien/'), 'real-estate');
expect(CanonicalModuleRoutes.idForPath('/#/kleinanzeigen/'), 'classifieds');
expect(
CanonicalModuleRoutes.idForPath(
'https://app.example.test/jobs/?category=it-tech',
),
'jobs',
);
expect(CanonicalModuleRoutes.idForPath('/unknown/'), isNull);
expect(CanonicalModuleRoutes.idForPath('/'), isNull);
});
}
