Skip to content

Commit

Permalink
feat(shorebird_cli): add api.shorebird.dev access validator (#2491)
Browse files Browse the repository at this point in the history
  • Loading branch information
felangel authored Sep 23, 2024
1 parent 50d3ffc commit 158764f
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 0 deletions.
1 change: 1 addition & 0 deletions packages/shorebird_cli/lib/src/doctor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class Doctor {
ShorebirdVersionValidator(),
ShorebirdFlutterValidator(),
AndroidInternetPermissionValidator(),
ShorebirdApiAccessValidator(),
StorageAccessValidator(),
ShorebirdYamlAssetValidator(),
];
Expand Down
Original file line number Diff line number Diff line change
@@ -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 [];
}
}
1 change: 1 addition & 0 deletions packages/shorebird_cli/lib/src/validators/validators.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
Original file line number Diff line number Diff line change
@@ -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',
),
],
),
);
});
});
});
});
}

0 comments on commit 158764f

Please sign in to comment.