blob: 076f639ff300cf8c8e217ce5ebf455eb90469fb6 [file] [log] [blame]
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
@TestOn('browser')
import 'package:angular/di.dart';
import 'package:angular_test/angular_test.dart';
import 'package:dart_results_feed/src/components/try_results_component.dart';
import 'package:dart_results_feed/src/components/try_results_component.template.dart'
as ng;
import 'package:dart_results_feed/src/services/firestore_service.dart';
import 'package:pageloader/html.dart';
import 'package:pageloader/testing.dart';
import 'package:test/test.dart';
import 'try_results_test.template.dart' as self;
import 'try_results_sample_data.dart';
import 'page_objects/results_panel_po.dart';
import 'page_objects/try_results_po.dart';
// pub run build_runner test --fail-on-severe -- -p chrome comments_test.dart
@GenerateInjector([
ClassProvider(FirestoreService, useClass: TestingFirestoreService),
])
final InjectorFactory rootInjector = self.rootInjector$Injector;
void main() {
final testBed = NgTestBed.forComponent<TryResultsComponent>(
ng.TryResultsComponentNgFactory,
rootInjector: rootInjector);
tearDown(() async {
await disposeAnyRunningTest();
});
test('create component', () async {
TestingFirestoreService firestore;
final fixture =
await testBed.create(beforeComponentCreated: (Injector injector) async {
firestore =
injector.provideType<TestingFirestoreService>(FirestoreService);
await firestore.getFirebaseClient();
await firestore.writeDocumentsFrom(tryResultsCreateComponentSampleData);
});
await fixture.update((TryResultsComponent tryResultsComponent) {
tryResultsComponent.review = createComponentReview;
tryResultsComponent.patchset = createComponentPatchset;
});
await fixture.assertOnlyInstance.update();
await fixture.update();
var context = HtmlPageLoaderElement.createFromElement(fixture.rootElement);
var tryResultsPO = TryResultsPO.create(context);
var results = tryResultsPO.resultsPanel;
expect(results, isA<ResultsPanelPO>());
expect(results, isNot(isA<ResultsSelectorPanelPO>()));
expect(results.testNames(), [
[
['pkg/front_end/test/fasta/analyze_test'],
['sample_suite/sample_test']
],
[
['pkg/front_end/test/fasta/analyze_test', '✔ sample_suite/second_test']
]
]);
expect(tryResultsPO.approveCommentButton, exists);
expect(tryResultsPO.cancelButton, isNull);
expect(tryResultsPO.revokeButton, isNull);
expect(tryResultsPO.commentOnlyButton, isNull);
expect(tryResultsPO.approveButton, isNull);
await fixture.update((_) => tryResultsPO.approveCommentButton.click());
// The waiting in fixture.update is not enough when we replace
// the ResultsPanel with a ResultsSelectorPanel.
await Future.delayed(Duration(seconds: 1), () => null);
results = tryResultsPO.resultsPanel;
expect(results, isA<ResultsSelectorPanelPO>());
expect(results.testNames(), [
[
['check_box pkg/front_end/test/fasta/analyze_test'],
['check_box sample_suite/sample_test']
],
[
[
'check_box pkg/front_end/test/fasta/analyze_test',
'check_box ✔ sample_suite/second_test'
]
]
]);
expect(tryResultsPO.approveCommentButton, isNull);
expect(tryResultsPO.cancelButton, exists);
expect(tryResultsPO.revokeButton, exists);
expect(tryResultsPO.commentOnlyButton, exists);
expect(tryResultsPO.approveButton, exists);
final analyzerGroup = results.configurationGroup('analyzer...');
final analyzerGroupCheckbox = checkbox(analyzerGroup);
final secondResultGroup = results.resultsGroup(
analyzerGroup, 'Pass -> CompileTimeError (expected Pass)');
final secondResultGroupCheckbox = checkbox(secondResultGroup);
expect(analyzerGroupCheckbox, exists);
expect(secondResultGroupCheckbox, exists);
expect(checked(analyzerGroupCheckbox), 'true');
expect(checked(secondResultGroupCheckbox), 'true');
await fixture.update((_) => analyzerGroupCheckbox.click());
expect(checked(analyzerGroupCheckbox), 'false');
expect(checked(secondResultGroupCheckbox), 'false');
await fixture.update((_) => secondResultGroupCheckbox.click());
expect(checked(analyzerGroupCheckbox), 'mixed');
expect(checked(secondResultGroupCheckbox), 'true');
await fixture.update((_) => tryResultsPO.commentField.type(commentText));
await fixture.update((_) => tryResultsPO.approveButton.click());
await Future.delayed(Duration(seconds: 1), () => null);
// The waiting in fixture.update is not enough when we replace
// the ResultsSelectorPanel with a ResultsPanel.
results = tryResultsPO.resultsPanel;
expect(results, isA<ResultsPanelPO>());
expect(results, isNot(isA<ResultsSelectorPanelPO>()));
expect(results.testNames(), [
[
['✔ pkg/front_end/test/fasta/analyze_test'],
['sample_suite/sample_test']
],
[
[
'✔ pkg/front_end/test/fasta/analyze_test',
'✔ sample_suite/second_test'
]
]
]);
expect(tryResultsPO.comments.last.innerText,
stringContainsInOrder(['approved', commentText]));
await firestore.writeDocumentsFrom(tryResultsCreateComponentSampleData,
delete: true);
await firestore.deleteCommentsForReview(createComponentReview);
});
}