feat(shorebird_code_push_client): add update release support (#851)

This commit is contained in:
Bryan Oltman
2023-07-17 11:54:30 -07:00
committed by GitHub
parent 198349cf8a
commit bf70d4db9d
2 changed files with 84 additions and 0 deletions
@@ -302,6 +302,27 @@ class CodePushClient {
return Release.fromJson(body);
}
/// Updates the specified release's status to [status].
Future<void> updateReleaseStatus({
required int releaseId,
required String platform,
required ReleaseStatus status,
}) async {
final response = await _httpClient.patch(
Uri.parse('$_v1/releases/$releaseId'),
body: json.encode(
UpdateReleaseRequest(
status: status,
platform: platform,
).toJson(),
),
);
if (response.statusCode != HttpStatus.noContent) {
throw _parseErrorResponse(response.statusCode, response.body);
}
}
/// Remove [userId] as a collaborator from [appId].
Future<void> deleteCollaborator({
required String appId,
@@ -1136,6 +1136,69 @@ void main() {
});
});
group('updateReleaseStatus', () {
const releaseId = 42;
const platform = 'android';
test('makes the correct request', () async {
codePushClient
.updateReleaseStatus(
releaseId: releaseId,
platform: platform,
status: ReleaseStatus.active,
)
.ignore();
final request = verify(() => httpClient.send(captureAny()))
.captured
.single as http.BaseRequest;
expect(request.method, equals('PATCH'));
expect(request.url, equals(v1('releases/$releaseId')));
expect(request.hasStandardHeaders, isTrue);
});
test('throws an exception if the response is not a 204', () async {
when(() => httpClient.send(any())).thenAnswer(
(_) async => http.StreamedResponse(
const Stream.empty(),
HttpStatus.badRequest,
),
);
expect(
codePushClient.updateReleaseStatus(
releaseId: releaseId,
platform: platform,
status: ReleaseStatus.active,
),
throwsA(
isA<CodePushException>().having(
(e) => e.message,
'message',
CodePushClient.unknownErrorMessage,
),
),
);
});
test('completes when the server responds with a 204', () async {
when(() => httpClient.send(any())).thenAnswer(
(_) async => http.StreamedResponse(
const Stream.empty(),
HttpStatus.noContent,
),
);
expect(
codePushClient.updateReleaseStatus(
releaseId: releaseId,
platform: platform,
status: ReleaseStatus.active,
),
completes,
);
});
});
group('deleteCollaborator', () {
const appId = 'test-app-id';
const userId = 42;