feat(shorebird_cli): add getApps and getReleases to CodePushClientWrapper (#834)
This commit is contained in:
@@ -60,6 +60,18 @@ class CodePushClientWrapper {
|
||||
|
||||
final CodePushClient codePushClient;
|
||||
|
||||
Future<List<AppMetadata>> getApps() async {
|
||||
final fetchAppsProgress = logger.progress('Fetching apps');
|
||||
try {
|
||||
final apps = (await codePushClient.getApps()).toList();
|
||||
fetchAppsProgress.complete();
|
||||
return apps;
|
||||
} catch (error) {
|
||||
fetchAppsProgress.fail('$error');
|
||||
exit(ExitCode.software.code);
|
||||
}
|
||||
}
|
||||
|
||||
Future<AppMetadata> getApp({required String appId}) async {
|
||||
final app = await maybeGetApp(appId: appId);
|
||||
if (app == null) {
|
||||
@@ -75,15 +87,8 @@ This app may not exist or you may not have permission to view it.''',
|
||||
}
|
||||
|
||||
Future<AppMetadata?> maybeGetApp({required String appId}) async {
|
||||
final fetchAppsProgress = logger.progress('Fetching apps');
|
||||
try {
|
||||
final apps = (await codePushClient.getApps()).toList();
|
||||
fetchAppsProgress.complete();
|
||||
return apps.firstWhereOrNull((a) => a.appId == appId);
|
||||
} catch (error) {
|
||||
fetchAppsProgress.fail('$error');
|
||||
exit(ExitCode.software.code);
|
||||
}
|
||||
final apps = await getApps();
|
||||
return apps.firstWhereOrNull((a) => a.appId == appId);
|
||||
}
|
||||
|
||||
@visibleForTesting
|
||||
@@ -177,20 +182,24 @@ Please create a release using "shorebird release" and try again.
|
||||
return release;
|
||||
}
|
||||
|
||||
Future<List<Release>> getReleases({required String appId}) async {
|
||||
final fetchReleasesProgress = logger.progress('Fetching releases');
|
||||
try {
|
||||
final releases = await codePushClient.getReleases(appId: appId);
|
||||
fetchReleasesProgress.complete();
|
||||
return releases;
|
||||
} catch (error) {
|
||||
fetchReleasesProgress.fail('$error');
|
||||
exit(ExitCode.software.code);
|
||||
}
|
||||
}
|
||||
|
||||
Future<Release?> maybeGetRelease({
|
||||
required String appId,
|
||||
required String releaseVersion,
|
||||
}) async {
|
||||
final List<Release> releases;
|
||||
final fetchReleaseProgress = logger.progress('Fetching release');
|
||||
try {
|
||||
releases = await codePushClient.getReleases(appId: appId);
|
||||
fetchReleaseProgress.complete();
|
||||
return releases.firstWhereOrNull((r) => r.version == releaseVersion);
|
||||
} catch (error) {
|
||||
fetchReleaseProgress.fail('$error');
|
||||
exit(ExitCode.software.code);
|
||||
}
|
||||
final releases = await getReleases(appId: appId);
|
||||
return releases.firstWhereOrNull((r) => r.version == releaseVersion);
|
||||
}
|
||||
|
||||
Future<Release> createRelease({
|
||||
|
||||
@@ -155,6 +155,32 @@ void main() {
|
||||
});
|
||||
|
||||
group('app', () {
|
||||
group('getApps', () {
|
||||
test('exits with code 70 when getting apps fails', () async {
|
||||
const error = 'something went wrong';
|
||||
when(() => codePushClient.getApps()).thenThrow(error);
|
||||
|
||||
await expectLater(
|
||||
() async => runWithOverrides(
|
||||
() => codePushClientWrapper.getApps(),
|
||||
),
|
||||
exitsWithCode(ExitCode.software),
|
||||
);
|
||||
verify(() => progress.fail(error)).called(1);
|
||||
});
|
||||
|
||||
test('returns apps on success', () async {
|
||||
when(() => codePushClient.getApps()).thenAnswer((_) async => [app]);
|
||||
|
||||
final apps = await runWithOverrides(
|
||||
() => codePushClientWrapper.getApps(),
|
||||
);
|
||||
|
||||
expect(apps, equals([app]));
|
||||
verify(() => progress.complete()).called(1);
|
||||
});
|
||||
});
|
||||
|
||||
group('getApp', () {
|
||||
test('exits with code 70 when getting app fails', () async {
|
||||
const error = 'something went wrong';
|
||||
@@ -389,6 +415,36 @@ Please bump your version number and try again.''',
|
||||
);
|
||||
});
|
||||
|
||||
group('getReleases', () {
|
||||
test('exits with code 70 when fetching release fails', () async {
|
||||
const error = 'something went wrong';
|
||||
when(
|
||||
() => codePushClient.getReleases(appId: any(named: 'appId')),
|
||||
).thenThrow(error);
|
||||
|
||||
await expectLater(
|
||||
() async => runWithOverrides(
|
||||
() => codePushClientWrapper.getReleases(appId: appId),
|
||||
),
|
||||
exitsWithCode(ExitCode.software),
|
||||
);
|
||||
verify(() => progress.fail(error)).called(1);
|
||||
});
|
||||
|
||||
test('returns releases on success', () async {
|
||||
when(
|
||||
() => codePushClient.getReleases(appId: any(named: 'appId')),
|
||||
).thenAnswer((_) async => [release]);
|
||||
|
||||
final releases = await runWithOverrides(
|
||||
() => codePushClientWrapper.getReleases(appId: appId),
|
||||
);
|
||||
|
||||
expect(releases, equals([release]));
|
||||
verify(() => progress.complete()).called(1);
|
||||
});
|
||||
});
|
||||
|
||||
group('getRelease', () {
|
||||
test('exits with code 70 when fetching release fails', () async {
|
||||
const error = 'something went wrong';
|
||||
|
||||
Reference in New Issue
Block a user