That fuck shit the fascists are using
1/*
2 * Copyright 2023 Signal Messenger, LLC
3 * SPDX-License-Identifier: AGPL-3.0-only
4 */
5
6package org.tm.archive.database
7
8import androidx.test.ext.junit.runners.AndroidJUnit4
9import junit.framework.Assert.assertEquals
10import org.junit.Rule
11import org.junit.Test
12import org.junit.runner.RunWith
13import org.tm.archive.calls.log.CallLogFilter
14import org.tm.archive.recipients.RecipientId
15import org.tm.archive.service.webrtc.links.CallLinkCredentials
16import org.tm.archive.service.webrtc.links.CallLinkRoomId
17import org.tm.archive.service.webrtc.links.SignalCallLinkState
18import org.tm.archive.testing.SignalActivityRule
19
20@RunWith(AndroidJUnit4::class)
21class CallLinkTableTest {
22
23 companion object {
24 private val ROOM_ID_A = byteArrayOf(1, 2, 3, 4)
25 private val ROOM_ID_B = byteArrayOf(2, 2, 3, 4)
26 private const val TIMESTAMP_A = 1000L
27 private const val TIMESTAMP_B = 2000L
28 }
29
30 @get:Rule
31 val harness = SignalActivityRule(createGroup = true)
32
33 @Test
34 fun givenTwoNonAdminCallLinks_whenIDeleteBeforeFirst_thenIExpectNeitherDeleted() {
35 insertTwoNonAdminCallLinksWithEvents()
36 SignalDatabase.callLinks.deleteNonAdminCallLinksOnOrBefore(TIMESTAMP_A - 500)
37 val callEvents = SignalDatabase.calls.getCalls(0, 2, "", CallLogFilter.ALL)
38 assertEquals(2, callEvents.size)
39 }
40
41 @Test
42 fun givenTwoNonAdminCallLinks_whenIDeleteOnFirst_thenIExpectFirstDeleted() {
43 insertTwoNonAdminCallLinksWithEvents()
44 SignalDatabase.callLinks.deleteNonAdminCallLinksOnOrBefore(TIMESTAMP_A)
45 val callEvents = SignalDatabase.calls.getCalls(0, 2, "", CallLogFilter.ALL)
46 assertEquals(1, callEvents.size)
47 assertEquals(TIMESTAMP_B, callEvents.first().record.timestamp)
48 }
49
50 @Test
51 fun givenTwoNonAdminCallLinks_whenIDeleteAfterFirstAndBeforeSecond_thenIExpectFirstDeleted() {
52 insertTwoNonAdminCallLinksWithEvents()
53 SignalDatabase.callLinks.deleteNonAdminCallLinksOnOrBefore(TIMESTAMP_B - 500)
54 val callEvents = SignalDatabase.calls.getCalls(0, 2, "", CallLogFilter.ALL)
55 assertEquals(1, callEvents.size)
56 assertEquals(TIMESTAMP_B, callEvents.first().record.timestamp)
57 }
58
59 @Test
60 fun givenTwoNonAdminCallLinks_whenIDeleteOnSecond_thenIExpectBothDeleted() {
61 insertTwoNonAdminCallLinksWithEvents()
62 SignalDatabase.callLinks.deleteNonAdminCallLinksOnOrBefore(TIMESTAMP_B)
63 val callEvents = SignalDatabase.calls.getCalls(0, 2, "", CallLogFilter.ALL)
64 assertEquals(0, callEvents.size)
65 }
66
67 @Test
68 fun givenTwoNonAdminCallLinks_whenIDeleteAfterSecond_thenIExpectBothDeleted() {
69 insertTwoNonAdminCallLinksWithEvents()
70 SignalDatabase.callLinks.deleteNonAdminCallLinksOnOrBefore(TIMESTAMP_B + 500)
71 val callEvents = SignalDatabase.calls.getCalls(0, 2, "", CallLogFilter.ALL)
72 assertEquals(0, callEvents.size)
73 }
74
75 private fun insertTwoNonAdminCallLinksWithEvents() {
76 insertCallLinkWithEvent(ROOM_ID_A, 1000)
77 insertCallLinkWithEvent(ROOM_ID_B, 2000)
78 }
79
80 private fun insertCallLinkWithEvent(roomId: ByteArray, timestamp: Long) {
81 SignalDatabase.callLinks.insertCallLink(
82 CallLinkTable.CallLink(
83 recipientId = RecipientId.UNKNOWN,
84 roomId = CallLinkRoomId.fromBytes(roomId),
85 credentials = CallLinkCredentials(
86 linkKeyBytes = roomId,
87 adminPassBytes = null
88 ),
89 state = SignalCallLinkState()
90 )
91 )
92
93 val callLinkRecipient = SignalDatabase.recipients.getByCallLinkRoomId(CallLinkRoomId.fromBytes(roomId)).get()
94
95 SignalDatabase.calls.insertAcceptedGroupCall(
96 1,
97 callLinkRecipient,
98 CallTable.Direction.INCOMING,
99 timestamp
100 )
101 }
102}