Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions auto_submit/lib/action/git_cli_revert_method.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'dart:io';

import 'package:cocoon_server/logging.dart';
import 'package:github/github.dart' as github;
import 'package:meta/meta.dart';
import 'package:retry/retry.dart';

import '../git/cli_command.dart';
Expand All @@ -19,6 +20,11 @@ import '../service/github_service.dart';
import 'revert_method.dart';

class GitCliRevertMethod implements RevertMethod {
GitCliRevertMethod({
@visibleForTesting GitCli? gitCli, //
}) : _gitCli = gitCli ?? GitCli(GitAccessMethod.HTTP, CliCommand());
final GitCli _gitCli;

@override
Future<github.PullRequest?> createRevert(
Config config,
Expand All @@ -30,17 +36,14 @@ class GitCliRevertMethod implements RevertMethod {
final commitSha = pullRequestToRevert.mergeCommitSha!;
// we will need to collect the pr number after the revert request is generated.

final repositoryConfiguration = await config.getRepositoryConfiguration(
slug,
);
final baseBranch = repositoryConfiguration.defaultBranch;
final baseBranch = pullRequestToRevert.base!.ref!;

final cloneToDirectory = '${slug.name}_$commitSha';
final gitRepositoryManager = GitRepositoryManager(
slug: slug,
workingDirectory: Directory.current.path,
cloneToDirectory: cloneToDirectory,
gitCli: GitCli(GitAccessMethod.HTTP, CliCommand()),
gitCli: _gitCli,
);

// The exception is caught by the thrower.
Expand Down
163 changes: 163 additions & 0 deletions auto_submit/test/action/git_cli_revert_method_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
// Copyright 2023 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:io';

import 'package:auto_submit/action/git_cli_revert_method.dart';
import 'package:auto_submit/git/git_cli.dart';
import 'package:auto_submit/service/config.dart';
import 'package:auto_submit/service/github_service.dart';
import 'package:cocoon_server_test/test_logging.dart';
import 'package:github/src/common/model/pulls.dart';
import 'package:github/src/common/model/repos.dart';
import 'package:test/fake.dart';
import 'package:test/test.dart';

import '../requests/github_webhook_test_data.dart';

void main() {
useTestLoggerPerTest();

late _FakeGitCli gitCli;

setUp(() {
gitCli = _FakeGitCli();
});

test('createRevert uses the branch from the originating PR', () async {
final config = _FakeConfig();
final method = GitCliRevertMethod(gitCli: gitCli);
final revert = await method.createRevert(
config,
'matanlurey',
'I said so',
generatePullRequest(
baseRef: 'flutter-3.32-candidate.0',
mergeCommitSha: 'abc123',
),
);
expect(gitCli.createBranch$newBranchName, 'revert_abc123');
expect(gitCli.setUpstream$branchName, 'revert_abc123');
expect(gitCli.pushBranch$branchName, 'revert_abc123');
expect(revert?.base?.ref, 'flutter-3.32-candidate.0');
});
}

final class _FakeConfig extends Fake implements Config {
@override
Future<String> generateGithubToken(RepositorySlug slug) async {
return 'a_github_token';
}

@override
Future<GithubService> createGithubService(RepositorySlug slug) async {
return _FakeGithubService();
}
}

final class _FakeGithubService extends Fake implements GithubService {
@override
Future<Branch> getBranch(RepositorySlug slug, String branchName) async {
return Branch(branchName, null);
}

@override
Future<List<PullRequestReview>> getPullRequestReviews(
RepositorySlug slug,
int pullRequestNumber,
) async {
return [];
}

@override
Future<PullRequest> createPullRequest({
required RepositorySlug slug,
String? title,
String? head,
required String base,
bool draft = false,
String? body,
}) async {
return PullRequest(base: PullRequestHead(ref: base));
}
}

final class _FakeGitCli extends Fake implements GitCli {
@override
Future<ProcessResult> cloneRepository({
required RepositorySlug slug,
required String workingDirectory,
required String targetDirectory,
List<String>? options,
bool throwOnError = true,
}) async {
return ProcessResult(0, 0, '', '');
}

@override
Future<ProcessResult> setupUserConfig({
required RepositorySlug slug,
required String workingDirectory,
bool throwOnError = true,
}) async {
return ProcessResult(0, 0, '', '');
}

@override
Future<ProcessResult> setupUserEmailConfig({
required RepositorySlug slug,
required String workingDirectory,
bool throwOnError = true,
}) async {
return ProcessResult(0, 0, '', '');
}

late String createBranch$newBranchName;

@override
Future<ProcessResult> createBranch({
required String newBranchName,
required String workingDirectory,
bool useCheckout = false,
bool throwOnError = true,
}) async {
createBranch$newBranchName = newBranchName;
return ProcessResult(0, 0, '', '');
}

late String setUpstream$branchName;

@override
Future<ProcessResult> setUpstream({
required RepositorySlug slug,
required String workingDirectory,
required String branchName,
required String token,
bool throwOnError = true,
}) async {
setUpstream$branchName = branchName;
return ProcessResult(0, 0, '', '');
}

@override
Future<ProcessResult> revertChange({
required String commitSha,
required String workingDirectory,
bool throwOnError = true,
}) async {
return ProcessResult(0, 0, '', '');
}

late String pushBranch$branchName;

@override
Future<ProcessResult> pushBranch({
required String branchName,
required String workingDirectory,
bool throwOnError = true,
}) async {
pushBranch$branchName = branchName;
return ProcessResult(0, 0, '', '');
}
}
2 changes: 2 additions & 0 deletions auto_submit/test/requests/github_webhook_test_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ PullRequest generatePullRequest({
bool? mergeable = true,
String baseRef = 'main',
DateTime? mergedAt,
String mergeCommitSha = 'abc123',
}) {
return PullRequest.fromJson(
json.decode('''{
Expand All @@ -119,6 +120,7 @@ PullRequest generatePullRequest({
],
"created_at": "2011-01-26T19:01:12Z",
"merged_at": "${mergedAt ?? DateTime.now().subtract(const Duration(hours: 12))}",
"merge_commit_sha": "$mergeCommitSha",
"closed_at": "2011-01-26T19:10:12Z",
"head": {
"label": "octocat:new-topic",
Expand Down