@@ -20,4 +20,43 @@ void main() {
2020 server.retractPackageVersion ('foo' , '1.5.0' );
2121 await pubUpgrade (output: contains ('< foo 1.0.0' ));
2222 });
23+
24+ test (
25+ 'upgrade will not downgrade if current version is not unlocked' ,
26+ () async {
27+ final server = await servePackages ();
28+
29+ server.serve ('foo' , '1.0.0' );
30+ server.serve ('foo' , '1.5.0' );
31+
32+ server.serve ('bar' , '1.0.0' );
33+ server.serve ('bar' , '1.5.0' );
34+
35+ await d.appDir (dependencies: {'foo' : '^1.0.0' , 'bar' : '^1.0.0' }).create ();
36+
37+ await pubGet (
38+ output: allOf (contains ('+ foo 1.5.0' ), contains ('+ bar 1.5.0' )),
39+ );
40+ server.retractPackageVersion ('foo' , '1.5.0' );
41+ server.retractPackageVersion ('bar' , '1.5.0' );
42+
43+ await pubUpgrade (
44+ args: ['foo' ], // bar stays locked, we are only upgrading foo.
45+ output: allOf (contains ('< foo 1.0.0' ), isNot (contains ('bar' ))),
46+ );
47+ },
48+ );
49+
50+ test ('downgrade will upgrade if current version is retracted' , () async {
51+ final server = await servePackages ();
52+
53+ server.serve ('foo' , '1.0.0' );
54+
55+ await d.appDir (dependencies: {'foo' : '^1.0.0' }).create ();
56+ await pubGet (output: contains ('+ foo 1.0.0' ));
57+ server.serve ('foo' , '1.5.0' );
58+
59+ server.retractPackageVersion ('foo' , '1.0.0' );
60+ await pubDowngrade (output: contains ('> foo 1.5.0' ));
61+ });
2362}
0 commit comments