@@ -16,25 +16,21 @@ import software.amazon.awssdk.services.sqs.model.MessageSystemAttributeName
16
16
import software.amazon.awssdk.services.sqs.model.QueueAttributeName
17
17
import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest
18
18
import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse
19
- import software.aws.toolkits.core.region.AwsRegion
19
+ import software.aws.toolkits.core.region.anAwsRegion
20
+ import software.aws.toolkits.core.utils.test.aString
20
21
import software.aws.toolkits.jetbrains.services.sqs.Queue
21
22
import software.aws.toolkits.jetbrains.utils.BaseCoroutineTest
22
23
import software.aws.toolkits.jetbrains.utils.waitForModelToBeAtLeast
23
24
import software.aws.toolkits.jetbrains.utils.waitForTrue
24
25
import software.aws.toolkits.resources.message
25
26
26
27
class PollMessagePaneTest : BaseCoroutineTest () {
27
- val queue = Queue (" https://sqs.us-east-1.amazonaws.com/123456789012/test1" , AwsRegion .GLOBAL )
28
-
29
- private val message: Message = Message .builder()
30
- .body(" ABC" )
31
- .messageId(" XYZ" )
32
- .attributes(mapOf (Pair (MessageSystemAttributeName .SENDER_ID , " 1234567890:test1" ), Pair (MessageSystemAttributeName .SENT_TIMESTAMP , " 111111111" )))
33
- .build()
28
+ val queue = Queue (" https://sqs.us-east-1.amazonaws.com/123456789012/test1" , anAwsRegion())
34
29
35
30
@Test
36
31
fun `Message received` () {
37
32
val client = mockClientManagerRule.create<SqsClient >()
33
+ val message = aMessage()
38
34
whenever(client.receiveMessage(Mockito .any<ReceiveMessageRequest >())).thenReturn(
39
35
ReceiveMessageResponse .builder().messages(message).build()
40
36
)
@@ -45,10 +41,30 @@ class PollMessagePaneTest : BaseCoroutineTest() {
45
41
tableModel.waitForModelToBeAtLeast(1 )
46
42
}
47
43
48
- assertThat(tableModel.items.first().messageId()).isEqualTo(" XYZ" )
49
- assertThat(tableModel.items.first().body()).isEqualTo(" ABC" )
50
- assertThat(tableModel.items.first().attributes().getValue(MessageSystemAttributeName .SENDER_ID )).isEqualTo(" 1234567890:test1" )
51
- assertThat(tableModel.items.first().attributes().getValue(MessageSystemAttributeName .SENT_TIMESTAMP )).isEqualTo(" 111111111" )
44
+ assertThat(tableModel.items.first()).isEqualTo(message)
45
+ }
46
+
47
+ @Test
48
+ fun `Messages are de-duplicated by id` () {
49
+ val client = mockClientManagerRule.create<SqsClient >()
50
+ val message = aMessage()
51
+ val anotherMessage = aMessage()
52
+ whenever(client.receiveMessage(Mockito .any<ReceiveMessageRequest >())).thenReturn(
53
+ ReceiveMessageResponse .builder().messages(
54
+ message,
55
+ message,
56
+ anotherMessage
57
+ ).build()
58
+ )
59
+ val pane = PollMessagePane (projectRule.project, client, queue)
60
+ val tableModel = pane.messagesTable.tableModel
61
+ runBlocking {
62
+ pane.requestMessages()
63
+ tableModel.waitForModelToBeAtLeast(1 )
64
+ }
65
+
66
+ assertThat(tableModel.items).hasSize(2 )
67
+ assertThat(tableModel.items.map { it.messageId() }).contains(message.messageId(), anotherMessage.messageId())
52
68
}
53
69
54
70
@Test
@@ -108,4 +124,10 @@ class PollMessagePaneTest : BaseCoroutineTest() {
108
124
109
125
assertThat(pane.messagesAvailableLabel.text).isEqualTo(message(" sqs.failed_to_load_total" ))
110
126
}
127
+
128
+ private fun aMessage (): Message = Message .builder()
129
+ .body(aString())
130
+ .messageId(aString())
131
+ .attributes(mapOf (Pair (MessageSystemAttributeName .SENDER_ID , " 1234567890:test1" ), Pair (MessageSystemAttributeName .SENT_TIMESTAMP , " 111111111" )))
132
+ .build()
111
133
}
0 commit comments