blob: 059e14165eb91db14c4b9c42d3dd2dd3291066ac [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:cocoon_server/big_query_pull_request_record.dart';
import 'package:cocoon_server/bigquery.dart';
import 'package:cocoon_server_test/bigquery_testing.dart';
import 'package:cocoon_server_test/mocks.dart';
import 'package:googleapis/bigquery/v2.dart';
import 'package:mockito/mockito.dart';
import 'package:test/expect.dart';
import 'package:test/scaffolding.dart';
void main() {
late BigqueryService service;
late MockJobsResource jobsResource;
setUp(() {
jobsResource = MockJobsResource();
service = BigqueryService.forTesting(jobsResource);
});
test('Insert pull request record is successful.', () async {
when(jobsResource.query(captureAny, expectedProjectId)).thenAnswer((
Invocation invocation,
) {
return Future<QueryResponse>.value(
QueryResponse.fromJson(
jsonDecode(insertDeleteUpdateSuccessResponse)
as Map<dynamic, dynamic>,
),
);
});
final pullRequestRecord = PullRequestRecord(
prCreatedTimestamp: DateTime.fromMillisecondsSinceEpoch(123456789),
prLandedTimestamp: DateTime.fromMillisecondsSinceEpoch(234567890),
organization: 'flutter',
repository: 'cocoon',
author: 'ricardoamador',
prNumber: 345,
prCommit: 'ade456',
prRequestType: 'merge',
);
var hasError = false;
try {
await service.insertPullRequestRecord(
projectId: expectedProjectId,
pullRequestRecord: pullRequestRecord,
);
} on BigQueryException {
hasError = true;
}
expect(hasError, isFalse);
});
test(
'Insert pull request record handles unsuccessful job complete error.',
() async {
when(jobsResource.query(captureAny, expectedProjectId)).thenAnswer((
Invocation invocation,
) {
return Future<QueryResponse>.value(
QueryResponse.fromJson(
jsonDecode(errorResponse) as Map<dynamic, dynamic>,
),
);
});
var hasError = false;
final pullRequestRecord = PullRequestRecord(
prCreatedTimestamp: DateTime.fromMillisecondsSinceEpoch(123456789),
prLandedTimestamp: DateTime.fromMillisecondsSinceEpoch(234567890),
organization: 'flutter',
repository: 'cocoon',
author: 'ricardoamador',
prNumber: 345,
prCommit: 'ade456',
prRequestType: 'merge',
);
try {
await service.insertPullRequestRecord(
projectId: expectedProjectId,
pullRequestRecord: pullRequestRecord,
);
} on BigQueryException catch (exception) {
expect(
exception.cause,
'Insert pull request $pullRequestRecord did not complete.',
);
hasError = true;
}
expect(hasError, isTrue);
},
);
test('Insert pull request fails when multiple rows are returned.', () async {
when(jobsResource.query(captureAny, expectedProjectId)).thenAnswer((
Invocation invocation,
) {
return Future<QueryResponse>.value(
QueryResponse.fromJson(
jsonDecode(selectPullRequestTooManyRowsResponse)
as Map<dynamic, dynamic>,
),
);
});
var hasError = false;
final pullRequestRecord = PullRequestRecord(
prCreatedTimestamp: DateTime.fromMillisecondsSinceEpoch(123456789),
prLandedTimestamp: DateTime.fromMillisecondsSinceEpoch(234567890),
organization: 'flutter',
repository: 'cocoon',
author: 'ricardoamador',
prNumber: 345,
prCommit: 'ade456',
prRequestType: 'merge',
);
try {
await service.insertPullRequestRecord(
projectId: expectedProjectId,
pullRequestRecord: pullRequestRecord,
);
} on BigQueryException catch (exception) {
expect(
exception.cause,
'There was an error inserting $pullRequestRecord into the table.',
);
hasError = true;
}
expect(hasError, isTrue);
});
}