75 lines
2.0 KiB
Dart
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);
|
|
});
|
|
}
|