From 4860561dcad0fcb87b2ef08fea35a15201a949d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= <sebastian@mobanisto.de>
Date: Thu, 30 Sep 2021 14:27:43 +0200
Subject: [PATCH] Add BriarDesktopTestApp and DesktopTestModule

---
 build.gradle.kts                              |  1 +
 .../briar/desktop/BriarDesktopTestApp.kt      | 33 +++++++
 .../briar/desktop/DesktopTestModule.kt        | 96 +++++++++++++++++++
 3 files changed, 130 insertions(+)
 create mode 100644 src/test/kotlin/org/briarproject/briar/desktop/BriarDesktopTestApp.kt
 create mode 100644 src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt

diff --git a/build.gradle.kts b/build.gradle.kts
index 8b8b4a2171..c9e6d9c3a2 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -35,6 +35,7 @@ dependencies {
     kapt("com.google.dagger:dagger-compiler:$daggerVersion")
 
     testImplementation(kotlin("test-testng"))
+    kaptTest("com.google.dagger:dagger-compiler:$daggerVersion")
 }
 
 tasks.test {
diff --git a/src/test/kotlin/org/briarproject/briar/desktop/BriarDesktopTestApp.kt b/src/test/kotlin/org/briarproject/briar/desktop/BriarDesktopTestApp.kt
new file mode 100644
index 0000000000..a4bbc9cd14
--- /dev/null
+++ b/src/test/kotlin/org/briarproject/briar/desktop/BriarDesktopTestApp.kt
@@ -0,0 +1,33 @@
+package org.briarproject.briar.desktop
+
+import dagger.Component
+import org.briarproject.bramble.BrambleCoreEagerSingletons
+import org.briarproject.bramble.BrambleCoreModule
+import org.briarproject.bramble.api.account.AccountManager
+import org.briarproject.bramble.api.lifecycle.LifecycleManager
+import org.briarproject.briar.BriarCoreEagerSingletons
+import org.briarproject.briar.BriarCoreModule
+import org.briarproject.briar.api.test.TestDataCreator
+import java.security.SecureRandom
+import javax.inject.Singleton
+
+@Component(
+    modules = [
+        BrambleCoreModule::class,
+        BriarCoreModule::class,
+        DesktopTestModule::class
+    ]
+)
+@Singleton
+internal interface BriarDesktopTestApp : BrambleCoreEagerSingletons, BriarCoreEagerSingletons {
+
+    fun getUI(): UI
+
+    fun getSecureRandom(): SecureRandom
+
+    fun getLifecycleManager(): LifecycleManager
+
+    fun getAccountManager(): AccountManager
+
+    fun getTestDataCreator(): TestDataCreator
+}
diff --git a/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt b/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt
new file mode 100644
index 0000000000..b0e9afdb24
--- /dev/null
+++ b/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt
@@ -0,0 +1,96 @@
+package org.briarproject.briar.desktop
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import dagger.Module
+import dagger.Provides
+import org.briarproject.bramble.account.AccountModule
+import org.briarproject.bramble.api.FeatureFlags
+import org.briarproject.bramble.api.db.DatabaseConfig
+import org.briarproject.bramble.api.plugin.PluginConfig
+import org.briarproject.bramble.api.plugin.TorDirectory
+import org.briarproject.bramble.api.plugin.TransportId
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory
+import org.briarproject.bramble.battery.DefaultBatteryManagerModule
+import org.briarproject.bramble.event.DefaultEventExecutorModule
+import org.briarproject.bramble.network.JavaNetworkModule
+import org.briarproject.bramble.plugin.tor.CircumventionModule
+import org.briarproject.bramble.plugin.tor.UnixTorPluginFactory
+import org.briarproject.bramble.socks.SocksModule
+import org.briarproject.bramble.system.ClockModule
+import org.briarproject.bramble.system.DefaultTaskSchedulerModule
+import org.briarproject.bramble.system.DefaultWakefulIoExecutorModule
+import org.briarproject.bramble.system.DesktopSecureRandomModule
+import org.briarproject.bramble.system.JavaSystemModule
+import org.briarproject.bramble.util.OsUtils.isLinux
+import org.briarproject.bramble.util.OsUtils.isMac
+import org.briarproject.briar.api.test.TestAvatarCreator
+import org.briarproject.briar.test.TestModule
+import java.io.File
+import java.util.Collections.emptyList
+import javax.inject.Singleton
+
+@Module(
+    includes = [
+        AccountModule::class,
+        CircumventionModule::class,
+        ClockModule::class,
+        DefaultBatteryManagerModule::class,
+        DefaultEventExecutorModule::class,
+        DefaultTaskSchedulerModule::class,
+        DefaultWakefulIoExecutorModule::class,
+        DesktopSecureRandomModule::class,
+        JavaNetworkModule::class,
+        JavaSystemModule::class,
+        SocksModule::class,
+        TestModule::class,
+    ]
+)
+internal class DesktopTestModule(private val appDir: File) {
+
+    @Provides
+    @Singleton
+    internal fun provideBriarService(briarService: BriarServiceImpl): BriarService = briarService
+
+    @Provides
+    @Singleton
+    internal fun provideDatabaseConfig(): DatabaseConfig {
+        val dbDir = File(appDir, "db")
+        val keyDir = File(appDir, "key")
+        return DesktopDatabaseConfig(dbDir, keyDir)
+    }
+
+    @Provides
+    @TorDirectory
+    internal fun provideTorDirectory(): File {
+        return File(appDir, "tor")
+    }
+
+    @Provides
+    internal fun providePluginConfig(tor: UnixTorPluginFactory): PluginConfig {
+        val duplex: List<DuplexPluginFactory> =
+            if (isLinux() || isMac()) listOf(tor) else emptyList()
+        return object : PluginConfig {
+            override fun getDuplexFactories(): Collection<DuplexPluginFactory> = duplex
+            override fun getSimplexFactories(): Collection<SimplexPluginFactory> = emptyList()
+            override fun shouldPoll(): Boolean = true
+            override fun getTransportPreferences(): Map<TransportId, List<TransportId>> = emptyMap()
+        }
+    }
+
+    @Provides
+    @Singleton
+    internal fun provideObjectMapper() = ObjectMapper()
+
+    @Provides
+    internal fun provideFeatureFlags() = object : FeatureFlags {
+        override fun shouldEnableImageAttachments() = false
+        override fun shouldEnableProfilePictures() = false
+        override fun shouldEnableDisappearingMessages() = false
+        override fun shouldEnableConnectViaBluetooth() = false
+        override fun shouldEnableTransferData() = false
+    }
+
+    @Provides
+    internal fun provideTestAvatarCreator() = TestAvatarCreator { null }
+}
-- 
GitLab