Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions app/lib/tool/test_profile/import_source.dart
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,10 @@ class ImportSource {
}

Future<List<int>> getGeneratedArchiveBytes(
String package, String version) async {
String package,
String version,
TestArchiveTemplate? template,
) async {
final key = '$package/$version';
final hasher = createHasher(key);
if (_archives.containsKey(key)) {
Expand All @@ -109,7 +112,8 @@ class ImportSource {
final hasRepository = hasher('hasRepository', max: 20) > 0;
final isLegacy = version.contains('legacy');

final sdkConstraint = isLegacy ? '>=1.12.0 <2.0.0' : '^3.0.0';
final sdkConstraint =
template?.sdkConstraint ?? (isLegacy ? '>=1.12.0 <2.0.0' : '^3.0.0');

final isFlutter = package.startsWith('flutter_');
final screenshot = TestScreenshot.success();
Expand Down
22 changes: 17 additions & 5 deletions app/lib/tool/test_profile/importer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -97,18 +97,30 @@ Future<void> importProfile({
uploaderEmails[rv.version.hashCode.abs() % uploaderEmails.length];
lastActiveUploaderEmails[rv.package] = uploaderEmail;

var bytes = pendingBytes['${rv.package}/${rv.version}'] ??
(importedVersions.contains(rv)
? await source.getPubDevArchiveBytes(rv.package, rv.version)
: await source.getGeneratedArchiveBytes(rv.package, rv.version));
var bytes = pendingBytes['${rv.package}/${rv.version}'];
if (bytes == null) {
if (importedVersions.contains(rv)) {
bytes = await source.getPubDevArchiveBytes(rv.package, rv.version);
} else {
final gp = profile.generatedPackages
.firstWhereOrNull((p) => p.name == rv.package);
final gv =
gp?.versions?.firstWhereOrNull((v) => v.version == rv.version);
var template = gp?.template;
template =
template?.overrideWith(gv?.template) ?? gv?.template ?? template;
bytes = await source.getGeneratedArchiveBytes(
rv.package, rv.version, template);
}
}
bytes = await _mayCleanupTarModeBits(bytes);
try {
// TODO: use the created field with fake clock header to set the published timestamp
await withRetryPubApiClient(
authToken: createFakeAuthTokenForEmail(uploaderEmail,
audience: activeConfiguration.pubClientAudience),
pubHostedUrl: pubHostedUrl,
(client) => client.uploadPackageBytes(bytes),
(client) => client.uploadPackageBytes(bytes!),
);
published = true;
} catch (e, st) {
Expand Down
95 changes: 84 additions & 11 deletions app/lib/tool/test_profile/models.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class TestProfile {
final List<TestPackage> importedPackages;

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

Expand All @@ -31,12 +31,12 @@ class TestProfile {

TestProfile({
List<TestPackage>? importedPackages,
List<TestPackage>? generatedPackages,
List<GeneratedTestPackage>? generatedPackages,
List<TestPublisher>? publishers,
List<TestUser>? users,
this.defaultUser,
}) : importedPackages = importedPackages ?? <TestPackage>[],
generatedPackages = generatedPackages ?? <TestPackage>[],
generatedPackages = generatedPackages ?? <GeneratedTestPackage>[],
publishers = publishers ?? <TestPublisher>[],
users = users ?? <TestUser>[];

Expand Down Expand Up @@ -98,14 +98,7 @@ class TestPackage {
});

factory TestPackage.fromJson(Map<String, dynamic> json) {
// convert simple String versions to objects
final versions = json['versions'] as List?;
json = {
...json,
'versions':
versions?.map((v) => v is String ? {'version': v} : v).toList(),
};
return _$TestPackageFromJson(json);
return _$TestPackageFromJson(_expandPackageJson(json));
}

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

@JsonSerializable(explicitToJson: true, includeIfNull: false)
class GeneratedTestPackage extends TestPackage {
@override
// ignore: overridden_fields
final List<GeneratedTestVersion>? versions;

final TestArchiveTemplate? template;

GeneratedTestPackage({
required super.name,
super.uploaders,
super.publisher,
this.versions,
super.isDiscontinued,
super.replacedBy,
super.isUnlisted,
super.isFlutterFavorite,
super.retractedVersions,
super.likeCount,
this.template,
});

factory GeneratedTestPackage.fromJson(Map<String, dynamic> json) {
return _$GeneratedTestPackageFromJson(_expandPackageJson(json));
}

@override
Map<String, dynamic> toJson() => _$GeneratedTestPackageToJson(this);
}

Map<String, dynamic> _expandPackageJson(Map<String, dynamic> json) {
// convert simple String versions to objects
final versions = json['versions'] as List?;
return {
...json,
'versions': versions?.map((v) => v is String ? {'version': v} : v).toList(),
};
}

@JsonSerializable(explicitToJson: true, includeIfNull: false)
class GeneratedTestVersion extends TestVersion {
final TestArchiveTemplate? template;

GeneratedTestVersion({
required super.version,
super.created,
this.template,
});

factory GeneratedTestVersion.fromJson(Map<String, dynamic> json) =>
_$GeneratedTestVersionFromJson(json);

@override
Map<String, dynamic> toJson() => _$GeneratedTestVersionToJson(this);

@override
String toString() => '$version';
}

@JsonSerializable(explicitToJson: true, includeIfNull: false)
class TestArchiveTemplate {
final String? sdkConstraint;

TestArchiveTemplate({
this.sdkConstraint,
});

factory TestArchiveTemplate.fromJson(Map<String, dynamic> json) =>
_$TestArchiveTemplateFromJson(json);

TestArchiveTemplate overrideWith(TestArchiveTemplate? other) {
if (other == null) return this;
return TestArchiveTemplate(
sdkConstraint: other.sdkConstraint ?? sdkConstraint,
);
}

Map<String, dynamic> toJson() => _$TestArchiveTemplateToJson(this);
}

@JsonSerializable(explicitToJson: true, includeIfNull: false)
class TestPublisher {
final String name;
Expand Down
79 changes: 78 additions & 1 deletion app/lib/tool/test_profile/models.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion app/lib/tool/test_profile/normalizer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ TestProfile normalize(TestProfile profile) {
final users = <String, TestUser>{};
final publishers = <String, TestPublisher>{};
final importedPackages = <String, TestPackage>{};
final generatedPackages = <String, TestPackage>{};
final generatedPackages = <String, GeneratedTestPackage>{};

profile.users.forEach((user) {
users[user.email] = user;
Expand Down
14 changes: 7 additions & 7 deletions app/test/dartdoc/doc_url_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ void main() {
final _testProfile = TestProfile(
defaultUser: '[email protected]',
generatedPackages: [
TestPackage(
GeneratedTestPackage(
name: 'oxygen',
versions: [
TestVersion(version: '1.0.0'), // won't get analyzed
TestVersion(version: '1.0.1'), // won't get analyzed
TestVersion(version: '1.1.0'), // will get analyzed
TestVersion(version: '2.0.0'), // won't get analyzed
TestVersion(version: '2.0.1'), // will get analyzed
TestVersion(version: '2.1.0'), // will get analyzed
GeneratedTestVersion(version: '1.0.0'), // won't get analyzed
GeneratedTestVersion(version: '1.0.1'), // won't get analyzed
GeneratedTestVersion(version: '1.1.0'), // will get analyzed
GeneratedTestVersion(version: '2.0.0'), // won't get analyzed
GeneratedTestVersion(version: '2.0.1'), // will get analyzed
GeneratedTestVersion(version: '2.1.0'), // will get analyzed
],
),
],
Expand Down
4 changes: 2 additions & 2 deletions app/test/frontend/handlers/custom_api_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -192,11 +192,11 @@ void main() {
'many versions',
testProfile: TestProfile(
generatedPackages: [
TestPackage(
GeneratedTestPackage(
name: 'pkg',
versions: List.generate(
99,
(index) => TestVersion(version: '1.$index.0'),
(index) => GeneratedTestVersion(version: '1.$index.0'),
),
),
],
Expand Down
13 changes: 7 additions & 6 deletions app/test/frontend/handlers/listing_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,11 @@ void main() {
testWithProfile('/packages?page=2',
testProfile: TestProfile(
defaultUser: '[email protected]',
generatedPackages: List<TestPackage>.generate(
generatedPackages: List.generate(
15,
(i) => TestPackage(
name: 'pkg$i', versions: [TestVersion(version: '1.0.0')])),
(i) => GeneratedTestPackage(
name: 'pkg$i',
versions: [GeneratedTestVersion(version: '1.0.0')])),
), fn: () async {
final present = ['pkg1', 'pkg4', 'pkg5', 'pkg12'];
final absent = ['pkg0', 'pkg3', 'pkg6', 'pkg9', 'pkg10'];
Expand All @@ -104,7 +105,7 @@ void main() {
'/flutter/packages',
testProfile: TestProfile(
generatedPackages:
List.generate(3, (i) => TestPackage(name: 'package_$i')),
List.generate(3, (i) => GeneratedTestPackage(name: 'package_$i')),
defaultUser: '[email protected]',
),
fn: () async {
Expand All @@ -125,9 +126,9 @@ void main() {
testWithProfile(
'Flutter listings',
testProfile: TestProfile(
generatedPackages: List<TestPackage>.generate(
generatedPackages: List.generate(
15,
(i) => TestPackage(
(i) => GeneratedTestPackage(
name: 'flutter_pkg$i',
isFlutterFavorite: true,
),
Expand Down
4 changes: 2 additions & 2 deletions app/test/frontend/handlers/package_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,9 @@ void main() {
'package pages without homepage',
testProfile: TestProfile(
generatedPackages: [
TestPackage(
GeneratedTestPackage(
name: 'pkg',
versions: [TestVersion(version: '1.0.0-nohomepage')]),
versions: [GeneratedTestVersion(version: '1.0.0-nohomepage')]),
],
defaultUser: '[email protected]',
),
Expand Down
4 changes: 2 additions & 2 deletions app/test/frontend/handlers/publisher_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,8 @@ void main() {
'unlisted packages',
testProfile: TestProfile(
generatedPackages: [
TestPackage(name: 'pkg_a', publisher: 'example.com'),
TestPackage(
GeneratedTestPackage(name: 'pkg_a', publisher: 'example.com'),
GeneratedTestPackage(
name: 'pkg_b',
publisher: 'example.com',
isUnlisted: true,
Expand Down
Loading