fix: ignore null fields when converting CreateReleaseArtifactRequest to json (#2678)

This commit is contained in:
Bryan Oltman
2024-12-13 14:51:41 -05:00
committed by GitHub
parent 568adabc5e
commit 616ff13ad3
3 changed files with 90 additions and 39 deletions
@@ -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<String, dynamic>().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<String, dynamic>().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<String, dynamic>().equals(
request.fields,
expectedRequest.toJson(),
),
isTrue,
);
});
});
test('throws an exception if the http request fails (unknown)', () async {
@@ -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({
@@ -45,7 +45,8 @@ Map<String, dynamic> _$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 = {