feat(shorebird_code_push_protocol): add update release support (#850)

This commit is contained in:
Bryan Oltman
2023-07-17 11:05:23 -07:00
committed by GitHub
parent 29843b6610
commit 198349cf8a
8 changed files with 109 additions and 0 deletions
@@ -12,3 +12,4 @@ export 'create_user/create_user.dart';
export 'get_release_artifacts/get_release_artifacts.dart';
export 'get_usage/get_usage.dart';
export 'promote_patch/promote_patch.dart';
export 'update_release/update_release.dart';
@@ -0,0 +1 @@
export 'update_release_request.dart';
@@ -0,0 +1,29 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart';
part 'update_release_request.g.dart';
/// {@template update_release_request}
/// Request body for PUT `api/v1/release/:id` requests.
/// {@endtemplate}
@JsonSerializable()
class UpdateReleaseRequest {
/// {@macro update_release_request}
const UpdateReleaseRequest({
required this.status,
required this.platform,
});
/// Converts a Map<String, dynamic> to a [UpdateReleaseRequest].
factory UpdateReleaseRequest.fromJson(Json json) =>
_$UpdateReleaseRequestFromJson(json);
/// Converts a [UpdateReleaseRequest] to a Map<String, dynamic>.
Json toJson() => _$UpdateReleaseRequestToJson(this);
/// The desired status of the release.
final ReleaseStatus status;
/// The platform of the release.
final String platform;
}
@@ -0,0 +1,36 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: implicit_dynamic_parameter, require_trailing_commas, cast_nullable_to_non_nullable, lines_longer_than_80_chars
part of 'update_release_request.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
UpdateReleaseRequest _$UpdateReleaseRequestFromJson(
Map<String, dynamic> json) =>
$checkedCreate(
'UpdateReleaseRequest',
json,
($checkedConvert) {
final val = UpdateReleaseRequest(
status: $checkedConvert(
'status', (v) => $enumDecode(_$ReleaseStatusEnumMap, v)),
platform: $checkedConvert('platform', (v) => v as String),
);
return val;
},
);
Map<String, dynamic> _$UpdateReleaseRequestToJson(
UpdateReleaseRequest instance) =>
<String, dynamic>{
'status': _$ReleaseStatusEnumMap[instance.status]!,
'platform': instance.platform,
};
const _$ReleaseStatusEnumMap = {
ReleaseStatus.draft: 'draft',
ReleaseStatus.active: 'active',
};
@@ -7,6 +7,7 @@ export 'patch.dart';
export 'patch_artifact.dart';
export 'release.dart';
export 'release_artifact.dart';
export 'release_status.dart';
export 'shorebird_plan.dart';
export 'subscription.dart';
export 'user.dart';
@@ -0,0 +1,13 @@
/// The status of a release.
enum ReleaseStatus {
/// Indicates that the release has been created, but not all platform
/// artifacts have been uploaded.
draft,
/// Indicates that all platform artifacts have been uploaded for this release.
active;
/// Returns the [ReleaseStatus] with the given [name].
factory ReleaseStatus.named(String name) =>
ReleaseStatus.values.firstWhere((status) => status.name == name);
}
@@ -0,0 +1,17 @@
import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart';
import 'package:test/test.dart';
void main() {
group(UpdateReleaseRequest, () {
test('can be (de)serialized', () {
const request = UpdateReleaseRequest(
platform: 'android',
status: ReleaseStatus.active,
);
expect(
UpdateReleaseRequest.fromJson(request.toJson()).toJson(),
equals(request.toJson()),
);
});
});
}
@@ -0,0 +1,11 @@
import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart';
import 'package:test/test.dart';
void main() {
group(ReleaseStatus, () {
test('named allows lookup based on name', () {
expect(ReleaseStatus.named('draft'), equals(ReleaseStatus.draft));
expect(ReleaseStatus.named('active'), equals(ReleaseStatus.active));
});
});
}