mirror of
https://github.com/greenart7c3/Amber.git
synced 2026-10-05 19:08:23 +00:00
Fix CI test failures and linter violations
This commit is contained in:
@@ -40,9 +40,7 @@ object SecureCryptoHelper {
|
|||||||
* here so blocking callers do not need a [kotlinx.coroutines.runBlocking]
|
* here so blocking callers do not need a [kotlinx.coroutines.runBlocking]
|
||||||
* bridge.
|
* bridge.
|
||||||
*/
|
*/
|
||||||
fun encryptBlocking(plainText: String): String {
|
fun encryptBlocking(plainText: String): String = encryptWithKey(getOrCreateSecretKey(), plainText)
|
||||||
return encryptWithKey(getOrCreateSecretKey(), plainText)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun encryptWithKey(key: SecretKey, plainText: String): String {
|
private fun encryptWithKey(key: SecretKey, plainText: String): String {
|
||||||
val cipher = Cipher.getInstance(TRANSFORMATION)
|
val cipher = Cipher.getInstance(TRANSFORMATION)
|
||||||
@@ -62,9 +60,7 @@ object SecureCryptoHelper {
|
|||||||
* Non-suspending equivalent of [decrypt]. See [encryptBlocking] for the
|
* Non-suspending equivalent of [decrypt]. See [encryptBlocking] for the
|
||||||
* rationale.
|
* rationale.
|
||||||
*/
|
*/
|
||||||
fun decryptBlocking(encryptedText: String): String {
|
fun decryptBlocking(encryptedText: String): String = decryptWithKey(getOrCreateSecretKey(), encryptedText)
|
||||||
return decryptWithKey(getOrCreateSecretKey(), encryptedText)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun decryptWithKey(key: SecretKey, encryptedText: String): String {
|
private fun decryptWithKey(key: SecretKey, encryptedText: String): String {
|
||||||
val data = Base64.decode(encryptedText, Base64.NO_WRAP)
|
val data = Base64.decode(encryptedText, Base64.NO_WRAP)
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ import kotlinx.coroutines.CancellationException
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class EventNotificationConsumer(private val applicationContext: Context) {
|
class EventNotificationConsumer(private val applicationContext: Context) {
|
||||||
private fun saveLog(
|
internal fun saveLog(
|
||||||
text: String,
|
text: String,
|
||||||
url: String,
|
url: String,
|
||||||
npub: String? = null,
|
npub: String? = null,
|
||||||
|
|||||||
+25
-8
@@ -1,6 +1,7 @@
|
|||||||
package com.greenart7c3.nostrsigner.service
|
package com.greenart7c3.nostrsigner.service
|
||||||
|
|
||||||
import com.greenart7c3.nostrsigner.Amber
|
import com.greenart7c3.nostrsigner.Amber
|
||||||
|
import com.greenart7c3.nostrsigner.AmberLog
|
||||||
import com.greenart7c3.nostrsigner.LocalPreferences
|
import com.greenart7c3.nostrsigner.LocalPreferences
|
||||||
import com.greenart7c3.nostrsigner.database.AppDatabase
|
import com.greenart7c3.nostrsigner.database.AppDatabase
|
||||||
import com.greenart7c3.nostrsigner.database.ApplicationDao
|
import com.greenart7c3.nostrsigner.database.ApplicationDao
|
||||||
@@ -9,6 +10,7 @@ import com.greenart7c3.nostrsigner.models.Account
|
|||||||
import com.vitorpamplona.quartz.nip01Core.core.Event
|
import com.vitorpamplona.quartz.nip01Core.core.Event
|
||||||
import com.vitorpamplona.quartz.nip01Core.crypto.verify
|
import com.vitorpamplona.quartz.nip01Core.crypto.verify
|
||||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||||
|
import com.vitorpamplona.quartz.nip01Core.tags.people.PTag
|
||||||
import com.vitorpamplona.quartz.nip01Core.tags.people.taggedUsers
|
import com.vitorpamplona.quartz.nip01Core.tags.people.taggedUsers
|
||||||
import com.vitorpamplona.quartz.nip40Expiration.ExpirationTag
|
import com.vitorpamplona.quartz.nip40Expiration.ExpirationTag
|
||||||
import com.vitorpamplona.quartz.nip46RemoteSigner.NostrConnectEvent
|
import com.vitorpamplona.quartz.nip46RemoteSigner.NostrConnectEvent
|
||||||
@@ -41,7 +43,7 @@ class EventNotificationConsumerTest {
|
|||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
mockkStatic("com.vitorpamplona.quartz.nip01Core.crypto.EventKt")
|
mockkStatic("com.vitorpamplona.quartz.nip01Core.crypto.EventExtKt")
|
||||||
mockkStatic("com.vitorpamplona.quartz.nip01Core.tags.people.EventExtKt")
|
mockkStatic("com.vitorpamplona.quartz.nip01Core.tags.people.EventExtKt")
|
||||||
mockkStatic("com.vitorpamplona.quartz.nip40Expiration.EventExtKt")
|
mockkStatic("com.vitorpamplona.quartz.nip40Expiration.EventExtKt")
|
||||||
|
|
||||||
@@ -52,28 +54,42 @@ class EventNotificationConsumerTest {
|
|||||||
every { database.dao() } returns dao
|
every { database.dao() } returns dao
|
||||||
|
|
||||||
amber = mockk(relaxed = true)
|
amber = mockk(relaxed = true)
|
||||||
|
every { amber.applicationIOScope } returns scope
|
||||||
every { amber.getDatabase(any()) } returns database
|
every { amber.getDatabase(any()) } returns database
|
||||||
every { amber.dao(any()) } returns dao
|
every { amber.dao(any()) } returns dao
|
||||||
installAmberInstance(amber)
|
installAmberInstance(amber)
|
||||||
|
|
||||||
|
mockkObject(AmberLog)
|
||||||
|
every { AmberLog.d(any(), any()) } returns Unit
|
||||||
|
every { AmberLog.d(any(), any(), any()) } returns Unit
|
||||||
|
|
||||||
mockkObject(LocalPreferences)
|
mockkObject(LocalPreferences)
|
||||||
account = newTestAccount(scope)
|
account = newTestAccount(scope)
|
||||||
|
|
||||||
consumer = spyk(EventNotificationConsumer(mockk(relaxed = true)))
|
consumer = spyk(EventNotificationConsumer(mockk(relaxed = true)))
|
||||||
every { consumer["notificationManager"]() } returns mockk(relaxed = true)
|
every { consumer.saveLog(any(), any(), any()) } returns Unit
|
||||||
|
val nm = mockk<android.app.NotificationManager>(relaxed = true)
|
||||||
|
every { nm.areNotificationsEnabled() } returns true
|
||||||
|
every { consumer.notificationManager() } returns nm
|
||||||
|
|
||||||
|
mockkObject(NotificationUtils)
|
||||||
|
every { NotificationUtils.getOrCreateBunkerChannel(any()) } returns mockk(relaxed = true)
|
||||||
|
every { NotificationUtils.getOrCreateErrorsChannel(any()) } returns mockk(relaxed = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
fun tearDown() {
|
fun tearDown() {
|
||||||
|
unmockkObject(NotificationUtils)
|
||||||
|
unmockkObject(AmberLog)
|
||||||
unmockkObject(LocalPreferences)
|
unmockkObject(LocalPreferences)
|
||||||
unmockkStatic("com.vitorpamplona.quartz.nip01Core.crypto.EventKt")
|
unmockkStatic("com.vitorpamplona.quartz.nip01Core.crypto.EventExtKt")
|
||||||
unmockkStatic("com.vitorpamplona.quartz.nip01Core.tags.people.EventExtKt")
|
unmockkStatic("com.vitorpamplona.quartz.nip01Core.tags.people.EventExtKt")
|
||||||
unmockkStatic("com.vitorpamplona.quartz.nip40Expiration.EventExtKt")
|
unmockkStatic("com.vitorpamplona.quartz.nip40Expiration.EventExtKt")
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `consume rejects old events`() = runBlocking {
|
fun `consume rejects old events`() = runBlocking {
|
||||||
val event = mockk<Event>()
|
val event = mockk<Event>(relaxed = true)
|
||||||
every { event.verify() } returns true
|
every { event.verify() } returns true
|
||||||
every { event.kind } returns NostrConnectEvent.KIND
|
every { event.kind } returns NostrConnectEvent.KIND
|
||||||
every { event.createdAt } returns (TimeUtils.now() - TimeUtils.FIVE_MINUTES - 1)
|
every { event.createdAt } returns (TimeUtils.now() - TimeUtils.FIVE_MINUTES - 1)
|
||||||
@@ -85,7 +101,7 @@ class EventNotificationConsumerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `consume rejects future events`() = runBlocking {
|
fun `consume rejects future events`() = runBlocking {
|
||||||
val event = mockk<Event>()
|
val event = mockk<Event>(relaxed = true)
|
||||||
every { event.verify() } returns true
|
every { event.verify() } returns true
|
||||||
every { event.kind } returns NostrConnectEvent.KIND
|
every { event.kind } returns NostrConnectEvent.KIND
|
||||||
every { event.createdAt } returns (TimeUtils.now() + TimeUtils.FIVE_MINUTES + 1)
|
every { event.createdAt } returns (TimeUtils.now() + TimeUtils.FIVE_MINUTES + 1)
|
||||||
@@ -97,7 +113,7 @@ class EventNotificationConsumerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `consume rejects expired events`() = runBlocking {
|
fun `consume rejects expired events`() = runBlocking {
|
||||||
val event = mockk<Event>()
|
val event = mockk<Event>(relaxed = true)
|
||||||
every { event.verify() } returns true
|
every { event.verify() } returns true
|
||||||
every { event.kind } returns NostrConnectEvent.KIND
|
every { event.kind } returns NostrConnectEvent.KIND
|
||||||
every { event.createdAt } returns TimeUtils.now()
|
every { event.createdAt } returns TimeUtils.now()
|
||||||
@@ -111,19 +127,20 @@ class EventNotificationConsumerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `consume rejects duplicate events persistently`() = runBlocking {
|
fun `consume rejects duplicate events persistently`() = runBlocking {
|
||||||
val event = mockk<Event>()
|
val event = mockk<Event>(relaxed = true)
|
||||||
every { event.id } returns "event1"
|
every { event.id } returns "event1"
|
||||||
every { event.verify() } returns true
|
every { event.verify() } returns true
|
||||||
every { event.kind } returns NostrConnectEvent.KIND
|
every { event.kind } returns NostrConnectEvent.KIND
|
||||||
every { event.createdAt } returns TimeUtils.now()
|
every { event.createdAt } returns TimeUtils.now()
|
||||||
every { event.tags } returns arrayOf(arrayOf("p", account.hexKey))
|
every { event.tags } returns arrayOf(arrayOf("p", account.hexKey))
|
||||||
|
every { event.taggedUsers() } returns listOf(PTag(account.hexKey))
|
||||||
|
|
||||||
coEvery { LocalPreferences.loadFromEncryptedStorageSync(any(), any()) } returns account
|
coEvery { LocalPreferences.loadFromEncryptedStorageSync(any(), any()) } returns account
|
||||||
coEvery { bunkerEventDao.exists("event1") } returns true
|
coEvery { bunkerEventDao.exists("event1") } returns true
|
||||||
|
|
||||||
consumer.consume(event, NormalizedRelayUrl("wss://relay.com"))
|
consumer.consume(event, NormalizedRelayUrl("wss://relay.com"))
|
||||||
|
|
||||||
coVerify(exactly = 1) { bunkerEventDao.exists("event1") }
|
coVerify(exactly = 1) { bunkerEventDao.exists(any()) }
|
||||||
coVerify(exactly = 0) { bunkerEventDao.insert(any()) }
|
coVerify(exactly = 0) { bunkerEventDao.insert(any()) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user