blob: f862650a8b0b49e606bf01e372074eed738c5d86 [file] [edit]
// Copyright 2019 The Flutter 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 'dart:async';
import 'package:cocoon_common/rpc_model.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_dashboard/logic/brooks.dart';
import 'package:flutter_dashboard/service/cocoon.dart';
import 'package:flutter_dashboard/service/firebase_auth.dart';
import 'package:flutter_dashboard/service/scenarios.dart';
import 'package:flutter_dashboard/state/build.dart';
import 'package:flutter_dashboard/widgets/task_overlay.dart';
import 'mocks.dart';
class FakeBuildState extends ChangeNotifier implements BuildState {
FakeBuildState({
FirebaseAuthService? authService,
CocoonService? cocoonService,
this.statuses = const <CommitStatus>[],
this.moreStatusesExist = true,
this.rerunTaskResult = false,
}) : authService = authService ?? MockFirebaseAuthService(),
cocoonService = cocoonService ?? MockCocoonService();
@override
late FirebaseAuthService authService;
@override
final CocoonService cocoonService;
@override
Timer? refreshTimer;
@override
final ErrorSink errors = ErrorSink();
@override
bool? isTreeBuilding;
@override
Duration? get refreshRate => const Duration(seconds: 30);
@override
Future<bool> refreshGitHubCommits() async => false;
@override
Future<void> resetScenario(Scenario scenario) async {}
@override
Future<bool> rerunTask(Task task, Commit commit) async {
if (!rerunTaskResult) {
errors.send(TaskOverlayContents.rerunErrorMessage);
return false;
}
return true;
}
final bool rerunTaskResult;
@override
final List<CommitStatus> statuses;
@override
final bool moreStatusesExist;
@override
Future<void>? fetchMoreCommitStatuses() => null;
@override
List<Branch> get branches {
// TODO(matanlurey): Previously the channel names were implicitly empty,
// which meant the UI fit in a very small screen (Pixel 4-ish). To make
// these more "real" the build_dashboard_page_test.dart will need to be
// updated to have a larger UI *or* widget changes will need to be made to
// fit better on a mobile device.
return [
Branch(channel: '', reference: 'master'),
Branch(channel: '', reference: 'stable-release'),
Branch(
channel: '',
reference: 'release-very-long-name-that-should-be-truncated',
),
];
}
@override
String get currentBranch => _currentBranch;
String _currentBranch = 'master';
@override
List<String> get failingTasks => <String>[];
@override
String get currentRepo => _currentRepo;
String _currentRepo = 'flutter';
@override
List<String> get repos => <String>['flutter', 'cocoon'];
@override
Future<void> updateCurrentRepoBranch(String repo, String branch) async {
_currentBranch = branch;
_currentRepo = repo;
}
final _suppressedTests = <SuppressedTest>[];
set suppressedTests(List<SuppressedTest> value) {
_suppressedTests
..clear()
..addAll(value);
notifyListeners();
}
@override
List<SuppressedTest> get suppressedTests => [..._suppressedTests];
final updateTestSuppressionCalls =
<({String testName, bool suppress, String? issueLink, String? note})>[];
bool updateTestSuppressionResult = true;
/// If non-null, [updateTestSuppression] waits until this future completes.
Future<void>? pauseUpdateUntilCompleted;
@override
Future<bool> updateTestSuppression({
required String testName,
required bool suppress,
String? issueLink,
String? note,
}) async {
updateTestSuppressionCalls.add((
testName: testName,
suppress: suppress,
issueLink: issueLink,
note: note,
));
if (pauseUpdateUntilCompleted case final shouldPause?) {
await shouldPause;
}
return updateTestSuppressionResult;
}
}