Skip to content

Commit 78a8b2f

Browse files
authored
chore: update realtime WS event names to prefixed format (#357)
1 parent 512bf61 commit 78a8b2f

2 files changed

Lines changed: 58 additions & 3 deletions

File tree

crowdin/src/main/java/com/crowdin/platform/realtimeupdate/EchoWebSocketListener.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ internal class EchoWebSocketListener(
162162
mappingValue: String,
163163
) {
164164
try {
165-
val updateEvent = "$UPDATE_DRAFT:${project.wsHash}:${project.id}:${user.id}:$languageCode:$mappingValue"
165+
val updateEvent = "$UPDATE_DRAFT:${project.wsHash}:pr{${project.id}}:us{${user.id}}:$languageCode:tr{$mappingValue}"
166166
dataManager.getTicket(updateEvent)?.let {
167167
webSocket.send(getSubscribeEventJson(updateEvent, it))
168168
}
@@ -171,7 +171,7 @@ internal class EchoWebSocketListener(
171171
}
172172

173173
try {
174-
val suggestionEvent = "$TOP_SUGGESTION:${project.wsHash}:${project.id}:$languageCode:$mappingValue"
174+
val suggestionEvent = "$TOP_SUGGESTION:${project.wsHash}:pr{${project.id}}:$languageCode:tr{$mappingValue}"
175175
dataManager.getTicket(suggestionEvent)?.let {
176176
webSocket.send(getSubscribeEventJson(suggestionEvent, it))
177177
}
@@ -197,7 +197,7 @@ internal class EchoWebSocketListener(
197197
val eventData = eventResponse.data
198198

199199
if (event.contains(UPDATE_DRAFT) || event.contains(TOP_SUGGESTION)) {
200-
val mappingId = event.split(":").last()
200+
val mappingId = extractMappingId(event)
201201
for (mutableEntry in dataHolderMap) {
202202
val textMetaData = mutableEntry.value
203203
if (textMetaData.mappingValue == mappingId) {
@@ -249,6 +249,15 @@ internal class EchoWebSocketListener(
249249

250250
private fun parseResponse(response: String): EventResponse = Gson().fromJson(response, EventResponse::class.java)
251251

252+
private fun extractMappingId(event: String): String {
253+
val lastSegment = event.split(":").last()
254+
return if (lastSegment.startsWith("tr{") && lastSegment.endsWith("}")) {
255+
lastSegment.removePrefix("tr{").removeSuffix("}")
256+
} else {
257+
lastSegment
258+
}
259+
}
260+
252261
private fun output(message: String) {
253262
Log.d(EchoWebSocketListener::class.java.simpleName, message)
254263
}

crowdin/src/test/java/com/crowdin/platform/EchoWebSocketListenerTest.kt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,54 @@ import org.junit.Test
1111
import org.mockito.Mockito.mock
1212
import org.mockito.Mockito.spy
1313
import org.mockito.Mockito.verify
14+
import org.mockito.Mockito.`when`
1415

1516
class EchoWebSocketListenerTest {
17+
@Test
18+
fun subscribeView_shouldUseUpdatedEventNames() {
19+
// Given
20+
val mockMappingData = spy(LanguageData::class.java)
21+
val mockDistributionData = mock(DistributionInfoResponse.DistributionData::class.java)
22+
val mockDataManager = mock(DataManager::class.java)
23+
val mockViewTransformerManager = spy(ViewTransformerManager::class.java)
24+
val mockWebSocket = mock(WebSocket::class.java)
25+
val listener =
26+
EchoWebSocketListener(
27+
mockDataManager,
28+
mockMappingData,
29+
mockDistributionData,
30+
mockViewTransformerManager,
31+
null,
32+
"en",
33+
)
34+
val project = DistributionInfoResponse.DistributionData.ProjectData("1", "wsHash")
35+
val user = DistributionInfoResponse.DistributionData.UserData("2")
36+
val expectedUpdateEvent = "update-draft:wsHash:pr{1}:us{2}:en:tr{3}"
37+
val expectedSuggestionEvent = "top-suggestion:wsHash:pr{1}:en:tr{3}"
38+
39+
`when`(mockDataManager.getTicket(expectedUpdateEvent)).thenReturn("update-ticket")
40+
`when`(mockDataManager.getTicket(expectedSuggestionEvent)).thenReturn("suggestion-ticket")
41+
42+
val subscribeViewMethod =
43+
EchoWebSocketListener::class.java.getDeclaredMethod(
44+
"subscribeView",
45+
WebSocket::class.java,
46+
DistributionInfoResponse.DistributionData.ProjectData::class.java,
47+
DistributionInfoResponse.DistributionData.UserData::class.java,
48+
String::class.java,
49+
)
50+
subscribeViewMethod.isAccessible = true
51+
52+
// When
53+
subscribeViewMethod.invoke(listener, mockWebSocket, project, user, "3")
54+
55+
// Then
56+
verify(mockDataManager).getTicket(expectedUpdateEvent)
57+
verify(mockDataManager).getTicket(expectedSuggestionEvent)
58+
verify(mockWebSocket).send("{\"action\":\"subscribe\", \"event\":\"$expectedUpdateEvent\", \"ticket\": \"update-ticket\"}")
59+
verify(mockWebSocket).send("{\"action\":\"subscribe\", \"event\":\"$expectedSuggestionEvent\", \"ticket\": \"suggestion-ticket\"}")
60+
}
61+
1662
@Test
1763
fun whenOnOpen_shouldRegisterViewChangeListener() {
1864
// Given

0 commit comments

Comments
 (0)