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
5 changes: 4 additions & 1 deletion app/test/admin/exported_api_sync_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,10 @@ void main() {
});
});

testWithProfile('deleted files + full sync', fn: () async {
testWithProfile('deleted files + full sync', expectedLogMessages: [
// TODO: review why we have unhandled errors here
RegExp(r'^SEVERE Unhandled error in API handler \(incidentId: .*\)'),
], fn: () async {
await syncExportedApi();
final oldRoot = await listExportedApi();

Expand Down
47 changes: 40 additions & 7 deletions app/test/admin/moderate_package_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,11 @@ void main() {
);
}

testWithProfile('update state', fn: () async {
testWithProfile('update state', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc = await _report('neon');

await expectModerationActions(mc.caseId, actions: []);
Expand Down Expand Up @@ -104,7 +108,11 @@ void main() {
);
});

testWithProfile('clear moderation flag', fn: () async {
testWithProfile('clear moderation flag', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc = await _report('oxygen');
await expectModerationActions(mc.caseId, actions: []);
final r1 = await _moderate('oxygen', caseId: mc.caseId);
Expand Down Expand Up @@ -189,7 +197,11 @@ void main() {
});
});

testWithProfile('API endpoints return not found', fn: () async {
testWithProfile('API endpoints return not found', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final jsonUrls = [
'/api/packages/oxygen',
'/api/packages/oxygen/versions/1.0.0',
Expand All @@ -215,7 +227,11 @@ void main() {
});

testWithProfile('public pages are displaying moderation notice',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final htmlUrls = [
'/packages/oxygen',
'/packages/oxygen/changelog',
Expand Down Expand Up @@ -256,7 +272,11 @@ void main() {
actions: [ModerationAction.apply, ModerationAction.revert]);
});

testWithProfile('not included in search', fn: () async {
testWithProfile('not included in search', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
await searchBackend.doCreateAndUpdateSnapshot(
FakeGlobalLockClaim(clock.now().add(Duration(seconds: 3))),
concurrency: 2,
Expand Down Expand Up @@ -295,7 +315,12 @@ void main() {
expect(docs3!.where((d) => d.package == 'oxygen'), isNotEmpty);
});

testWithProfile('archives are removed from public buckets', fn: () async {
testWithProfile('archives are removed from public buckets',
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final publicUrls = [
'${activeConfiguration.storageBaseUrl}'
'/${activeConfiguration.publicPackagesBucketName}'
Expand Down Expand Up @@ -339,6 +364,11 @@ void main() {
testWithProfile(
'analysis results are cleared',
processJobsWithFakeRunners: true,
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
],
fn: () async {
final score1 =
await scoreCardBackend.getScoreCardData('oxygen', '1.2.0');
Expand Down Expand Up @@ -386,7 +416,10 @@ void main() {

testWithProfile(
'cleanup deletes datastore entities and canonical archive file',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
// delete old version
await accountBackend.withBearerToken(siteAdminToken, () async {
await adminBackend.removePackageVersion('oxygen', '1.0.0');
Expand Down
56 changes: 44 additions & 12 deletions app/test/admin/moderate_package_version_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@ void main() {
);
}

testWithProfile('update state', fn: () async {
testWithProfile('update state', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
final mc = await _report('oxygen', '1.0.0');
final r1 = await _moderate('oxygen', '1.0.0');
expect(r1.output, {
Expand Down Expand Up @@ -109,7 +111,9 @@ void main() {
expect(mc2!.getActionLog().entries, hasLength(1));
});

testWithProfile('clear moderation flag', fn: () async {
testWithProfile('clear moderation flag', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
final r1 = await _moderate('oxygen', '1.0.0', state: true);
expect(r1.output, {
'package': 'oxygen',
Expand Down Expand Up @@ -143,7 +147,11 @@ void main() {
expect(optionsUpdates.isRetracted, true);
});

testWithProfile('cannot moderate last visible version', fn: () async {
testWithProfile('cannot moderate last visible version',
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
await _moderate('oxygen', '1.2.0', state: true);
final p1 = await packageBackend.lookupPackage('oxygen');
expect(p1!.latestVersion, '1.0.0');
Expand All @@ -164,7 +172,9 @@ void main() {
);
});

testWithProfile('can publish new version', fn: () async {
testWithProfile('can publish new version', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
await _moderate('oxygen', '1.0.0', state: true);

final pubspecContent = generatePubspecYaml('oxygen', '3.0.0');
Expand All @@ -174,7 +184,10 @@ void main() {
expect(message.success.message, contains('Successfully uploaded'));
});

testWithProfile('cannot re-publish moderated version', fn: () async {
testWithProfile('cannot re-publish moderated version',
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
await _moderate('oxygen', '1.0.0', state: true);

final pubspecContent = generatePubspecYaml('oxygen', '1.0.0');
Expand All @@ -189,7 +202,9 @@ void main() {
});

testWithProfile('archive file is removed from public buckets',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
Future<Uint8List?> expectStatusCode(int statusCode,
{String version = '1.0.0'}) async {
final publicUrls = [
Expand Down Expand Up @@ -232,7 +247,9 @@ void main() {
});

testWithProfile('versions file is updated in exported bucket',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
Future<void> expectIncluded(String version, bool isIncluded) async {
final prefixes = ['latest', runtimeVersion];
for (final prefix in prefixes) {
Expand All @@ -257,7 +274,9 @@ void main() {
await expectIncluded('1.0.0', true);
});

testWithProfile('search is updated with new version', fn: () async {
testWithProfile('search is updated with new version', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
], fn: () async {
await searchBackend.doCreateAndUpdateSnapshot(
FakeGlobalLockClaim(clock.now().add(Duration(seconds: 3))),
concurrency: 2,
Expand Down Expand Up @@ -298,7 +317,10 @@ void main() {

testWithProfile(
'moderated version is not visible in API (other version is)',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
], fn: () async {
await _moderate('oxygen', '1.0.0', state: true);
final rs1 = await packageBackend.listVersionsCached('oxygen');
expect(rs1.latest.version, '1.2.0');
Expand All @@ -325,7 +347,9 @@ void main() {
});

testWithProfile('moderated versions are not displayed on versions tab',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
], fn: () async {
await _moderate('oxygen', '1.2.0', state: true);
await expectHtmlResponse(
await issueGet('/packages/oxygen/versions'),
Expand All @@ -339,7 +363,10 @@ void main() {
);
});

testWithProfile('moderated version pages are not displayed', fn: () async {
testWithProfile('moderated version pages are not displayed',
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
], fn: () async {
List<String> pagePaths(String version) {
return [
'/packages/oxygen/versions/$version',
Expand Down Expand Up @@ -415,6 +442,9 @@ void main() {
testWithProfile(
'moderated version trigger new analysis',
processJobsWithFakeRunners: true,
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
],
fn: () async {
final score1 =
await scoreCardBackend.getScoreCardData('oxygen', '1.2.0');
Expand Down Expand Up @@ -468,7 +498,9 @@ void main() {

testWithProfile(
'cleanup deletes datastore entities and canonical archive file',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
// canonical file is present
expect(
await packageBackend.tarballStorage
Expand Down
24 changes: 20 additions & 4 deletions app/test/admin/moderation_case_resolve_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,11 @@ void main() {
expect(await _close(mc.caseId), 'no-action');
});

testWithProfile('notification: apply moderation', fn: () async {
testWithProfile('notification: apply moderation', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc = await _prepare(apply: true);
expect(
await _close(
Expand All @@ -87,7 +91,11 @@ void main() {
);
});

testWithProfile('appeal no action: revert', fn: () async {
testWithProfile('appeal no action: revert', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc1 = await _prepare(apply: null);
await _close(mc1.caseId);

Expand All @@ -108,7 +116,11 @@ void main() {
expect(await _close(mc.caseId), 'no-action-upheld');
});

testWithProfile('appeal moderation: revert', fn: () async {
testWithProfile('appeal moderation: revert', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc1 = await _prepare(apply: true);
await _close(
mc1.caseId,
Expand All @@ -119,7 +131,11 @@ void main() {
expect(await _close(mc.caseId), 'moderation-reverted');
});

testWithProfile('appeal moderation: upheld', fn: () async {
testWithProfile('appeal moderation: upheld', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc1 = await _prepare(apply: true);
await _close(
mc1.caseId,
Expand Down
12 changes: 10 additions & 2 deletions app/test/admin/moderation_transparency_metrics_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,11 @@ void main() {
expect(text, contains('Total number of actions taken,0\r\n'));
});

testWithProfile('moderated package', fn: () async {
testWithProfile('moderated package', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc = await _report('oxygen');
await _moderatePkg('oxygen', caseId: mc.caseId, state: true);
await _resolve(
Expand Down Expand Up @@ -222,7 +226,11 @@ void main() {
]));
});

testWithProfile('appeal', fn: () async {
testWithProfile('appeal', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc = await _report('oxygen');
await _moderatePkg('oxygen', caseId: mc.caseId, state: true);
await _resolve(
Expand Down
12 changes: 10 additions & 2 deletions app/test/package/api_export/api_exporter_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,12 @@ final _testProfile = TestProfile(
);

void main() {
testWithFakeTime('synchronizeExportedApi()', testProfile: _testProfile,
(fakeTime) async {
testWithFakeTime('synchronizeExportedApi()',
testProfile: _testProfile,
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/bar-2.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/bar-3.0.0.tar.gz".',
], (fakeTime) async {
await storageService.createBucket('bucket');
final bucket = storageService.bucket('bucket');
final apiExporter =
Expand All @@ -59,6 +63,10 @@ void main() {

testWithFakeTime(
'apiExporter.start()',
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/bar-2.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/bar-3.0.0.tar.gz".',
],
testProfile: _testProfile,
(fakeTime) async {
await storageService.createBucket('bucket');
Expand Down
Loading
Loading