blob: 3aa4c1db7694a6d19405baa3573e30c2bdf225d3 [file] [log] [blame]
// 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_service/src/service/datastore.dart';
import 'package:meta/meta.dart';
import '../datastore/cocoon_config.dart';
import '../model/appengine/task.dart';
import '../request_handling/body.dart';
import '../request_handling/request_handler.dart';
import '../service/build_status_provider.dart';
const Map<BuildStatus, String> _buildStatusLookup = <BuildStatus, String>{
BuildStatus.succeeded: Task.statusSucceeded,
BuildStatus.failed: Task.statusFailed,
};
@immutable
class GetBuildStatus extends RequestHandler<Body> {
const GetBuildStatus(
Config config, {
@visibleForTesting DatastoreServiceProvider datastoreProvider,
@visibleForTesting BuildStatusServiceProvider buildStatusProvider,
}) : datastoreProvider =
datastoreProvider ?? DatastoreService.defaultProvider,
buildStatusProvider =
buildStatusProvider ?? BuildStatusService.defaultProvider,
super(config: config);
final DatastoreServiceProvider datastoreProvider;
final BuildStatusServiceProvider buildStatusProvider;
static const String branchParam = 'branch';
@override
Future<Body> get() async {
final DatastoreService datastore = datastoreProvider(config.db);
final BuildStatusService buildStatusService =
buildStatusProvider(datastore);
final String branch = request.uri.queryParameters[branchParam] ?? 'master';
final BuildStatus status =
await buildStatusService.calculateCumulativeStatus(branch: branch);
return Body.forJson(<String, dynamic>{
'AnticipatedBuildStatus': _buildStatusLookup[status],
});
}
}