From cdc7a2cdec30cd68b1e90384e5c0b2a5a7b1e4ca Mon Sep 17 00:00:00 2001 From: Bryan Oltman Date: Tue, 4 Nov 2025 17:48:02 -0500 Subject: [PATCH] feat(code_push_protocol): add GetReleaseResponse type (#3368) --- .../src/messages/get_release/get_release.dart | 1 + .../get_release/get_release_response.dart | 23 +++++++++++++++ .../get_release/get_release_response.g.dart | 23 +++++++++++++++ .../lib/src/messages/messages.dart | 1 + .../get_release_response_test.dart | 29 +++++++++++++++++++ 5 files changed, 77 insertions(+) create mode 100644 packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release.dart create mode 100644 packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.dart create mode 100644 packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.g.dart create mode 100644 packages/shorebird_code_push_protocol/test/src/messages/get_release/get_release_response_test.dart diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release.dart b/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release.dart new file mode 100644 index 00000000..586ed1f2 --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release.dart @@ -0,0 +1 @@ +export 'get_release_response.dart'; diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.dart b/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.dart new file mode 100644 index 00000000..eb8e1440 --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.dart @@ -0,0 +1,23 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; + +part 'get_release_response.g.dart'; + +/// {@template get_release_response} +/// The response body for GET /api/v1/apps/:id/releases/:releaseId +/// {@endtemplate} +@JsonSerializable() +class GetReleaseResponse { + /// {@macro get_release_response} + const GetReleaseResponse({required this.release}); + + /// Converts a `Map` to a [GetReleaseResponse]. + factory GetReleaseResponse.fromJson(Map json) => + _$GetReleaseResponseFromJson(json); + + /// Converts a [GetReleaseResponse] to a `Map`. + Map toJson() => _$GetReleaseResponseToJson(this); + + /// The requested release. + final Release release; +} diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.g.dart b/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.g.dart new file mode 100644 index 00000000..30108b6e --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.g.dart @@ -0,0 +1,23 @@ +// 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 'get_release_response.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +GetReleaseResponse _$GetReleaseResponseFromJson(Map json) => + $checkedCreate('GetReleaseResponse', json, ($checkedConvert) { + final val = GetReleaseResponse( + release: $checkedConvert( + 'release', + (v) => Release.fromJson(v as Map), + ), + ); + return val; + }); + +Map _$GetReleaseResponseToJson(GetReleaseResponse instance) => + {'release': instance.release.toJson()}; diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart b/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart index a5d6e434..828a8661 100644 --- a/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart +++ b/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart @@ -10,6 +10,7 @@ export 'get_apps/get_apps.dart'; export 'get_organization_apps/get_organization_apps.dart'; export 'get_organization_users/get_organization_users.dart'; export 'get_organizations/get_organizations.dart'; +export 'get_release/get_release.dart'; export 'get_release_artifacts/get_release_artifacts.dart'; export 'get_release_patches/get_release_patches.dart'; export 'get_releases/get_releases.dart'; diff --git a/packages/shorebird_code_push_protocol/test/src/messages/get_release/get_release_response_test.dart b/packages/shorebird_code_push_protocol/test/src/messages/get_release/get_release_response_test.dart new file mode 100644 index 00000000..d3967879 --- /dev/null +++ b/packages/shorebird_code_push_protocol/test/src/messages/get_release/get_release_response_test.dart @@ -0,0 +1,29 @@ +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; +import 'package:test/test.dart'; + +void main() { + group(GetReleaseResponse, () { + test('can be (de)serialized', () { + final response = GetReleaseResponse( + release: Release( + id: 0, + appId: 'test-app-id', + version: '1.0.0', + flutterRevision: 'flutter-revision', + flutterVersion: '3.22.0', + displayName: 'v1.0.0', + platformStatuses: const { + ReleasePlatform.ios: ReleaseStatus.draft, + ReleasePlatform.android: ReleaseStatus.active, + }, + createdAt: DateTime(2022), + updatedAt: DateTime(2023), + ), + ); + expect( + GetReleaseResponse.fromJson(response.toJson()).toJson(), + equals(response.toJson()), + ); + }); + }); +}