diff --git a/packages/shorebird_code_push_client/test/src/code_push_client_test.dart b/packages/shorebird_code_push_client/test/src/code_push_client_test.dart index 9f6ad6d1..48a082cb 100644 --- a/packages/shorebird_code_push_client/test/src/code_push_client_test.dart +++ b/packages/shorebird_code_push_client/test/src/code_push_client_test.dart @@ -434,50 +434,100 @@ void main() { const size = 5; const canSideload = true; - test('makes the correct request', () async { - final tempDir = Directory.systemTemp.createTempSync(); - final fixture = File(path.join(tempDir.path, 'release.txt')) - ..createSync() - ..writeAsStringSync('hello'); - final expectedRequest = CreateReleaseArtifactRequest( - arch: arch, - platform: platform, - hash: hash, - size: size, - canSideload: canSideload, - filename: 'release.txt', - podfileLockHash: podfileLockHash, - ); - - try { - await codePushClient.createReleaseArtifact( - appId: appId, - artifactPath: fixture.path, - releaseId: releaseId, + group('when podfileLockHash is provided', () { + test('makes the correct request', () async { + final tempDir = Directory.systemTemp.createTempSync(); + final fixture = File(path.join(tempDir.path, 'release.txt')) + ..createSync() + ..writeAsStringSync('hello'); + final expectedRequest = CreateReleaseArtifactRequest( arch: arch, platform: platform, hash: hash, + size: size, canSideload: canSideload, + filename: 'release.txt', + podfileLockHash: null, + ); + + try { + await codePushClient.createReleaseArtifact( + appId: appId, + artifactPath: fixture.path, + releaseId: releaseId, + arch: arch, + platform: platform, + hash: hash, + canSideload: canSideload, + podfileLockHash: null, + ); + } catch (_) {} + + final request = verify(() => httpClient.send(captureAny())) + .captured + .single as http.MultipartRequest; + expect(request.method, equals('POST')); + expect( + request.url, + equals(v1('apps/$appId/releases/$releaseId/artifacts')), + ); + expect(request.hasHeaders(expectedHeaders), isTrue); + expect( + MapEquality().equals( + request.fields, + expectedRequest.toJson(), + ), + isTrue, + ); + }); + }); + + group('when podfileLockHash is null', () { + test('makes the correct request', () async { + final tempDir = Directory.systemTemp.createTempSync(); + final fixture = File(path.join(tempDir.path, 'release.txt')) + ..createSync() + ..writeAsStringSync('hello'); + final expectedRequest = CreateReleaseArtifactRequest( + arch: arch, + platform: platform, + hash: hash, + size: size, + canSideload: canSideload, + filename: 'release.txt', podfileLockHash: podfileLockHash, ); - } catch (_) {} - final request = verify(() => httpClient.send(captureAny())) - .captured - .single as http.MultipartRequest; - expect(request.method, equals('POST')); - expect( - request.url, - equals(v1('apps/$appId/releases/$releaseId/artifacts')), - ); - expect(request.hasHeaders(expectedHeaders), isTrue); - expect( - MapEquality().equals( - request.fields, - expectedRequest.toJson(), - ), - isTrue, - ); + try { + await codePushClient.createReleaseArtifact( + appId: appId, + artifactPath: fixture.path, + releaseId: releaseId, + arch: arch, + platform: platform, + hash: hash, + canSideload: canSideload, + podfileLockHash: podfileLockHash, + ); + } catch (_) {} + + final request = verify(() => httpClient.send(captureAny())) + .captured + .single as http.MultipartRequest; + expect(request.method, equals('POST')); + expect( + request.url, + equals(v1('apps/$appId/releases/$releaseId/artifacts')), + ); + expect(request.hasHeaders(expectedHeaders), isTrue); + expect( + MapEquality().equals( + request.fields, + expectedRequest.toJson(), + ), + isTrue, + ); + }); }); test('throws an exception if the http request fails (unknown)', () async { diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/create_release_artifact/create_release_artifact_request.dart b/packages/shorebird_code_push_protocol/lib/src/messages/create_release_artifact/create_release_artifact_request.dart index 0e5d38b0..7fddb2d3 100644 --- a/packages/shorebird_code_push_protocol/lib/src/messages/create_release_artifact/create_release_artifact_request.dart +++ b/packages/shorebird_code_push_protocol/lib/src/messages/create_release_artifact/create_release_artifact_request.dart @@ -9,7 +9,7 @@ part 'create_release_artifact_request.g.dart'; /// Because this request is sent as a http.MultipartRequest, all fields /// serialize to strings. /// {@endtemplate} -@JsonSerializable() +@JsonSerializable(includeIfNull: false) class CreateReleaseArtifactRequest { /// {@macro create_release_artifact_request} const CreateReleaseArtifactRequest({ diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/create_release_artifact/create_release_artifact_request.g.dart b/packages/shorebird_code_push_protocol/lib/src/messages/create_release_artifact/create_release_artifact_request.g.dart index cf9d61d0..2fd33927 100644 --- a/packages/shorebird_code_push_protocol/lib/src/messages/create_release_artifact/create_release_artifact_request.g.dart +++ b/packages/shorebird_code_push_protocol/lib/src/messages/create_release_artifact/create_release_artifact_request.g.dart @@ -45,7 +45,8 @@ Map _$CreateReleaseArtifactRequestToJson( 'can_sideload': CreateReleaseArtifactRequest._parseBoolToString(instance.canSideload), 'size': CreateReleaseArtifactRequest._parseIntToString(instance.size), - 'podfile_lock_hash': instance.podfileLockHash, + if (instance.podfileLockHash case final value?) + 'podfile_lock_hash': value, }; const _$ReleasePlatformEnumMap = {