Files
multi-agent-mux/.agents/skills/multi-agent-mux-ui/apps/mam_desktop/test/widget_test.dart
T

75 lines
2.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mam_core/mam_core.dart';
import 'package:mam_desktop/src/providers/session_providers.dart';
import 'package:mam_desktop/src/theme/app_theme.dart';
import 'package:mam_desktop/src/widgets/detail_pane.dart';
import 'package:mam_desktop/src/widgets/session_table.dart';
void main() {
testWidgets('SessionTable renders rows and drives selection', (tester) async {
final rows = [
SessionRow(
name: 'demo-session',
server: 'default',
status: 'running',
herdrAlive: true,
pane: const Pane(
pid: 123,
cwd: '/x',
cmd: 'claude',
cmdFull: 'claude --foo',
),
role: 'creator',
resumeState: 'yes',
jobId: '-',
jobStatus: '-',
attachCommand: 'herdr session attach demo-session',
driftClasses: const ['B'],
),
];
String? selected;
await tester.pumpWidget(
MaterialApp(
theme: buildAppTheme(),
home: Scaffold(
body: SessionTable(
sessions: rows,
selectedName: null,
onSelect: (name) => selected = name,
),
),
),
);
expect(find.text('demo-session'), findsOneWidget);
expect(find.text('running'), findsOneWidget);
await tester.tap(find.text('demo-session'));
await tester.pump();
expect(selected, 'demo-session');
});
testWidgets('DetailPane shows placeholder when nothing selected', (
tester,
) async {
await tester.pumpWidget(
MaterialApp(
theme: buildAppTheme(),
home: const Scaffold(body: DetailPane(session: null)),
),
);
expect(find.text('Select a session to see details'), findsOneWidget);
});
test('selectedSessionNameProvider defaults to null', () {
final container = ProviderContainer();
addTearDown(container.dispose);
expect(container.read(selectedSessionNameProvider), isNull);
});
}