blob: 484b04b26dece0517c04b6fd6bdbb41a43d93f82 [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:mockito/mockito.dart';
import 'package:test/test.dart';
import '../requests/github_webhook_test_data.dart';
import '../utilities/mocks.dart';
void main() {
late GithubService githubService;
late RepositorySlug slug;
late RepositoryCommit testCommit;
final MockGitHub mockGitHub = MockGitHub();
final MockRepositoriesService mockRepositoriesService = MockRepositoriesService();
final MockGitHubComparison mockGitHubComparison = MockGitHubComparison();
final MockResponse mockResponse = MockResponse();
const String author = '''{"login": "octocat", "id": 1}''';
const String url = 'testUrl';
const String sha = '6dcb09b5b57875f334f61aebed695e2e4193db5e';
setUp(() {
githubService = GithubService(mockGitHub);
slug = RepositorySlug('flutter', 'cocoon');
testCommit = RepositoryCommit.fromJson(
jsonDecode('{"url": "$url", "author": $author, "sha": "$sha"}') as Map<String, dynamic>,
);
when(mockGitHubComparison.behindBy).thenReturn(10);
when(
mockGitHub.request(
any,
any,
headers: anyNamed('headers'),
params: anyNamed('params'),
body: anyNamed('body'),
statusCode: anyNamed('statusCode'),
fail: anyNamed('fail'),
preview: anyNamed('preview'),
),
).thenAnswer((_) => Future.value(mockResponse));
when(mockResponse.statusCode).thenReturn(200);
when(mockGitHub.repositories).thenReturn(mockRepositoriesService);
when(mockRepositoriesService.getCommit(any, any)).thenAnswer((_) => Future.value(testCommit));
when(mockRepositoriesService.compareCommits(any, any, any)).thenAnswer((_) => Future.value(mockGitHubComparison));
});
test('listReviews retrieves all reviews of the pull request', () async {
final RepositoryCommit commit = await githubService.getCommit(slug, sha);
expect(commit.author!.login, 'octocat');
expect(commit.url, 'testUrl');
expect(commit.sha, '6dcb09b5b57875f334f61aebed695e2e4193db5e');
});
test('Merges branch', () async {
when(mockGitHubComparison.behindBy).thenReturn(10);
PullRequest pullRequest = generatePullRequest();
await githubService.autoMergeBranch(pullRequest);
verify(mockResponse.statusCode).called(1);
});
test('Does not merge branch', () async {
when(mockGitHubComparison.behindBy).thenReturn(9);
PullRequest pullRequest = generatePullRequest();
await githubService.autoMergeBranch(pullRequest);
verifyNever(mockResponse.statusCode);
});
}