Skip to content

Commit 7cbffbe

Browse files
feat(smithy)!: remove error match on http status code (#4750)
* fix!: remove http status code exception mapping * chore: update remaining test
1 parent 292bcec commit 7cbffbe

File tree

6 files changed

+30
-17
lines changed

6 files changed

+30
-17
lines changed

packages/smithy/smithy/lib/src/http/http_operation.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -287,9 +287,6 @@ abstract class HttpOperation<InputPayload, Input, OutputPayload, Output>
287287
smithyError =
288288
errorTypes.firstWhereOrNull((t) => t.shapeId.shape == resolvedType);
289289
}
290-
smithyError ??= errorTypes.singleWhereOrNull(
291-
(t) => t.statusCode == response.statusCode,
292-
);
293290
if (smithyError == null) {
294291
throw SmithyHttpException(
295292
statusCode: response.statusCode,

packages/smithy/smithy_aws/test/http/dummy_operation.dart

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// ignore_for_file: avoid_unused_constructor_parameters
55

66
import 'dart:async';
7+
import 'dart:convert';
78

89
import 'package:aws_common/aws_common.dart';
910
import 'package:built_value/serializer.dart';
@@ -43,7 +44,7 @@ class DummyHttpOperation extends HttpOperation<Unit, Unit, Unit, Unit> {
4344

4445
@override
4546
Iterable<HttpProtocol<Unit, Unit, Unit, Unit>> get protocols => [
46-
GenericJsonProtocol(
47+
DummyProtocol(
4748
serializers: const [
4849
_DummySmithyExceptionSerializer(),
4950
],
@@ -130,3 +131,19 @@ class _DummySmithyExceptionSerializer
130131
@override
131132
String get wireName => 'DummySmithyException';
132133
}
134+
135+
class DummyProtocol<InputPayload, Input, OutputPayload, Output>
136+
extends GenericJsonProtocol<InputPayload, Input, OutputPayload, Output> {
137+
DummyProtocol({
138+
required super.requestInterceptors,
139+
required super.serializers,
140+
});
141+
142+
@override
143+
Future<String?> resolveErrorType(AWSBaseHttpResponse response) async {
144+
final body = await response.bodyBytes;
145+
final json = jsonDecode(String.fromCharCodes(body)) as Map<String, Object?>;
146+
final error = json['error'] as String?;
147+
return error;
148+
}
149+
}

packages/smithy/smithy_aws/test/http/sdk_request_test.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ void main() {
2424
return AWSHttpResponse(statusCode: 200, body: '{}'.codeUnits);
2525
}
2626
attempt++;
27-
return AWSHttpResponse(statusCode: 500, body: '{}'.codeUnits);
27+
return AWSHttpResponse(
28+
statusCode: 500,
29+
body: '{"error":"DummySmithyException"}'.codeUnits,
30+
);
2831
});
2932
final retryer = AWSRetryer();
3033
final op = DummyHttpOperation(retryer);
@@ -57,7 +60,10 @@ void main() {
5760
return AWSHttpResponse(statusCode: 200, body: '{}'.codeUnits);
5861
}
5962
attempt++;
60-
return AWSHttpResponse(statusCode: 500, body: '{}'.codeUnits);
63+
return AWSHttpResponse(
64+
statusCode: 500,
65+
body: '{"error":"DummySmithyException"}'.codeUnits,
66+
);
6167
});
6268
final retryer = AWSRetryer();
6369
final op = DummyHttpOperation(retryer);

packages/storage/amplify_storage_s3/example/integration_test/copy_test.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
import 'package:amplify_core/amplify_core.dart';
55
import 'package:amplify_storage_s3/amplify_storage_s3.dart';
6-
import 'package:amplify_storage_s3_dart/src/sdk/src/s3/model/object_not_in_active_tier_error.dart';
76
import 'package:amplify_storage_s3_example/amplifyconfiguration.dart';
87
import 'package:flutter_test/flutter_test.dart';
98
import 'package:integration_test/integration_test.dart';
@@ -92,8 +91,7 @@ void main() {
9291
source: const StoragePath.fromString('unauthorized/path'),
9392
destination: const StoragePath.fromString('public/foo'),
9493
).result,
95-
// TODO(Jordan-Nelson): update to StorageAccessDeniedException when SDK error mapping is fixed
96-
throwsA(isA<ObjectNotInActiveTierError>()),
94+
throwsA(isA<StorageAccessDeniedException>()),
9795
);
9896
});
9997

@@ -103,8 +101,7 @@ void main() {
103101
source: srcStoragePath,
104102
destination: const StoragePath.fromString('unauthorized/path'),
105103
).result,
106-
// TODO(Jordan-Nelson): update to StorageAccessDeniedException when SDK error mapping is fixed
107-
throwsA(isA<ObjectNotInActiveTierError>()),
104+
throwsA(isA<StorageAccessDeniedException>()),
108105
);
109106
});
110107

packages/storage/amplify_storage_s3/example/integration_test/download_data_test.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import 'dart:convert';
55

66
import 'package:amplify_core/amplify_core.dart';
77
import 'package:amplify_storage_s3/amplify_storage_s3.dart';
8-
import 'package:amplify_storage_s3_dart/src/sdk/src/s3/model/invalid_object_state.dart';
98
import 'package:amplify_storage_s3_example/amplifyconfiguration.dart';
109
import 'package:flutter_test/flutter_test.dart';
1110
import 'package:integration_test/integration_test.dart';
@@ -83,8 +82,7 @@ void main() {
8382
() => Amplify.Storage.downloadData(
8483
path: const StoragePath.fromString('unauthorized/path'),
8584
).result,
86-
// TODO(khatruong2009): update to access denied exception when S3 exception mapping is fixed
87-
throwsA(isA<InvalidObjectState>()),
85+
throwsA(isA<StorageAccessDeniedException>()),
8886
);
8987
});
9088
});

packages/storage/amplify_storage_s3/example/integration_test/download_file_test.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import 'dart:io';
55

66
import 'package:amplify_core/amplify_core.dart';
77
import 'package:amplify_storage_s3/amplify_storage_s3.dart';
8-
import 'package:amplify_storage_s3_dart/src/sdk/src/s3/model/invalid_object_state.dart';
98
import 'package:amplify_storage_s3_example/amplifyconfiguration.dart';
109
import 'package:flutter/foundation.dart';
1110
import 'package:flutter_test/flutter_test.dart';
@@ -157,13 +156,12 @@ void main() {
157156
testWidgets('unauthorized path', (_) async {
158157
final downloadFilePath = '${tempDir.path}/downloaded-file.txt';
159158

160-
// TODO(khatruong2009): update to access denied exception when bug is fixed
161159
await expectLater(
162160
() => Amplify.Storage.downloadFile(
163161
path: const StoragePath.fromString('unauthorized/path'),
164162
localFile: AWSFile.fromPath(downloadFilePath),
165163
).result,
166-
throwsA(isA<InvalidObjectState>()),
164+
throwsA(isA<StorageAccessDeniedException>()),
167165
);
168166
});
169167
});

0 commit comments

Comments
 (0)