blob: b2e12e149b085924d98d81c3168a20133a29b9bc [file] [log] [blame]
// Copyright 2022 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:convert';
import 'package:auto_submit/service/github_service.dart';
import 'package:github/github.dart';
import 'package:shelf/src/response.dart';
import '../../utilities/mocks.dart';
/// A fake GithubService implementation.
class FakeGithubService implements GithubService {
FakeGithubService({
MockGitHub? client,
String? checkRunsMock,
String? commitMock,
String? compareTwoCommitsMock,
String? successMergeMock,
String? createCommentMock,
String? pullRequestMergeMock,
}) : github = client ?? MockGitHub();
@override
final MockGitHub github;
String? checkRunsMock;
String? commitMock;
String? compareTwoCommitsMock;
String? successMergeMock;
String? createCommentMock;
String? pullRequestMergeMock;
IssueComment? issueComment;
bool labelRemoved = false;
set checkRunsData(String? checkRunsMock) {
this.checkRunsMock = checkRunsMock;
}
set commitData(String? commitMock) {
this.commitMock = commitMock;
}
set compareTwoCommitsData(String? compareTwoCommitsMock) {
this.compareTwoCommitsMock = compareTwoCommitsMock;
}
set successMergeData(String? successMergeMock) {
this.successMergeMock = successMergeMock;
}
set createCommentData(String? createCommentMock) {
this.createCommentMock = createCommentMock;
}
set pullRequestMergeData(String? pullRequestMergeMock) {
this.pullRequestMergeMock = pullRequestMergeMock;
}
@override
Future<List<CheckRun>> getCheckRuns(
RepositorySlug slug,
String ref,
) async {
final rawBody = json.decode(checkRunsMock!) as Map<String, dynamic>;
final List<dynamic> checkRunsBody = rawBody["check_runs"]! as List<dynamic>;
List<CheckRun> checkRuns = <CheckRun>[];
if ((checkRunsBody[0] as Map<String, dynamic>).isNotEmpty) {
checkRuns.addAll(
checkRunsBody.map((dynamic checkRun) => CheckRun.fromJson(checkRun as Map<String, dynamic>)).toList());
}
return checkRuns;
}
@override
Future<RepositoryCommit> getCommit(RepositorySlug slug, String sha) async {
final RepositoryCommit commit = RepositoryCommit.fromJson(jsonDecode(commitMock!) as Map<String, dynamic>);
return commit;
}
@override
Future<GitHubComparison> compareTwoCommits(RepositorySlug slug, String refBase, String refHead) async {
final GitHubComparison githubComparison =
GitHubComparison.fromJson(jsonDecode(compareTwoCommitsMock!) as Map<String, dynamic>);
return githubComparison;
}
@override
Future<bool> removeLabel(RepositorySlug slug, int issueNumber, String label) async {
labelRemoved = true;
return labelRemoved;
}
@override
Future<IssueComment> createComment(RepositorySlug slug, int number, String commentBody) async {
issueComment = IssueComment.fromJson(jsonDecode(createCommentMock!) as Map<String, dynamic>);
return issueComment!;
}
@override
Future<bool> updateBranch(RepositorySlug slug, int number, String headSha) async {
return true;
}
@override
Future<Response> autoMergeBranch(PullRequest pullRequest) {
// TODO: implement autoMergeBranch
throw UnimplementedError();
}
}