diff --git a/frontend/app/src/androidTest/java/com/example/speechbuddy/AccountSettingsScreenTest.kt b/frontend/app/src/androidTest/java/com/example/speechbuddy/AccountSettingsScreenTest.kt index 99afba7a..9eb17f08 100644 --- a/frontend/app/src/androidTest/java/com/example/speechbuddy/AccountSettingsScreenTest.kt +++ b/frontend/app/src/androidTest/java/com/example/speechbuddy/AccountSettingsScreenTest.kt @@ -1,12 +1,12 @@ package com.example.speechbuddy +import android.content.Intent import androidx.activity.compose.setContent import androidx.compose.foundation.layout.PaddingValues import androidx.compose.ui.test.assertHasClickAction import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsEnabled import androidx.compose.ui.test.assertIsNotEnabled -import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick @@ -14,6 +14,7 @@ import com.example.speechbuddy.compose.settings.AccountSettings import com.example.speechbuddy.ui.SpeechBuddyTheme import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest +import kotlinx.coroutines.DelicateCoroutinesApi import org.junit.After import org.junit.Before import org.junit.Rule @@ -22,11 +23,17 @@ import org.junit.Test @HiltAndroidTest class AccountSettingsScreenTest { + private val androidTestUtil = AndroidTestUtil() + @get:Rule(order = 0) val hiltRule = HiltAndroidRule(this) @get:Rule(order = 1) - val composeTestRule = createAndroidComposeRule() + val composeTestRule = androidTestUtil.createAndroidIntentComposeRule { + Intent(it, HomeActivity::class.java).apply { + putExtra("isTest", true) + } + } @Before fun setUp() { diff --git a/frontend/app/src/androidTest/java/com/example/speechbuddy/AndroidTestUtil.kt b/frontend/app/src/androidTest/java/com/example/speechbuddy/AndroidTestUtil.kt new file mode 100644 index 00000000..f9741f24 --- /dev/null +++ b/frontend/app/src/androidTest/java/com/example/speechbuddy/AndroidTestUtil.kt @@ -0,0 +1,39 @@ +package com.example.speechbuddy + +import android.content.Context +import android.content.Intent +import androidx.activity.ComponentActivity +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.rules.ActivityScenarioRule + +class AndroidTestUtil { + /** + * Factory method to provide Android specific implementation of createComposeRule, for a given + * activity class type A that needs to be launched via an intent. + * + * @param intentFactory A lambda that provides a Context that can used to create an intent. A intent needs to be returned. + */ + inline fun createAndroidIntentComposeRule(intentFactory: (context: Context) -> Intent) : AndroidComposeTestRule, A> { + val context = ApplicationProvider.getApplicationContext() + val intent = intentFactory(context) + + return AndroidComposeTestRule( + activityRule = ActivityScenarioRule(intent), + activityProvider = { scenarioRule -> scenarioRule.getActivity() } + ) + } + + /** + * Gets the activity from a scenarioRule. + * + * https://androidx.tech/artifacts/compose.ui/ui-test-junit4/1.0.0-alpha11-source/androidx/compose/ui/test/junit4/AndroidComposeTestRule.kt.html + */ + fun ActivityScenarioRule.getActivity(): A { + var activity: A? = null + + scenario.onActivity { activity = it } + + return activity ?: throw IllegalStateException("Activity was not set in the ActivityScenarioRule!") + } +} \ No newline at end of file diff --git a/frontend/app/src/androidTest/java/com/example/speechbuddy/BackupSettingsScreenTest.kt b/frontend/app/src/androidTest/java/com/example/speechbuddy/BackupSettingsScreenTest.kt index 123aae4e..02d999cc 100644 --- a/frontend/app/src/androidTest/java/com/example/speechbuddy/BackupSettingsScreenTest.kt +++ b/frontend/app/src/androidTest/java/com/example/speechbuddy/BackupSettingsScreenTest.kt @@ -1,13 +1,14 @@ package com.example.speechbuddy +import android.content.Intent import androidx.activity.compose.setContent import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.ui.graphics.Color import androidx.compose.ui.test.assertHasClickAction import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsEnabled import androidx.compose.ui.test.assertIsOff import androidx.compose.ui.test.assertIsOn -import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick @@ -21,12 +22,17 @@ import org.junit.Test @HiltAndroidTest class BackupSettingsScreenTest { + private val androidTestUtil = AndroidTestUtil() @get:Rule(order = 0) val hiltRule = HiltAndroidRule(this) @get:Rule(order = 1) - val composeTestRule = createAndroidComposeRule() + val composeTestRule = androidTestUtil.createAndroidIntentComposeRule { + Intent(it, HomeActivity::class.java).apply { + putExtra("isTest", true) + } + } @Before fun setUp() { diff --git a/frontend/app/src/androidTest/java/com/example/speechbuddy/DisplaySettingsScreenTest.kt b/frontend/app/src/androidTest/java/com/example/speechbuddy/DisplaySettingsScreenTest.kt index bd9667b7..177c0a28 100644 --- a/frontend/app/src/androidTest/java/com/example/speechbuddy/DisplaySettingsScreenTest.kt +++ b/frontend/app/src/androidTest/java/com/example/speechbuddy/DisplaySettingsScreenTest.kt @@ -1,5 +1,6 @@ package com.example.speechbuddy +import android.content.Intent import androidx.activity.compose.setContent import androidx.compose.foundation.layout.PaddingValues import androidx.compose.ui.graphics.Color @@ -9,7 +10,6 @@ import androidx.compose.ui.test.assertIsNotSelected import androidx.compose.ui.test.assertIsOff import androidx.compose.ui.test.assertIsOn import androidx.compose.ui.test.assertIsSelected -import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick @@ -26,11 +26,17 @@ import org.junit.Test @HiltAndroidTest class DisplaySettingsScreenTest { + private val androidTestUtil = AndroidTestUtil() + @get:Rule(order = 0) val hiltRule = HiltAndroidRule(this) @get:Rule(order = 1) - val composeTestRule = createAndroidComposeRule() + val composeTestRule = androidTestUtil.createAndroidIntentComposeRule { + Intent(it, HomeActivity::class.java).apply { + putExtra("isTest", true) + } + } @Before fun setUp() { diff --git a/frontend/app/src/androidTest/java/com/example/speechbuddy/GuestSettingsScreenTest.kt b/frontend/app/src/androidTest/java/com/example/speechbuddy/GuestSettingsScreenTest.kt index 47d676b3..03205887 100644 --- a/frontend/app/src/androidTest/java/com/example/speechbuddy/GuestSettingsScreenTest.kt +++ b/frontend/app/src/androidTest/java/com/example/speechbuddy/GuestSettingsScreenTest.kt @@ -1,11 +1,11 @@ package com.example.speechbuddy +import android.content.Intent import androidx.activity.compose.setContent import androidx.compose.foundation.layout.PaddingValues import androidx.compose.ui.test.assertHasClickAction import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsEnabled -import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onNodeWithText import com.example.speechbuddy.compose.settings.GuestSettings import com.example.speechbuddy.ui.SpeechBuddyTheme @@ -18,21 +18,26 @@ import org.junit.Test @HiltAndroidTest class GuestSettingsScreenTest { + private val androidTestUtil = AndroidTestUtil() @get:Rule(order = 0) val hiltRule = HiltAndroidRule(this) @get:Rule(order = 1) - val composeTestRule = createAndroidComposeRule() + val composeTestRule = androidTestUtil.createAndroidIntentComposeRule { + Intent(it, HomeActivity::class.java).apply { + putExtra("isTest", true) + } + } @Before fun setUp() { hiltRule.inject() - val fakeId = 1 - val fakeEmail = "email@email.com" - val fakeNickname = "nickname" - composeTestRule.activity.sessionManager.setUserId(fakeId) - composeTestRule.activity.userRepository.setMyInfo(fakeId, fakeEmail, fakeNickname) + val guestId = -1 + val fakeEmail = "guest" + val fakeNickname = "guest" + composeTestRule.activity.sessionManager.setUserId(guestId) + composeTestRule.activity.userRepository.setMyInfo(guestId, fakeEmail, fakeNickname) composeTestRule.activity.setContent { SpeechBuddyTheme( settingsRepository = composeTestRule.activity.settingsRepository, diff --git a/frontend/app/src/androidTest/java/com/example/speechbuddy/MainSettingsScreenTest.kt b/frontend/app/src/androidTest/java/com/example/speechbuddy/MainSettingsScreenTest.kt index 3feaf9be..3d76c7e4 100644 --- a/frontend/app/src/androidTest/java/com/example/speechbuddy/MainSettingsScreenTest.kt +++ b/frontend/app/src/androidTest/java/com/example/speechbuddy/MainSettingsScreenTest.kt @@ -1,10 +1,10 @@ package com.example.speechbuddy +import android.content.Intent import androidx.activity.compose.setContent import androidx.compose.foundation.layout.PaddingValues import androidx.compose.ui.test.assertHasClickAction import androidx.compose.ui.test.assertIsDisplayed -import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onNodeWithText import androidx.navigation.NavHostController import com.example.speechbuddy.compose.settings.MainSettings @@ -18,18 +18,23 @@ import org.junit.Test @HiltAndroidTest class MainSettingsScreenTest { + private val androidTestUtil = AndroidTestUtil() @get:Rule(order = 0) val hiltRule = HiltAndroidRule(this) @get:Rule(order = 1) - val composeTestRule = createAndroidComposeRule() + val composeTestRule = androidTestUtil.createAndroidIntentComposeRule { + Intent(it, HomeActivity::class.java).apply { + putExtra("isTest", true) + } + } @Before fun setUp() { hiltRule.inject() - val fakeId = 1 - val fakeEmail = "email@email.com" + val fakeId = 0 + val fakeEmail = "email" val fakeNickname = "nickname" composeTestRule.activity.sessionManager.setUserId(fakeId) composeTestRule.activity.userRepository.setMyInfo(fakeId, fakeEmail, fakeNickname) diff --git a/frontend/app/src/main/java/com/example/speechbuddy/BaseActivity.kt b/frontend/app/src/main/java/com/example/speechbuddy/BaseActivity.kt index e9acc6ec..f923f6c6 100644 --- a/frontend/app/src/main/java/com/example/speechbuddy/BaseActivity.kt +++ b/frontend/app/src/main/java/com/example/speechbuddy/BaseActivity.kt @@ -4,7 +4,6 @@ import androidx.appcompat.app.AppCompatActivity import com.example.speechbuddy.domain.SessionManager import com.example.speechbuddy.repository.AuthRepository import com.example.speechbuddy.repository.SettingsRepository -import com.example.speechbuddy.repository.UserRepository import javax.inject.Inject abstract class BaseActivity : AppCompatActivity() { @@ -18,7 +17,4 @@ abstract class BaseActivity : AppCompatActivity() { @Inject lateinit var settingsRepository: SettingsRepository - @Inject - lateinit var userRepository: UserRepository - } \ No newline at end of file diff --git a/frontend/app/src/main/java/com/example/speechbuddy/repository/UserRepository.kt b/frontend/app/src/main/java/com/example/speechbuddy/repository/UserRepository.kt index c03f421b..300f7213 100644 --- a/frontend/app/src/main/java/com/example/speechbuddy/repository/UserRepository.kt +++ b/frontend/app/src/main/java/com/example/speechbuddy/repository/UserRepository.kt @@ -2,7 +2,6 @@ package com.example.speechbuddy.repository import com.example.speechbuddy.data.local.UserDao import com.example.speechbuddy.data.local.UserIdPrefsManager -import com.example.speechbuddy.data.local.models.UserEntity import com.example.speechbuddy.data.local.models.UserMapper import com.example.speechbuddy.data.remote.UserRemoteSource import com.example.speechbuddy.data.remote.models.UserDtoMapper @@ -77,13 +76,6 @@ class UserRepository @Inject constructor( } } - fun setMyInfo(id: Int, email: String, nickname: String) { - CoroutineScope(Dispatchers.IO).launch { - userIdPrefsManager.saveUserId(id) - userDao.insertUser(UserEntity(id, email, nickname)) - } - } - private fun returnUnknownError(): Resource { return Resource.error( "Unknown error", null