Skip to content

Commit c9f2715

Browse files
authored
fix: The JSON protocol does not handle empty lists, so use the Option (#953)
1 parent a9f7b66 commit c9f2715

File tree

5 files changed

+10
-8
lines changed

5 files changed

+10
-8
lines changed

rest/rest-sqs-testing-amazon-java-sdk/src/test/scala/org/elasticmq/rest/sqs/AmazonCliTestSuite.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -396,8 +396,9 @@ class AmazonCliTestSuite
396396
val batchMessages = sendMessageBatch(queue.QueueUrl, entries)
397397

398398
// then
399-
batchMessages.Failed.size shouldBe 1
400-
inside(batchMessages.Failed.head) { case failedMessage =>
399+
val failed = batchMessages.Failed.toList.flatten
400+
failed.size shouldBe 1
401+
inside(failed.head) { case failedMessage =>
401402
import failedMessage._
402403
Id shouldBe "2"
403404
SenderFault shouldBe true

rest/rest-sqs/src/main/scala/org/elasticmq/rest/sqs/BatchRequestsModule.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,9 @@ trait BatchRequestsModule {
4040
Future
4141
.sequence(result)
4242
.map(
43-
_.foldLeft((List.empty[Failed], List.empty[R])) {
44-
case ((failures, successes), Left(failed)) => (failures :+ failed, successes)
43+
_.foldLeft(Option.empty[List[Failed]], List.empty[R]) {
44+
case ((failures, successes), Left(failed)) =>
45+
(failures.map(_ :+ failed).orElse(Some(List(failed))), successes)
4546
case ((failures, successes), Right(success)) => (failures, successes :+ success)
4647
}
4748
)
@@ -83,7 +84,7 @@ case class BatchRequest[M](
8384
QueueUrl: String
8485
)
8586

86-
case class BatchResponse[R](Failed: List[Failed], Successful: List[R])
87+
case class BatchResponse[R](Failed: Option[List[Failed]], Successful: List[R])
8788

8889
object BatchResponse {
8990
implicit def jsonFormat[R: JsonFormat]: RootJsonFormat[BatchResponse[R]] = jsonFormat2(BatchResponse.apply[R])

rest/rest-sqs/src/main/scala/org/elasticmq/rest/sqs/ChangeMessageVisibilityBatchDirectives.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ object BatchChangeMessageVisibilityResponseEntry {
6161
override def toXml(t: BatchResponse[BatchChangeMessageVisibilityResponseEntry]): Elem =
6262
<ChangeMessageVisibilityBatchResponse>
6363
<ChangeMessageVisibilityBatchResult>
64-
{t.Successful.map(successSerializer.toXml) ++ t.Failed.map(XmlSerializer[Failed].toXml)}
64+
{t.Successful.map(successSerializer.toXml) ++ t.Failed.toList.flatMap(_.map(XmlSerializer[Failed].toXml))}
6565
</ChangeMessageVisibilityBatchResult>
6666
<ResponseMetadata>
6767
<RequestId>

rest/rest-sqs/src/main/scala/org/elasticmq/rest/sqs/DeleteMessageBatchDirectives.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ object BatchDeleteMessageResponseEntry {
5757
override def toXml(t: BatchResponse[T]): Elem =
5858
<DeleteMessageBatchResponse>
5959
<DeleteMessageBatchResult>
60-
{t.Successful.map(successSerializer.toXml) ++ t.Failed.map(XmlSerializer[Failed].toXml)}
60+
{t.Successful.map(successSerializer.toXml) ++ t.Failed.toList.flatMap(_.map(XmlSerializer[Failed].toXml))}
6161
</DeleteMessageBatchResult>
6262
<ResponseMetadata>
6363
<RequestId>{EmptyRequestId}</RequestId>

rest/rest-sqs/src/main/scala/org/elasticmq/rest/sqs/SendMessageBatchDirectives.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ object BatchMessageSendResponseEntry {
132132
override def toXml(t: BatchResponse[BatchMessageSendResponseEntry]): Elem =
133133
<SendMessageBatchResponse>
134134
<SendMessageBatchResult>
135-
{t.Successful.map(successSerializer.toXml) ++ t.Failed.map(XmlSerializer[Failed].toXml)}
135+
{t.Successful.map(successSerializer.toXml) ++ t.Failed.toList.flatMap(_.map(XmlSerializer[Failed].toXml))}
136136
</SendMessageBatchResult>
137137
<ResponseMetadata>
138138
<RequestId>

0 commit comments

Comments
 (0)