@@ -21,6 +21,7 @@ import 'package:pub_dev/tool/test_profile/importer.dart';
2121import 'package:pub_dev/tool/test_profile/models.dart' ;
2222import 'package:test/test.dart' ;
2323
24+ import '../shared/handlers_test_utils.dart' ;
2425import '../shared/test_services.dart' ;
2526import 'fake_time.dart' ;
2627
@@ -695,6 +696,88 @@ void main() {
695696 TestUser (email: 'admin@pub.dev' , likes: []),
696697 ],
697698 ));
699+
700+ testWithFakeTime (
701+ 'new version during ongoing analysis' ,
702+ testProfile: TestProfile (
703+ defaultUser: 'admin@pub.dev' ,
704+ packages: [
705+ TestPackage (
706+ name: 'neon' ,
707+ versions: [TestVersion (version: '1.0.0' )],
708+ ),
709+ ],
710+ users: [
711+ TestUser (email: 'admin@pub.dev' , likes: []),
712+ ],
713+ ),
714+ (fakeTime) async {
715+ await taskBackend.backfillTrackingState ();
716+ await taskBackend.start ();
717+ await fakeTime.elapse (minutes: 15 );
718+ {
719+ final instances = await cloud.listInstances ().toList ();
720+ // There is only one package, so we should only get one instance
721+ expect (instances, hasLength (1 ));
722+
723+ final instance = instances.first;
724+ final payload = instance.payload;
725+
726+ // There should only be one version
727+ expect (payload.versions, hasLength (1 ));
728+ final v = payload.versions.first;
729+
730+ // Create new versions, removing the token from the first version
731+ await importProfile (
732+ source: ImportSource .autoGenerated (),
733+ profile: TestProfile (
734+ defaultUser: 'admin@pub.dev' ,
735+ packages: [
736+ TestPackage (
737+ name: 'neon' ,
738+ versions: [
739+ TestVersion (version: '1.1.0' ),
740+ TestVersion (version: '1.2.0' ),
741+ TestVersion (version: '2.0.0' ),
742+ TestVersion (version: '3.0.0' ),
743+ TestVersion (version: '4.0.0' ),
744+ TestVersion (version: '5.0.0' ),
745+ ],
746+ ),
747+ ],
748+ ),
749+ );
750+
751+ await fakeTime.elapse (minutes: 15 );
752+
753+ // Use token to get the upload information
754+ final api = createPubApiClient (authToken: v.token);
755+ await expectApiException (
756+ api.taskUploadResult (
757+ payload.package,
758+ v.version,
759+ ),
760+ status: 400 ,
761+ code: 'TaskAborted' ,
762+ message: 'neon/1.0.0 has been aborted.' ,
763+ );
764+
765+ // Report the task as finished
766+ await expectApiException (
767+ api.taskUploadFinished (payload.package, v.version),
768+ status: 400 ,
769+ code: 'TaskAborted' ,
770+ message: 'neon/1.0.0 has been aborted.' ,
771+ );
772+ }
773+ // Leave time for the instance to be deleted (takes 1 min in fake cloud)
774+ await fakeTime.elapse (minutes: 5 );
775+
776+ await taskBackend.stop ();
777+
778+ await fakeTime.elapse (minutes: 10 );
779+ },
780+ );
698781}
699782
700783extension < T > on Stream <T > {
0 commit comments