feat(shorebird_cli): add api.shorebird.dev access validator (#2491)
This commit is contained in:
@@ -29,6 +29,7 @@ class Doctor {
|
||||
ShorebirdVersionValidator(),
|
||||
ShorebirdFlutterValidator(),
|
||||
AndroidInternetPermissionValidator(),
|
||||
ShorebirdApiAccessValidator(),
|
||||
StorageAccessValidator(),
|
||||
ShorebirdYamlAssetValidator(),
|
||||
];
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:shorebird_cli/src/http_client/http_client.dart';
|
||||
import 'package:shorebird_cli/src/validators/validators.dart';
|
||||
|
||||
/// Verifies that the user has access to api.shorebird.dev.
|
||||
class ShorebirdApiAccessValidator extends Validator {
|
||||
@override
|
||||
String get description => 'Has access to api.shorebird.dev';
|
||||
|
||||
@override
|
||||
Future<List<ValidationIssue>> validate() async {
|
||||
final uri = Uri.parse('https://api.shorebird.dev');
|
||||
final result = await httpClient.get(uri);
|
||||
if (result.statusCode != HttpStatus.ok) {
|
||||
return [
|
||||
const ValidationIssue(
|
||||
severity: ValidationIssueSeverity.error,
|
||||
message: 'Unable to access api.shorebird.dev',
|
||||
),
|
||||
];
|
||||
}
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import 'package:shorebird_cli/src/shorebird_process.dart';
|
||||
|
||||
export 'android_internet_permission_validator.dart';
|
||||
export 'flavor_validator.dart';
|
||||
export 'shorebird_api_access_validator.dart';
|
||||
export 'shorebird_flutter_validator.dart';
|
||||
export 'shorebird_version_validator.dart';
|
||||
export 'shorebird_yaml_asset_validator.dart';
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
import 'package:scoped_deps/scoped_deps.dart';
|
||||
import 'package:shorebird_cli/src/http_client/http_client.dart';
|
||||
import 'package:shorebird_cli/src/validators/validators.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
import '../mocks.dart';
|
||||
|
||||
void main() {
|
||||
group(ShorebirdApiAccessValidator, () {
|
||||
late http.Client httpClient;
|
||||
late ShorebirdApiAccessValidator validator;
|
||||
|
||||
R runWithOverrides<R>(R Function() body) {
|
||||
return runScoped(
|
||||
() => body(),
|
||||
values: {
|
||||
httpClientRef.overrideWith(() => httpClient),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
setUpAll(() {
|
||||
registerFallbackValue(Uri());
|
||||
});
|
||||
|
||||
setUp(() {
|
||||
httpClient = MockHttpClient();
|
||||
validator = ShorebirdApiAccessValidator();
|
||||
|
||||
when(() => httpClient.get(any())).thenAnswer(
|
||||
(_) async => http.Response('', HttpStatus.ok),
|
||||
);
|
||||
});
|
||||
|
||||
group('description', () {
|
||||
test('has a non-empty description', () {
|
||||
expect(validator.description, isNotEmpty);
|
||||
});
|
||||
});
|
||||
|
||||
group('validate', () {
|
||||
group('when url is accessible', () {
|
||||
setUp(() {
|
||||
when(() => httpClient.get(any())).thenAnswer(
|
||||
(_) async => http.Response('', HttpStatus.ok),
|
||||
);
|
||||
});
|
||||
|
||||
test('returns empty list of validation issues', () async {
|
||||
final results = await runWithOverrides(validator.validate);
|
||||
expect(results, isEmpty);
|
||||
});
|
||||
});
|
||||
|
||||
group('when url is inaccessible', () {
|
||||
setUp(() {
|
||||
when(() => httpClient.get(any())).thenAnswer(
|
||||
(_) async => http.Response('Not Found', HttpStatus.notFound),
|
||||
);
|
||||
});
|
||||
|
||||
test('returns validation error', () async {
|
||||
final results = await runWithOverrides(validator.validate);
|
||||
expect(
|
||||
results,
|
||||
equals(
|
||||
[
|
||||
const ValidationIssue(
|
||||
severity: ValidationIssueSeverity.error,
|
||||
message: 'Unable to access api.shorebird.dev',
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user