blob: c1ac0cdfcaa3e0399876ec3f45feae7cc3a9f8c6 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:fixnum/fixnum.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:cocoon_service/protos.dart' show Agent;
import 'package:app_flutter/agent_health_details.dart';
import 'package:app_flutter/agent_list.dart';
import 'package:app_flutter/agent_tile.dart';
import 'package:app_flutter/state/agent.dart';
void main() {
group('AgentTile', () {
final Agent agent = Agent()
..healthCheckTimestamp =
Int64.parseInt(DateTime.now().millisecondsSinceEpoch.toString())
..isHealthy = true
..healthDetails = '''
ssh-connectivity: succeeded
Last known IP address: 192.168.1.29
android-device-ZY223D6B7B: succeeded
has-healthy-devices: succeeded
Found 1 healthy devices
cocoon-authentication: succeeded
cocoon-connection: succeeded
able-to-perform-health-check: succeeded''';
final FullAgent fullAgent = FullAgent(agent, AgentHealthDetails(agent));
MockAgentState mockAgentState;
setUp(() {
mockAgentState = MockAgentState();
});
tearDown(() {
clearInteractions(mockAgentState);
});
testWidgets('raw health details dialog', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: AgentTile(
fullAgent: fullAgent,
),
),
),
);
// Open the agent tile menu
await tester.tap(find.byIcon(Icons.more_vert));
await tester.pumpAndSettle();
expect(find.text(agent.healthDetails), findsNothing);
expect(find.byType(SimpleDialog), findsNothing);
expect(find.text('Raw health details'), findsOneWidget);
await tester.tap(find.text('Raw health details'));
await tester.pump();
expect(find.byType(SimpleDialog), findsOneWidget);
expect(find.text(agent.healthDetails), findsOneWidget);
});
testWidgets('authorize agent calls api', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: AgentTile(
fullAgent: fullAgent,
agentState: mockAgentState,
),
),
);
// open the agent tile menu
await tester.tap(find.byIcon(Icons.more_vert));
await tester.pumpAndSettle();
verifyNever(mockAgentState.authorizeAgent(any));
expect(find.text('Authorize agent'), findsOneWidget);
await tester.tap(find.text('Authorize agent'));
await tester.pump();
verify(mockAgentState.authorizeAgent(any)).called(1);
});
testWidgets('reserve task calls api', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: AgentTile(
fullAgent: fullAgent,
agentState: mockAgentState,
),
),
),
);
// open the agent tile menu
await tester.tap(find.byIcon(Icons.more_vert));
await tester.pumpAndSettle();
verifyNever(mockAgentState.reserveTask(any));
expect(find.text('Reserve task'), findsOneWidget);
await tester.tap(find.text('Reserve task'));
await tester.pump();
verify(mockAgentState.reserveTask(any)).called(1);
});
testWidgets('agent info is shown', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: AgentTile(
fullAgent: fullAgent,
),
),
);
expect(find.byType(AgentHealthDetailsBar), findsOneWidget);
expect(find.byIcon(Icons.more_vert), findsOneWidget);
expect(find.byIcon(Icons.device_unknown), findsOneWidget);
});
});
}
class MockAgentState extends Mock implements AgentState {}