Skip to content

Commit 9e4bdea

Browse files
authored
Reduce TestProfile mutable API: resolved versions can be used explicitly. (#8644)
1 parent 5887662 commit 9e4bdea

File tree

5 files changed

+20
-119
lines changed

5 files changed

+20
-119
lines changed

app/lib/tool/test_profile/import_source.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,12 @@ class ImportSource {
4242
}
4343

4444
/// Resolve all the package-version required for the [profile].
45-
Future<List<ResolvedVersion>> resolveVersions(TestProfile profile) async {
46-
return <ResolvedVersion>[
47-
...await resolver.resolveVersions(_client, profile),
48-
...await _resolveGeneratedVersions(profile),
49-
];
45+
Future<List<ResolvedVersion>> resolveImportedVersions(
46+
TestProfile profile) async {
47+
return await resolver.resolveVersions(_client, profile);
5048
}
5149

52-
Future<List<ResolvedVersion>> _resolveGeneratedVersions(
50+
Future<List<ResolvedVersion>> resolveGeneratedVersions(
5351
TestProfile profile) async {
5452
final versions = <ResolvedVersion>[];
5553
profile.generatedPackages.forEach((p) {

app/lib/tool/test_profile/importer.dart

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@ Future<void> importProfile({
3333
String? adminUserEmail,
3434
}) async {
3535
source ??= ImportSource();
36-
final resolvedVersions = await source.resolveVersions(profile);
37-
resolvedVersions.sort();
36+
final importedVersions = await source.resolveImportedVersions(profile);
37+
final generatedVersions = await source.resolveGeneratedVersions(profile);
38+
final resolvedVersions = [...importedVersions, ...generatedVersions]..sort();
3839

3940
// expand profile with resolved version information
40-
profile = normalize(profile, resolvedVersions: resolvedVersions);
41+
profile = normalize(profile);
4142

4243
if (profile.importedPackages
4344
.any((p) => p.uploaders != null && p.uploaders!.length > 1)) {
@@ -97,11 +98,12 @@ Future<void> importProfile({
9798
lastActiveUploaderEmails[rv.package] = uploaderEmail;
9899

99100
var bytes = pendingBytes['${rv.package}/${rv.version}'] ??
100-
(profile.isGenerated(rv.package, rv.version)
101-
? await source.getGeneratedArchiveBytes(rv.package, rv.version)
102-
: await source.getPubDevArchiveBytes(rv.package, rv.version));
101+
(importedVersions.contains(rv)
102+
? await source.getPubDevArchiveBytes(rv.package, rv.version)
103+
: await source.getGeneratedArchiveBytes(rv.package, rv.version));
103104
bytes = await _mayCleanupTarModeBits(bytes);
104105
try {
106+
// TODO: use the created field with fake clock header to set the published timestamp
105107
await withRetryPubApiClient(
106108
authToken: createFakeAuthTokenForEmail(uploaderEmail,
107109
audience: activeConfiguration.pubClientAudience),
@@ -232,9 +234,13 @@ Future<void> importProfile({
232234
}
233235

234236
List<String> _potentialActiveEmails(TestProfile profile, String packageName) {
235-
final testPackage =
236-
profile.importedPackages.firstWhereOrNull((p) => p.name == packageName) ??
237-
profile.generatedPackages.firstWhere((p) => p.name == packageName);
237+
final testPackage = profile.importedPackages
238+
.firstWhereOrNull((p) => p.name == packageName) ??
239+
profile.generatedPackages.firstWhereOrNull((p) => p.name == packageName);
240+
241+
if (testPackage == null) {
242+
return [profile.resolvedDefaultUser];
243+
}
238244

239245
// uploaders
240246
if (testPackage.publisher == null) {

app/lib/tool/test_profile/models.dart

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,6 @@ class TestProfile {
6060
);
6161
}
6262

63-
/// Returns whether the [package]/[version] is part of the generated packages list.
64-
bool isGenerated(String package, String version) {
65-
final p = generatedPackages.firstWhereOrNull((p) => p.name == package);
66-
final v = p?.versions?.firstWhereOrNull((v) => v.version == version);
67-
return v != null;
68-
}
69-
7063
/// The [defaultUser] if specified, otherwise:
7164
/// - the first entry in the [users] list,
7265
/// - the first specified member in the [publishers] list,
@@ -116,23 +109,6 @@ class TestPackage {
116109
}
117110

118111
Map<String, dynamic> toJson() => _$TestPackageToJson(this);
119-
120-
TestPackage change({
121-
List<TestVersion>? versions,
122-
}) {
123-
return TestPackage(
124-
name: name,
125-
uploaders: uploaders,
126-
publisher: publisher,
127-
versions: versions ?? this.versions,
128-
replacedBy: replacedBy,
129-
isDiscontinued: isDiscontinued,
130-
isUnlisted: isUnlisted,
131-
isFlutterFavorite: isFlutterFavorite,
132-
retractedVersions: retractedVersions,
133-
likeCount: likeCount,
134-
);
135-
}
136112
}
137113

138114
@JsonSerializable(explicitToJson: true, includeIfNull: false)

app/lib/tool/test_profile/normalizer.dart

Lines changed: 1 addition & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ import 'models.dart';
66

77
/// Creates a new TestProfile with the missing entities (e.g. users or publishers)
88
/// created.
9-
TestProfile normalize(
10-
TestProfile profile, {
11-
List<ResolvedVersion>? resolvedVersions,
12-
}) {
9+
TestProfile normalize(TestProfile profile) {
1310
final users = <String, TestUser>{};
1411
final publishers = <String, TestPublisher>{};
1512
final importedPackages = <String, TestPackage>{};
@@ -42,43 +39,6 @@ TestProfile normalize(
4239
});
4340
});
4441

45-
// add missing packages from resolved versions
46-
if (resolvedVersions != null) {
47-
resolvedVersions.forEach((rv) {
48-
if (generatedPackages.containsKey(rv.package)) {
49-
return;
50-
}
51-
importedPackages.putIfAbsent(
52-
rv.package,
53-
() => TestPackage(
54-
name: rv.package,
55-
versions: [
56-
TestVersion(version: rv.version, created: rv.created),
57-
],
58-
uploaders: [profile.resolvedDefaultUser],
59-
));
60-
});
61-
// update versions from resolved versions
62-
List<TestVersion> getUpdateVersions(TestPackage p) {
63-
return resolvedVersions
64-
.where((rv) => rv.package == p.name)
65-
.map((rv) => rv.version)
66-
.toSet()
67-
.map((v) => TestVersion(
68-
version: v,
69-
created:
70-
resolvedVersions.firstWhere((x) => x.version == v).created))
71-
.toList();
72-
}
73-
74-
importedPackages.values.toList().forEach((p) {
75-
importedPackages[p.name] = p.change(versions: getUpdateVersions(p));
76-
});
77-
generatedPackages.values.toList().forEach((p) {
78-
generatedPackages[p.name] = p.change(versions: getUpdateVersions(p));
79-
});
80-
}
81-
8242
final publishersToCreate = {
8343
...importedPackages.values.map((p) => p.publisher).nonNulls,
8444
...generatedPackages.values.map((p) => p.publisher).nonNulls,

app/test/tool/test_profile/model_normalization_test.dart

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
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:clock/clock.dart';
65
import 'package:pub_dev/tool/test_profile/models.dart';
76
import 'package:pub_dev/tool/test_profile/normalizer.dart';
87
import 'package:test/test.dart';
@@ -86,43 +85,5 @@ generatedPackages:
8685
},
8786
);
8887
});
89-
90-
test('resolved versions', () {
91-
expect(
92-
normalize(
93-
TestProfile.fromYaml('''
94-
defaultUser: [email protected]
95-
generatedPackages:
96-
- name: foo
97-
'''),
98-
resolvedVersions: [
99-
ResolvedVersion(
100-
package: 'foo',
101-
version: '1.1.0',
102-
created: clock.now(),
103-
),
104-
],
105-
).toJson(),
106-
{
107-
'importedPackages': [],
108-
'generatedPackages': [
109-
{
110-
'name': 'foo',
111-
'versions': [
112-
{'version': '1.1.0', 'created': isNotEmpty},
113-
],
114-
}
115-
],
116-
'publishers': [],
117-
'users': [
118-
{
119-
'email': '[email protected]',
120-
'likes': [],
121-
}
122-
],
123-
'defaultUser': '[email protected]',
124-
},
125-
);
126-
});
12788
});
12889
}

0 commit comments

Comments
 (0)