Recl∆Im — the F∆I product line for Pflicht-basierte
Wirkungsanalyse und Reform-Vorschlags-Pipelines. Replaces the
working title 'Law-Heatmap', which described the demo view
rather than the platform. Heatmap, Norms list, Hub view,
Methodik are now four panes of the same Recl∆Im app.
Renames in this commit:
Flutter package lawheatmap_app -> reclaim_app
macOS bundle id ai.flemming.lawheatmapApp -> ai.flemming.reclaim
macOS PRODUCT_NAME lawheatmap_app -> reclaim_app
Theme tokens LawHeatmapColors/Space/Radius/Typography/Theme
-> Reclaim*
Surface card LawHeatmapCard -> ReclaimCard
Top-level widget LawHeatmapApp -> ReclaimApp
Theme files lawheatmap_theme.dart/lawheatmap_tokens.dart
-> reclaim_theme.dart/reclaim_tokens.dart
Widget file lawheatmap_card.dart -> reclaim_card.dart
Build script build-macos.sh paths and headline string
Docs MACHBARKEITSSTUDIE.md, METHODIK.md, RUN.md,
app/README.md, flow YAML
UI strings 'F∆I Law-Heatmap' / 'Law-Heatmap'
-> 'Recl∆Im' / 'Recl∆Im (F∆I)' for vendor-
prefixed contexts
flutter analyze: clean. flutter test: 2/2 passing.
The local working directory stays fai_lawheatmap/ for now —
the dir is referenced by the .claude project metadata; renaming
it would break session continuity for no real gain. The Forgejo
repo was renamed via API in the same change-set (fai/lawheatmap
-> fai/reclaim), with the legacy slug serving a redirect
courtesy of Forgejo's built-in rename handling.
Signed-off-by: flemming-it <sf@flemming.it>
44 lines
1.4 KiB
Dart
44 lines
1.4 KiB
Dart
// Smoke tests — boot the app, navigate to the shell, verify
|
|
// each rail destination renders without throwing.
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
import 'package:reclaim_app/main.dart';
|
|
|
|
void main() {
|
|
// Generous surface so NavigationRail + Heatmap fit without
|
|
// overflow warnings.
|
|
const surfaceSize = Size(1400, 900);
|
|
|
|
setUp(() {
|
|
TestWidgetsFlutterBinding.ensureInitialized();
|
|
});
|
|
|
|
testWidgets('Landing renders brand mark + CTA',
|
|
(WidgetTester tester) async {
|
|
await tester.binding.setSurfaceSize(surfaceSize);
|
|
await tester.pumpWidget(const ReclaimApp());
|
|
await tester.pump();
|
|
expect(find.text('Recl∆Im'), findsOneWidget);
|
|
expect(
|
|
find.widgetWithText(FilledButton, 'App öffnen (Demo-Modus)'),
|
|
findsOneWidget,
|
|
);
|
|
await tester.pumpWidget(const SizedBox.shrink());
|
|
});
|
|
|
|
testWidgets('Tapping CTA reaches the shell and shows the heatmap',
|
|
(WidgetTester tester) async {
|
|
await tester.binding.setSurfaceSize(surfaceSize);
|
|
await tester.pumpWidget(const ReclaimApp());
|
|
await tester.pump();
|
|
await tester.tap(
|
|
find.widgetWithText(FilledButton, 'App öffnen (Demo-Modus)'),
|
|
);
|
|
await tester.pump();
|
|
await tester.pump(const Duration(milliseconds: 600));
|
|
expect(find.text('Heatmap'), findsWidgets);
|
|
await tester.pumpWidget(const SizedBox.shrink());
|
|
});
|
|
}
|