blob: 1deb8b0352257c23bc32dd3358ecb620fa271e9e [file] [log] [blame]
// 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:auto_submit/validations/validation.dart';
import 'package:github/github.dart' as github;
import 'package:test/test.dart';
import 'package:cocoon_server/testing/mocks.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() {
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 String org = 'flutter';
const String repo = 'flutter';
final PullRequestHelper flutterRequest = PullRequestHelper(
prNumber: 0,
lastCommitHash: oid,
reviews: <PullRequestReviewHelper>[],
);
final auto.QueryResult queryResult = createQueryResult(flutterRequest);
final github.PullRequest pullRequest = generatePullRequest(
mergeable: true,
login: org,
repoName: repo,
);
final ValidationResult 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 String org = 'flutter';
const String repo = 'flutter';
final PullRequestHelper flutterRequest = PullRequestHelper(
prNumber: 0,
lastCommitHash: oid,
reviews: <PullRequestReviewHelper>[],
mergeableState: auto.MergeableState.UNKNOWN,
);
final auto.QueryResult queryResult = createQueryResult(flutterRequest);
final github.PullRequest pullRequest = generatePullRequest(
mergeable: null,
login: org,
repoName: repo,
);
githubService.pullRequestData = pullRequest;
final ValidationResult 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 String org = 'flutter';
const String repo = 'flutter';
final github.PullRequest pullRequest = generatePullRequest(
mergeable: false,
login: org,
repoName: repo,
);
githubService.pullRequestData = pullRequest;
final PullRequestHelper flutterRequest = PullRequestHelper(
prNumber: 0,
lastCommitHash: oid,
reviews: <PullRequestReviewHelper>[],
mergeableState: auto.MergeableState.CONFLICTING,
);
final auto.QueryResult queryResult = createQueryResult(flutterRequest);
final ValidationResult processMergeResult = await mergeable.validate(
queryResult,
pullRequest,
);
expect(processMergeResult.result, isFalse);
expect(processMergeResult.message, 'Pull request flutter/flutter/1347 is not in a mergeable state.');
});
}