blob: 47fa6e3624151dace7cc9f484515f8b71c8cff82 [file] [log] [blame] [edit]
// 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 'package:auto_submit/model/auto_submit_query_result.dart' as auto;
import 'package:auto_submit/validations/mergeable.dart';
import 'package:cocoon_server_test/mocks.dart';
import 'package:cocoon_server_test/test_logging.dart';
import 'package:test/test.dart';
import '../requests/github_webhook_test_data.dart';
import '../src/service/fake_config.dart';
import '../src/service/fake_github_service.dart';
import '../src/service/fake_graphql_client.dart';
import '../utilities/utils.dart';
void main() {
useTestLoggerPerTest();
late Mergeable mergeable;
late FakeConfig config;
late FakeGithubService githubService;
late FakeGraphQLClient githubGraphQLClient;
setUp(() {
githubGraphQLClient = FakeGraphQLClient();
githubService = FakeGithubService(client: MockGitHub());
config = FakeConfig(
githubService: githubService,
githubGraphQLClient: githubGraphQLClient,
);
mergeable = Mergeable(config: config);
});
test('Pull request is mergeable', () async {
const org = 'flutter';
const repo = 'flutter';
final flutterRequest = PullRequestHelper(
prNumber: 0,
lastCommitHash: oid,
reviews: <PullRequestReviewHelper>[],
);
final queryResult = createQueryResult(flutterRequest);
final pullRequest = generatePullRequest(
mergeable: true,
login: org,
repoName: repo,
);
final processMergeResult = await mergeable.validate(
queryResult,
pullRequest,
);
expect(processMergeResult.result, isTrue);
expect(
processMergeResult.message,
'Pull request flutter/flutter/1347 is mergeable',
);
});
test('Pull request mergeability has not been determined', () async {
const org = 'flutter';
const repo = 'flutter';
final flutterRequest = PullRequestHelper(
prNumber: 0,
lastCommitHash: oid,
reviews: <PullRequestReviewHelper>[],
mergeableState: auto.MergeableState.UNKNOWN,
);
final queryResult = createQueryResult(flutterRequest);
final pullRequest = generatePullRequest(
mergeable: null,
login: org,
repoName: repo,
);
githubService.pullRequestData = pullRequest;
final processMergeResult = await mergeable.validate(
queryResult,
pullRequest,
);
expect(processMergeResult.result, isFalse);
expect(
processMergeResult.message,
'Mergeability of pull request flutter/flutter/1347 could not be determined at time of merge.',
);
});
test('Pull request cannot be merged', () async {
const org = 'flutter';
const repo = 'flutter';
final pullRequest = generatePullRequest(
mergeable: false,
login: org,
repoName: repo,
);
githubService.pullRequestData = pullRequest;
final flutterRequest = PullRequestHelper(
prNumber: 0,
lastCommitHash: oid,
reviews: <PullRequestReviewHelper>[],
mergeableState: auto.MergeableState.CONFLICTING,
);
final queryResult = createQueryResult(flutterRequest);
final processMergeResult = await mergeable.validate(
queryResult,
pullRequest,
);
expect(processMergeResult.result, isFalse);
expect(
processMergeResult.message,
'Pull request flutter/flutter/1347 is not in a mergeable state.',
);
});
}