fix: ignore null fields when converting CreateReleaseArtifactRequest to json (#2678)
This commit is contained in:
@@ -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 {
|
||||
|
||||
+1
-1
@@ -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({
|
||||
|
||||
+2
-1
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user