| // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'package:shelf/shelf.dart'; |
| |
| import 'package:test/test.dart'; |
| import 'package:test_descriptor/test_descriptor.dart'; |
| |
| import 'descriptor.dart' as d; |
| import 'test_pub.dart'; |
| |
| void main() { |
| test('suggests an upgrade to the flutter sdk', () async { |
| await d.dir('flutter', [d.flutterVersion('1.2.3')]).create(); |
| final server = await servePackages(); |
| server.serve( |
| 'foo', |
| '1.0.0', |
| pubspec: { |
| 'environment': {'flutter': '>=3.3.0', 'sdk': '^2.17.0'}, |
| }, |
| ); |
| server.handle( |
| '/flutterReleases', |
| (request) => Response.ok(releasesMockResponse), |
| ); |
| await d.dir(appPath, [ |
| d.libPubspec('myApp', '1.0.0', deps: {'foo': 'any'}, sdk: '^2.17.0'), |
| ]).create(); |
| await pubGet( |
| error: contains('* Try using the Flutter SDK version: 3.3.2.'), |
| environment: { |
| '_PUB_TEST_SDK_VERSION': '2.17.0', |
| 'FLUTTER_ROOT': path('flutter'), |
| '_PUB_TEST_FLUTTER_RELEASES_URL': '${server.url}/flutterReleases', |
| 'PUB_ENVIRONMENT': 'flutter_cli', |
| }, |
| ); |
| }); |
| |
| test('suggests an upgrade to the dart sdk', () async { |
| final server = await servePackages(); |
| server.serve( |
| 'foo', |
| '1.0.0', |
| pubspec: { |
| 'environment': {'sdk': '>=2.18.0 <2.18.1'}, |
| }, |
| ); |
| server.handle( |
| '/flutterReleases', |
| (request) => Response.ok(releasesMockResponse), |
| ); |
| await d.dir(appPath, [ |
| d.libPubspec('myApp', '1.0.0', deps: {'foo': 'any'}, sdk: '^2.17.0'), |
| ]).create(); |
| await pubGet( |
| error: contains('* Try using the Dart SDK version: 2.18.0'), |
| environment: { |
| '_PUB_TEST_SDK_VERSION': '2.17.0', |
| '_PUB_TEST_FLUTTER_RELEASES_URL': '${server.url}/flutterReleases', |
| }, |
| ); |
| }); |
| |
| test('suggests an upgrade or downgrade to a package constraint', () async { |
| final server = await servePackages(); |
| server.serve('foo', '1.0.0', deps: {'bar': '^2.0.0'}); |
| server.serve('foo', '0.9.0', deps: {'bar': '^1.0.0'}); |
| |
| server.serve('bar', '1.0.0'); |
| server.serve('bar', '2.0.0'); |
| |
| await d.dir(appPath, [ |
| d.libPubspec( |
| 'myApp', |
| '1.0.0', |
| deps: {'foo': '^1.0.0'}, |
| devDeps: {'bar': '^1.0.0'}, |
| ), |
| ]).create(); |
| await pubGet( |
| error: allOf( |
| [ |
| contains( |
| '* Consider downgrading your constraint on foo: dart pub add foo:^0.9.0', |
| ), |
| contains( |
| '* Try upgrading your constraint on bar: dart pub add dev:bar:^2.0.0', |
| ), |
| ], |
| ), |
| ); |
| }); |
| |
| test('suggests an update to an empty package constraint', () async { |
| final server = await servePackages(); |
| server.serve('foo', '1.0.0'); |
| |
| await d.dir(appPath, [ |
| d.libPubspec( |
| 'myApp', |
| '1.0.0', |
| deps: {'foo': '>1.0.0 <=0.0.0'}, |
| ), |
| ]).create(); |
| await pubGet( |
| error: allOf( |
| [ |
| contains( |
| '* Try updating your constraint on foo: dart pub add foo:^1.0.0', |
| ), |
| ], |
| ), |
| ); |
| }); |
| |
| test('suggests updates to multiple packages', () async { |
| final server = await servePackages(); |
| server.serve('foo', '1.0.0', deps: {'bar': '2.0.0'}); |
| server.serve('bar', '1.0.0', deps: {'foo': '2.0.0'}); |
| server.serve('foo', '2.0.0', deps: {'bar': '2.0.0'}); |
| server.serve('bar', '2.0.0', deps: {'foo': '2.0.0'}); |
| |
| await d.dir(appPath, [ |
| d.libPubspec( |
| 'myApp', |
| '1.0.0', |
| deps: {'foo': '1.0.0'}, |
| devDeps: {'bar': '1.0.0'}, |
| ), |
| ]).create(); |
| await pubGet( |
| error: contains( |
| '* Try updating the following constraints: dart pub add dev:bar:^2.0.0 foo:^2.0.0', |
| ), |
| ); |
| }); |
| |
| test('suggests a major upgrade if more than 5 needs to be upgraded', |
| () async { |
| final server = await servePackages(); |
| server.serve('foo', '1.0.0', deps: {'bar': '2.0.0'}); |
| server.serve('bar', '1.0.0', deps: {'foo': '2.0.0'}); |
| server.serve('foo', '2.0.0', deps: {'bar': '2.0.0'}); |
| server.serve('bar', '2.0.0', deps: {'foo': '2.0.0'}); |
| server.serve('foo1', '1.0.0', deps: {'bar1': '2.0.0'}); |
| server.serve('bar1', '1.0.0', deps: {'foo1': '2.0.0'}); |
| server.serve('foo1', '2.0.0', deps: {'bar1': '2.0.0'}); |
| server.serve('bar1', '2.0.0', deps: {'foo1': '2.0.0'}); |
| server.serve('foo2', '1.0.0', deps: {'bar2': '2.0.0'}); |
| server.serve('bar2', '1.0.0', deps: {'foo2': '2.0.0'}); |
| server.serve('foo2', '2.0.0', deps: {'bar2': '2.0.0'}); |
| server.serve('bar2', '2.0.0', deps: {'foo2': '2.0.0'}); |
| |
| await d.dir(appPath, [ |
| d.libPubspec( |
| 'myApp', |
| '1.0.0', |
| deps: { |
| 'foo': '1.0.0', |
| 'bar': '1.0.0', |
| 'foo1': '1.0.0', |
| 'bar1': '1.0.0', |
| 'foo2': '1.0.0', |
| 'bar2': '1.0.0', |
| }, |
| ), |
| ]).create(); |
| await pubGet( |
| error: contains( |
| '* Try an upgrade of your constraints: dart pub upgrade --major-versions', |
| ), |
| ); |
| }); |
| |
| test('suggests upgrades to non-default servers', () async { |
| final server = await servePackages(); |
| final server2 = await startPackageServer(); |
| server.serve( |
| 'foo', |
| '1.0.0', |
| deps: { |
| 'bar': {'version': '2.0.0', 'hosted': server2.url}, |
| }, |
| ); |
| |
| server2.serve('bar', '1.0.0'); |
| server2.serve('bar', '2.0.0'); |
| |
| await d.dir(appPath, [ |
| d.libPubspec( |
| 'myApp', |
| '1.0.0', |
| deps: { |
| 'foo': '^1.0.0', |
| 'bar': {'version': '^1.0.0', 'hosted': server2.url}, |
| }, |
| ), |
| ]).create(); |
| await pubGet( |
| error: contains( |
| '* Try upgrading your constraint on bar: dart pub add ' |
| 'bar:\'{"version":"^2.0.0","hosted":"${server2.url}"}\'', |
| ), |
| ); |
| await pubAdd( |
| args: ['bar:{"version":"^2.0.0","hosted":"${server2.url}"}'], |
| ); |
| await d.dir(appPath, [ |
| d.libPubspec( |
| 'myApp', |
| '1.0.0', |
| deps: { |
| 'foo': '^1.0.0', |
| 'bar': {'version': '^2.0.0', 'hosted': server2.url}, |
| }, |
| ), |
| ]).validate(); |
| }); |
| } |
| |
| const releasesMockResponse = ''' |
| { |
| "base_url": "https://storage.googleapis.com/flutter_infra_release/releases", |
| "current_release": { |
| "beta": "096162697a9cdc79f4e47f7230d70935fa81fd24", |
| "dev": "13a2fb10b838971ce211230f8ffdd094c14af02c", |
| "stable": "e3c29ec00c9c825c891d75054c63fcc46454dca1" |
| }, |
| "releases": [ |
| { |
| "hash": "e3c29ec00c9c825c891d75054c63fcc46454dca1", |
| "channel": "stable", |
| "version": "3.3.2", |
| "dart_sdk_version": "2.18.1", |
| "dart_sdk_arch": "x64", |
| "release_date": "2022-09-14T15:06:55.724077Z", |
| "archive": "stable/linux/flutter_linux_3.3.2-stable.tar.xz", |
| "sha256": "a733a75ae07c42b2059a31fc9d64fabfae5dccd15770fa6b7f290e3f5f9c98e8" |
| }, |
| { |
| "hash": "4f9d92fbbdf072a70a70d2179a9f87392b94104c", |
| "channel": "stable", |
| "version": "3.3.1", |
| "dart_sdk_version": "2.18.0", |
| "dart_sdk_arch": "x64", |
| "release_date": "2022-09-07T15:30:42.283999Z", |
| "archive": "stable/linux/flutter_linux_3.3.1-stable.tar.xz", |
| "sha256": "7cbcff0230affbe07a5ce82298044ac437e96aeba69f83656f9ed9a910a392e7" |
| }, |
| { |
| "hash": "ffccd96b62ee8cec7740dab303538c5fc26ac543", |
| "channel": "stable", |
| "version": "3.3.0", |
| "dart_sdk_version": "2.18.0", |
| "dart_sdk_arch": "x64", |
| "release_date": "2022-08-30T17:22:12.916008Z", |
| "archive": "stable/linux/flutter_linux_3.3.0-stable.tar.xz", |
| "sha256": "a92a27aa6d4454d7a1cf9f8a0a56e0e5d6865f2cfcd21cf52e57f7922ad5d504" |
| }, |
| { |
| "hash": "096162697a9cdc79f4e47f7230d70935fa81fd24", |
| "channel": "beta", |
| "version": "3.3.0-0.5.pre", |
| "dart_sdk_version": "2.18.0 (build 2.18.0-271.7.beta)", |
| "dart_sdk_arch": "x64", |
| "release_date": "2022-08-23T17:03:21.525151Z", |
| "archive": "beta/linux/flutter_linux_3.3.0-0.5.pre-beta.tar.xz", |
| "sha256": "8e07158a64a8ce79f9169cffe4ff23a486bdabb29401f13177672fae18de52d2" |
| } |
| ] |
| } |
| '''; |