Skip to content

Commit 799c022

Browse files
authored
Migrate listing tests. (#2637)
1 parent e4729ca commit 799c022

File tree

4 files changed

+54
-306
lines changed

4 files changed

+54
-306
lines changed

app/lib/search/updater.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import 'package:_discoveryapis_commons/_discoveryapis_commons.dart'
99
import 'package:gcloud/db.dart';
1010
import 'package:gcloud/service_scope.dart' as ss;
1111
import 'package:logging/logging.dart';
12+
import 'package:meta/meta.dart';
1213

1314
import '../dartdoc/backend.dart';
15+
import '../frontend/models.dart' show Package;
1416
import '../shared/exceptions.dart';
1517
import '../shared/scheduler_stats.dart';
1618
import '../shared/task_scheduler.dart';
@@ -57,6 +59,18 @@ class IndexUpdater implements TaskRunner {
5759
}
5860
}
5961

62+
/// Updates all packages in the index.
63+
/// It is slower than searchBackend.loadMinimumPackageIndex, but provides a
64+
/// complete document for the index.
65+
@visibleForTesting
66+
Future updateAllPackages() async {
67+
await for (final p in _db.query<Package>().run()) {
68+
final doc = await searchBackend.loadDocument(p.name);
69+
await packageIndex.addPackage(doc);
70+
}
71+
await packageIndex.merge();
72+
}
73+
6074
Future _initSnapshot() async {
6175
if (_snapshot != null) return;
6276
try {

app/test/frontend/handlers/listing_test.dart

Lines changed: 38 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,19 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'package:gcloud/db.dart';
56
import 'package:http/testing.dart';
67
import 'package:test/test.dart';
78

89
import 'package:pub_dartlang_org/frontend/backend.dart';
9-
import 'package:pub_dartlang_org/frontend/models.dart';
1010
import 'package:pub_dartlang_org/frontend/name_tracker.dart';
11-
import 'package:pub_dartlang_org/frontend/search_service.dart';
1211
import 'package:pub_dartlang_org/frontend/static_files.dart';
13-
import 'package:pub_dartlang_org/shared/analyzer_client.dart';
14-
import 'package:pub_dartlang_org/shared/search_service.dart';
1512
import 'package:pub_dartlang_org/shared/search_client.dart';
13+
import 'package:pub_dartlang_org/search/updater.dart';
1614

1715
import '../../shared/handlers_test_utils.dart';
1816
import '../../shared/test_models.dart';
1917
import '../../shared/test_services.dart';
20-
import '../mocks.dart';
2118

2219
import '_utils.dart';
2320

@@ -89,34 +86,21 @@ void main() {
8986
expect(content, contains('helium is a Dart package'));
9087
});
9188

92-
tScopedTest('/packages?page=2', () async {
93-
registerSearchService(SearchServiceMock(
94-
(SearchQuery query) {
95-
expect(query.offset, 10);
96-
expect(query.limit, pageSize);
97-
expect(query.platform, isNull);
98-
expect(query.isAd, isFalse);
99-
return SearchResultPage(query, 1, [
100-
PackageView.fromModel(
101-
package: foobarPackage,
102-
version: foobarStablePV,
103-
scoreCard: null)
104-
]);
105-
},
106-
));
107-
final backend = BackendMock(
108-
lookupPackageFun: (packageName) {
109-
return packageName == foobarPackage.name ? foobarPackage : null;
110-
},
111-
lookupLatestVersionsFun: (List<Package> packages) {
112-
expect(packages.length, 1);
113-
expect(packages.first, foobarPackage);
114-
return [foobarStablePV];
115-
},
89+
testWithServices('/packages?page=2', () async {
90+
for (int i = 0; i < 15; i++) {
91+
final bundle = generateBundle('pkg$i', ['1.0.0']);
92+
await dbService.commit(inserts: [bundle.package, ...bundle.versions]);
93+
}
94+
await indexUpdater.updateAllPackages();
95+
96+
final names = ['pkg0', 'pkg3', 'pkg10'];
97+
final list = await backend.latestPackageVersions(offset: 10);
98+
expect(list.map((p) => p.package).toList(), containsAll(names));
99+
100+
await expectHtmlResponse(
101+
await issueGet('/packages?page=2'),
102+
present: names.map((name) => '/packages/$name').toList(),
116103
);
117-
registerBackend(backend);
118-
registerAnalyzerClient(AnalyzerClientMock());
119-
await expectHtmlResponse(await issueGet('/packages?page=2'));
120104
});
121105

122106
testWithServices('/flutter/packages', () async {
@@ -135,34 +119,29 @@ void main() {
135119
);
136120
});
137121

138-
tScopedTest('/flutter/packages&page=2', () async {
139-
registerSearchService(SearchServiceMock(
140-
(SearchQuery query) {
141-
expect(query.offset, 10);
142-
expect(query.limit, pageSize);
143-
expect(query.platform, 'flutter');
144-
expect(query.isAd, isFalse);
145-
return SearchResultPage(query, 1, [
146-
PackageView.fromModel(
147-
package: foobarPackage,
148-
version: foobarStablePV,
149-
scoreCard: null)
150-
]);
151-
},
122+
testWithServices('/flutter/packages&page=2', () async {
123+
for (int i = 0; i < 15; i++) {
124+
final bundle = generateBundle(
125+
'pkg$i',
126+
['1.0.0'],
127+
pubspecExtraContent: '''
128+
flutter:
129+
plugin:
130+
class: SomeClass
131+
''',
132+
);
133+
await dbService.commit(inserts: [bundle.package, ...bundle.versions]);
134+
}
135+
await indexUpdater.updateAllPackages();
136+
137+
final names = ['pkg0', 'pkg3', 'pkg10'];
138+
final list = await backend.latestPackageVersions(offset: 10);
139+
expect(list.map((p) => p.package).toList(), containsAll(names));
140+
141+
print(await expectHtmlResponse(
142+
await issueGet('/packages?page=2'),
143+
present: names.map((name) => '/packages/$name').toList(),
152144
));
153-
final backend = BackendMock(
154-
lookupPackageFun: (packageName) {
155-
return packageName == foobarPackage.name ? foobarPackage : null;
156-
},
157-
lookupLatestVersionsFun: (List<Package> packages) {
158-
expect(packages.length, 1);
159-
expect(packages.first, foobarPackage);
160-
return [foobarStablePV];
161-
},
162-
);
163-
registerBackend(backend);
164-
registerAnalyzerClient(AnalyzerClientMock());
165-
await expectHtmlResponse(await issueGet('/flutter/packages?page=2'));
166145
});
167146
});
168147
}

0 commit comments

Comments
 (0)