Skip to content

Commit 6d33f6f

Browse files
authored
GeneratedTest[Package|Version] and minimal TestArchiveTemplate. (#8645)
1 parent 9e4bdea commit 6d33f6f

22 files changed

+339
-203
lines changed

app/lib/tool/test_profile/import_source.dart

+6-2
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,10 @@ class ImportSource {
9898
}
9999

100100
Future<List<int>> getGeneratedArchiveBytes(
101-
String package, String version) async {
101+
String package,
102+
String version,
103+
TestArchiveTemplate? template,
104+
) async {
102105
final key = '$package/$version';
103106
final hasher = createHasher(key);
104107
if (_archives.containsKey(key)) {
@@ -109,7 +112,8 @@ class ImportSource {
109112
final hasRepository = hasher('hasRepository', max: 20) > 0;
110113
final isLegacy = version.contains('legacy');
111114

112-
final sdkConstraint = isLegacy ? '>=1.12.0 <2.0.0' : '^3.0.0';
115+
final sdkConstraint =
116+
template?.sdkConstraint ?? (isLegacy ? '>=1.12.0 <2.0.0' : '^3.0.0');
113117

114118
final isFlutter = package.startsWith('flutter_');
115119
final screenshot = TestScreenshot.success();

app/lib/tool/test_profile/importer.dart

+17-5
Original file line numberDiff line numberDiff line change
@@ -97,18 +97,30 @@ Future<void> importProfile({
9797
uploaderEmails[rv.version.hashCode.abs() % uploaderEmails.length];
9898
lastActiveUploaderEmails[rv.package] = uploaderEmail;
9999

100-
var bytes = pendingBytes['${rv.package}/${rv.version}'] ??
101-
(importedVersions.contains(rv)
102-
? await source.getPubDevArchiveBytes(rv.package, rv.version)
103-
: await source.getGeneratedArchiveBytes(rv.package, rv.version));
100+
var bytes = pendingBytes['${rv.package}/${rv.version}'];
101+
if (bytes == null) {
102+
if (importedVersions.contains(rv)) {
103+
bytes = await source.getPubDevArchiveBytes(rv.package, rv.version);
104+
} else {
105+
final gp = profile.generatedPackages
106+
.firstWhereOrNull((p) => p.name == rv.package);
107+
final gv =
108+
gp?.versions?.firstWhereOrNull((v) => v.version == rv.version);
109+
var template = gp?.template;
110+
template =
111+
template?.overrideWith(gv?.template) ?? gv?.template ?? template;
112+
bytes = await source.getGeneratedArchiveBytes(
113+
rv.package, rv.version, template);
114+
}
115+
}
104116
bytes = await _mayCleanupTarModeBits(bytes);
105117
try {
106118
// TODO: use the created field with fake clock header to set the published timestamp
107119
await withRetryPubApiClient(
108120
authToken: createFakeAuthTokenForEmail(uploaderEmail,
109121
audience: activeConfiguration.pubClientAudience),
110122
pubHostedUrl: pubHostedUrl,
111-
(client) => client.uploadPackageBytes(bytes),
123+
(client) => client.uploadPackageBytes(bytes!),
112124
);
113125
published = true;
114126
} catch (e, st) {

app/lib/tool/test_profile/models.dart

+84-11
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class TestProfile {
2222
final List<TestPackage> importedPackages;
2323

2424
/// Packages that will be generated locally using the provided parameters and semi-random templates.
25-
final List<TestPackage> generatedPackages;
25+
final List<GeneratedTestPackage> generatedPackages;
2626
final List<TestPublisher> publishers;
2727
final List<TestUser> users;
2828

@@ -31,12 +31,12 @@ class TestProfile {
3131

3232
TestProfile({
3333
List<TestPackage>? importedPackages,
34-
List<TestPackage>? generatedPackages,
34+
List<GeneratedTestPackage>? generatedPackages,
3535
List<TestPublisher>? publishers,
3636
List<TestUser>? users,
3737
this.defaultUser,
3838
}) : importedPackages = importedPackages ?? <TestPackage>[],
39-
generatedPackages = generatedPackages ?? <TestPackage>[],
39+
generatedPackages = generatedPackages ?? <GeneratedTestPackage>[],
4040
publishers = publishers ?? <TestPublisher>[],
4141
users = users ?? <TestUser>[];
4242

@@ -98,14 +98,7 @@ class TestPackage {
9898
});
9999

100100
factory TestPackage.fromJson(Map<String, dynamic> json) {
101-
// convert simple String versions to objects
102-
final versions = json['versions'] as List?;
103-
json = {
104-
...json,
105-
'versions':
106-
versions?.map((v) => v is String ? {'version': v} : v).toList(),
107-
};
108-
return _$TestPackageFromJson(json);
101+
return _$TestPackageFromJson(_expandPackageJson(json));
109102
}
110103

111104
Map<String, dynamic> toJson() => _$TestPackageToJson(this);
@@ -130,6 +123,86 @@ class TestVersion {
130123
String toString() => '$version';
131124
}
132125

126+
@JsonSerializable(explicitToJson: true, includeIfNull: false)
127+
class GeneratedTestPackage extends TestPackage {
128+
@override
129+
// ignore: overridden_fields
130+
final List<GeneratedTestVersion>? versions;
131+
132+
final TestArchiveTemplate? template;
133+
134+
GeneratedTestPackage({
135+
required super.name,
136+
super.uploaders,
137+
super.publisher,
138+
this.versions,
139+
super.isDiscontinued,
140+
super.replacedBy,
141+
super.isUnlisted,
142+
super.isFlutterFavorite,
143+
super.retractedVersions,
144+
super.likeCount,
145+
this.template,
146+
});
147+
148+
factory GeneratedTestPackage.fromJson(Map<String, dynamic> json) {
149+
return _$GeneratedTestPackageFromJson(_expandPackageJson(json));
150+
}
151+
152+
@override
153+
Map<String, dynamic> toJson() => _$GeneratedTestPackageToJson(this);
154+
}
155+
156+
Map<String, dynamic> _expandPackageJson(Map<String, dynamic> json) {
157+
// convert simple String versions to objects
158+
final versions = json['versions'] as List?;
159+
return {
160+
...json,
161+
'versions': versions?.map((v) => v is String ? {'version': v} : v).toList(),
162+
};
163+
}
164+
165+
@JsonSerializable(explicitToJson: true, includeIfNull: false)
166+
class GeneratedTestVersion extends TestVersion {
167+
final TestArchiveTemplate? template;
168+
169+
GeneratedTestVersion({
170+
required super.version,
171+
super.created,
172+
this.template,
173+
});
174+
175+
factory GeneratedTestVersion.fromJson(Map<String, dynamic> json) =>
176+
_$GeneratedTestVersionFromJson(json);
177+
178+
@override
179+
Map<String, dynamic> toJson() => _$GeneratedTestVersionToJson(this);
180+
181+
@override
182+
String toString() => '$version';
183+
}
184+
185+
@JsonSerializable(explicitToJson: true, includeIfNull: false)
186+
class TestArchiveTemplate {
187+
final String? sdkConstraint;
188+
189+
TestArchiveTemplate({
190+
this.sdkConstraint,
191+
});
192+
193+
factory TestArchiveTemplate.fromJson(Map<String, dynamic> json) =>
194+
_$TestArchiveTemplateFromJson(json);
195+
196+
TestArchiveTemplate overrideWith(TestArchiveTemplate? other) {
197+
if (other == null) return this;
198+
return TestArchiveTemplate(
199+
sdkConstraint: other.sdkConstraint ?? sdkConstraint,
200+
);
201+
}
202+
203+
Map<String, dynamic> toJson() => _$TestArchiveTemplateToJson(this);
204+
}
205+
133206
@JsonSerializable(explicitToJson: true, includeIfNull: false)
134207
class TestPublisher {
135208
final String name;

app/lib/tool/test_profile/models.g.dart

+78-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/lib/tool/test_profile/normalizer.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ TestProfile normalize(TestProfile profile) {
1010
final users = <String, TestUser>{};
1111
final publishers = <String, TestPublisher>{};
1212
final importedPackages = <String, TestPackage>{};
13-
final generatedPackages = <String, TestPackage>{};
13+
final generatedPackages = <String, GeneratedTestPackage>{};
1414

1515
profile.users.forEach((user) {
1616
users[user.email] = user;

app/test/dartdoc/doc_url_test.dart

+7-7
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ void main() {
1616
final _testProfile = TestProfile(
1717
defaultUser: '[email protected]',
1818
generatedPackages: [
19-
TestPackage(
19+
GeneratedTestPackage(
2020
name: 'oxygen',
2121
versions: [
22-
TestVersion(version: '1.0.0'), // won't get analyzed
23-
TestVersion(version: '1.0.1'), // won't get analyzed
24-
TestVersion(version: '1.1.0'), // will get analyzed
25-
TestVersion(version: '2.0.0'), // won't get analyzed
26-
TestVersion(version: '2.0.1'), // will get analyzed
27-
TestVersion(version: '2.1.0'), // will get analyzed
22+
GeneratedTestVersion(version: '1.0.0'), // won't get analyzed
23+
GeneratedTestVersion(version: '1.0.1'), // won't get analyzed
24+
GeneratedTestVersion(version: '1.1.0'), // will get analyzed
25+
GeneratedTestVersion(version: '2.0.0'), // won't get analyzed
26+
GeneratedTestVersion(version: '2.0.1'), // will get analyzed
27+
GeneratedTestVersion(version: '2.1.0'), // will get analyzed
2828
],
2929
),
3030
],

app/test/frontend/handlers/custom_api_test.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,11 @@ void main() {
192192
'many versions',
193193
testProfile: TestProfile(
194194
generatedPackages: [
195-
TestPackage(
195+
GeneratedTestPackage(
196196
name: 'pkg',
197197
versions: List.generate(
198198
99,
199-
(index) => TestVersion(version: '1.$index.0'),
199+
(index) => GeneratedTestVersion(version: '1.$index.0'),
200200
),
201201
),
202202
],

app/test/frontend/handlers/listing_test.dart

+7-6
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,11 @@ void main() {
8686
testWithProfile('/packages?page=2',
8787
testProfile: TestProfile(
8888
defaultUser: '[email protected]',
89-
generatedPackages: List<TestPackage>.generate(
89+
generatedPackages: List.generate(
9090
15,
91-
(i) => TestPackage(
92-
name: 'pkg$i', versions: [TestVersion(version: '1.0.0')])),
91+
(i) => GeneratedTestPackage(
92+
name: 'pkg$i',
93+
versions: [GeneratedTestVersion(version: '1.0.0')])),
9394
), fn: () async {
9495
final present = ['pkg1', 'pkg4', 'pkg5', 'pkg12'];
9596
final absent = ['pkg0', 'pkg3', 'pkg6', 'pkg9', 'pkg10'];
@@ -104,7 +105,7 @@ void main() {
104105
'/flutter/packages',
105106
testProfile: TestProfile(
106107
generatedPackages:
107-
List.generate(3, (i) => TestPackage(name: 'package_$i')),
108+
List.generate(3, (i) => GeneratedTestPackage(name: 'package_$i')),
108109
defaultUser: '[email protected]',
109110
),
110111
fn: () async {
@@ -125,9 +126,9 @@ void main() {
125126
testWithProfile(
126127
'Flutter listings',
127128
testProfile: TestProfile(
128-
generatedPackages: List<TestPackage>.generate(
129+
generatedPackages: List.generate(
129130
15,
130-
(i) => TestPackage(
131+
(i) => GeneratedTestPackage(
131132
name: 'flutter_pkg$i',
132133
isFlutterFavorite: true,
133134
),

app/test/frontend/handlers/package_test.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,9 @@ void main() {
125125
'package pages without homepage',
126126
testProfile: TestProfile(
127127
generatedPackages: [
128-
TestPackage(
128+
GeneratedTestPackage(
129129
name: 'pkg',
130-
versions: [TestVersion(version: '1.0.0-nohomepage')]),
130+
versions: [GeneratedTestVersion(version: '1.0.0-nohomepage')]),
131131
],
132132
defaultUser: '[email protected]',
133133
),

app/test/frontend/handlers/publisher_test.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ void main() {
9898
'unlisted packages',
9999
testProfile: TestProfile(
100100
generatedPackages: [
101-
TestPackage(name: 'pkg_a', publisher: 'example.com'),
102-
TestPackage(
101+
GeneratedTestPackage(name: 'pkg_a', publisher: 'example.com'),
102+
GeneratedTestPackage(
103103
name: 'pkg_b',
104104
publisher: 'example.com',
105105
isUnlisted: true,

0 commit comments

Comments
 (0)