From b173a2a52e954cd540eb7b474267b43da796a75f Mon Sep 17 00:00:00 2001
From: Spencer <74568012+XichengSpencer@users.noreply.github.com>
Date: Mon, 22 Jan 2024 17:06:01 -0500
Subject: [PATCH 01/19] Fix #4206 Create New HtmlParser Factory Method (#5277)
## Explanation
Fix #4206 Create New HtmlParser Factory Method to only take
customOppiaTagActionListener and displayLocale as parameter and replace
factory method usage in MathExpressionParserViewModel with this new
implementation
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
## For UI-specific PRs only
- Add a screenshot demonstrating that you ran affected Espresso tests
locally & that they're passing
![Screenshot 2024-01-07
142738](https://github.com/oppia/oppia-android/assets/74568012/70cb0448-2ed5-458f-bbba-cf8877e11ef1)
![Screenshot 2024-01-07
145604](https://github.com/oppia/oppia-android/assets/74568012/e465d9de-8153-456b-a1db-28428cc04ad8)
---------
Co-authored-by: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
---
.../MathExpressionParserViewModel.kt | 5 --
.../android/util/parser/html/HtmlParser.kt | 54 ++++++++++++++-----
2 files changed, 41 insertions(+), 18 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserViewModel.kt b/app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserViewModel.kt
index e808c6fdb68..95fb16f7a05 100644
--- a/app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserViewModel.kt
+++ b/app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserViewModel.kt
@@ -31,12 +31,7 @@ class MathExpressionParserViewModel @Inject constructor(
private val htmlParserFactory: HtmlParser.Factory
) : ObservableViewModel() {
private val htmlParser by lazy {
- // TODO(#4206): Replace this with the variant that doesn't require GCS properties.
htmlParserFactory.create(
- gcsResourceName = "",
- entityType = "",
- entityId = "",
- imageCenterAlign = false,
displayLocale = appLanguageResourceHandler.getDisplayLocale()
)
}
diff --git a/utility/src/main/java/org/oppia/android/util/parser/html/HtmlParser.kt b/utility/src/main/java/org/oppia/android/util/parser/html/HtmlParser.kt
index 97db2dce9db..f08fcfe807a 100755
--- a/utility/src/main/java/org/oppia/android/util/parser/html/HtmlParser.kt
+++ b/utility/src/main/java/org/oppia/android/util/parser/html/HtmlParser.kt
@@ -78,7 +78,6 @@ class HtmlParser private constructor(
supportsLinks: Boolean = false,
supportsConceptCards: Boolean = false
): Spannable {
-
var htmlContent = rawString
// Canvas does not support RTL, it always starts from left to right in RTL due to which compound drawables are
@@ -124,11 +123,17 @@ class HtmlParser private constructor(
}
val imageGetter = urlImageParserFactory?.create(
- htmlContentTextView, gcsResourceName, entityType, entityId, imageCenterAlign
+ htmlContentTextView,
+ gcsResourceName,
+ entityType,
+ entityId,
+ imageCenterAlign
)
val htmlSpannable = CustomHtmlContentHandler.fromHtml(
- htmlContent, imageGetter, computeCustomTagHandlers(supportsConceptCards, htmlContentTextView)
+ htmlContent,
+ imageGetter,
+ computeCustomTagHandlers(supportsConceptCards, htmlContentTextView)
)
val urlPattern = Patterns.WEB_URL
@@ -226,17 +231,40 @@ class HtmlParser private constructor(
displayLocale: OppiaLocale.DisplayLocale
): HtmlParser {
return HtmlParser(
- context,
- urlImageParserFactory,
- gcsResourceName,
- entityType,
- entityId,
- imageCenterAlign,
- consoleLogger,
+ context = context,
+ urlImageParserFactory = urlImageParserFactory,
+ gcsResourceName = gcsResourceName,
+ entityType = entityType,
+ entityId = entityId,
+ imageCenterAlign = imageCenterAlign,
+ consoleLogger = consoleLogger,
cacheLatexRendering = enableCacheLatexRendering.value,
- customOppiaTagActionListener,
- null,
- displayLocale
+ customOppiaTagActionListener = customOppiaTagActionListener,
+ policyOppiaTagActionListener = null,
+ displayLocale = displayLocale
+ )
+ }
+
+ /**
+ * Returns a new [HtmlParser] with the empty entity type and ID for loading images,
+ * doesn't require GCS properties and imageCenterAlign set to false
+ * optionally specified [CustomOppiaTagActionListener] for handling custom Oppia tag events.
+ */
+ fun create(
+ displayLocale: OppiaLocale.DisplayLocale
+ ): HtmlParser {
+ return HtmlParser(
+ context = context,
+ urlImageParserFactory = urlImageParserFactory,
+ gcsResourceName = "",
+ entityType = "",
+ entityId = "",
+ imageCenterAlign = false,
+ consoleLogger = consoleLogger,
+ cacheLatexRendering = enableCacheLatexRendering.value,
+ customOppiaTagActionListener = null,
+ policyOppiaTagActionListener = null,
+ displayLocale = displayLocale
)
}
From 1892b151e84dc7887df9a5d416297153e7c781bc Mon Sep 17 00:00:00 2001
From: Deon Olarewaju
Date: Mon, 22 Jan 2024 23:54:13 +0100
Subject: [PATCH 02/19] Fix part of #5261: Unused Quantity (#5318)
Fix part of #5261
Remove quantity zero from pt-rBR/strings.xml: line 208 []
Do the same for line
203
## Explanation
Before:
After:
## Essential Checklist
- [X] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [X] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [X] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [X] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [X] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [X] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
Co-authored-by: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
---
app/src/main/res/values-pt-rBR/strings.xml | 2 --
1 file changed, 2 deletions(-)
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index d76077f8188..ef9a84e60c5 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -202,12 +202,10 @@
- %s história concluída
- - %s Histórias concluídas
- %s Histórias concluídas
- %s Tópico em andamento
- - %s Tópicos em andamento
- %s Tópicos em andamento
Página de seleção de perfil
From 6f17b178f550eeda7930770e0684832ef5952559 Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Fri, 26 Jan 2024 10:12:50 +0300
Subject: [PATCH 03/19] Add feature flag for gating NPS Survey (#5302)
## Explanation
Add feature flag for gating NPS Survey
## Essential Checklist
- [ ] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [ ] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
## For UI-specific PRs only
If your PR includes UI-related changes, then:
- Add screenshots for portrait/landscape for both a tablet & phone of
the before & after UI changes
- For the screenshots above, include both English and pseudo-localized
(RTL) screenshots (see [RTL
guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines))
- Add a video showing the full UX flow with a screen reader enabled (see
[accessibility
guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide))
- For PRs introducing new UI elements or color changes, both light and
dark mode screenshots must be included
- Add a screenshot demonstrating that you ran affected Espresso tests
locally & that they're passing
---
.../ExplorationActiveTimeController.kt | 31 +++++++++++++------
.../PlatformParameterAlphaKenyaModule.kt | 14 +++++++++
.../PlatformParameterAlphaModule.kt | 14 +++++++++
.../PlatformParameterModule.kt | 14 +++++++++
.../domain/audio/AudioPlayerControllerTest.kt | 7 +++++
.../ExplorationActiveTimeControllerTest.kt | 6 ++++
.../ExplorationProgressControllerTest.kt | 7 +++++
.../ExplorationProgressModuleTest.kt | 4 ++-
.../survey/SurveyGatingControllerTest.kt | 1 +
.../TestPlatformParameterModule.kt | 15 +++++++++
.../platformparameter/FeatureFlagConstants.kt | 10 ++++++
11 files changed, 112 insertions(+), 11 deletions(-)
diff --git a/domain/src/main/java/org/oppia/android/domain/exploration/ExplorationActiveTimeController.kt b/domain/src/main/java/org/oppia/android/domain/exploration/ExplorationActiveTimeController.kt
index 7354fb2af8f..9d5e59636b8 100644
--- a/domain/src/main/java/org/oppia/android/domain/exploration/ExplorationActiveTimeController.kt
+++ b/domain/src/main/java/org/oppia/android/domain/exploration/ExplorationActiveTimeController.kt
@@ -19,6 +19,8 @@ import org.oppia.android.util.data.AsyncResult
import org.oppia.android.util.data.DataProvider
import org.oppia.android.util.data.DataProviders
import org.oppia.android.util.data.DataProviders.Companion.transform
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
+import org.oppia.android.util.platformparameter.PlatformParameterValue
import org.oppia.android.util.system.OppiaClock
import org.oppia.android.util.threading.BackgroundDispatcher
import java.util.UUID
@@ -57,7 +59,8 @@ class ExplorationActiveTimeController @Inject constructor(
private val dataProviders: DataProviders,
private val oppiaLogger: OppiaLogger,
private val exceptionsController: ExceptionsController,
- @BackgroundDispatcher private val backgroundCoroutineDispatcher: CoroutineDispatcher
+ @BackgroundDispatcher private val backgroundCoroutineDispatcher: CoroutineDispatcher,
+ @EnableNpsSurvey private val enableNpsSurvey: PlatformParameterValue
) : ExplorationProgressListener, ApplicationLifecycleListener {
private var isAppInForeground: Boolean = false
private var explorationStarted: Boolean = false
@@ -82,27 +85,35 @@ class ExplorationActiveTimeController @Inject constructor(
override fun onExplorationStarted(profileId: ProfileId, topicId: String) {
this.explorationStarted = true
- startSessionTimer(
- profileId = profileId,
- topicId = topicId,
- isAppInForeground = getIsAppInForeground(),
- explorationStarted = true
- )
+ if (enableNpsSurvey.value) {
+ startSessionTimer(
+ profileId = profileId,
+ topicId = topicId,
+ isAppInForeground = getIsAppInForeground(),
+ explorationStarted = true
+ )
+ }
}
override fun onExplorationEnded() {
this.explorationStarted = false
- stopSessionTimerAsync(getIsExplorationStarted())
+ if (enableNpsSurvey.value) {
+ stopSessionTimerAsync(getIsExplorationStarted())
+ }
}
override fun onAppInForeground() {
this.isAppInForeground = true
- resumeSessionTimer(getIsExplorationStarted())
+ if (enableNpsSurvey.value) {
+ resumeSessionTimer(getIsExplorationStarted())
+ }
}
override fun onAppInBackground() {
this.isAppInForeground = false
- pauseSessionTimerAsync()
+ if (enableNpsSurvey.value) {
+ pauseSessionTimerAsync()
+ }
}
private fun getIsAppInForeground() = this.isAppInForeground
diff --git a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt
index 01b0f2e8036..6a9820e4c47 100644
--- a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt
+++ b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt
@@ -15,6 +15,8 @@ import org.oppia.android.util.platformparameter.ENABLE_DOWNLOADS_SUPPORT_DEFAULT
import org.oppia.android.util.platformparameter.ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_EXTRA_TOPIC_TABS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_SPOTLIGHT_UI_DEFAULT_VALUE
@@ -27,6 +29,7 @@ import org.oppia.android.util.platformparameter.EnableFastLanguageSwitchingInLes
import org.oppia.android.util.platformparameter.EnableInteractionConfigChangeStateRetention
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
import org.oppia.android.util.platformparameter.EnablePerformanceMetricsCollection
import org.oppia.android.util.platformparameter.EnableSpotlightUi
import org.oppia.android.util.platformparameter.FAST_LANGUAGE_SWITCHING_IN_LESSON
@@ -307,4 +310,15 @@ class PlatformParameterAlphaKenyaModule {
NPS_SURVEY_MINIMUM_AGGREGATE_LEARNING_TIME_IN_A_TOPIC_IN_MINUTES_DEFAULT_VALUE
)
}
+
+ @Provides
+ @EnableNpsSurvey
+ fun provideEnableNpsSurvey(
+ platformParameterSingleton: PlatformParameterSingleton
+ ): PlatformParameterValue {
+ return platformParameterSingleton.getBooleanPlatformParameter(ENABLE_NPS_SURVEY)
+ ?: PlatformParameterValue.createDefaultParameter(
+ ENABLE_NPS_SURVEY_DEFAULT_VALUE
+ )
+ }
}
diff --git a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt
index 1805833253d..83c1909dde0 100644
--- a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt
+++ b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt
@@ -15,6 +15,8 @@ import org.oppia.android.util.platformparameter.ENABLE_DOWNLOADS_SUPPORT_DEFAULT
import org.oppia.android.util.platformparameter.ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_EXTRA_TOPIC_TABS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.EXTRA_TOPIC_TABS_UI
@@ -26,6 +28,7 @@ import org.oppia.android.util.platformparameter.EnableFastLanguageSwitchingInLes
import org.oppia.android.util.platformparameter.EnableInteractionConfigChangeStateRetention
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
import org.oppia.android.util.platformparameter.EnablePerformanceMetricsCollection
import org.oppia.android.util.platformparameter.EnableSpotlightUi
import org.oppia.android.util.platformparameter.FAST_LANGUAGE_SWITCHING_IN_LESSON
@@ -302,4 +305,15 @@ class PlatformParameterAlphaModule {
NPS_SURVEY_MINIMUM_AGGREGATE_LEARNING_TIME_IN_A_TOPIC_IN_MINUTES_DEFAULT_VALUE
)
}
+
+ @Provides
+ @EnableNpsSurvey
+ fun provideEnableNpsSurvey(
+ platformParameterSingleton: PlatformParameterSingleton
+ ): PlatformParameterValue {
+ return platformParameterSingleton.getBooleanPlatformParameter(ENABLE_NPS_SURVEY)
+ ?: PlatformParameterValue.createDefaultParameter(
+ ENABLE_NPS_SURVEY_DEFAULT_VALUE
+ )
+ }
}
diff --git a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt
index c1de688e0f9..17e63902dde 100644
--- a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt
+++ b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt
@@ -15,6 +15,8 @@ import org.oppia.android.util.platformparameter.ENABLE_DOWNLOADS_SUPPORT_DEFAULT
import org.oppia.android.util.platformparameter.ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_EXTRA_TOPIC_TABS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_SPOTLIGHT_UI_DEFAULT_VALUE
@@ -27,6 +29,7 @@ import org.oppia.android.util.platformparameter.EnableFastLanguageSwitchingInLes
import org.oppia.android.util.platformparameter.EnableInteractionConfigChangeStateRetention
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
import org.oppia.android.util.platformparameter.EnablePerformanceMetricsCollection
import org.oppia.android.util.platformparameter.EnableSpotlightUi
import org.oppia.android.util.platformparameter.FAST_LANGUAGE_SWITCHING_IN_LESSON
@@ -304,4 +307,15 @@ class PlatformParameterModule {
NPS_SURVEY_MINIMUM_AGGREGATE_LEARNING_TIME_IN_A_TOPIC_IN_MINUTES_DEFAULT_VALUE
)
}
+
+ @Provides
+ @EnableNpsSurvey
+ fun provideEnableNpsSurvey(
+ platformParameterSingleton: PlatformParameterSingleton
+ ): PlatformParameterValue {
+ return platformParameterSingleton.getBooleanPlatformParameter(ENABLE_NPS_SURVEY)
+ ?: PlatformParameterValue.createDefaultParameter(
+ ENABLE_NPS_SURVEY_DEFAULT_VALUE
+ )
+ }
}
diff --git a/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt
index 1854ec26330..be7fcde0c86 100644
--- a/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt
@@ -73,6 +73,7 @@ import org.oppia.android.util.logging.SyncStatusModule
import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
import org.oppia.android.util.platformparameter.PlatformParameterValue
import org.robolectric.Shadows
import org.robolectric.annotation.Config
@@ -856,6 +857,12 @@ class AudioPlayerControllerTest {
defaultValue = enableFeature
)
}
+
+ @Provides
+ @EnableNpsSurvey
+ fun provideEnableNpsSurvey(): PlatformParameterValue {
+ return PlatformParameterValue.createDefaultParameter(defaultValue = true)
+ }
}
// TODO(#89): Move this to a common test application component.
diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationActiveTimeControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationActiveTimeControllerTest.kt
index 39414c42791..d012e057068 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationActiveTimeControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationActiveTimeControllerTest.kt
@@ -9,6 +9,7 @@ import dagger.BindsInstance
import dagger.Component
import dagger.Module
import dagger.Provides
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.oppia.android.app.model.ProfileId
@@ -96,6 +97,11 @@ class ExplorationActiveTimeControllerTest {
private val firstTestProfile = ProfileId.newBuilder().setInternalId(0).build()
private val secondTestProfile = ProfileId.newBuilder().setInternalId(1).build()
+ @Before
+ fun setUp() {
+ TestPlatformParameterModule.forceEnableNpsSurvey(true)
+ }
+
@Test
fun testSessionTimer_explorationStartedCallbackReceived_startsSessionTimer() {
setUpTestApplicationComponent()
diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt
index ed37c3bc9b8..632b3eedcd5 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt
@@ -109,6 +109,7 @@ import org.oppia.android.util.logging.SyncStatusModule
import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
import org.oppia.android.util.platformparameter.PlatformParameterValue
import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode
@@ -3189,6 +3190,12 @@ class ExplorationProgressControllerTest {
// Enable study IDs by default in tests.
return PlatformParameterValue.createDefaultParameter(defaultValue = true)
}
+
+ @Provides
+ @EnableNpsSurvey
+ fun provideEnableNpsSurvey(): PlatformParameterValue {
+ return PlatformParameterValue.createDefaultParameter(defaultValue = true)
+ }
}
// TODO(#89): Move this to a common test application component.
diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressModuleTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressModuleTest.kt
index d97bb864d99..cf7eef40556 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressModuleTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressModuleTest.kt
@@ -17,6 +17,7 @@ import org.junit.runner.RunWith
import org.oppia.android.domain.exploration.testing.ExplorationStorageTestModule
import org.oppia.android.domain.oppialogger.LogStorageModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
import org.oppia.android.testing.time.FakeOppiaClockModule
@@ -92,7 +93,8 @@ class ExplorationProgressModuleTest {
TestModule::class, TestLogModule::class, RobolectricModule::class,
FakeOppiaClockModule::class, ExplorationProgressModule::class, TestDispatcherModule::class,
LocaleProdModule::class, TestLogReportingModule::class, LogStorageModule::class,
- NetworkConnectionUtilDebugModule::class, ExplorationStorageTestModule::class
+ NetworkConnectionUtilDebugModule::class, ExplorationStorageTestModule::class,
+ TestPlatformParameterModule::class
]
)
interface TestApplicationComponent : DataProvidersInjector {
diff --git a/domain/src/test/java/org/oppia/android/domain/survey/SurveyGatingControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/survey/SurveyGatingControllerTest.kt
index 07655569168..df46b018821 100644
--- a/domain/src/test/java/org/oppia/android/domain/survey/SurveyGatingControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/survey/SurveyGatingControllerTest.kt
@@ -81,6 +81,7 @@ class SurveyGatingControllerTest {
@Before
fun setUp() {
+ TestPlatformParameterModule.forceEnableNpsSurvey(true)
setUpTestApplicationComponent()
profileTestHelper.initializeProfiles()
}
diff --git a/testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt b/testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt
index 6874912d8ec..1d0f9f02bfc 100644
--- a/testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt
+++ b/testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt
@@ -13,6 +13,7 @@ import org.oppia.android.util.platformparameter.ENABLE_DOWNLOADS_SUPPORT_DEFAULT
import org.oppia.android.util.platformparameter.ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_EXTRA_TOPIC_TABS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.EnableAppAndOsDeprecation
import org.oppia.android.util.platformparameter.EnableDownloadsSupport
@@ -22,6 +23,7 @@ import org.oppia.android.util.platformparameter.EnableFastLanguageSwitchingInLes
import org.oppia.android.util.platformparameter.EnableInteractionConfigChangeStateRetention
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
import org.oppia.android.util.platformparameter.EnablePerformanceMetricsCollection
import org.oppia.android.util.platformparameter.EnableSpotlightUi
import org.oppia.android.util.platformparameter.FAST_LANGUAGE_SWITCHING_IN_LESSON_DEFAULT_VALUE
@@ -263,6 +265,12 @@ class TestPlatformParameterModule {
return PlatformParameterValue.createDefaultParameter(minimumLearningTime)
}
+ @Provides
+ @EnableNpsSurvey
+ fun provideEnableNpsSurvey(): PlatformParameterValue {
+ return PlatformParameterValue.createDefaultParameter(enableNpsSurvey)
+ }
+
companion object {
private var enableDownloadsSupport = ENABLE_DOWNLOADS_SUPPORT_DEFAULT_VALUE
private var enableEditAccountsOptionsUi = ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
@@ -280,6 +288,7 @@ class TestPlatformParameterModule {
private var minimumLearningTime =
NPS_SURVEY_MINIMUM_AGGREGATE_LEARNING_TIME_IN_A_TOPIC_IN_MINUTES_DEFAULT_VALUE
private var gracePeriodInDays = NPS_SURVEY_GRACE_PERIOD_IN_DAYS_DEFAULT_VALUE
+ private var enableNpsSurvey = ENABLE_NPS_SURVEY_DEFAULT_VALUE
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
fun forceEnableDownloadsSupport(value: Boolean) {
@@ -334,6 +343,12 @@ class TestPlatformParameterModule {
enableSpotlightUi = value
}
+ /** Enables forcing [EnableNpsSurvey] feature flag from tests. */
+ @VisibleForTesting(otherwise = VisibleForTesting.NONE)
+ fun forceEnableNpsSurvey(value: Boolean) {
+ enableNpsSurvey = value
+ }
+
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
fun reset() {
enableDownloadsSupport = ENABLE_DOWNLOADS_SUPPORT_DEFAULT_VALUE
diff --git a/utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt b/utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt
index bf366a43954..e69e34696dd 100644
--- a/utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt
+++ b/utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt
@@ -156,3 +156,13 @@ const val APP_AND_OS_DEPRECATION = "android_enable_app_and_os_deprecation"
* Default value for the feature flag corresponding to [EnableAppAndOsDeprecation].
*/
const val ENABLE_APP_AND_OS_DEPRECATION_DEFAULT_VALUE = false
+
+/** Qualifier for the feature flag that toggles the the NPS Survey. */
+@Qualifier
+annotation class EnableNpsSurvey
+
+/** Name of the feature flag that toggles the NPS Survey. */
+const val ENABLE_NPS_SURVEY = "enable_nps_survey"
+
+/** Default value of the feature flag corresponding to [EnableNpsSurvey]. */
+const val ENABLE_NPS_SURVEY_DEFAULT_VALUE = false
From f5be6f69b4c4589f223486b6fcd8be955d27154f Mon Sep 17 00:00:00 2001
From: masclot <103062089+masclot@users.noreply.github.com>
Date: Fri, 26 Jan 2024 12:40:24 +0100
Subject: [PATCH 04/19] Fix #4135: Remove leftover TODO (#5321)
## Explanation
Fix #4135: The only thing left is removing the TODO comment, as the
tests were created in #5224
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
## For UI-specific PRs only
If your PR includes UI-related changes, then:
- Add screenshots for portrait/landscape for both a tablet & phone of
the before & after UI changes
- For the screenshots above, include both English and pseudo-localized
(RTL) screenshots (see [RTL
guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines))
- Add a video showing the full UX flow with a screen reader enabled (see
[accessibility
guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide))
- For PRs introducing new UI elements or color changes, both light and
dark mode screenshots must be included
- Add a screenshot demonstrating that you ran affected Espresso tests
locally & that they're passing
Co-authored-by: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
---
.../app/customview/interaction/FractionInputInteractionView.kt | 2 --
1 file changed, 2 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/customview/interaction/FractionInputInteractionView.kt b/app/src/main/java/org/oppia/android/app/customview/interaction/FractionInputInteractionView.kt
index 1fb50be3f5b..eec5f745241 100644
--- a/app/src/main/java/org/oppia/android/app/customview/interaction/FractionInputInteractionView.kt
+++ b/app/src/main/java/org/oppia/android/app/customview/interaction/FractionInputInteractionView.kt
@@ -20,8 +20,6 @@ import org.oppia.android.app.utility.KeyboardHelper.Companion.showSoftKeyboard
// background="@drawable/edit_text_background"
// maxLength="200".
-// TODO(#4135): Add a dedicated test suite for this class.
-
/** The custom EditText class for fraction input interaction view. */
class FractionInputInteractionView @JvmOverloads constructor(
context: Context,
From 9c5e953ed45dce6d00a3ff78421bd2342324c3ac Mon Sep 17 00:00:00 2001
From: MOHIT GUPTA <76530270+MohitGupta121@users.noreply.github.com>
Date: Fri, 26 Jan 2024 19:34:49 +0530
Subject: [PATCH 05/19] Fix #4609 : How to enable RTL (#5294)
## Explanation
Fix #4609 : How to enable RTL
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
---------
Co-authored-by: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
---
wiki/RTL-Guidelines.md | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/wiki/RTL-Guidelines.md b/wiki/RTL-Guidelines.md
index cd16760ecd4..090fd31798b 100644
--- a/wiki/RTL-Guidelines.md
+++ b/wiki/RTL-Guidelines.md
@@ -1,6 +1,7 @@
## Table of Contents
- [What is RTL?](#what-is-rtl)
+- [How to enable RTL](#how-to-enable-rtl)
- [What changes in RTL?](#what-changes-in-rtl)
- [Testing app for RTL Layouts](#testing-app-for-rtl-layouts)
- [Reference Documentation](#reference-documentation)
@@ -19,6 +20,23 @@ In general, the passage of time is depicted as left to right for LTR languages,
When a UI is changed from LTR to RTL (or vice-versa), it’s often called mirroring. An RTL layout is the mirror image of an LTR layout, and it affects layout, text, and graphics.
+# How to enable RTL?
+
+#### Option 1:
+
+- **Unlock Developer Options:** Go to your phone's Settings, scroll down to "About Phone," and tap on it. Find the "Build Number" and tap on it 7 times. You'll see a message saying "You are now a developer!"
+- **Access Developer Options:** Go back to the main Settings menu, scroll down, and you should now see "Developer Options" above "About Phone."
+- **Enable Developer Options:** Tap on "Developer Options" and scroll down until you find "Force RTL layout direction."
+- **Enable RTL Mode:** Toggle the switch next to "Force RTL layout direction" to turn it on. Your phone's interface will switch to Right-to-Left mode.
+
+
+
+#### Option 2:
+
+- Enable the "**Arabic**" language on your Android device or emulator.
+
+
+
# What changes in RTL?
When a UI is mirrored, these changes occur:
From 264800115977d3196b0b20a423023b8a1f48e18e Mon Sep 17 00:00:00 2001
From: "Mr. 17"
Date: Sat, 27 Jan 2024 03:07:23 +0530
Subject: [PATCH 06/19] Fix part of #5070: Display empty answer message in
number input interaction (#5310)
## Explanation
Fixes part of #5070
Enables the `submit_answer_button` when the pending answer is empty.
Instead of disabling the button, an error message, stating "_**Enter a
number to continue.**_", is now displayed when the user attempts to
submit a blank answer.
https://github.com/oppia/oppia-android/assets/84731134/820021bb-94bb-432f-b545-e3bc89e49e17
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
## For UI-specific PRs only
If your PR includes UI-related changes, then:
- Add screenshots for portrait/landscape for both a tablet & phone of
the before & after UI changes
- For the screenshots above, include both English and pseudo-localized
(RTL) screenshots (see [RTL
guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines))
- Add a video showing the full UX flow with a screen reader enabled (see
[accessibility
guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide))
- For PRs introducing new UI elements or color changes, both light and
dark mode screenshots must be included
- Add a screenshot demonstrating that you ran affected Espresso tests
locally & that they're passing
---------
Co-authored-by: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
---
.../app/parser/StringToNumberParser.kt | 6 ++++-
.../itemviewmodel/NumericInputViewModel.kt | 27 ++++++++++++-------
app/src/main/res/values/strings.xml | 1 +
.../InputInteractionViewTestActivityTest.kt | 18 +++++++++++++
4 files changed, 42 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/parser/StringToNumberParser.kt b/app/src/main/java/org/oppia/android/app/parser/StringToNumberParser.kt
index 5b625623ad2..ae0c3771b46 100644
--- a/app/src/main/java/org/oppia/android/app/parser/StringToNumberParser.kt
+++ b/app/src/main/java/org/oppia/android/app/parser/StringToNumberParser.kt
@@ -41,6 +41,9 @@ class StringToNumberParser {
* detection should be done using [getRealTimeAnswerError], instead.
*/
fun getSubmitTimeError(text: String): NumericInputParsingError {
+ if (text.isBlank()) {
+ return NumericInputParsingError.EMPTY_INPUT
+ }
if (text.length > 15) {
return NumericInputParsingError.NUMBER_TOO_LONG
}
@@ -57,7 +60,8 @@ class StringToNumberParser {
VALID(error = null),
INVALID_FORMAT(error = R.string.number_error_invalid_format),
STARTING_WITH_FLOATING_POINT(error = R.string.number_error_starting_with_floating_point),
- NUMBER_TOO_LONG(error = R.string.number_error_larger_than_fifteen_characters);
+ NUMBER_TOO_LONG(error = R.string.number_error_larger_than_fifteen_characters),
+ EMPTY_INPUT(error = R.string.number_error_empty_input);
/**
* Returns the string corresponding to this error's string resources, or null if there is none.
diff --git a/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NumericInputViewModel.kt b/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NumericInputViewModel.kt
index 93bdddde6f0..04174714b4f 100644
--- a/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NumericInputViewModel.kt
+++ b/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NumericInputViewModel.kt
@@ -36,25 +36,34 @@ class NumericInputViewModel private constructor(
override fun onPropertyChanged(sender: Observable, propertyId: Int) {
interactionAnswerErrorOrAvailabilityCheckReceiver.onPendingAnswerErrorOrAvailabilityCheck(
pendingAnswerError,
- answerText.isNotEmpty()
+ inputAnswerAvailable = true // Allow blank answer submission.
)
}
}
errorMessage.addOnPropertyChangedCallback(callback)
isAnswerAvailable.addOnPropertyChangedCallback(callback)
+
+ // Initializing with default values so that submit button is enabled by default.
+ interactionAnswerErrorOrAvailabilityCheckReceiver.onPendingAnswerErrorOrAvailabilityCheck(
+ pendingAnswerError = null,
+ inputAnswerAvailable = true
+ )
}
- /** It checks the pending error for the current numeric input, and correspondingly updates the error string based on the specified error category. */
+ /**
+ * It checks the pending error for the current numeric input, and correspondingly updates the
+ * error string based on the specified error category.
+ */
override fun checkPendingAnswerError(category: AnswerErrorCategory): String? {
- if (answerText.isNotEmpty()) {
- pendingAnswerError = when (category) {
- AnswerErrorCategory.REAL_TIME ->
+ pendingAnswerError = when (category) {
+ AnswerErrorCategory.REAL_TIME ->
+ if (answerText.isNotEmpty())
stringToNumberParser.getRealTimeAnswerError(answerText.toString())
.getErrorMessageFromStringRes(resourceHandler)
- AnswerErrorCategory.SUBMIT_TIME ->
- stringToNumberParser.getSubmitTimeError(answerText.toString())
- .getErrorMessageFromStringRes(resourceHandler)
- }
+ else null
+ AnswerErrorCategory.SUBMIT_TIME ->
+ stringToNumberParser.getSubmitTimeError(answerText.toString())
+ .getErrorMessageFromStringRes(resourceHandler)
}
errorMessage.set(pendingAnswerError)
return pendingAnswerError
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cc2b39169e5..419a4fde901 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -170,6 +170,7 @@
Please begin your answer with a number (e.g.,”0” in 0.5).
Please enter a valid number.
The answer can contain at most 15 digits (0–9) or symbols (. or -).
+ Enter a number to continue.
Please write a ratio that consists of digits separated by colons (e.g. 1:2 or 1:2:3).
Please enter a valid ratio (e.g. 1:2 or 1:2:3).
Your answer has two colons (:) next to each other.
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt
index 0bd03beb6ae..01f4f9872bb 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt
@@ -250,6 +250,24 @@ class InputInteractionViewTestActivityTest {
}
}
+ @Test
+ @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testNumericInput_withBlankInput_submit_emptyInputErrorIsDisplayed() {
+ ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use {
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
+ onView(withId(R.id.number_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.number_error_empty_input
+ )
+ )
+ )
+ }
+ }
+
@Test
@DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
// will not be used by user
From 164f33b86bec3dcaab6a3f39d15f6be82a4a28f8 Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Sat, 27 Jan 2024 01:31:47 +0300
Subject: [PATCH 07/19] Fix #5001: Set Up Firestore and Upload Free Form
Responses (#5098)
## Explanation
Fixes #5001.
This is PR 5 of 6 Planned PRs.
We are adding a whole new infrastructure for uploading data to Firebase
Firestore.
### Key Changes
- Introducing a `FirestoreDataController` that handles Anonymous
Authentication and logging to Firestore, based on connectivity status.
- Adding the Firestore, Auth and AppCheck dependencies, and reppining
these maven dependencies.
- New event logger for converting event logs to documents(hashmaps) and
uploading them to firestore.
- Introduce AuthenticationController
This new controller provides functionality to retrieve the current
signed in user and also sign in a user anonymously, and can be called
from anywhere. It has a fake that is to be used in tests.
- Adding the newly created `utility` module files to `CODEOWNERS`
- Creating wrappers for FirebaseAuth, and Firestore in order to allow
switching out with fakes in tests and development versions using dagger.
The implementation relies on an AuthenticationWrapper to switch out the
real and fake authentication controllers for testing purposes. To do
this, I created a dagger module to provide the correct listener where
needed, hence the test file changes in the _app_ module tests.
### Technical Decisions
- I opted to create a new cache for events that will eventually be
uploaded to Firestore. This means they will not be accidentally uploaded
to Firebase.
- I opted to use EventLogs and convert them to Documents on the fly as
opposed to creating an entirely new model and logging infrastruture that
is Firestore-specific.
- I calculated the `FirestoreLogStorageCacheSize` based on the [average
length of a Google Review
](https://www.meetsoci.com/resources/insights/brands-franchises/state-of-google-reviews/#:~:text=Average%20review%20length%20ranges%20from,per%20review%20for%20department%20stores.&text=In%20comparison%20to%20other%20local%20platforms%2C%20Google%20reviews%20skew%20positively.)and
the [storage size computation
specs](https://firebase.google.com/docs/firestore/storage-size) defined
by Firebase. I computed it based on 10 profiles on a device over a 3
month period.
- I opted to use existing log upload infrastructure to upload to
firebase, as opposed to creating a whole new upload workflow so I can
reuse the existing test infrastructure as well.
### Dependency Updates
- I added dependencies for Firestore and Auth. The selected versions
were both the earliest compatible with the rest of our existing
dependencies and the latest that didn't cause proguarding issues. There
were incidental updates to transitive dependencies, both major and
minor.
### Proguard
Added new -dontwarns for the following:
`-dontwarn javax.naming.**`
[Reference](https://github.com/firebase/firebase-android-sdk/blob/00d4626/firebase-firestore/proguard.txt.)
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
## Upload Screenshots
### Firestore Upload
## Querying Synced Firestore Data on BigQuery
---
.github/CODEOWNERS | 8 +
app/BUILD.bazel | 10 +-
app/build.gradle | 2 +
.../alpha/AlphaApplicationComponent.kt | 2 +
.../android/app/application/alpha/BUILD.bazel | 1 +
.../AlphaKenyaApplicationComponent.kt | 2 +
.../app/application/alphakenya/BUILD.bazel | 1 +
.../android/app/application/beta/BUILD.bazel | 1 +
.../beta/BetaApplicationComponent.kt | 3 +-
.../android/app/application/dev/BUILD.bazel | 1 +
.../dev/DeveloperApplicationComponent.kt | 2 +
.../android/app/application/ga/BUILD.bazel | 1 +
.../application/ga/GaApplicationComponent.kt | 3 +-
.../vieweventlogs/ViewEventLogsViewModel.kt | 15 +-
.../SurveyOutroDialogFragmentPresenter.kt | 6 +-
.../AdministratorControlsActivityTest.kt | 4 +-
.../AdministratorControlsFragmentTest.kt | 4 +-
.../AppVersionActivityTest.kt | 4 +-
.../ProfileAndDeviceIdActivityTest.kt | 4 +-
.../ProfileAndDeviceIdFragmentTest.kt | 4 +-
.../CompletedStoryListActivityTest.kt | 4 +-
.../LessonThumbnailImageViewTest.kt | 4 +-
.../MathExpressionInteractionsViewTest.kt | 4 +-
.../AppCompatCheckBoxBindingAdaptersTest.kt | 4 +-
.../CircularProgressIndicatorAdaptersTest.kt | 4 +-
.../DrawableBindingAdaptersTest.kt | 4 +-
.../ImageViewBindingAdaptersTest.kt | 4 +-
.../databinding/MarginBindingAdaptersTest.kt | 4 +-
...StateAssemblerMarginBindingAdaptersTest.kt | 4 +-
...tateAssemblerPaddingBindingAdaptersTest.kt | 4 +-
.../TextViewBindingAdaptersTest.kt | 4 +-
.../databinding/ViewBindingAdaptersTest.kt | 4 +-
.../DeveloperOptionsActivityTest.kt | 4 +-
.../DeveloperOptionsFragmentTest.kt | 4 +-
.../MarkChaptersCompletedActivityTest.kt | 4 +-
.../MarkChaptersCompletedFragmentTest.kt | 4 +-
.../MarkStoriesCompletedActivityTest.kt | 4 +-
.../MarkStoriesCompletedFragmentTest.kt | 4 +-
.../MarkTopicsCompletedActivityTest.kt | 4 +-
.../MarkTopicsCompletedFragmentTest.kt | 4 +-
.../devoptions/ViewEventLogsActivityTest.kt | 4 +-
.../devoptions/ViewEventLogsFragmentTest.kt | 220 +-
.../ForceNetworkTypeActivityTest.kt | 4 +-
.../ForceNetworkTypeFragmentTest.kt | 4 +-
.../MathExpressionParserActivityTest.kt | 4 +-
.../MathExpressionParserFragmentTest.kt | 4 +-
.../android/app/faq/FAQListFragmentTest.kt | 4 +-
.../android/app/faq/FAQSingleActivityTest.kt | 4 +-
.../android/app/faq/FaqListActivityTest.kt | 4 +-
.../android/app/help/HelpActivityTest.kt | 5 +-
.../android/app/help/HelpFragmentTest.kt | 4 +-
.../android/app/home/HomeActivityTest.kt | 4 +-
.../app/home/RecentlyPlayedFragmentTest.kt | 4 +-
.../app/home/TopicSummaryViewModelTest.kt | 4 +-
.../android/app/home/WelcomeViewModelTest.kt | 4 +-
.../PromotedStoryListViewModelTest.kt | 4 +-
.../PromotedStoryViewModelTest.kt | 4 +-
.../mydownloads/MyDownloadsActivityTest.kt | 4 +-
.../mydownloads/MyDownloadsFragmentTest.kt | 4 +-
.../notice/BetaNoticeDialogFragmentTest.kt | 4 +-
...dAppDeprecationNoticeDialogFragmentTest.kt | 4 +-
...labilityUpgradeNoticeDialogFragmentTest.kt | 4 +-
...lAppDeprecationNoticeDialogFragmentTest.kt | 4 +-
.../OsDeprecationNoticeDialogFragmentTest.kt | 7 +-
.../app/onboarding/OnboardingActivityTest.kt | 5 +-
.../app/onboarding/OnboardingFragmentTest.kt | 4 +-
.../OngoingTopicListActivityTest.kt | 4 +-
.../app/options/AppLanguageActivityTest.kt | 4 +-
.../app/options/AppLanguageFragmentTest.kt | 4 +-
.../app/options/AudioLanguageActivityTest.kt | 4 +-
.../app/options/AudioLanguageFragmentTest.kt | 4 +-
.../app/options/OptionsActivityTest.kt | 4 +-
.../app/options/OptionsFragmentTest.kt | 4 +-
.../options/ReadingTextSizeActivityTest.kt | 4 +-
.../options/ReadingTextSizeFragmentTest.kt | 4 +-
.../android/app/parser/HtmlParserTest.kt | 4 +-
.../app/player/audio/AudioFragmentTest.kt | 4 +-
.../exploration/BottomSheetOptionsMenuTest.kt | 4 +-
.../exploration/ExplorationActivityTest.kt | 4 +-
.../app/player/state/StateFragmentTest.kt | 4 +-
.../app/policies/PoliciesActivityTest.kt | 4 +-
.../app/policies/PoliciesFragmentTest.kt | 4 +-
.../app/profile/AddProfileActivityTest.kt | 4 +-
.../app/profile/AdminAuthActivityTest.kt | 4 +-
.../app/profile/AdminPinActivityTest.kt | 4 +-
.../app/profile/PinPasswordActivityTest.kt | 4 +-
.../app/profile/ProfileChooserActivityTest.kt | 4 +-
.../app/profile/ProfileChooserFragmentTest.kt | 4 +-
.../ProfilePictureActivityTest.kt | 2 +
.../ProfileProgressActivityTest.kt | 2 +
.../ProfileProgressFragmentTest.kt | 2 +
.../app/recyclerview/BindableAdapterTest.kt | 4 +-
.../resumelesson/ResumeLessonActivityTest.kt | 4 +-
.../resumelesson/ResumeLessonFragmentTest.kt | 4 +-
.../profile/ProfileEditActivityTest.kt | 4 +-
.../profile/ProfileEditFragmentTest.kt | 4 +-
.../profile/ProfileListActivityTest.kt | 4 +-
.../profile/ProfileListFragmentTest.kt | 4 +-
.../profile/ProfileRenameActivityTest.kt | 4 +-
.../profile/ProfileRenameFragmentTest.kt | 4 +-
.../profile/ProfileResetPinActivityTest.kt | 4 +-
.../profile/ProfileResetPinFragmentTest.kt | 4 +-
.../android/app/splash/SplashActivityTest.kt | 4 +-
.../app/spotlight/SpotlightFragmentTest.kt | 4 +-
.../android/app/story/StoryActivityTest.kt | 4 +-
.../android/app/story/StoryFragmentTest.kt | 4 +-
.../android/app/survey/SurveyActivityTest.kt | 4 +-
.../android/app/survey/SurveyFragmentTest.kt | 4 +-
.../app/testing/DragDropTestActivityTest.kt | 4 +-
...ionInputInteractionViewTestActivityTest.kt | 4 +-
...ImageRegionSelectionInteractionViewTest.kt | 4 +-
.../InputInteractionViewTestActivityTest.kt | 4 +-
.../NavigationDrawerActivityDebugTest.kt | 4 +-
.../NavigationDrawerActivityProdTest.kt | 4 +-
...tioInputInteractionViewTestActivityTest.kt | 4 +-
...tFontScaleConfigurationUtilActivityTest.kt | 4 +-
.../testing/TopicTestActivityForStoryTest.kt | 4 +-
.../app/thirdparty/LicenseListActivityTest.kt | 4 +-
.../app/thirdparty/LicenseListFragmentTest.kt | 4 +-
.../LicenseTextViewerActivityTest.kt | 4 +-
.../LicenseTextViewerFragmentTest.kt | 4 +-
.../ThirdPartyDependencyListActivityTest.kt | 4 +-
.../ThirdPartyDependencyListFragmentTest.kt | 4 +-
.../android/app/topic/TopicActivityTest.kt | 4 +-
.../android/app/topic/TopicFragmentTest.kt | 4 +-
.../conceptcard/ConceptCardFragmentTest.kt | 4 +-
.../app/topic/info/TopicInfoFragmentTest.kt | 4 +-
.../topic/lessons/TopicLessonsFragmentTest.kt | 4 +-
.../practice/TopicPracticeFragmentTest.kt | 4 +-
.../QuestionPlayerActivityTest.kt | 4 +-
.../revision/TopicRevisionFragmentTest.kt | 4 +-
.../revisioncard/RevisionCardActivityTest.kt | 4 +-
.../revisioncard/RevisionCardFragmentTest.kt | 4 +-
.../app/utility/RatioExtensionsTest.kt | 4 +-
.../walkthrough/WalkthroughActivityTest.kt | 4 +-
.../WalkthroughFinalFragmentTest.kt | 4 +-
.../WalkthroughTopicListFragmentTest.kt | 4 +-
.../WalkthroughWelcomeFragmentTest.kt | 4 +-
.../activity/ActivityIntentFactoriesTest.kt | 4 +-
.../route/ActivityRouterModuleTest.kt | 4 +-
.../app/activity/route/ActivityRouterTest.kt | 4 +-
.../android/app/home/HomeActivityLocalTest.kt | 4 +-
.../app/parser/FractionParsingUiErrorTest.kt | 4 +-
.../parser/ListItemLeadingMarginSpanTest.kt | 4 +-
.../app/parser/StringToRatioParserTest.kt | 4 +-
.../ExplorationActivityLocalTest.kt | 2 +
.../player/state/StateFragmentLocalTest.kt | 4 +-
.../ProfileChooserFragmentLocalTest.kt | 4 +-
.../app/story/StoryActivityLocalTest.kt | 4 +-
.../app/testing/CompletedStoryListSpanTest.kt | 4 +-
.../oppia/android/app/testing/HomeSpanTest.kt | 4 +-
.../app/testing/OngoingTopicListSpanTest.kt | 4 +-
.../PlatformParameterIntegrationTest.kt | 4 +-
.../app/testing/ProfileChooserSpanTest.kt | 4 +-
.../testing/ProfileProgressSpanCountTest.kt | 4 +-
.../app/testing/RecentlyPlayedSpanTest.kt | 4 +-
.../app/testing/TopicRevisionSpanTest.kt | 4 +-
.../app/testing/activity/TestActivityTest.kt | 4 +-
.../AdministratorControlsFragmentTest.kt | 4 +-
.../testing/options/OptionsFragmentTest.kt | 4 +-
.../player/split/PlayerSplitScreenTest.kt | 4 +-
.../state/StateFragmentAccessibilityTest.kt | 4 +-
.../topic/info/TopicInfoFragmentLocalTest.kt | 4 +-
.../lessons/TopicLessonsFragmentLocalTest.kt | 4 +-
.../QuestionPlayerActivityLocalTest.kt | 4 +-
.../RevisionCardActivityLocalTest.kt | 4 +-
.../ActivityLanguageLocaleHandlerTest.kt | 4 +-
.../AppLanguageResourceHandlerTest.kt | 4 +-
.../AppLanguageWatcherMixinTest.kt | 4 +-
.../app/utility/datetime/DateTimeUtilTest.kt | 3 +-
.../MathExpressionAccessibilityUtilTest.kt | 4 +-
.../firebase-components-proguard-rules.pro | 2 +
domain/BUILD.bazel | 1 +
domain/build.gradle | 4 +-
.../domain/auth/AuthenticationController.kt | 49 +
.../domain/auth/AuthenticationModule.kt | 19 +
.../org/oppia/android/domain/auth/BUILD.bazel | 75 +
.../domain/auth/FirebaseAuthInstance.kt | 8 +
.../auth/FirebaseAuthInstanceWrapper.kt | 7 +
.../auth/FirebaseAuthInstanceWrapperImpl.kt | 11 +
.../domain/auth/FirebaseAuthWrapper.kt | 10 +
.../domain/auth/FirebaseAuthWrapperImpl.kt | 28 +
.../domain/auth/FirebaseUserWrapper.kt | 8 +
.../domain/oppialogger/LogStorageModule.kt | 13 +
.../domain/oppialogger/analytics/BUILD.bazel | 21 +
.../analytics/FirestoreDataController.kt | 183 ++
.../oppialogger/loguploader/BUILD.bazel | 1 +
.../LogReportWorkManagerInitializer.kt | 26 +
.../loguploader/LogUploadWorker.kt | 17 +
.../oppialogger/survey/SurveyEventsLogger.kt | 30 +-
.../domain/survey/SurveyProgressController.kt | 23 +-
.../loguploader/FakeLogUploader.kt | 11 +
.../domain/audio/AudioPlayerControllerTest.kt | 2 +
.../auth/AuthenticationControllerTest.kt | 144 ++
.../domain/auth/AuthenticationModuleTest.kt | 92 +
.../org/oppia/android/domain/auth/BUILD.bazel | 30 +
.../auth/FirebaseAuthWrapperImplTest.kt | 113 +
.../ExplorationDataControllerTest.kt | 4 +-
.../ExplorationProgressControllerTest.kt | 3 +-
.../ExplorationCheckpointControllerTest.kt | 3 +-
.../analytics/FirestoreDataControllerTest.kt | 486 +++++
.../analytics/LearnerAnalyticsLoggerTest.kt | 2 +
.../analytics/SurveyEventsLoggerTest.kt | 33 +-
.../LogReportWorkManagerInitializerTest.kt | 27 +-
.../loguploader/LogUploadWorkerTest.kt | 136 +-
.../domain/survey/SurveyControllerTest.kt | 3 +-
.../survey/SurveyProgressControllerTest.kt | 28 +-
.../instrumentation/application/BUILD.bazel | 1 +
.../application/TestApplicationComponent.kt | 4 +-
scripts/assets/maven_dependencies.textproto | 136 +-
scripts/assets/test_file_exemptions.textproto | 12 +
testing/build.gradle | 1 +
.../FakeFirebaseAuthInstanceWrapperImpl.kt | 11 +
.../testing/FakeFirebaseAuthWrapperImpl.kt | 49 +
.../testing/FakeFirestoreEventLogger.kt | 41 +
.../FakeFirestoreInstanceWrapperImpl.kt | 16 +
.../testing/TestAuthenticationModule.kt | 15 +
.../android/testing/TestLogReportingModule.kt | 11 +
.../testing/logging/EventLogSubject.kt | 87 +-
.../FakeFirebaseAuthWrapperImplTest.kt | 122 ++
.../testing/FakeFirestoreEventLoggerTest.kt | 302 +++
.../testing/TestAuthenticationModuleTest.kt | 81 +
...alizeDefaultLocaleRuleCustomContextTest.kt | 4 +-
...InitializeDefaultLocaleRuleOmissionTest.kt | 4 +-
.../junit/InitializeDefaultLocaleRuleTest.kt | 4 +-
third_party/maven_install.json | 1920 ++++++++++++++---
third_party/versions.bzl | 4 +
utility/BUILD.bazel | 2 +
utility/build.gradle | 2 +
.../oppia/android/util/logging/LogUploader.kt | 6 +
.../android/util/logging/firebase/BUILD.bazel | 69 +
.../firebase/DebugFirestoreEventLoggerImpl.kt | 33 +
.../firebase/DebugLogReportingModule.kt | 10 +
.../logging/firebase/FirebaseLogUploader.kt | 12 +
.../logging/firebase/FirestoreEventLogger.kt | 13 +
.../firebase/FirestoreEventLoggerProdImpl.kt | 31 +
.../logging/firebase/FirestoreInstance.kt | 8 +
.../firebase/FirestoreInstanceWrapper.kt | 7 +
.../firebase/FirestoreInstanceWrapperImpl.kt | 13 +
.../logging/firebase/LogReportingModule.kt | 10 +
.../android/util/logging/firebase/BUILD.bazel | 25 +
.../DebugFirestoreEventLoggerImplTest.kt | 193 ++
242 files changed, 5214 insertions(+), 592 deletions(-)
create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt
create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/AuthenticationModule.kt
create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/BUILD.bazel
create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstance.kt
create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapper.kt
create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapperImpl.kt
create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapper.kt
create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImpl.kt
create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/FirebaseUserWrapper.kt
create mode 100644 domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataController.kt
create mode 100644 domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt
create mode 100644 domain/src/test/java/org/oppia/android/domain/auth/AuthenticationModuleTest.kt
create mode 100644 domain/src/test/java/org/oppia/android/domain/auth/BUILD.bazel
create mode 100644 domain/src/test/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImplTest.kt
create mode 100644 domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataControllerTest.kt
create mode 100644 testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt
create mode 100644 testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt
create mode 100644 testing/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt
create mode 100644 testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt
create mode 100644 testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt
create mode 100644 testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt
create mode 100644 testing/src/test/java/org/oppia/android/testing/FakeFirestoreEventLoggerTest.kt
create mode 100644 testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt
create mode 100644 utility/src/main/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImpl.kt
create mode 100644 utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLogger.kt
create mode 100644 utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLoggerProdImpl.kt
create mode 100644 utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstance.kt
create mode 100644 utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapper.kt
create mode 100644 utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapperImpl.kt
create mode 100644 utility/src/test/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImplTest.kt
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 0a66f305ef8..00aff7fcea9 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -93,12 +93,20 @@
# All domain and utility-specific shared test infrastructure.
/testing/src/main/java/org/oppia/android/testing/FakeAnalyticsEventLogger.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/FakeExceptionLogger.kt @oppia/android-app-infrastructure-reviewers
+/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt @oppia/android-app-infrastructure-reviewers
+/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt @oppia/android-app-infrastructure-reviewers
+/testing/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt @oppia/android-app-infrastructure-reviewers
+/testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/FakePerformanceMetricAssessor.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/FakePerformanceMetricsEventLogger.kt @oppia/android-app-infrastructure-reviewers
+/testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt @oppia/android-app-infrastructure-reviewers
+/testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/TestImageLoaderModule.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt @oppia/android-app-infrastructure-reviewers
/testing/src/test/java/org/oppia/android/testing/FakeAnalyticsEventLoggerTest.kt @oppia/android-app-infrastructure-reviewers
/testing/src/test/java/org/oppia/android/testing/FakeExceptionLoggerTest.kt @oppia/android-app-infrastructure-reviewers
+/testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt @oppia/android-app-infrastructure-reviewers
+/testing/src/test/java/org/oppia/android/testing/FakeFirestoreEventLoggerTest.kt @oppia/android-app-infrastructure-reviewers
/testing/src/test/java/org/oppia/android/testing/FakePerformanceMetricAssessorTest.kt @oppia/android-app-infrastructure-reviewers
/testing/src/test/java/org/oppia/android/testing/FakePerformanceMetricsEventLoggerTest.kt @oppia/android-app-infrastructure-reviewers
diff --git a/app/BUILD.bazel b/app/BUILD.bazel
index 32677435108..4030f93b7d2 100644
--- a/app/BUILD.bazel
+++ b/app/BUILD.bazel
@@ -713,7 +713,7 @@ kt_android_library(
"//third_party:androidx_databinding_databinding-runtime",
"//utility",
"//utility/src/main/java/org/oppia/android/util/extensions:context_extensions",
- "//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_event_logger",
+ "//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_module",
"//utility/src/main/java/org/oppia/android/util/math:fraction_parser",
"//utility/src/main/java/org/oppia/android/util/networking:network_connection_debug_util",
"//utility/src/main/java/org/oppia/android/util/parser/html:html_parser",
@@ -1018,4 +1018,12 @@ android_library(
],
)
+android_library(
+ name = "firestore_deps",
+ exports = [
+ "//third_party:com_google_auto_value_auto-value-annotations",
+ "//third_party:org_checkerframework_checker-qual",
+ ],
+)
+
dagger_rules()
diff --git a/app/build.gradle b/app/build.gradle
index 6de6e2c4757..95a33a7e7e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -171,6 +171,8 @@ dependencies {
'com.google.firebase:firebase-analytics-ktx:17.5.0',
'com.google.firebase:firebase-core:17.5.0',
'com.google.firebase:firebase-crashlytics:17.0.0',
+ 'com.google.firebase:firebase-firestore-ktx:24.2.1',
+ 'com.google.firebase:firebase-auth-ktx:19.3.1',
'com.google.guava:guava:28.1-android',
'com.google.protobuf:protobuf-javalite:3.17.3',
'com.github.oppia:CircularImageview:35d08ba88a',
diff --git a/app/src/main/java/org/oppia/android/app/application/alpha/AlphaApplicationComponent.kt b/app/src/main/java/org/oppia/android/app/application/alpha/AlphaApplicationComponent.kt
index c91e02f702f..136fd1dbb9a 100644
--- a/app/src/main/java/org/oppia/android/app/application/alpha/AlphaApplicationComponent.kt
+++ b/app/src/main/java/org/oppia/android/app/application/alpha/AlphaApplicationComponent.kt
@@ -12,6 +12,7 @@ import org.oppia.android.app.shim.ViewBindingShimModule
import org.oppia.android.app.translation.ActivityRecreatorProdModule
import org.oppia.android.data.backends.gae.NetworkConfigProdModule
import org.oppia.android.data.backends.gae.NetworkModule
+import org.oppia.android.domain.auth.AuthenticationModule
import org.oppia.android.domain.classify.InteractionsModule
import org.oppia.android.domain.classify.rules.algebraicexpressioninput.AlgebraicExpressionInputModule
import org.oppia.android.domain.classify.rules.continueinteraction.ContinueModule
@@ -99,6 +100,7 @@ import javax.inject.Singleton
PerformanceMetricsConfigurationsModule::class, AlphaBuildFlavorModule::class,
EventLoggingConfigurationModule::class, CpuPerformanceSnapshotterModule::class,
PerformanceMetricsAssessorModule::class, ExplorationProgressModule::class,
+ AuthenticationModule::class,
]
)
interface AlphaApplicationComponent : ApplicationComponent {
diff --git a/app/src/main/java/org/oppia/android/app/application/alpha/BUILD.bazel b/app/src/main/java/org/oppia/android/app/application/alpha/BUILD.bazel
index 9c410695450..ce982039b52 100644
--- a/app/src/main/java/org/oppia/android/app/application/alpha/BUILD.bazel
+++ b/app/src/main/java/org/oppia/android/app/application/alpha/BUILD.bazel
@@ -19,6 +19,7 @@ kt_android_library(
"//app/src/main/java/org/oppia/android/app/application:abstract_application",
"//app/src/main/java/org/oppia/android/app/application:application_component",
"//app/src/main/java/org/oppia/android/app/application:common_application_modules",
+ "//domain/src/main/java/org/oppia/android/domain/auth:auth_module",
"//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module",
"//utility/src/main/java/org/oppia/android/util/logging/firebase:prod_module",
"//utility/src/main/java/org/oppia/android/util/networking:prod_module",
diff --git a/app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaApplicationComponent.kt b/app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaApplicationComponent.kt
index a65a7cf5724..75d07359cd4 100644
--- a/app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaApplicationComponent.kt
+++ b/app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaApplicationComponent.kt
@@ -13,6 +13,7 @@ import org.oppia.android.app.shim.ViewBindingShimModule
import org.oppia.android.app.translation.ActivityRecreatorProdModule
import org.oppia.android.data.backends.gae.NetworkConfigProdModule
import org.oppia.android.data.backends.gae.NetworkModule
+import org.oppia.android.domain.auth.AuthenticationModule
import org.oppia.android.domain.classify.InteractionsModule
import org.oppia.android.domain.classify.rules.algebraicexpressioninput.AlgebraicExpressionInputModule
import org.oppia.android.domain.classify.rules.continueinteraction.ContinueModule
@@ -100,6 +101,7 @@ import javax.inject.Singleton
PerformanceMetricsConfigurationsModule::class, AlphaBuildFlavorModule::class,
KenyaAlphaEventLoggingConfigurationModule::class, CpuPerformanceSnapshotterModule::class,
PerformanceMetricsAssessorModule::class, ExplorationProgressModule::class,
+ AuthenticationModule::class,
]
)
interface AlphaKenyaApplicationComponent : ApplicationComponent {
diff --git a/app/src/main/java/org/oppia/android/app/application/alphakenya/BUILD.bazel b/app/src/main/java/org/oppia/android/app/application/alphakenya/BUILD.bazel
index 538d47308dc..ff7623c9481 100644
--- a/app/src/main/java/org/oppia/android/app/application/alphakenya/BUILD.bazel
+++ b/app/src/main/java/org/oppia/android/app/application/alphakenya/BUILD.bazel
@@ -20,6 +20,7 @@ kt_android_library(
"//app/src/main/java/org/oppia/android/app/application:application_component",
"//app/src/main/java/org/oppia/android/app/application:common_application_modules",
"//app/src/main/java/org/oppia/android/app/application/alpha:alpha_build_flavor_module",
+ "//domain/src/main/java/org/oppia/android/domain/auth:auth_module",
"//utility/src/main/java/org/oppia/android/util/logging:kenya_alpha_event_logging_configuration_module",
"//utility/src/main/java/org/oppia/android/util/logging/firebase:prod_module",
"//utility/src/main/java/org/oppia/android/util/networking:prod_module",
diff --git a/app/src/main/java/org/oppia/android/app/application/beta/BUILD.bazel b/app/src/main/java/org/oppia/android/app/application/beta/BUILD.bazel
index db532533d41..f8bc14be8ca 100644
--- a/app/src/main/java/org/oppia/android/app/application/beta/BUILD.bazel
+++ b/app/src/main/java/org/oppia/android/app/application/beta/BUILD.bazel
@@ -22,6 +22,7 @@ kt_android_library(
"//app/src/main/java/org/oppia/android/app/application:abstract_application",
"//app/src/main/java/org/oppia/android/app/application:application_component",
"//app/src/main/java/org/oppia/android/app/application:common_application_modules",
+ "//domain/src/main/java/org/oppia/android/domain/auth:auth_module",
"//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module",
"//utility/src/main/java/org/oppia/android/util/logging/firebase:prod_module",
"//utility/src/main/java/org/oppia/android/util/networking:prod_module",
diff --git a/app/src/main/java/org/oppia/android/app/application/beta/BetaApplicationComponent.kt b/app/src/main/java/org/oppia/android/app/application/beta/BetaApplicationComponent.kt
index b427b4eaeb3..bbe79384e81 100644
--- a/app/src/main/java/org/oppia/android/app/application/beta/BetaApplicationComponent.kt
+++ b/app/src/main/java/org/oppia/android/app/application/beta/BetaApplicationComponent.kt
@@ -12,6 +12,7 @@ import org.oppia.android.app.shim.ViewBindingShimModule
import org.oppia.android.app.translation.ActivityRecreatorProdModule
import org.oppia.android.data.backends.gae.NetworkConfigProdModule
import org.oppia.android.data.backends.gae.NetworkModule
+import org.oppia.android.domain.auth.AuthenticationModule
import org.oppia.android.domain.classify.InteractionsModule
import org.oppia.android.domain.classify.rules.algebraicexpressioninput.AlgebraicExpressionInputModule
import org.oppia.android.domain.classify.rules.continueinteraction.ContinueModule
@@ -99,7 +100,7 @@ import javax.inject.Singleton
PerformanceMetricsConfigurationsModule::class, BetaBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
CpuPerformanceSnapshotterModule::class, PerformanceMetricsAssessorModule::class,
- ExplorationProgressModule::class,
+ ExplorationProgressModule::class, AuthenticationModule::class,
]
)
interface BetaApplicationComponent : ApplicationComponent {
diff --git a/app/src/main/java/org/oppia/android/app/application/dev/BUILD.bazel b/app/src/main/java/org/oppia/android/app/application/dev/BUILD.bazel
index 53841df1c37..7949a279c20 100644
--- a/app/src/main/java/org/oppia/android/app/application/dev/BUILD.bazel
+++ b/app/src/main/java/org/oppia/android/app/application/dev/BUILD.bazel
@@ -26,6 +26,7 @@ kt_android_library(
"//app/src/main/java/org/oppia/android/app/application:abstract_application",
"//app/src/main/java/org/oppia/android/app/application:application_component",
"//app/src/main/java/org/oppia/android/app/application:common_application_modules",
+ "//domain/src/main/java/org/oppia/android/domain/auth:auth_module",
"//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module",
"//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_module",
"//utility/src/main/java/org/oppia/android/util/networking:debug_module",
diff --git a/app/src/main/java/org/oppia/android/app/application/dev/DeveloperApplicationComponent.kt b/app/src/main/java/org/oppia/android/app/application/dev/DeveloperApplicationComponent.kt
index 1d718d5727e..522e68679f4 100644
--- a/app/src/main/java/org/oppia/android/app/application/dev/DeveloperApplicationComponent.kt
+++ b/app/src/main/java/org/oppia/android/app/application/dev/DeveloperApplicationComponent.kt
@@ -13,6 +13,7 @@ import org.oppia.android.app.shim.ViewBindingShimModule
import org.oppia.android.app.translation.ActivityRecreatorProdModule
import org.oppia.android.data.backends.gae.NetworkConfigProdModule
import org.oppia.android.data.backends.gae.NetworkModule
+import org.oppia.android.domain.auth.AuthenticationModule
import org.oppia.android.domain.classify.InteractionsModule
import org.oppia.android.domain.classify.rules.algebraicexpressioninput.AlgebraicExpressionInputModule
import org.oppia.android.domain.classify.rules.continueinteraction.ContinueModule
@@ -101,6 +102,7 @@ import javax.inject.Singleton
PerformanceMetricsAssessorModule::class, PerformanceMetricsConfigurationsModule::class,
DeveloperBuildFlavorModule::class, EventLoggingConfigurationModule::class,
CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ AuthenticationModule::class,
]
)
interface DeveloperApplicationComponent : ApplicationComponent {
diff --git a/app/src/main/java/org/oppia/android/app/application/ga/BUILD.bazel b/app/src/main/java/org/oppia/android/app/application/ga/BUILD.bazel
index 5421f374f20..baa4b12237b 100644
--- a/app/src/main/java/org/oppia/android/app/application/ga/BUILD.bazel
+++ b/app/src/main/java/org/oppia/android/app/application/ga/BUILD.bazel
@@ -22,6 +22,7 @@ kt_android_library(
"//app/src/main/java/org/oppia/android/app/application:abstract_application",
"//app/src/main/java/org/oppia/android/app/application:application_component",
"//app/src/main/java/org/oppia/android/app/application:common_application_modules",
+ "//domain/src/main/java/org/oppia/android/domain/auth:auth_module",
"//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module",
"//utility/src/main/java/org/oppia/android/util/logging/firebase:prod_module",
"//utility/src/main/java/org/oppia/android/util/networking:prod_module",
diff --git a/app/src/main/java/org/oppia/android/app/application/ga/GaApplicationComponent.kt b/app/src/main/java/org/oppia/android/app/application/ga/GaApplicationComponent.kt
index 92cc87a5043..b4b476bc6d3 100644
--- a/app/src/main/java/org/oppia/android/app/application/ga/GaApplicationComponent.kt
+++ b/app/src/main/java/org/oppia/android/app/application/ga/GaApplicationComponent.kt
@@ -12,6 +12,7 @@ import org.oppia.android.app.shim.ViewBindingShimModule
import org.oppia.android.app.translation.ActivityRecreatorProdModule
import org.oppia.android.data.backends.gae.NetworkConfigProdModule
import org.oppia.android.data.backends.gae.NetworkModule
+import org.oppia.android.domain.auth.AuthenticationModule
import org.oppia.android.domain.classify.InteractionsModule
import org.oppia.android.domain.classify.rules.algebraicexpressioninput.AlgebraicExpressionInputModule
import org.oppia.android.domain.classify.rules.continueinteraction.ContinueModule
@@ -99,7 +100,7 @@ import javax.inject.Singleton
PerformanceMetricsConfigurationsModule::class, GaBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
CpuPerformanceSnapshotterModule::class, PerformanceMetricsAssessorModule::class,
- ExplorationProgressModule::class,
+ ExplorationProgressModule::class, AuthenticationModule::class,
]
)
interface GaApplicationComponent : ApplicationComponent {
diff --git a/app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsViewModel.kt b/app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsViewModel.kt
index 09362e1d90e..274079e2ce8 100644
--- a/app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsViewModel.kt
+++ b/app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsViewModel.kt
@@ -5,6 +5,7 @@ import org.oppia.android.app.translation.AppLanguageResourceHandler
import org.oppia.android.app.viewmodel.ObservableViewModel
import org.oppia.android.util.locale.OppiaLocale
import org.oppia.android.util.logging.firebase.DebugAnalyticsEventLogger
+import org.oppia.android.util.logging.firebase.DebugFirestoreEventLoggerImpl
import javax.inject.Inject
/**
@@ -14,11 +15,15 @@ import javax.inject.Inject
@FragmentScope
class ViewEventLogsViewModel @Inject constructor(
debugAnalyticsEventLogger: DebugAnalyticsEventLogger,
+ debugFirestoreEventLogger: DebugFirestoreEventLoggerImpl,
private val machineLocale: OppiaLocale.MachineLocale,
private val resourceHandler: AppLanguageResourceHandler
) : ObservableViewModel() {
+ // Retrieves events from cache that are meant to be uploaded to Firebase Firestore.
+ private val firestoreEvents = debugFirestoreEventLogger.getEventList()
- private val eventList = debugAnalyticsEventLogger.getEventList()
+ // Retrieves events from cache that are meant to be uploaded to Firebase Analytics.
+ private val analyticsEvents = debugAnalyticsEventLogger.getEventList()
/**
* List of [EventLogItemViewModel] used to populate recyclerview of [ViewEventLogsFragment]
@@ -29,8 +34,10 @@ class ViewEventLogsViewModel @Inject constructor(
}
private fun processEventLogsList(): List {
- return eventList.map {
- EventLogItemViewModel(it, machineLocale, resourceHandler)
- }.reversed()
+ return (analyticsEvents + firestoreEvents)
+ .map {
+ EventLogItemViewModel(it, machineLocale, resourceHandler)
+ }
+ .sortedByDescending { it.eventLog.timestamp }
}
}
diff --git a/app/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragmentPresenter.kt
index 8399bb9a0e5..ba001da3705 100644
--- a/app/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragmentPresenter.kt
@@ -56,11 +56,11 @@ class SurveyOutroDialogFragmentPresenter @Inject constructor(
private fun endSurveyWithCallback(callback: () -> Unit) {
surveyController.stopSurveySession(surveyCompleted = true).toLiveData().observe(
activity,
- {
- when (it) {
+ { result ->
+ when (result) {
is AsyncResult.Pending -> oppiaLogger.d("SurveyActivity", "Stopping survey session")
is AsyncResult.Failure -> {
- oppiaLogger.d("SurveyActivity", "Failed to stop the survey session")
+ oppiaLogger.d("SurveyActivity", "Failed to stop the survey session", result.error)
activity.finish() // Can't recover from the session failing to stop.
}
is AsyncResult.Success -> {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt
index 7eed7b8f290..7d0dbf96afc 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt
@@ -103,6 +103,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
@@ -971,7 +972,8 @@ class AdministratorControlsActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentTest.kt
index 14feb91afcc..ff5cba27e23 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentTest.kt
@@ -91,6 +91,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
@@ -655,7 +656,8 @@ class AdministratorControlsFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt
index d6b1beaee52..cbe287cfaa9 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt
@@ -81,6 +81,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -306,7 +307,8 @@ class AppVersionActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt
index 901453c91dd..2710157c685 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt
@@ -72,6 +72,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
@@ -229,7 +230,8 @@ class ProfileAndDeviceIdActivityTest {
MathEquationInputModule::class, MetricLogSchedulerModule::class,
TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class,
ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class,
- ApplicationLifecycleModule::class, ExplorationProgressModule::class
+ ApplicationLifecycleModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt
index 632098510b5..9bd43e39012 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt
@@ -101,6 +101,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.logging.SyncStatusTestModule
@@ -1028,7 +1029,8 @@ class ProfileAndDeviceIdFragmentTest {
MathEquationInputModule::class, MetricLogSchedulerModule::class,
TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class,
ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class,
- ApplicationLifecycleModule::class, ExplorationProgressModule::class
+ ApplicationLifecycleModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt
index f12311e7c86..17f0c3d6f73 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt
@@ -84,6 +84,7 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -530,7 +531,8 @@ class CompletedStoryListActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt b/app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt
index cd902d72732..29a4743fe20 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt
@@ -64,6 +64,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -178,7 +179,8 @@ class LessonThumbnailImageViewTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsViewTest.kt b/app/src/sharedTest/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsViewTest.kt
index 8c53754b19a..768ba9a67a0 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsViewTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsViewTest.kt
@@ -78,6 +78,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -1780,7 +1781,8 @@ class MathExpressionInteractionsViewTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt
index 9fcf2bd1e47..7ea576a3ebb 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt
@@ -65,6 +65,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -169,7 +170,8 @@ class AppCompatCheckBoxBindingAdaptersTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt
index 48cd0f921ac..c84c6fc96b2 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt
@@ -68,6 +68,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
@@ -300,7 +301,8 @@ class CircularProgressIndicatorAdaptersTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt
index e996e8aebee..5a81aa9f654 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt
@@ -69,6 +69,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -189,7 +190,8 @@ class DrawableBindingAdaptersTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt
index 464c7939a6f..72f19842249 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt
@@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -231,7 +232,8 @@ class ImageViewBindingAdaptersTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
/** Create a TestApplicationComponent. */
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt
index 5b7202c4d9b..7bdc00ef976 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt
@@ -78,6 +78,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -352,7 +353,8 @@ class MarginBindingAdaptersTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
/** Create a TestApplicationComponent. */
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt
index 32edc11fdd6..9e8a843ee06 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt
@@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -507,7 +508,8 @@ class StateAssemblerMarginBindingAdaptersTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
/** Create a TestApplicationComponent. */
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt
index 201fc1fdd6f..073add10f38 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt
@@ -75,6 +75,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -505,7 +506,8 @@ class StateAssemblerPaddingBindingAdaptersTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt
index 4b0c22416c3..ca6a286febb 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt
@@ -67,6 +67,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -338,7 +339,8 @@ class TextViewBindingAdaptersTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt
index d45c83ec1a6..9db806e5f0e 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt
@@ -72,6 +72,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -239,7 +240,8 @@ class ViewBindingAdaptersTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
/** Create a TestApplicationComponent. */
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt
index d50f6dfa630..55bbad1e323 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt
@@ -91,6 +91,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -341,7 +342,8 @@ class DeveloperOptionsActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt
index e0340041713..8247b045e36 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt
@@ -86,6 +86,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -662,7 +663,8 @@ class DeveloperOptionsFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt
index e1513f5a954..59415795065 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt
@@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -272,7 +273,8 @@ class MarkChaptersCompletedActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt
index 0fbc8a68ada..6125413e6f6 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt
@@ -82,6 +82,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.topic.StoryProgressController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -1023,7 +1024,8 @@ class MarkChaptersCompletedFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt
index 132b2656fdf..8d8204d9684 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt
@@ -68,6 +68,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -203,7 +204,8 @@ class MarkStoriesCompletedActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt
index c02e5e07704..e67d776813a 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt
@@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -570,7 +571,8 @@ class MarkStoriesCompletedFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt
index 33e3259e66b..5a575360d80 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt
@@ -68,6 +68,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -203,7 +204,8 @@ class MarkTopicsCompletedActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt
index 8360185d707..78214587b28 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt
@@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -551,7 +552,8 @@ class MarkTopicsCompletedFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt
index d350653c5d8..94dab9dd41d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt
@@ -69,6 +69,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
@@ -194,7 +195,8 @@ class ViewEventLogsActivityTest {
PerformanceMetricsAssessorModule::class, PerformanceMetricsConfigurationsModule::class,
TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class,
ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class,
- ExplorationProgressModule::class
+ ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsFragmentTest.kt
index 40ed8ae48fb..6ec2a227ec1 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsFragmentTest.kt
@@ -16,7 +16,10 @@ import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.firebase.FirebaseApp
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import dagger.Component
+import dagger.Module
+import dagger.Provides
import org.junit.After
import org.junit.Before
import org.junit.Rule
@@ -33,6 +36,8 @@ import org.oppia.android.app.application.ApplicationModule
import org.oppia.android.app.application.ApplicationStartupListenerModule
import org.oppia.android.app.application.testing.TestingBuildFlavorModule
import org.oppia.android.app.devoptions.vieweventlogs.testing.ViewEventLogsTestActivity
+import org.oppia.android.app.model.EventLog
+import org.oppia.android.app.model.ProfileId
import org.oppia.android.app.player.state.itemviewmodel.SplitScreenInteractionModule
import org.oppia.android.app.recyclerview.RecyclerViewMatcher.Companion.atPositionOnView
import org.oppia.android.app.recyclerview.RecyclerViewMatcher.Companion.hasItemCount
@@ -60,9 +65,12 @@ import org.oppia.android.domain.exploration.ExplorationStorageModule
import org.oppia.android.domain.hintsandsolution.HintsAndSolutionConfigModule
import org.oppia.android.domain.hintsandsolution.HintsAndSolutionProdModule
import org.oppia.android.domain.onboarding.ExpirationMetaDataRetrieverModule
-import org.oppia.android.domain.oppialogger.LogStorageModule
+import org.oppia.android.domain.oppialogger.EventLogStorageCacheSize
+import org.oppia.android.domain.oppialogger.ExceptionLogStorageCacheSize
+import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize
import org.oppia.android.domain.oppialogger.LoggingIdentifierModule
import org.oppia.android.domain.oppialogger.OppiaLogger
+import org.oppia.android.domain.oppialogger.PerformanceMetricsLogStorageCacheSize
import org.oppia.android.domain.oppialogger.analytics.AnalyticsController
import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
import org.oppia.android.domain.oppialogger.analytics.CpuPerformanceSnapshotterModule
@@ -73,7 +81,9 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.FakeFirestoreInstanceWrapperImpl
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
@@ -85,13 +95,21 @@ import org.oppia.android.util.caching.AssetModule
import org.oppia.android.util.caching.testing.CachingTestModule
import org.oppia.android.util.gcsresource.GcsResourceModule
import org.oppia.android.util.locale.LocaleProdModule
+import org.oppia.android.util.logging.AnalyticsEventLogger
import org.oppia.android.util.logging.EventLoggingConfigurationModule
+import org.oppia.android.util.logging.ExceptionLogger
import org.oppia.android.util.logging.LoggerModule
import org.oppia.android.util.logging.SyncStatusModule
-import org.oppia.android.util.logging.firebase.DebugLogReportingModule
+import org.oppia.android.util.logging.firebase.DebugAnalyticsEventLogger
+import org.oppia.android.util.logging.firebase.DebugFirestoreEventLoggerImpl
+import org.oppia.android.util.logging.firebase.FirebaseAnalyticsEventLogger
+import org.oppia.android.util.logging.firebase.FirebaseExceptionLogger
import org.oppia.android.util.logging.firebase.FirebaseLogUploaderModule
+import org.oppia.android.util.logging.firebase.FirestoreEventLogger
+import org.oppia.android.util.logging.firebase.FirestoreInstanceWrapper
import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsAssessorModule
import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsConfigurationsModule
+import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsEventLogger
import org.oppia.android.util.networking.NetworkConnectionDebugUtilModule
import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule
import org.oppia.android.util.parser.html.HtmlParserEntityTypeModule
@@ -117,20 +135,28 @@ private const val TEST_SUB_TOPIC_ID = 1
class ViewEventLogsFragmentTest {
@get:Rule
val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
+
@get:Rule
val oppiaTestRule = OppiaTestRule()
@Inject
lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
+
@Inject
lateinit var context: Context
+
@Inject
lateinit var oppiaLogger: OppiaLogger
+
@Inject
lateinit var analyticsController: AnalyticsController
+
@Inject
lateinit var fakeOppiaClock: FakeOppiaClock
+ @Inject
+ lateinit var firestoreEventLogger: FirestoreEventLogger
+
@Before
fun setUp() {
setUpTestApplicationComponent()
@@ -173,7 +199,7 @@ class ViewEventLogsFragmentTest {
launch(ViewEventLogsTestActivity::class.java).use {
testCoroutineDispatchers.runCurrent()
onView(withId(R.id.view_event_logs_recycler_view))
- .check(hasItemCount(count = 5))
+ .check(hasItemCount(count = 6))
}
}
@@ -183,7 +209,7 @@ class ViewEventLogsFragmentTest {
testCoroutineDispatchers.runCurrent()
onView(isRoot()).perform(orientationLandscape())
onView(withId(R.id.view_event_logs_recycler_view))
- .check(hasItemCount(count = 5))
+ .check(hasItemCount(count = 6))
}
}
@@ -194,30 +220,36 @@ class ViewEventLogsFragmentTest {
scrollToPosition(position = 0)
verifyTextOnEventLogItemViewAtPosition(
position = 0,
- stringToMatch = "Open Revision Card",
+ stringToMatch = "Optional Response",
targetViewId = R.id.view_event_logs_context_text_view
)
scrollToPosition(position = 1)
verifyTextOnEventLogItemViewAtPosition(
position = 1,
- stringToMatch = "Open Story Activity",
+ stringToMatch = "Open Revision Card",
targetViewId = R.id.view_event_logs_context_text_view
)
scrollToPosition(position = 2)
verifyTextOnEventLogItemViewAtPosition(
position = 2,
- stringToMatch = "Open Lessons Tab",
+ stringToMatch = "Open Story Activity",
targetViewId = R.id.view_event_logs_context_text_view
)
scrollToPosition(position = 3)
verifyTextOnEventLogItemViewAtPosition(
position = 3,
- stringToMatch = "Open Home",
+ stringToMatch = "Open Lessons Tab",
targetViewId = R.id.view_event_logs_context_text_view
)
scrollToPosition(position = 4)
verifyTextOnEventLogItemViewAtPosition(
position = 4,
+ stringToMatch = "Open Home",
+ targetViewId = R.id.view_event_logs_context_text_view
+ )
+ scrollToPosition(position = 5)
+ verifyTextOnEventLogItemViewAtPosition(
+ position = 5,
stringToMatch = "Open Profile Chooser",
targetViewId = R.id.view_event_logs_context_text_view
)
@@ -232,30 +264,36 @@ class ViewEventLogsFragmentTest {
scrollToPosition(position = 0)
verifyTextOnEventLogItemViewAtPosition(
position = 0,
- stringToMatch = "Open Revision Card",
+ stringToMatch = "Optional Response",
targetViewId = R.id.view_event_logs_context_text_view
)
scrollToPosition(position = 1)
verifyTextOnEventLogItemViewAtPosition(
position = 1,
- stringToMatch = "Open Story Activity",
+ stringToMatch = "Open Revision Card",
targetViewId = R.id.view_event_logs_context_text_view
)
scrollToPosition(position = 2)
verifyTextOnEventLogItemViewAtPosition(
position = 2,
- stringToMatch = "Open Lessons Tab",
+ stringToMatch = "Open Story Activity",
targetViewId = R.id.view_event_logs_context_text_view
)
scrollToPosition(position = 3)
verifyTextOnEventLogItemViewAtPosition(
position = 3,
- stringToMatch = "Open Home",
+ stringToMatch = "Open Lessons Tab",
targetViewId = R.id.view_event_logs_context_text_view
)
scrollToPosition(position = 4)
verifyTextOnEventLogItemViewAtPosition(
position = 4,
+ stringToMatch = "Open Home",
+ targetViewId = R.id.view_event_logs_context_text_view
+ )
+ scrollToPosition(position = 5)
+ verifyTextOnEventLogItemViewAtPosition(
+ position = 5,
stringToMatch = "Open Profile Chooser",
targetViewId = R.id.view_event_logs_context_text_view
)
@@ -273,7 +311,7 @@ class ViewEventLogsFragmentTest {
)
verifyTextOnEventLogItemViewAtPosition(
position = 0,
- stringToMatch = "Open Revision Card",
+ stringToMatch = "Optional Response",
targetViewId = R.id.view_event_logs_context_text_view
)
scrollToPosition(position = 1)
@@ -283,7 +321,7 @@ class ViewEventLogsFragmentTest {
)
verifyTextOnEventLogItemViewAtPosition(
position = 1,
- stringToMatch = "Open Story Activity",
+ stringToMatch = "Open Revision Card",
targetViewId = R.id.view_event_logs_context_text_view
)
scrollToPosition(position = 2)
@@ -293,6 +331,16 @@ class ViewEventLogsFragmentTest {
)
verifyTextOnEventLogItemViewAtPosition(
position = 2,
+ stringToMatch = "Open Story Activity",
+ targetViewId = R.id.view_event_logs_context_text_view
+ )
+ scrollToPosition(position = 3)
+ verifyItemDisplayedOnEventLogItemViewAtPosition(
+ position = 3,
+ targetViewId = R.id.view_event_logs_context_text_view
+ )
+ verifyTextOnEventLogItemViewAtPosition(
+ position = 3,
stringToMatch = "Open Lessons Tab",
targetViewId = R.id.view_event_logs_context_text_view
)
@@ -311,7 +359,7 @@ class ViewEventLogsFragmentTest {
)
verifyTextOnEventLogItemViewAtPosition(
position = 0,
- stringToMatch = "Open Revision Card",
+ stringToMatch = "Optional Response",
targetViewId = R.id.view_event_logs_context_text_view
)
scrollToPosition(position = 1)
@@ -321,7 +369,7 @@ class ViewEventLogsFragmentTest {
)
verifyTextOnEventLogItemViewAtPosition(
position = 1,
- stringToMatch = "Open Story Activity",
+ stringToMatch = "Open Revision Card",
targetViewId = R.id.view_event_logs_context_text_view
)
scrollToPosition(position = 2)
@@ -331,6 +379,16 @@ class ViewEventLogsFragmentTest {
)
verifyTextOnEventLogItemViewAtPosition(
position = 2,
+ stringToMatch = "Open Story Activity",
+ targetViewId = R.id.view_event_logs_context_text_view
+ )
+ scrollToPosition(position = 3)
+ verifyItemDisplayedOnEventLogItemViewAtPosition(
+ position = 3,
+ targetViewId = R.id.view_event_logs_context_text_view
+ )
+ verifyTextOnEventLogItemViewAtPosition(
+ position = 3,
stringToMatch = "Open Lessons Tab",
targetViewId = R.id.view_event_logs_context_text_view
)
@@ -344,30 +402,36 @@ class ViewEventLogsFragmentTest {
scrollToPosition(position = 0)
verifyTextOnEventLogItemViewAtPosition(
position = 0,
- stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 40000),
+ stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 50000),
targetViewId = R.id.view_event_logs_time_text_view
)
scrollToPosition(position = 1)
verifyTextOnEventLogItemViewAtPosition(
position = 1,
- stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 30000),
+ stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 40000),
targetViewId = R.id.view_event_logs_time_text_view
)
scrollToPosition(position = 2)
verifyTextOnEventLogItemViewAtPosition(
position = 2,
- stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 20000),
+ stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 30000),
targetViewId = R.id.view_event_logs_time_text_view
)
scrollToPosition(position = 3)
verifyTextOnEventLogItemViewAtPosition(
position = 3,
- stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 10000),
+ stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 20000),
targetViewId = R.id.view_event_logs_time_text_view
)
scrollToPosition(position = 4)
verifyTextOnEventLogItemViewAtPosition(
position = 4,
+ stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 10000),
+ targetViewId = R.id.view_event_logs_time_text_view
+ )
+ scrollToPosition(position = 5)
+ verifyTextOnEventLogItemViewAtPosition(
+ position = 5,
stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP),
targetViewId = R.id.view_event_logs_time_text_view
)
@@ -382,30 +446,36 @@ class ViewEventLogsFragmentTest {
scrollToPosition(position = 0)
verifyTextOnEventLogItemViewAtPosition(
position = 0,
- stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 40000),
+ stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 50000),
targetViewId = R.id.view_event_logs_time_text_view
)
scrollToPosition(position = 1)
verifyTextOnEventLogItemViewAtPosition(
position = 1,
- stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 30000),
+ stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 40000),
targetViewId = R.id.view_event_logs_time_text_view
)
scrollToPosition(position = 2)
verifyTextOnEventLogItemViewAtPosition(
position = 2,
- stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 20000),
+ stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 30000),
targetViewId = R.id.view_event_logs_time_text_view
)
scrollToPosition(position = 3)
verifyTextOnEventLogItemViewAtPosition(
position = 3,
- stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 10000),
+ stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 20000),
targetViewId = R.id.view_event_logs_time_text_view
)
scrollToPosition(position = 4)
verifyTextOnEventLogItemViewAtPosition(
position = 4,
+ stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 10000),
+ targetViewId = R.id.view_event_logs_time_text_view
+ )
+ scrollToPosition(position = 5)
+ verifyTextOnEventLogItemViewAtPosition(
+ position = 5,
stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP),
targetViewId = R.id.view_event_logs_time_text_view
)
@@ -446,6 +516,12 @@ class ViewEventLogsFragmentTest {
stringToMatch = "Essential",
targetViewId = R.id.view_event_logs_priority_text_view
)
+ scrollToPosition(position = 5)
+ verifyTextOnEventLogItemViewAtPosition(
+ position = 5,
+ stringToMatch = "Essential",
+ targetViewId = R.id.view_event_logs_priority_text_view
+ )
}
}
@@ -484,6 +560,12 @@ class ViewEventLogsFragmentTest {
stringToMatch = "Essential",
targetViewId = R.id.view_event_logs_priority_text_view
)
+ scrollToPosition(position = 5)
+ verifyTextOnEventLogItemViewAtPosition(
+ position = 5,
+ stringToMatch = "Essential",
+ targetViewId = R.id.view_event_logs_priority_text_view
+ )
}
}
@@ -515,6 +597,39 @@ class ViewEventLogsFragmentTest {
analyticsController.logImportantEvent(
oppiaLogger.createOpenRevisionCardContext(TEST_TOPIC_ID, TEST_SUB_TOPIC_ID), profileId = null
)
+
+ val eventLog = EventLog.newBuilder()
+ .setContext(
+ createOptionalSurveyResponseContext(
+ "survey_id",
+ profileId = null,
+ answer = "some response"
+ )
+ )
+ .setPriority(EventLog.Priority.ESSENTIAL)
+ .setTimestamp(TEST_TIMESTAMP + 50000)
+ .build()
+
+ firestoreEventLogger.uploadEvent(eventLog)
+ }
+
+ private fun createOptionalSurveyResponseContext(
+ surveyId: String,
+ profileId: ProfileId?,
+ answer: String
+ ): EventLog.Context {
+ return EventLog.Context.newBuilder()
+ .setOptionalResponse(
+ EventLog.OptionalSurveyResponseContext.newBuilder()
+ .setFeedbackAnswer(answer)
+ .setSurveyDetails(
+ EventLog.SurveyResponseContext.newBuilder()
+ .setProfileId(profileId?.internalId.toString())
+ .setSurveyId(surveyId)
+ .build()
+ )
+ )
+ .build()
}
private fun verifyTextOnEventLogItemViewAtPosition(
@@ -563,6 +678,56 @@ class ViewEventLogsFragmentTest {
)
}
+ @Module
+ class TestLogStorageModule {
+ @Provides
+ @EventLogStorageCacheSize
+ fun provideEventLogStorageCacheSize(): Int = 2
+
+ @Provides
+ @ExceptionLogStorageCacheSize
+ fun provideExceptionLogStorageCacheSize(): Int = 2
+
+ @Provides
+ @PerformanceMetricsLogStorageCacheSize
+ fun providePerformanceMetricsLogStorageCacheSize(): Int = 2
+
+ @Provides
+ @FirestoreLogStorageCacheSize
+ fun provideFirestoreLogStorageCacheSize(): Int = 2
+ }
+
+ @Module
+ class TestLogReportingModule {
+ @Provides
+ @Singleton
+ fun provideExceptionLogger(): ExceptionLogger =
+ FirebaseExceptionLogger(FirebaseCrashlytics.getInstance())
+
+ @Provides
+ @Singleton
+ fun provideDebugEventLogger(debugAnalyticsEventLogger: DebugAnalyticsEventLogger):
+ AnalyticsEventLogger = debugAnalyticsEventLogger
+
+ @Provides
+ @Singleton
+ fun providePerformanceMetricsEventLogger(
+ factory: FirebaseAnalyticsEventLogger.Factory
+ ): PerformanceMetricsEventLogger =
+ factory.createPerformanceMetricEventLogger()
+
+ @Provides
+ @Singleton
+ fun provideDebugFirestoreEventLogger(
+ debugFirestoreEventLogger: DebugFirestoreEventLoggerImpl
+ ): FirestoreEventLogger = debugFirestoreEventLogger
+
+ @Provides
+ @Singleton
+ fun provideFirebaseFirestoreInstanceWrapper(wrapperImpl: FakeFirestoreInstanceWrapperImpl):
+ FirestoreInstanceWrapper = wrapperImpl
+ }
+
// TODO(#59): Figure out a way to reuse modules instead of needing to re-declare them.
@Singleton
@Component(
@@ -574,8 +739,8 @@ class ViewEventLogsFragmentTest {
NumberWithUnitsRuleModule::class, NumericInputRuleModule::class, TextInputRuleModule::class,
DragDropSortInputModule::class, ImageClickInputModule::class, InteractionsModule::class,
GcsResourceModule::class, GlideImageLoaderModule::class, ImageParsingModule::class,
- HtmlParserEntityTypeModule::class, QuestionModule::class, DebugLogReportingModule::class,
- AccessibilityTestModule::class, LogStorageModule::class, CachingTestModule::class,
+ HtmlParserEntityTypeModule::class, QuestionModule::class, TestLogReportingModule::class,
+ AccessibilityTestModule::class, TestLogStorageModule::class, CachingTestModule::class,
PrimeTopicAssetsControllerModule::class, ExpirationMetaDataRetrieverModule::class,
ViewBindingShimModule::class, RatioInputModule::class, WorkManagerConfigurationModule::class,
ApplicationStartupListenerModule::class, LogReportWorkerModule::class,
@@ -592,7 +757,8 @@ class ViewEventLogsFragmentTest {
MetricLogSchedulerModule::class, PerformanceMetricsAssessorModule::class,
PerformanceMetricsConfigurationsModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class,
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt
index 3c5918d0f81..7bc720e4ae0 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt
@@ -69,6 +69,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -194,7 +195,8 @@ class ForceNetworkTypeActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
/** [ApplicationComponent] for [ForceNetworkTypeActivityTest]. */
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentTest.kt
index 3c3548dd3d6..25cccdd0bd1 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentTest.kt
@@ -73,6 +73,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -401,7 +402,8 @@ class ForceNetworkTypeFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
/** [ApplicationComponent] for [ForceNetworkTypeFragmentTest]. */
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityTest.kt
index 5bb2ba6db0c..517da7ca48a 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityTest.kt
@@ -65,6 +65,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -179,7 +180,8 @@ class MathExpressionParserActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt
index 036dfde42b4..cac62ddb6b4 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt
@@ -74,6 +74,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
@@ -1419,7 +1420,8 @@ class MathExpressionParserFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt
index b32169576f9..41fefe4329b 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt
@@ -79,6 +79,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -253,7 +254,8 @@ class FAQListFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt
index e343041c2fe..90d49553c6c 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt
@@ -75,6 +75,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -240,7 +241,8 @@ class FAQSingleActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt
index 1f9086d1c4d..680afbdeb44 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt
@@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -167,7 +168,8 @@ class FaqListActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt
index d4da5be6dc7..f00931977eb 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt
@@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -86,7 +87,6 @@ import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode
import javax.inject.Inject
import javax.inject.Singleton
-
/** Tests for [HelpActivity]. */
@RunWith(AndroidJUnit4::class)
@LooperMode(LooperMode.Mode.PAUSED)
@@ -169,7 +169,8 @@ class HelpActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt
index 7730b85edf8..73cfb22be58 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt
@@ -93,6 +93,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -1448,7 +1449,8 @@ class HelpFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt
index 8e7bf121487..f5e058dfb62 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt
@@ -121,6 +121,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
@@ -2000,7 +2001,8 @@ class HomeActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt
index 91a5071439b..0aca510567f 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt
@@ -108,6 +108,7 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -1500,7 +1501,8 @@ class RecentlyPlayedFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt
index 97198f4f58c..97fc6eb4f8c 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt
@@ -66,6 +66,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -390,7 +391,8 @@ class TopicSummaryViewModelTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt
index 74ca4cbf4ff..9ede16565ca 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt
@@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -363,7 +364,8 @@ class WelcomeViewModelTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt
index 55b960353a7..99cd9dcd48e 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt
@@ -66,6 +66,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -376,7 +377,8 @@ class PromotedStoryListViewModelTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt
index 6e96d63a095..ac309882dd1 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt
@@ -64,6 +64,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -402,7 +403,8 @@ class PromotedStoryViewModelTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest.kt
index 11b4b912b73..c42a30b0d55 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest.kt
@@ -61,6 +61,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -160,7 +161,8 @@ class MyDownloadsActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt
index 3e1ce04a34f..2441f617b3d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt
@@ -71,6 +71,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -239,7 +240,8 @@ class MyDownloadsFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentTest.kt
index 9ab0a7a8159..b98726e61f3 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentTest.kt
@@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -250,7 +251,8 @@ class BetaNoticeDialogFragmentTest {
ApplicationLifecycleModule::class, SyncStatusModule::class, TestingBuildFlavorModule::class,
CachingTestModule::class, MetricLogSchedulerModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentTest.kt
index d0b1aa4fc7e..675426fe1eb 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentTest.kt
@@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -240,7 +241,8 @@ class ForcedAppDeprecationNoticeDialogFragmentTest {
ApplicationLifecycleModule::class, SyncStatusModule::class, TestingBuildFlavorModule::class,
CachingTestModule::class, MetricLogSchedulerModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentTest.kt
index d44a2e47d6a..29c1cde2351 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentTest.kt
@@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -257,7 +258,8 @@ class GeneralAvailabilityUpgradeNoticeDialogFragmentTest {
ApplicationLifecycleModule::class, SyncStatusModule::class, TestingBuildFlavorModule::class,
CachingTestModule::class, MetricLogSchedulerModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentTest.kt
index c9545e4e324..b981373f23d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentTest.kt
@@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -242,7 +243,8 @@ class OptionalAppDeprecationNoticeDialogFragmentTest {
ApplicationLifecycleModule::class, SyncStatusModule::class, TestingBuildFlavorModule::class,
CachingTestModule::class, MetricLogSchedulerModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentTest.kt
index becd031ecdb..1a522d1242d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentTest.kt
@@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -115,7 +116,8 @@ class OsDeprecationNoticeDialogFragmentTest {
@get:Rule
val oppiaTestRule = OppiaTestRule()
- @field:[Rule JvmField] val mockitoRule: MockitoRule = MockitoJUnit.rule()
+ @field:[Rule JvmField]
+ val mockitoRule: MockitoRule = MockitoJUnit.rule()
@Inject
lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
@@ -224,7 +226,8 @@ class OsDeprecationNoticeDialogFragmentTest {
ApplicationLifecycleModule::class, SyncStatusModule::class, TestingBuildFlavorModule::class,
CachingTestModule::class, MetricLogSchedulerModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt
index 101fbc9d757..23704d8ef36 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt
@@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -86,7 +87,6 @@ import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode
import javax.inject.Inject
import javax.inject.Singleton
-
/** Tests for [OnboardingActivity]. */
@RunWith(AndroidJUnit4::class)
@LooperMode(LooperMode.Mode.PAUSED)
@@ -166,7 +166,8 @@ class OnboardingActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt
index 53de66687fb..e1227d6396f 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt
@@ -88,6 +88,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
@@ -720,7 +721,8 @@ class OnboardingFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt
index a8f96c78821..bf37a173a38 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt
@@ -82,6 +82,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.topic.RATIOS_TOPIC_ID
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -474,7 +475,8 @@ class OngoingTopicListActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt
index c54852c2bc3..52e8a3cc154 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt
@@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -174,7 +175,8 @@ class AppLanguageActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt
index 6ec000c34d5..07df1432348 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt
@@ -75,6 +75,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -322,7 +323,8 @@ class AppLanguageFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt
index 463b847ca30..a87d648e98e 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt
@@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -165,7 +166,8 @@ class AudioLanguageActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt
index 10071c24349..9511978a74b 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt
@@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
@@ -314,7 +315,8 @@ class AudioLanguageFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt
index b15d9d269d2..7aff373149c 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt
@@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -168,7 +169,8 @@ class OptionsActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt
index a96f83b18fd..da8a49d42a3 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt
@@ -90,6 +90,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -644,7 +645,8 @@ class OptionsFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt
index ac5a0cc08be..6c54efd52c8 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt
@@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -165,7 +166,8 @@ class ReadingTextSizeActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt
index 10760da6b34..56933de3067 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt
@@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
@@ -317,7 +318,8 @@ class ReadingTextSizeFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt b/app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt
index b0e82b25dcd..a655da4b9e0 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt
@@ -102,6 +102,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
@@ -913,7 +914,8 @@ class HtmlParserTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt
index bf224018f5e..173b024aa5f 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt
@@ -87,6 +87,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -482,7 +483,8 @@ class AudioFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuTest.kt b/app/src/sharedTest/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuTest.kt
index 12668ac7d76..e390e6eea1a 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuTest.kt
@@ -70,6 +70,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -193,7 +194,8 @@ class BottomSheetOptionsMenuTest {
ApplicationLifecycleModule::class, SyncStatusModule::class, TestingBuildFlavorModule::class,
CachingTestModule::class, MetricLogSchedulerModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt
index 18acf05d0c9..6245681585e 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt
@@ -130,6 +130,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
@@ -2566,7 +2567,8 @@ class ExplorationActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt
index 2888906d8fd..0ee896da96d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt
@@ -151,6 +151,7 @@ import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
@@ -4962,7 +4963,8 @@ class StateFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesActivityTest.kt
index a3c01568fb0..95dd5e209d2 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesActivityTest.kt
@@ -79,6 +79,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -280,7 +281,8 @@ class PoliciesActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt
index a66658b3875..2a318c9324a 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt
@@ -91,6 +91,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -360,7 +361,8 @@ class PoliciesFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt
index 6ead5d8438b..175b0a62bf9 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt
@@ -96,6 +96,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText
@@ -1796,7 +1797,8 @@ class AddProfileActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt
index 87b7eaa2378..cb49cff5daa 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt
@@ -82,6 +82,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText
@@ -693,7 +694,8 @@ class AdminAuthActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt
index 96b1025a35e..ea44c5d0d1c 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt
@@ -91,6 +91,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText
@@ -1110,7 +1111,8 @@ class AdminPinActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt
index 16ce38b184e..f65a6f5f45a 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt
@@ -87,6 +87,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText
@@ -1217,7 +1218,8 @@ class PinPasswordActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt
index 3b8e8cfe439..3442c182a7d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt
@@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -164,7 +165,8 @@ class ProfileChooserActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt
index 8dbbf853b9b..0418a1339a8 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt
@@ -84,6 +84,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
@@ -529,7 +530,8 @@ class ProfileChooserFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt
index 5c870dc35dc..57d8180ed22 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt
@@ -70,6 +70,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
@@ -221,6 +222,7 @@ class ProfilePictureActivityTest {
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt
index 0e16912ffb1..fc6c676d227 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt
@@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -171,6 +172,7 @@ class ProfileProgressActivityTest {
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt
index 9568acdecff..a4c5187cf25 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt
@@ -108,6 +108,7 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
@@ -930,6 +931,7 @@ class ProfileProgressFragmentTest {
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt b/app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt
index 0882da3a400..1d48ecfcf71 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt
@@ -98,6 +98,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -683,7 +684,8 @@ class BindableAdapterTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt
index 11effa33a84..988cbe99df3 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt
@@ -82,6 +82,7 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -240,7 +241,8 @@ class ResumeLessonActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt
index e837fba1cfa..7bbc505d9dc 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt
@@ -84,6 +84,7 @@ import org.oppia.android.domain.topic.RATIOS_STORY_ID_0
import org.oppia.android.domain.topic.RATIOS_TOPIC_ID
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -320,7 +321,8 @@ class ResumeLessonFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt
index b06938a9be7..ab1aa374f27 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt
@@ -79,6 +79,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
@@ -372,7 +373,8 @@ class ProfileEditActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditFragmentTest.kt
index 5c28e75d5d9..a6f02aa8d7c 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditFragmentTest.kt
@@ -84,6 +84,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
@@ -487,7 +488,8 @@ class ProfileEditFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt
index 5ab0aa0d058..fe93ebd5339 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt
@@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -166,7 +167,8 @@ class ProfileListActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt
index f57ca938ce6..5e571de6a91 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt
@@ -76,6 +76,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
@@ -395,7 +396,8 @@ class ProfileListFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt
index 32711f2c916..dc8534a913f 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt
@@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -192,7 +193,8 @@ class ProfileRenameActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt
index b1e253d60f0..e95194f1de1 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt
@@ -78,6 +78,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText
@@ -469,7 +470,8 @@ class ProfileRenameFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt
index d0b9021240f..0a0d8c22316 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt
@@ -64,6 +64,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -201,7 +202,8 @@ class ProfileResetPinActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt
index 830f3f885de..ce23631d2a0 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt
@@ -79,6 +79,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText
@@ -1033,7 +1034,8 @@ class ProfileResetPinFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt
index 4483d5e3e6c..2ccef97076a 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt
@@ -95,6 +95,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
@@ -1246,7 +1247,8 @@ class SplashActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest.kt
index 3911274b902..36f978df8c1 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest.kt
@@ -72,6 +72,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
@@ -371,7 +372,8 @@ class SpotlightFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt
index f0b4d27753b..c4a1776e814 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt
@@ -85,6 +85,7 @@ import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -279,7 +280,8 @@ class StoryActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt
index 21202b8915d..1e30882456e 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt
@@ -116,6 +116,7 @@ import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.mockito.anyOrNull
@@ -1000,7 +1001,8 @@ class StoryFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt
index 158296d3aa2..4af4459dfef 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt
@@ -66,6 +66,7 @@ import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_2
import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
@@ -193,7 +194,8 @@ class SurveyActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt
index 4ac59d07d5b..f1398787462 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt
@@ -89,6 +89,7 @@ import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.logging.EventLogSubject
@@ -619,7 +620,8 @@ class SurveyFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt
index cb81673b016..966ada83745 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt
@@ -72,6 +72,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -237,7 +238,8 @@ class DragDropTestActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt
index 606f7b2f945..7f5c52581a6 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt
@@ -72,6 +72,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -578,7 +579,8 @@ class FractionInputInteractionViewTestActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt
index 58978aa74b0..11088d08c32 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt
@@ -83,6 +83,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
@@ -404,7 +405,8 @@ class ImageRegionSelectionInteractionViewTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt
index 01f4f9872bb..9041d7fa64d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt
@@ -72,6 +72,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -506,7 +507,8 @@ class InputInteractionViewTestActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt
index 1b25eeb4eba..0fac18cd543 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt
@@ -99,6 +99,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -457,7 +458,8 @@ class NavigationDrawerActivityDebugTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt
index 08512202fb7..9ec9f47ee79 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt
@@ -107,6 +107,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -1016,7 +1017,8 @@ class NavigationDrawerActivityProdTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt
index 5a8249a9088..57b3c1b0604 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt
@@ -79,6 +79,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -446,7 +447,8 @@ class RatioInputInteractionViewTestActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt
index 9b8b64c3092..5815a6f0971 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt
@@ -67,6 +67,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -212,7 +213,8 @@ class TestFontScaleConfigurationUtilActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt
index e24a5dad28b..03c8b40c315 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt
@@ -71,6 +71,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
@@ -213,7 +214,8 @@ class TopicTestActivityForStoryTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt
index 8cf61b1e656..cc6d13cc284 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt
@@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -179,7 +180,8 @@ class LicenseListActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListFragmentTest.kt
index aec669e81e3..b50e60a6cfa 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListFragmentTest.kt
@@ -78,6 +78,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -379,7 +380,8 @@ class LicenseListFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt
index 93dc07a0ade..e1545f34c32 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt
@@ -71,6 +71,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -283,7 +284,8 @@ class LicenseTextViewerActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerFragmentTest.kt
index 76df5c92384..03d9b1c666a 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerFragmentTest.kt
@@ -68,6 +68,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -357,7 +358,8 @@ class LicenseTextViewerFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt
index ca05cb9ddbc..da5a3be066d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt
@@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -176,7 +177,8 @@ class ThirdPartyDependencyListActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListFragmentTest.kt
index af563731aa9..7691445e8a2 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListFragmentTest.kt
@@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -489,7 +490,8 @@ class ThirdPartyDependencyListFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class,
MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt
index a765068fde4..8cf06d4dfb4 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt
@@ -82,6 +82,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -253,7 +254,8 @@ class TopicActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt
index 333cab9044e..0b42029e742 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt
@@ -94,6 +94,7 @@ import org.oppia.android.domain.topic.RATIOS_TOPIC_ID
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat
@@ -1024,7 +1025,8 @@ class TopicFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt
index fcad7bafb88..846884c529d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt
@@ -103,6 +103,7 @@ import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RichTextViewMatcher.Companion.containsRichText
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
@@ -597,7 +598,8 @@ class ConceptCardFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt
index 0acdf90b1a6..a8ea6bf7896 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt
@@ -88,6 +88,7 @@ import org.oppia.android.domain.topic.RATIOS_TOPIC_ID
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
@@ -498,7 +499,8 @@ class TopicInfoFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt
index 8ea32a5e1ab..45abdc11143 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt
@@ -110,6 +110,7 @@ import org.oppia.android.domain.topic.RATIOS_STORY_ID_0
import org.oppia.android.domain.topic.RATIOS_TOPIC_ID
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.lightweightcheckpointing.ExplorationCheckpointTestHelper
@@ -1190,7 +1191,8 @@ class TopicLessonsFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt
index 74481e48ebc..3f8b7eae213 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt
@@ -88,6 +88,7 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
@@ -462,7 +463,8 @@ class TopicPracticeFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt
index b34db800641..9bd58c51e8c 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt
@@ -126,6 +126,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
@@ -811,7 +812,8 @@ class QuestionPlayerActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt
index 81f405e6f98..2daf1860e6b 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt
@@ -89,6 +89,7 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.ImageViewMatcher.Companion.hasScaleType
@@ -358,7 +359,8 @@ class TopicRevisionFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt
index d28d3428aa9..278c43c94d8 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt
@@ -82,6 +82,7 @@ import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
@@ -481,7 +482,8 @@ class RevisionCardActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt
index 0f7721cbd58..7422990cea4 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt
@@ -104,6 +104,7 @@ import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
@@ -800,7 +801,8 @@ class RevisionCardFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt b/app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt
index 9a306b03e31..f8e1dedfdb9 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt
@@ -60,6 +60,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -165,7 +166,8 @@ class RatioExtensionsTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt
index d4e5a2afec0..e289674673e 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt
@@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -254,7 +255,8 @@ class WalkthroughActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt
index 0131d060c65..79e0caf8e70 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt
@@ -76,6 +76,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -300,7 +301,8 @@ class WalkthroughFinalFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt
index 7d86a720ab6..d90dca2bb15 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt
@@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.environment.TestEnvironmentConfig
@@ -326,7 +327,8 @@ class WalkthroughTopicListFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt
index 8af2cebfb4c..0634f55de2b 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt
@@ -72,6 +72,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
@@ -223,7 +224,8 @@ class WalkthroughWelcomeFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt b/app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt
index d10fdafe22e..47a343b0316 100644
--- a/app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt
+++ b/app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt
@@ -63,6 +63,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -191,7 +192,8 @@ class ActivityIntentFactoriesTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt b/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt
index b17646fb769..104ee920e47 100644
--- a/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt
+++ b/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt
@@ -64,6 +64,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -161,7 +162,8 @@ class ActivityRouterModuleTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt b/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt
index 97988c9c5b9..bea5d205bc5 100644
--- a/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt
+++ b/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt
@@ -74,6 +74,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -211,7 +212,8 @@ class ActivityRouterTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt
index 50527e24b88..5c86e2b542c 100644
--- a/app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt
@@ -64,6 +64,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -165,7 +166,8 @@ class HomeActivityLocalTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt b/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt
index 58b622c0ede..1b5dbb6b44a 100644
--- a/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt
+++ b/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt
@@ -58,6 +58,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -270,7 +271,8 @@ class FractionParsingUiErrorTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt b/app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt
index 6c59d12202b..7aa3bba8f81 100644
--- a/app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt
@@ -84,6 +84,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
@@ -1077,7 +1078,8 @@ class ListItemLeadingMarginSpanTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt b/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt
index 2b9845c78b8..794be78f7bc 100644
--- a/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt
+++ b/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt
@@ -59,6 +59,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
@@ -274,7 +275,8 @@ class StringToRatioParserTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt
index c3e905658cc..9ba1741236e 100644
--- a/app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt
@@ -70,6 +70,7 @@ import org.oppia.android.domain.topic.TEST_STORY_ID_0
import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -224,6 +225,7 @@ class ExplorationActivityLocalTest {
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt b/app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt
index a90c507ad4b..1d278a6a9da 100644
--- a/app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt
@@ -138,6 +138,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
@@ -2944,7 +2945,8 @@ class StateFragmentLocalTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt b/app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt
index 787bd9dfd27..35dd0310c63 100644
--- a/app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt
@@ -61,6 +61,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -150,7 +151,8 @@ class ProfileChooserFragmentLocalTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt
index 323b25d8a73..ee383f8ec5b 100644
--- a/app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt
@@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -175,7 +176,8 @@ class StoryActivityLocalTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt
index 2fda58f0898..5ecdfdcf3cc 100644
--- a/app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt
@@ -64,6 +64,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -183,7 +184,8 @@ class CompletedStoryListSpanTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt
index 2f550bccad7..7ef9b806b93 100644
--- a/app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt
@@ -64,6 +64,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -197,7 +198,8 @@ class HomeSpanTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt
index 06eafa277a4..b38e93506fd 100644
--- a/app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt
@@ -65,6 +65,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -194,7 +195,8 @@ class OngoingTopicListSpanTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt b/app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt
index 4fdae5a1c31..0941c35c37c 100644
--- a/app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt
@@ -81,6 +81,7 @@ import org.oppia.android.domain.platformparameter.syncup.PlatformParameterSyncUp
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.network.MockPlatformParameterService
@@ -367,7 +368,8 @@ class PlatformParameterIntegrationTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt
index 3cf5cbffe6b..bfea9b66185 100644
--- a/app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt
@@ -63,6 +63,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -396,7 +397,8 @@ class ProfileChooserSpanTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCountTest.kt b/app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCountTest.kt
index c15d270d4e5..83608031b85 100644
--- a/app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCountTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCountTest.kt
@@ -64,6 +64,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -180,7 +181,8 @@ class ProfileProgressSpanCountTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt
index a2c129bc1c6..fed517d1912 100644
--- a/app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt
@@ -67,6 +67,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -321,7 +322,8 @@ class RecentlyPlayedSpanTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt
index 19a9bd08b35..5fe8a3fb3c8 100644
--- a/app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt
@@ -63,6 +63,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -180,7 +181,8 @@ class TopicRevisionSpanTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/activity/TestActivityTest.kt b/app/src/test/java/org/oppia/android/app/testing/activity/TestActivityTest.kt
index 307db040b61..f23ffd3dd6b 100644
--- a/app/src/test/java/org/oppia/android/app/testing/activity/TestActivityTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/activity/TestActivityTest.kt
@@ -60,6 +60,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -205,7 +206,8 @@ class TestActivityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt b/app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt
index cfd5875545f..e6d2a7f4812 100644
--- a/app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt
@@ -70,6 +70,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -204,7 +205,8 @@ class AdministratorControlsFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt b/app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt
index af0187dfe7f..bd942c2b0e4 100644
--- a/app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt
@@ -66,6 +66,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
@@ -239,7 +240,8 @@ class OptionsFragmentTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTest.kt b/app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTest.kt
index d5254b8fac9..649ad5306b8 100644
--- a/app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTest.kt
@@ -61,6 +61,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -213,7 +214,8 @@ class PlayerSplitScreenTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt b/app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt
index 12903d92b03..7b33b32cad0 100644
--- a/app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt
@@ -70,6 +70,7 @@ import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_4
import org.oppia.android.domain.topic.TEST_STORY_ID_0
import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
@@ -220,7 +221,8 @@ class StateFragmentAccessibilityTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt b/app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt
index c4488a87440..cda806ffed1 100644
--- a/app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt
@@ -60,6 +60,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
@@ -164,7 +165,8 @@ class TopicInfoFragmentLocalTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt b/app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt
index 8a04d388eb3..b5ef86c5597 100644
--- a/app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt
@@ -60,6 +60,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -166,7 +167,8 @@ class TopicLessonsFragmentLocalTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt
index 9246d4e81d6..b388ade740a 100644
--- a/app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt
@@ -87,6 +87,7 @@ import org.oppia.android.domain.question.WrongAnswerScorePenalty
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.topic.TEST_SKILL_ID_1
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.KonfettiViewMatcher.Companion.hasActiveConfetti
@@ -513,7 +514,8 @@ class QuestionPlayerActivityLocalTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt
index 343e67f1705..42b14d83075 100644
--- a/app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt
@@ -62,6 +62,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.topic.SUBTOPIC_TOPIC_ID
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -157,7 +158,8 @@ class RevisionCardActivityLocalTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt b/app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt
index 82ae2bc2ef8..b234a2ae58a 100644
--- a/app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt
+++ b/app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt
@@ -73,6 +73,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.junit.DefineAppLanguageLocaleContext
@@ -330,7 +331,8 @@ class ActivityLanguageLocaleHandlerTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
diff --git a/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt b/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt
index 95db3cf4cd7..9ce6d2ce22c 100644
--- a/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt
+++ b/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt
@@ -66,6 +66,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
import org.oppia.android.testing.data.DataProviderTestMonitor
@@ -623,7 +624,8 @@ class AppLanguageResourceHandlerTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/translation/AppLanguageWatcherMixinTest.kt b/app/src/test/java/org/oppia/android/app/translation/AppLanguageWatcherMixinTest.kt
index dd6be083faf..95f05fa2ebb 100644
--- a/app/src/test/java/org/oppia/android/app/translation/AppLanguageWatcherMixinTest.kt
+++ b/app/src/test/java/org/oppia/android/app/translation/AppLanguageWatcherMixinTest.kt
@@ -71,6 +71,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.junit.DefineAppLanguageLocaleContext
@@ -312,7 +313,8 @@ class AppLanguageWatcherMixinTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt b/app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt
index 926ea83dbec..5cd6e77f8cf 100644
--- a/app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt
+++ b/app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt
@@ -61,6 +61,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -229,7 +230,7 @@ class DateTimeUtilTest {
SyncStatusModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
CpuPerformanceSnapshotterModule::class, AnalyticsStartupListenerTestModule::class,
- ExplorationProgressModule::class,
+ ExplorationProgressModule::class, TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt b/app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt
index daf8228b45a..64800e1d5e8 100644
--- a/app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt
+++ b/app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt
@@ -78,6 +78,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner
@@ -1340,7 +1341,8 @@ class MathExpressionAccessibilityUtilTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/config/proguard/firebase-components-proguard-rules.pro b/config/proguard/firebase-components-proguard-rules.pro
index 2f72d567674..94bd0a15e3f 100644
--- a/config/proguard/firebase-components-proguard-rules.pro
+++ b/config/proguard/firebase-components-proguard-rules.pro
@@ -1,6 +1,8 @@
# Reference: https://github.com/firebase/firebase-android-sdk/blob/82b02af331/firebase-components/proguard.txt.
+# Reference: https://github.com/firebase/firebase-android-sdk/blob/00d4626/firebase-firestore/proguard.txt.
-dontwarn com.google.firebase.components.Component$Instantiation
-dontwarn com.google.firebase.components.Component$ComponentType
+-dontwarn javax.naming.**
-keep class * implements com.google.firebase.components.ComponentRegistrar
diff --git a/domain/BUILD.bazel b/domain/BUILD.bazel
index 79bcd289f08..d25ebd140d7 100755
--- a/domain/BUILD.bazel
+++ b/domain/BUILD.bazel
@@ -27,6 +27,7 @@ package_group(
# globs here to ensure that new files added to migrated packages don't accidentally get included in the
# top-level module library.
MIGRATED_PROD_FILES = glob([
+ "src/main/java/org/oppia/android/domain/auth/*.kt",
"src/main/java/org/oppia/android/domain/feedbackreporting/*.kt",
"src/main/java/org/oppia/android/domain/onboarding/**/*.kt",
"src/main/java/org/oppia/android/domain/oppialogger/**/*.kt",
diff --git a/domain/build.gradle b/domain/build.gradle
index f119c351808..4863351dd1b 100644
--- a/domain/build.gradle
+++ b/domain/build.gradle
@@ -93,9 +93,11 @@ dependencies {
'com.google.dagger:dagger:2.24',
'com.google.firebase:firebase-analytics-ktx:17.5.0',
'com.google.firebase:firebase-crashlytics:17.0.0',
+ 'com.google.firebase:firebase-firestore-ktx:24.2.1',
+ 'com.google.firebase:firebase-auth-ktx:19.3.1',
'com.google.guava:guava:28.1-android',
'com.google.protobuf:protobuf-javalite:3.17.3',
- "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version",
)
compileOnly(
'jakarta.xml.bind:jakarta.xml.bind-api:2.3.2',
diff --git a/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt b/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt
new file mode 100644
index 00000000000..72410c5f597
--- /dev/null
+++ b/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt
@@ -0,0 +1,49 @@
+package org.oppia.android.domain.auth
+
+import kotlinx.coroutines.CompletableDeferred
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.TimeoutCancellationException
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withTimeout
+import org.oppia.android.util.data.AsyncResult
+import org.oppia.android.util.threading.BackgroundDispatcher
+import javax.inject.Inject
+
+/** Controller for signing in and retrieving a Firebase user. */
+class AuthenticationController @Inject constructor(
+ private val firebaseAuthWrapper: FirebaseAuthWrapper,
+ @BackgroundDispatcher private val backgroundCoroutineDispatcher: CoroutineDispatcher
+) {
+ /** Returns the current signed in user or null if there is no authenticated user. */
+ val currentFirebaseUser: FirebaseUserWrapper? = firebaseAuthWrapper.currentUser
+
+ /** Returns the result of an authentication task. */
+ fun signInAnonymouslyWithFirebase(): CompletableDeferred> {
+ val deferredResult = CompletableDeferred>()
+ CoroutineScope(backgroundCoroutineDispatcher).launch {
+ try {
+ withTimeout(AUTHENTICATION_TIMEOUT_MILLIS) {
+ firebaseAuthWrapper.signInAnonymously(
+ onSuccess = {
+ deferredResult.complete(AsyncResult.Success(null))
+ },
+ onFailure = { exception ->
+ deferredResult.complete(AsyncResult.Failure(exception))
+ }
+ )
+ }
+ } catch (e: TimeoutCancellationException) {
+ deferredResult.complete(
+ AsyncResult.Failure(IllegalStateException(e))
+ )
+ }
+ }
+ return deferredResult
+ }
+
+ companion object {
+ /** The amount of time the authentication task should run before timing out. */
+ const val AUTHENTICATION_TIMEOUT_MILLIS = 30_000L
+ }
+}
diff --git a/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationModule.kt b/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationModule.kt
new file mode 100644
index 00000000000..faafb4c6baf
--- /dev/null
+++ b/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationModule.kt
@@ -0,0 +1,19 @@
+package org.oppia.android.domain.auth
+
+import dagger.Module
+import dagger.Provides
+import javax.inject.Singleton
+
+/** Provides an implementation of [FirebaseAuthWrapper]. */
+@Module
+class AuthenticationModule {
+ @Provides
+ @Singleton
+ fun provideFirebaseAuthWrapper(firebaseAuthInstanceWrapper: FirebaseAuthInstanceWrapper):
+ FirebaseAuthWrapper = FirebaseAuthWrapperImpl(firebaseAuthInstanceWrapper)
+
+ @Provides
+ @Singleton
+ fun provideFirebaseAuthInstanceWrapper(): FirebaseAuthInstanceWrapper =
+ FirebaseAuthInstanceWrapperImpl()
+}
diff --git a/domain/src/main/java/org/oppia/android/domain/auth/BUILD.bazel b/domain/src/main/java/org/oppia/android/domain/auth/BUILD.bazel
new file mode 100644
index 00000000000..d00f97bfb90
--- /dev/null
+++ b/domain/src/main/java/org/oppia/android/domain/auth/BUILD.bazel
@@ -0,0 +1,75 @@
+"""
+Library for providing authentication with Firebase functionality.
+"""
+
+load("@dagger//:workspace_defs.bzl", "dagger_rules")
+load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_android_library")
+
+kt_android_library(
+ name = "authentication_controller",
+ srcs = [
+ "AuthenticationController.kt",
+ ],
+ visibility = ["//:oppia_api_visibility"],
+ deps = [
+ ":firebase_auth_wrapper",
+ "//third_party:javax_inject_javax_inject",
+ "//third_party:org_jetbrains_kotlinx_kotlinx-coroutines-core",
+ "//utility/src/main/java/org/oppia/android/util/threading:annotations",
+ ],
+)
+
+kt_android_library(
+ name = "firebase_auth_wrapper",
+ srcs = [
+ "FirebaseAuthInstance.kt",
+ "FirebaseAuthInstanceWrapper.kt",
+ "FirebaseAuthWrapper.kt",
+ "FirebaseUserWrapper.kt",
+ ],
+ visibility = ["//:oppia_api_visibility"],
+ deps = [
+ "//third_party:com_google_firebase_firebase-auth-ktx",
+ "//third_party:org_jetbrains_kotlinx_kotlinx-coroutines-core",
+ "//utility/src/main/java/org/oppia/android/util/data:async_result",
+ ],
+)
+
+kt_android_library(
+ name = "auth_module",
+ srcs = [
+ "AuthenticationModule.kt",
+ ],
+ visibility = ["//:oppia_prod_module_visibility"],
+ deps = [
+ ":authentication_controller",
+ ":dagger",
+ ":firebase_auth_wrapper_impl",
+ ],
+)
+
+kt_android_library(
+ name = "firebase_auth_wrapper_impl",
+ srcs = [
+ "FirebaseAuthWrapperImpl.kt",
+ ],
+ visibility = ["//:oppia_prod_module_visibility"],
+ deps = [
+ ":dagger",
+ ":firebase_auth_instance_wrapper_impl",
+ ],
+)
+
+kt_android_library(
+ name = "firebase_auth_instance_wrapper_impl",
+ srcs = [
+ "FirebaseAuthInstanceWrapperImpl.kt",
+ ],
+ visibility = ["//:oppia_prod_module_visibility"],
+ deps = [
+ ":dagger",
+ ":firebase_auth_wrapper",
+ ],
+)
+
+dagger_rules()
diff --git a/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstance.kt b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstance.kt
new file mode 100644
index 00000000000..a270857b1cd
--- /dev/null
+++ b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstance.kt
@@ -0,0 +1,8 @@
+package org.oppia.android.domain.auth
+
+import com.google.firebase.auth.FirebaseAuth
+
+/** Wrapper for [FirebaseAuth], used to pass an instance of [FirebaseAuth]. */
+data class FirebaseAuthInstance(
+ val firebaseAuth: FirebaseAuth
+)
diff --git a/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapper.kt b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapper.kt
new file mode 100644
index 00000000000..50677af74c3
--- /dev/null
+++ b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapper.kt
@@ -0,0 +1,7 @@
+package org.oppia.android.domain.auth
+
+/** Interface for providing an implementation of [FirebaseAuthInstance]. */
+interface FirebaseAuthInstanceWrapper {
+ /** Returns a wrapped instance of FirebaseAuth. */
+ val firebaseAuthInstance: FirebaseAuthInstance?
+}
diff --git a/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapperImpl.kt b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapperImpl.kt
new file mode 100644
index 00000000000..f3a8ae2b24d
--- /dev/null
+++ b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapperImpl.kt
@@ -0,0 +1,11 @@
+package org.oppia.android.domain.auth
+
+import com.google.firebase.auth.ktx.auth
+import com.google.firebase.ktx.Firebase
+import javax.inject.Inject
+
+/** Implementation of [FirebaseAuthInstanceWrapper]. */
+class FirebaseAuthInstanceWrapperImpl @Inject constructor() : FirebaseAuthInstanceWrapper {
+ override val firebaseAuthInstance: FirebaseAuthInstance
+ get() = FirebaseAuthInstance(Firebase.auth)
+}
diff --git a/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapper.kt b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapper.kt
new file mode 100644
index 00000000000..85c859eb62a
--- /dev/null
+++ b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapper.kt
@@ -0,0 +1,10 @@
+package org.oppia.android.domain.auth
+
+/** Wrapper for FirebaseAuth. */
+interface FirebaseAuthWrapper {
+ /** Returns the current signed in user or null if there is no authenticated user. */
+ val currentUser: FirebaseUserWrapper?
+
+ /** Returns the authentication result. */
+ fun signInAnonymously(onSuccess: () -> Unit, onFailure: (Throwable) -> Unit)
+}
diff --git a/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImpl.kt b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImpl.kt
new file mode 100644
index 00000000000..d85163e3124
--- /dev/null
+++ b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImpl.kt
@@ -0,0 +1,28 @@
+package org.oppia.android.domain.auth
+
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** Production implementation of FirebaseAuthWrapper. */
+@Singleton
+class FirebaseAuthWrapperImpl @Inject constructor(
+ private val firebaseWrapper: FirebaseAuthInstanceWrapper
+) : FirebaseAuthWrapper {
+ override val currentUser: FirebaseUserWrapper?
+ get() = firebaseWrapper.firebaseAuthInstance?.firebaseAuth?.currentUser?.let {
+ FirebaseUserWrapper(it.uid)
+ }
+
+ override fun signInAnonymously(onSuccess: () -> Unit, onFailure: (Throwable) -> Unit) {
+ firebaseWrapper.firebaseAuthInstance?.firebaseAuth?.signInAnonymously()
+ ?.addOnSuccessListener {
+ onSuccess.invoke()
+ }
+ ?.addOnFailureListener { task ->
+ val exception = task.cause
+ if (exception != null) {
+ onFailure.invoke(exception)
+ }
+ }
+ }
+}
diff --git a/domain/src/main/java/org/oppia/android/domain/auth/FirebaseUserWrapper.kt b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseUserWrapper.kt
new file mode 100644
index 00000000000..16aeb8ebf5b
--- /dev/null
+++ b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseUserWrapper.kt
@@ -0,0 +1,8 @@
+package org.oppia.android.domain.auth
+
+import com.google.firebase.auth.FirebaseUser
+
+/** Wrapper for [FirebaseUser]. */
+data class FirebaseUserWrapper(
+ val uid: String,
+)
diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/LogStorageModule.kt b/domain/src/main/java/org/oppia/android/domain/oppialogger/LogStorageModule.kt
index 73fe03a7a3d..7ef560e730e 100644
--- a/domain/src/main/java/org/oppia/android/domain/oppialogger/LogStorageModule.kt
+++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/LogStorageModule.kt
@@ -13,6 +13,9 @@ annotation class ExceptionLogStorageCacheSize
@Qualifier
annotation class PerformanceMetricsLogStorageCacheSize
+@Qualifier
+annotation class FirestoreLogStorageCacheSize
+
/** Provider to return any constants required during the storage of log reports. */
@Module
class LogStorageModule {
@@ -46,4 +49,14 @@ class LogStorageModule {
@Provides
@PerformanceMetricsLogStorageCacheSize
fun provideMetricLogStorageCacheSize(): Int = 25_000
+
+ /**
+ * Provides the maximum number of firestore-bound event logs that can be cached on disk.
+ *
+ * At a configured cache size of 30 records & estimating 376 bytes per record, it's expected that
+ * no more than 11.1KB will be required for cache disk space.
+ */
+ @Provides
+ @FirestoreLogStorageCacheSize
+ fun provideFirestoreLogStorageCacheSize(): Int = 30
}
diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/BUILD.bazel b/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/BUILD.bazel
index 6b207de01aa..4ca1df4030e 100644
--- a/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/BUILD.bazel
+++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/BUILD.bazel
@@ -196,4 +196,25 @@ kt_android_library(
visibility = ["//:oppia_api_visibility"],
)
+kt_android_library(
+ name = "data_controller",
+ srcs = [
+ "FirestoreDataController.kt",
+ ],
+ visibility = ["//:oppia_api_visibility"],
+ deps = [
+ ":dagger",
+ "//data/src/main/java/org/oppia/android/data/persistence:cache_store",
+ "//domain/src/main/java/org/oppia/android/domain/auth:authentication_controller",
+ "//domain/src/main/java/org/oppia/android/domain/oppialogger:prod_module",
+ "//model/src/main/proto:event_logger_java_proto_lite",
+ "//utility",
+ "//utility/src/main/java/org/oppia/android/util/logging:console_logger",
+ "//utility/src/main/java/org/oppia/android/util/logging:exception_logger",
+ "//utility/src/main/java/org/oppia/android/util/logging/firebase:prod_module",
+ "//utility/src/main/java/org/oppia/android/util/networking:network_connection_util",
+ "//utility/src/main/java/org/oppia/android/util/system:oppia_clock",
+ ],
+)
+
dagger_rules()
diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataController.kt b/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataController.kt
new file mode 100644
index 00000000000..e68013aff83
--- /dev/null
+++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataController.kt
@@ -0,0 +1,183 @@
+package org.oppia.android.domain.oppialogger.analytics
+
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.async
+import org.oppia.android.app.model.EventLog
+import org.oppia.android.app.model.OppiaEventLogs
+import org.oppia.android.app.model.ProfileId
+import org.oppia.android.data.persistence.PersistentCacheStore
+import org.oppia.android.domain.auth.AuthenticationController
+import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize
+import org.oppia.android.util.data.AsyncResult
+import org.oppia.android.util.data.DataProvider
+import org.oppia.android.util.logging.ConsoleLogger
+import org.oppia.android.util.logging.ExceptionLogger
+import org.oppia.android.util.logging.firebase.FirestoreEventLogger
+import org.oppia.android.util.networking.NetworkConnectionUtil
+import org.oppia.android.util.system.OppiaClock
+import org.oppia.android.util.threading.BlockingDispatcher
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** Controller for handling event logging for Firestore-bound data. */
+@Singleton
+class FirestoreDataController @Inject constructor(
+ cacheStoreFactory: PersistentCacheStore.Factory,
+ private val consoleLogger: ConsoleLogger,
+ private val networkConnectionUtil: NetworkConnectionUtil,
+ private val eventLogger: FirestoreEventLogger,
+ private val exceptionLogger: ExceptionLogger,
+ private val oppiaClock: OppiaClock,
+ private val authenticationController: AuthenticationController,
+ @BlockingDispatcher private val blockingDispatcher: CoroutineDispatcher,
+ @FirestoreLogStorageCacheSize private val logStorageCacheSize: Int
+) {
+ private val firestoreEventsStore =
+ cacheStoreFactory.create("firestore_data", OppiaEventLogs.getDefaultInstance())
+
+ /**
+ * Uploads all events pending currently for upload, and blocks until the events are uploaded. An
+ * error will be thrown if something went wrong during upload.
+ */
+ suspend fun uploadData() {
+ val eventLogsToUpload = firestoreEventsStore.readDataAsync().await().eventLogsToUploadList
+
+ if (eventLogsToUpload.isNotEmpty()) {
+ eventLogsToUpload.forEach { eventLog ->
+ authenticateAndUploadToFirestore(eventLog)
+ }
+ }
+ }
+
+ /**
+ * Logs an event defined by [eventContext] corresponding to time [timestamp].
+ *
+ * This will schedule a background upload of the event if there's internet connectivity, otherwise
+ * it will cache the event for a later upload.
+ */
+ fun logEvent(
+ eventContext: EventLog.Context,
+ profileId: ProfileId?,
+ timestamp: Long = oppiaClock.getCurrentTimeMs()
+ ) {
+ CoroutineScope(blockingDispatcher).async {
+ uploadOrCacheEventLog(createEventLog(profileId, timestamp, eventContext))
+ }.invokeOnCompletion { failure ->
+ failure?.let {
+ consoleLogger.w(
+ "FirestoreDataController",
+ "Failed to upload or cache event: $eventContext (at time $timestamp).",
+ it
+ )
+ }
+ }
+ }
+
+ /** Returns an event log containing relevant data for event reporting. */
+ private fun createEventLog(
+ profileId: ProfileId?,
+ timestamp: Long,
+ context: EventLog.Context
+ ): EventLog {
+ return EventLog.newBuilder().apply {
+ this.timestamp = timestamp
+ this.priority = EventLog.Priority.ESSENTIAL
+ this.context = context
+ profileId?.let { this.profileId = it }
+ }.build()
+ }
+
+ /** Either uploads or caches [eventLog] depending on current internet connectivity. */
+ private suspend fun uploadOrCacheEventLog(eventLog: EventLog) {
+ when (networkConnectionUtil.getCurrentConnectionStatus()) {
+ NetworkConnectionUtil.ProdConnectionStatus.NONE -> cacheEventForFirestore(eventLog)
+ else -> authenticateAndUploadToFirestore(eventLog)
+ }
+ }
+
+ private suspend fun authenticateAndUploadToFirestore(eventLog: EventLog) {
+ if (authenticationController.currentFirebaseUser == null) {
+ when (val signInResult = authenticationController.signInAnonymouslyWithFirebase().await()) {
+ is AsyncResult.Success -> {
+ consoleLogger.i("FirestoreDataController", "Sign in succeeded")
+ uploadLog(eventLog)
+ }
+ is AsyncResult.Failure -> {
+ consoleLogger.e(
+ "FirestoreDataController",
+ "Sign in failed with cause ${signInResult.error}"
+ )
+ cacheEventForFirestore(eventLog)
+ }
+ is AsyncResult.Pending -> {
+ consoleLogger.i("FirestoreDataController", "Signing in anonymously to Firebase")
+ }
+ }
+ } else {
+ uploadLog(eventLog)
+ }
+ }
+
+ private fun uploadLog(eventLog: EventLog) {
+ eventLogger.uploadEvent(eventLog)
+ removeFirstEventLogFromStore()
+ }
+
+ /**
+ * Adds an event to the storage.
+ *
+ * The [eventLog] is added to the store if the size of the store isn't exceeding
+ * [logStorageCacheSize]. If the limit is exceeded then the least recent event is removed from the
+ * [firestoreEventsStore].
+ */
+ private fun cacheEventForFirestore(eventLog: EventLog) {
+ firestoreEventsStore.storeDataAsync(updateInMemoryCache = true) { eventLogs ->
+ val storeSize = eventLogs.eventLogsToUploadList.size
+ if (storeSize + 1 > logStorageCacheSize) {
+ val eventLogRemovalIndex = getLeastRecentEventIndex(eventLogs)
+ if (eventLogRemovalIndex != null) {
+ return@storeDataAsync eventLogs.toBuilder()
+ .removeEventLogsToUpload(eventLogRemovalIndex)
+ .addEventLogsToUpload(eventLog)
+ .build()
+ } else {
+ val exception =
+ IllegalStateException(
+ "Least Recent Event index absent -- FirestoreLogStorageCacheSize is 0"
+ )
+ consoleLogger.e("FirestoreDataController", "Failure while caching event.", exception)
+ exceptionLogger.logException(exception)
+ }
+ }
+ return@storeDataAsync eventLogs.toBuilder().addEventLogsToUpload(eventLog).build()
+ }.invokeOnCompletion {
+ it?.let { consoleLogger.e("FirestoreDataController", "Failed to store event log.", it) }
+ }
+ }
+
+ /**
+ * Returns the index of the least recent event from the existing store on the basis of recency and
+ * priority.
+ */
+ private fun getLeastRecentEventIndex(oppiaEventLogs: OppiaEventLogs): Int? =
+ oppiaEventLogs.eventLogsToUploadList.withIndex().minByOrNull { it.value.timestamp }?.index
+
+ /** Returns a data provider for log reports that have been recorded for upload. */
+ fun getEventLogStore(): DataProvider = firestoreEventsStore
+
+ /** Removes the first log report that had been recorded for upload. */
+ private fun removeFirstEventLogFromStore() {
+ firestoreEventsStore.storeDataAsync(updateInMemoryCache = true) { oppiaEventLogs ->
+ if (oppiaEventLogs.eventLogsToUploadCount > 0) {
+ return@storeDataAsync oppiaEventLogs.toBuilder().removeEventLogsToUpload(0).build()
+ } else {
+ return@storeDataAsync oppiaEventLogs // No event logs to remove
+ }
+ }.invokeOnCompletion {
+ it?.let {
+ consoleLogger.e("FirestoreDataController", "Failed to remove event log", it)
+ }
+ }
+ }
+}
diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/BUILD.bazel b/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/BUILD.bazel
index ac5d1338364..58f18019799 100644
--- a/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/BUILD.bazel
+++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/BUILD.bazel
@@ -34,6 +34,7 @@ kt_android_library(
],
deps = [
"//domain/src/main/java/org/oppia/android/domain/oppialogger/analytics:controller",
+ "//domain/src/main/java/org/oppia/android/domain/oppialogger/analytics:data_controller",
"//domain/src/main/java/org/oppia/android/domain/oppialogger/analytics:performance_metrics_controller",
"//domain/src/main/java/org/oppia/android/domain/oppialogger/exceptions:controller",
"//domain/src/main/java/org/oppia/android/domain/util:extensions",
diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializer.kt b/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializer.kt
index 5f40f82caac..ef31a5ab9dc 100644
--- a/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializer.kt
+++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializer.kt
@@ -55,6 +55,13 @@ class LogReportWorkManagerInitializer @Inject constructor(
)
.build()
+ private val workerCaseForUploadingFirestoreData: Data = Data.Builder()
+ .putString(
+ LogUploadWorker.WORKER_CASE_KEY,
+ LogUploadWorker.FIRESTORE_WORKER
+ )
+ .build()
+
private val workerCaseForSchedulingPeriodicBackgroundMetricLogs: Data = Data.Builder()
.putString(
MetricLogSchedulingWorker.WORKER_CASE_KEY,
@@ -124,6 +131,12 @@ class LogReportWorkManagerInitializer @Inject constructor(
.setConstraints(logReportWorkerConstraints)
.build()
+ private val workRequestForUploadingFireStoreData: PeriodicWorkRequest =
+ PeriodicWorkRequest.Builder(LogUploadWorker::class.java, 6, TimeUnit.HOURS)
+ .setInputData(workerCaseForUploadingFirestoreData)
+ .setConstraints(logReportWorkerConstraints)
+ .build()
+
override fun onCreate(workManager: WorkManager) {
logUploader.enqueueWorkRequestForEvents(workManager, workRequestForUploadingEvents)
logUploader.enqueueWorkRequestForExceptions(workManager, workRequestForUploadingExceptions)
@@ -131,6 +144,10 @@ class LogReportWorkManagerInitializer @Inject constructor(
workManager,
workRequestForUploadingPerformanceMetrics
)
+ logUploader.enqueueWorkRequestForFirestore(
+ workManager,
+ workRequestForUploadingFireStoreData
+ )
metricLogScheduler.enqueueWorkRequestForPeriodicBackgroundMetrics(
workManager,
workRequestForSchedulingPeriodicBackgroundMetricLogs
@@ -178,6 +195,9 @@ class LogReportWorkManagerInitializer @Inject constructor(
fun getWorkRequestForSchedulingPeriodicBackgroundPerformanceMetricLogsId(): UUID =
workRequestForSchedulingPeriodicBackgroundMetricLogs.id
+ /** Returns the [UUID] of the work request that is enqueued for uploading firestore data. */
+ fun getWorkRequestForFirestoreId(): UUID = workRequestForUploadingFireStoreData.id
+
/**
* Returns the [Data] that goes into the work request that is enqueued for uploading event logs.
*/
@@ -212,4 +232,10 @@ class LogReportWorkManagerInitializer @Inject constructor(
*/
fun getWorkRequestDataForSchedulingPeriodicBackgroundPerformanceMetricLogs(): Data =
workerCaseForSchedulingPeriodicBackgroundMetricLogs
+
+ /**
+ * Returns the [Data] that goes into the work request that is enqueued for uploading firestore
+ * data.
+ */
+ fun getWorkRequestDataForFirestore(): Data = workerCaseForUploadingFirestoreData
}
diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorker.kt b/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorker.kt
index ed860470f56..f31669e153b 100644
--- a/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorker.kt
+++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorker.kt
@@ -10,6 +10,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.async
import org.oppia.android.domain.oppialogger.analytics.AnalyticsController
+import org.oppia.android.domain.oppialogger.analytics.FirestoreDataController
import org.oppia.android.domain.oppialogger.analytics.PerformanceMetricsController
import org.oppia.android.domain.oppialogger.exceptions.ExceptionsController
import org.oppia.android.domain.oppialogger.exceptions.toException
@@ -29,6 +30,7 @@ class LogUploadWorker private constructor(
private val exceptionsController: ExceptionsController,
private val performanceMetricsController: PerformanceMetricsController,
private val exceptionLogger: ExceptionLogger,
+ private val dataController: FirestoreDataController,
private val performanceMetricsEventLogger: PerformanceMetricsEventLogger,
private val consoleLogger: ConsoleLogger,
private val syncStatusManager: SyncStatusManager,
@@ -41,6 +43,7 @@ class LogUploadWorker private constructor(
const val EVENT_WORKER = "event_worker"
const val EXCEPTION_WORKER = "exception_worker"
const val PERFORMANCE_METRICS_WORKER = "performance_metrics_worker"
+ const val FIRESTORE_WORKER = "firestore_worker"
}
@ExperimentalCoroutinesApi
@@ -51,6 +54,7 @@ class LogUploadWorker private constructor(
EVENT_WORKER -> uploadEvents()
EXCEPTION_WORKER -> uploadExceptions()
PERFORMANCE_METRICS_WORKER -> uploadPerformanceMetrics()
+ FIRESTORE_WORKER -> uploadFirestoreData()
else -> Result.failure()
}
}
@@ -111,12 +115,24 @@ class LogUploadWorker private constructor(
}
}
+ /** Extracts data from offline storage and logs them to the remote service. */
+ private suspend fun uploadFirestoreData(): Result {
+ return try {
+ dataController.uploadData()
+ Result.success()
+ } catch (e: Exception) {
+ consoleLogger.e(TAG, e.toString(), e)
+ Result.failure()
+ }
+ }
+
/** Creates an instance of [LogUploadWorker] by properly injecting dependencies. */
class Factory @Inject constructor(
private val analyticsController: AnalyticsController,
private val exceptionsController: ExceptionsController,
private val performanceMetricsController: PerformanceMetricsController,
private val exceptionLogger: ExceptionLogger,
+ private val dataController: FirestoreDataController,
private val performanceMetricsEventLogger: PerformanceMetricsEventLogger,
private val consoleLogger: ConsoleLogger,
private val syncStatusManager: SyncStatusManager,
@@ -130,6 +146,7 @@ class LogUploadWorker private constructor(
exceptionsController,
performanceMetricsController,
exceptionLogger,
+ dataController,
performanceMetricsEventLogger,
consoleLogger,
syncStatusManager,
diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/survey/SurveyEventsLogger.kt b/domain/src/main/java/org/oppia/android/domain/oppialogger/survey/SurveyEventsLogger.kt
index 7e1178b0ca0..b79f75fa081 100644
--- a/domain/src/main/java/org/oppia/android/domain/oppialogger/survey/SurveyEventsLogger.kt
+++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/survey/SurveyEventsLogger.kt
@@ -6,6 +6,7 @@ import org.oppia.android.app.model.ProfileId
import org.oppia.android.app.model.SurveyQuestionName
import org.oppia.android.app.model.UserTypeAnswer
import org.oppia.android.domain.oppialogger.analytics.AnalyticsController
+import org.oppia.android.domain.oppialogger.analytics.FirestoreDataController
import javax.inject.Inject
import javax.inject.Singleton
@@ -17,6 +18,7 @@ import javax.inject.Singleton
@Singleton
class SurveyEventsLogger @Inject constructor(
private val analyticsController: AnalyticsController,
+ private val dataController: FirestoreDataController
) {
/**
@@ -50,6 +52,14 @@ class SurveyEventsLogger @Inject constructor(
)
}
+ /** Logs an event representing the response to the optional survey question. */
+ fun logOptionalResponse(surveyId: String, profileId: ProfileId?, answer: String) {
+ dataController.logEvent(
+ createOptionalSurveyResponseContext(surveyId, profileId, answer),
+ profileId
+ )
+ }
+
private fun createMandatorySurveyResponseContext(
surveyId: String,
profileId: ProfileId,
@@ -88,11 +98,27 @@ class SurveyEventsLogger @Inject constructor(
private fun createSurveyResponseContext(
surveyId: String,
- profileId: ProfileId
+ profileId: ProfileId?
): EventLog.SurveyResponseContext {
return EventLog.SurveyResponseContext.newBuilder()
- .setProfileId(profileId.internalId.toString())
+ .setProfileId(profileId?.internalId.toString())
.setSurveyId(surveyId)
.build()
}
+
+ private fun createOptionalSurveyResponseContext(
+ surveyId: String,
+ profileId: ProfileId?,
+ answer: String
+ ): EventLog.Context {
+ return EventLog.Context.newBuilder()
+ .setOptionalResponse(
+ EventLog.OptionalSurveyResponseContext.newBuilder()
+ .setFeedbackAnswer(answer)
+ .setSurveyDetails(
+ createSurveyResponseContext(surveyId, profileId)
+ )
+ )
+ .build()
+ }
}
diff --git a/domain/src/main/java/org/oppia/android/domain/survey/SurveyProgressController.kt b/domain/src/main/java/org/oppia/android/domain/survey/SurveyProgressController.kt
index b7a612b2c1a..b1c412eca01 100644
--- a/domain/src/main/java/org/oppia/android/domain/survey/SurveyProgressController.kt
+++ b/domain/src/main/java/org/oppia/android/domain/survey/SurveyProgressController.kt
@@ -312,7 +312,7 @@ class SurveyProgressController @Inject constructor(
controllerState.handleUpdatedQuestionsList(message.questionsList)
is ControllerMessage.FinishSurveySession -> {
try {
- controllerState.completeSurveyImpl(message.surveyCompleted, message.callbackFlow)
+ controllerState.completeSurveyImpl(message.callbackFlow)
} finally {
// Ensure the actor ends since the session requires no further message processing.
break
@@ -387,10 +387,11 @@ class SurveyProgressController @Inject constructor(
)
}
- saveSelectedAnswer(currentQuestionId.toString(), selectedAnswer)
-
if (!progress.questionDeck.isCurrentQuestionTerminal()) {
+ saveSelectedAnswer(currentQuestionId.toString(), selectedAnswer)
moveToNextQuestion()
+ } else {
+ surveyLogger.logOptionalResponse(surveyId, profileId, selectedAnswer.freeFormAnswer)
}
}
}
@@ -454,13 +455,12 @@ class SurveyProgressController @Inject constructor(
}
private suspend fun ControllerState.completeSurveyImpl(
- surveyCompleted: Boolean,
endSessionResultFlow: MutableStateFlow>
) {
checkNotNull(this) { "Cannot stop a survey session which wasn't started." }
tryOperation(endSessionResultFlow) {
progress.advancePlayStageTo(SurveyProgress.SurveyStage.NOT_IN_SURVEY_SESSION)
- finishSurveyAndLog(surveyCompleted)
+ finishSurveyAndLog()
}
}
@@ -473,19 +473,8 @@ class SurveyProgressController @Inject constructor(
convertAsyncToAutomaticDataProvider("${baseId}_$activeSessionId")
}
- private suspend fun ControllerState.finishSurveyAndLog(surveyIsComplete: Boolean) {
+ private suspend fun ControllerState.finishSurveyAndLog() {
when {
- surveyIsComplete -> {
- surveyLogger.logMandatoryResponses(
- surveyId,
- profileId,
- getStoredResponse(SurveyQuestionName.USER_TYPE)!!,
- getStoredResponse(SurveyQuestionName.MARKET_FIT)!!,
- getStoredResponse(SurveyQuestionName.NPS)!!
- )
-
- // TODO(#5001): Log the optional question response to Firestore
- }
progress.questionDeck.hasAnsweredAllMandatoryQuestions() -> {
surveyLogger.logMandatoryResponses(
surveyId,
diff --git a/domain/src/main/java/org/oppia/android/domain/testing/oppialogger/loguploader/FakeLogUploader.kt b/domain/src/main/java/org/oppia/android/domain/testing/oppialogger/loguploader/FakeLogUploader.kt
index 48783b794d5..a6a3aae43b1 100644
--- a/domain/src/main/java/org/oppia/android/domain/testing/oppialogger/loguploader/FakeLogUploader.kt
+++ b/domain/src/main/java/org/oppia/android/domain/testing/oppialogger/loguploader/FakeLogUploader.kt
@@ -13,6 +13,7 @@ class FakeLogUploader @Inject constructor() : LogUploader {
private val eventRequestIdList = mutableListOf()
private val exceptionRequestIdList = mutableListOf()
private val performanceMetricsRequestIdList = mutableListOf()
+ private val firestoreRequestIdList = mutableListOf()
override fun enqueueWorkRequestForEvents(
workManager: WorkManager,
@@ -35,6 +36,13 @@ class FakeLogUploader @Inject constructor() : LogUploader {
performanceMetricsRequestIdList.add(workRequest.id)
}
+ override fun enqueueWorkRequestForFirestore(
+ workManager: WorkManager,
+ workRequest: PeriodicWorkRequest
+ ) {
+ firestoreRequestIdList.add(workRequest.id)
+ }
+
/** Returns the most recent work request id that's stored in the [eventRequestIdList]. */
fun getMostRecentEventRequestId() = eventRequestIdList.last()
@@ -43,4 +51,7 @@ class FakeLogUploader @Inject constructor() : LogUploader {
/** Returns the most recent work request id that's stored in the [performanceMetricsRequestIdList]. */
fun getMostRecentPerformanceMetricsRequestId() = performanceMetricsRequestIdList.last()
+
+ /** Returns the most recent work request id that's stored in the [firestoreRequestIdList]. */
+ fun getMostRecentFirestoreRequestId() = firestoreRequestIdList.last()
}
diff --git a/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt
index be7fcde0c86..dbf2d829fe1 100644
--- a/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt
@@ -53,6 +53,7 @@ import org.oppia.android.domain.profile.ProfileManagementController
import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_5
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.FakeExceptionLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
import org.oppia.android.testing.data.AsyncResultSubject.Companion.assertThat
@@ -881,6 +882,7 @@ class AudioPlayerControllerTest {
NumericExpressionInputModule::class, AlgebraicExpressionInputModule::class,
MathEquationInputModule::class, CachingTestModule::class, HintsAndSolutionProdModule::class,
HintsAndSolutionConfigModule::class, LoggerModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : DataProvidersInjector {
diff --git a/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt
new file mode 100644
index 00000000000..ca80f6e297d
--- /dev/null
+++ b/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt
@@ -0,0 +1,144 @@
+package org.oppia.android.domain.auth
+
+import android.app.Application
+import android.content.Context
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import dagger.BindsInstance
+import dagger.Component
+import dagger.Module
+import dagger.Provides
+import kotlinx.coroutines.CoroutineDispatcher
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
+import org.oppia.android.testing.FakeFirebaseAuthWrapperImpl
+import org.oppia.android.testing.TestAuthenticationModule
+import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.assertThrows
+import org.oppia.android.testing.robolectric.RobolectricModule
+import org.oppia.android.testing.time.FakeOppiaClockModule
+import org.oppia.android.util.data.DataProvidersInjector
+import org.oppia.android.util.data.DataProvidersInjectorProvider
+import org.oppia.android.util.threading.BackgroundDispatcher
+import org.oppia.android.util.threading.DispatcherModule
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.LooperMode
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** Tests for [AuthenticationController]. */
+// FunctionName: test names are conventionally named with underscores.
+@Suppress("FunctionName")
+@RunWith(AndroidJUnit4::class)
+@LooperMode(LooperMode.Mode.PAUSED)
+@Config(application = AuthenticationControllerTest.TestApplication::class)
+class AuthenticationControllerTest {
+ @Inject
+ lateinit var firebaseAuthWrapper: FirebaseAuthWrapper
+
+ @Inject
+ lateinit var fakeFirebaseAuthWrapperImpl: FakeFirebaseAuthWrapperImpl
+
+ @Inject
+ lateinit var authenticationController: AuthenticationController
+
+ @field:[Inject BackgroundDispatcher]
+ lateinit var backgroundDispatcher: CoroutineDispatcher
+
+ @Before
+ fun setUp() {
+ setUpTestApplicationComponent()
+ }
+
+ @Test
+ fun testAuthentication_getCurrentUser_userSignedIn_returnsInstanceOfFirebaseUserWrapper() {
+ fakeFirebaseAuthWrapperImpl.simulateSignInSuccess()
+
+ firebaseAuthWrapper.signInAnonymously(
+ onSuccess = {},
+ onFailure = {}
+ )
+
+ val user = authenticationController.currentFirebaseUser
+
+ assertThat(user).isInstanceOf(FirebaseUserWrapper::class.java)
+ }
+
+ @Test
+ fun testAuthentication_signInAnonymously_succeeds() {
+ fakeFirebaseAuthWrapperImpl.simulateSignInSuccess()
+
+ firebaseAuthWrapper.signInAnonymously(
+ onSuccess = {},
+ onFailure = {}
+ )
+
+ val user = authenticationController.currentFirebaseUser
+
+ assertThat(user).isInstanceOf(FirebaseUserWrapper::class.java)
+ }
+
+ @Test
+ fun testAuthentication_signInAnonymously_failure_returnsException() {
+ fakeFirebaseAuthWrapperImpl.simulateSignInFailure()
+
+ assertThrows(Throwable::class) {
+ firebaseAuthWrapper.signInAnonymously(
+ onSuccess = {},
+ onFailure = {}
+ )
+ }
+ }
+
+ private fun setUpTestApplicationComponent() {
+ ApplicationProvider.getApplicationContext()
+ .inject(this)
+ }
+
+ @Module
+ class TestModule {
+ @Provides
+ @Singleton
+ fun provideContext(application: Application): Context {
+ return application
+ }
+ }
+
+ // TODO(#89): Move this to a common test application component.
+ @Singleton
+ @Component(
+ modules = [
+ TestModule::class, RobolectricModule::class, FakeOppiaClockModule::class,
+ ApplicationLifecycleModule::class, DispatcherModule::class,
+ TestLogReportingModule::class, TestAuthenticationModule::class,
+ ]
+ )
+ interface TestApplicationComponent : DataProvidersInjector {
+ @Component.Builder
+ interface Builder {
+ @BindsInstance
+ fun setApplication(application: Application): Builder
+
+ fun build(): TestApplicationComponent
+ }
+
+ fun inject(test: AuthenticationControllerTest)
+ }
+
+ class TestApplication : Application(), DataProvidersInjectorProvider {
+ private val component: TestApplicationComponent by lazy {
+ DaggerAuthenticationControllerTest_TestApplicationComponent.builder()
+ .setApplication(this)
+ .build()
+ }
+
+ fun inject(test: AuthenticationControllerTest) {
+ component.inject(test)
+ }
+
+ override fun getDataProvidersInjector(): DataProvidersInjector = component
+ }
+}
diff --git a/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationModuleTest.kt b/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationModuleTest.kt
new file mode 100644
index 00000000000..c8ee88e7bd6
--- /dev/null
+++ b/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationModuleTest.kt
@@ -0,0 +1,92 @@
+package org.oppia.android.domain.auth
+
+import android.app.Application
+import android.content.Context
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import dagger.BindsInstance
+import dagger.Component
+import dagger.Module
+import dagger.Provides
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.oppia.android.testing.robolectric.RobolectricModule
+import org.oppia.android.testing.threading.TestDispatcherModule
+import org.oppia.android.util.data.DataProvidersInjector
+import org.oppia.android.util.data.DataProvidersInjectorProvider
+import org.oppia.android.util.logging.firebase.DebugLogReportingModule
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.LooperMode
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** Tests for [AuthenticationModule]. */
+// FunctionName: test names are conventionally named with underscores.
+@Suppress("FunctionName")
+@RunWith(AndroidJUnit4::class)
+@LooperMode(LooperMode.Mode.PAUSED)
+@Config(application = AuthenticationModuleTest.TestApplication::class)
+class AuthenticationModuleTest {
+
+ @Inject
+ lateinit var firebaseAuthWrapper: FirebaseAuthWrapper
+
+ @Before
+ fun setUp() {
+ setUpTestApplicationComponent()
+ }
+
+ @Test
+ fun testModule_injectsProductionImplementationOfFirebaseAuthWrapper() {
+ assertThat(firebaseAuthWrapper).isInstanceOf(FirebaseAuthWrapperImpl::class.java)
+ }
+
+ private fun setUpTestApplicationComponent() {
+ ApplicationProvider.getApplicationContext().inject(this)
+ }
+
+ // TODO(#89): Move this to a common test application component.
+ @Module
+ class TestModule {
+ @Provides
+ @Singleton
+ fun provideContext(application: Application): Context {
+ return application
+ }
+ }
+
+ @Singleton
+ @Component(
+ modules = [
+ TestModule::class, TestDispatcherModule::class, AuthenticationModule::class,
+ RobolectricModule::class, DebugLogReportingModule::class
+ ]
+ )
+ interface TestApplicationComponent : DataProvidersInjector {
+ @Component.Builder
+ interface Builder {
+ @BindsInstance
+ fun setApplication(application: Application): Builder
+
+ fun build(): TestApplicationComponent
+ }
+
+ fun inject(test: AuthenticationModuleTest)
+ }
+
+ class TestApplication : Application(), DataProvidersInjectorProvider {
+ private val component: TestApplicationComponent by lazy {
+ DaggerAuthenticationModuleTest_TestApplicationComponent.builder()
+ .setApplication(this)
+ .build()
+ }
+
+ fun inject(test: AuthenticationModuleTest) {
+ component.inject(test)
+ }
+
+ override fun getDataProvidersInjector(): DataProvidersInjector = component
+ }
+}
diff --git a/domain/src/test/java/org/oppia/android/domain/auth/BUILD.bazel b/domain/src/test/java/org/oppia/android/domain/auth/BUILD.bazel
new file mode 100644
index 00000000000..61f22c5ed07
--- /dev/null
+++ b/domain/src/test/java/org/oppia/android/domain/auth/BUILD.bazel
@@ -0,0 +1,30 @@
+"""
+Tests for libraries providing authentication with Firebase functionality.
+"""
+
+load("@dagger//:workspace_defs.bzl", "dagger_rules")
+load("//:oppia_android_test.bzl", "oppia_android_test")
+
+oppia_android_test(
+ name = "AuthenticationModuleTest",
+ srcs = ["AuthenticationModuleTest.kt"],
+ custom_package = "org.oppia.android.domain.auth",
+ test_class = "org.oppia.android.domain.auth.AuthenticationModuleTest",
+ test_manifest = "//domain:test_manifest",
+ deps = [
+ ":dagger",
+ "//domain/src/main/java/org/oppia/android/domain/auth:auth_module",
+ "//testing",
+ "//testing/src/main/java/org/oppia/android/testing/robolectric:test_module",
+ "//testing/src/main/java/org/oppia/android/testing/threading:test_module",
+ "//third_party:androidx_test_ext_junit",
+ "//third_party:com_google_truth_truth",
+ "//third_party:junit_junit",
+ "//third_party:org_mockito_mockito-core",
+ "//third_party:org_robolectric_robolectric",
+ "//third_party:robolectric_android-all",
+ "//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_module",
+ ],
+)
+
+dagger_rules()
diff --git a/domain/src/test/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImplTest.kt b/domain/src/test/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImplTest.kt
new file mode 100644
index 00000000000..28a07b49b39
--- /dev/null
+++ b/domain/src/test/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImplTest.kt
@@ -0,0 +1,113 @@
+package org.oppia.android.domain.auth
+
+import android.app.Application
+import android.content.Context
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import dagger.BindsInstance
+import dagger.Component
+import dagger.Module
+import dagger.Provides
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
+import org.oppia.android.testing.FakeFirebaseAuthInstanceWrapperImpl
+import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.robolectric.RobolectricModule
+import org.oppia.android.testing.threading.TestDispatcherModule
+import org.oppia.android.testing.time.FakeOppiaClockModule
+import org.oppia.android.util.data.DataProvidersInjector
+import org.oppia.android.util.data.DataProvidersInjectorProvider
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.LooperMode
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** Tests for [firebaseAuthWrapperImpl]. */
+// FunctionName: test names are conventionally named with underscores.
+@Suppress("FunctionName")
+@RunWith(AndroidJUnit4::class)
+@LooperMode(LooperMode.Mode.PAUSED)
+@Config(application = FirebaseAuthWrapperImplTest.TestApplication::class)
+
+class FirebaseAuthWrapperImplTest {
+
+ @Inject
+ lateinit var firebaseAuthWrapperImpl: FirebaseAuthWrapperImpl
+
+ @Before
+ fun setUp() {
+ setUpTestApplicationComponent()
+ }
+
+ @Test
+ fun testAuthWrapperImpl_getCurrentSignedInUser_userIsNotSignedIn_returnsNull() {
+ val user = firebaseAuthWrapperImpl.currentUser
+
+ assertThat(user).isNull()
+ }
+
+ private fun setUpTestApplicationComponent() {
+ ApplicationProvider.getApplicationContext()
+ .inject(this)
+ }
+
+ @Module
+ class TestModule {
+ @Provides
+ @Singleton
+ fun provideContext(application: Application): Context {
+ return application
+ }
+ }
+
+ @Module
+ class AuthenticationModule {
+ @Provides
+ @Singleton
+ fun provideFirebaseAuthWrapper(firebaseAuthInstanceWrapper: FirebaseAuthInstanceWrapper):
+ FirebaseAuthWrapper = FirebaseAuthWrapperImpl(firebaseAuthInstanceWrapper)
+
+ @Provides
+ @Singleton
+ fun provideFirebaseAuthInstanceWrapper(): FirebaseAuthInstanceWrapper =
+ FakeFirebaseAuthInstanceWrapperImpl()
+ }
+
+ // TODO(#89): Move this to a common test application component.
+ @Singleton
+ @Component(
+ modules = [
+ TestModule::class, RobolectricModule::class, FakeOppiaClockModule::class,
+ ApplicationLifecycleModule::class, TestDispatcherModule::class,
+ AuthenticationModule::class, TestLogReportingModule::class,
+ ]
+ )
+ interface TestApplicationComponent : DataProvidersInjector {
+ @Component.Builder
+ interface Builder {
+ @BindsInstance
+ fun setApplication(application: Application): Builder
+
+ fun build(): TestApplicationComponent
+ }
+
+ fun inject(test: FirebaseAuthWrapperImplTest)
+ }
+
+ class TestApplication : Application(), DataProvidersInjectorProvider {
+ private val component: TestApplicationComponent by lazy {
+ DaggerFirebaseAuthWrapperImplTest_TestApplicationComponent.builder()
+ .setApplication(this)
+ .build()
+ }
+
+ fun inject(test: FirebaseAuthWrapperImplTest) {
+ component.inject(test)
+ }
+
+ override fun getDataProvidersInjector(): DataProvidersInjector = component
+ }
+}
diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt
index 70fdb3df2b9..8aab3fe63ad 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt
@@ -50,6 +50,7 @@ import org.oppia.android.domain.topic.TEST_STORY_ID_2
import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.topic.TEST_TOPIC_ID_1
import org.oppia.android.testing.FakeExceptionLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.environment.TestEnvironmentConfig
@@ -401,7 +402,8 @@ class ExplorationDataControllerTest {
AlgebraicExpressionInputModule::class, MathEquationInputModule::class,
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, PlatformParameterModule::class,
- PlatformParameterSingletonModule::class, ExplorationProgressModule::class
+ PlatformParameterSingletonModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : DataProvidersInjector {
diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt
index 632b3eedcd5..f70c336f8bc 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt
@@ -83,6 +83,7 @@ import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.FakeExceptionLogger
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
import org.oppia.android.testing.data.DataProviderTestMonitor
@@ -3214,7 +3215,7 @@ class ExplorationProgressControllerTest {
AlgebraicExpressionInputModule::class, MathEquationInputModule::class,
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, PlatformParameterSingletonModule::class,
- ExplorationProgressModule::class
+ ExplorationProgressModule::class, TestAuthenticationModule::class
]
)
interface TestApplicationComponent : DataProvidersInjector {
diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt
index cb189de92ba..6256ff55290 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt
@@ -49,6 +49,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterModule
import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule
import org.oppia.android.domain.topic.FRACTIONS_EXPLORATION_ID_0
import org.oppia.android.domain.topic.FRACTIONS_EXPLORATION_ID_1
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.environment.TestEnvironmentConfig
@@ -1000,7 +1001,7 @@ class ExplorationCheckpointControllerTest {
AlgebraicExpressionInputModule::class, MathEquationInputModule::class,
RatioInputModule::class, ImageClickInputModule::class, InteractionsModule::class,
HintsAndSolutionConfigModule::class, HintsAndSolutionProdModule::class,
- ExplorationProgressModule::class,
+ ExplorationProgressModule::class, TestAuthenticationModule::class
]
)
interface TestApplicationComponent : DataProvidersInjector {
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataControllerTest.kt
new file mode 100644
index 00000000000..02b49b292a9
--- /dev/null
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataControllerTest.kt
@@ -0,0 +1,486 @@
+package org.oppia.android.domain.oppialogger.analytics
+
+import android.app.Application
+import android.content.Context
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import dagger.BindsInstance
+import dagger.Component
+import dagger.Module
+import dagger.Provides
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.async
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.oppia.android.app.model.EventLog
+import org.oppia.android.app.model.OppiaEventLogs
+import org.oppia.android.app.model.ProfileId
+import org.oppia.android.app.model.SurveyQuestionName
+import org.oppia.android.data.persistence.PersistentCacheStore
+import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize
+import org.oppia.android.domain.platformparameter.PlatformParameterModule
+import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule
+import org.oppia.android.testing.FakeFirestoreEventLogger
+import org.oppia.android.testing.TestAuthenticationModule
+import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat
+import org.oppia.android.testing.robolectric.RobolectricModule
+import org.oppia.android.testing.threading.TestCoroutineDispatchers
+import org.oppia.android.testing.threading.TestDispatcherModule
+import org.oppia.android.testing.time.FakeOppiaClock
+import org.oppia.android.testing.time.FakeOppiaClockModule
+import org.oppia.android.util.data.AsyncResult
+import org.oppia.android.util.data.DataProvidersInjector
+import org.oppia.android.util.data.DataProvidersInjectorProvider
+import org.oppia.android.util.locale.LocaleProdModule
+import org.oppia.android.util.logging.EnableConsoleLog
+import org.oppia.android.util.logging.EnableFileLog
+import org.oppia.android.util.logging.GlobalLogLevel
+import org.oppia.android.util.logging.LogLevel
+import org.oppia.android.util.logging.SyncStatusModule
+import org.oppia.android.util.networking.NetworkConnectionDebugUtil
+import org.oppia.android.util.networking.NetworkConnectionUtil
+import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule
+import org.oppia.android.util.threading.BackgroundDispatcher
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.LooperMode
+import javax.inject.Inject
+import javax.inject.Provider
+import javax.inject.Singleton
+
+@Suppress("FunctionName", "SameParameterValue")
+@RunWith(AndroidJUnit4::class)
+@LooperMode(LooperMode.Mode.PAUSED)
+@Config(application = FirestoreDataControllerTest.TestApplication::class)
+class FirestoreDataControllerTest {
+ @Inject
+ lateinit var dataControllerProvider: Provider
+
+ @Inject
+ lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
+
+ @Inject
+ lateinit var oppiaClock: FakeOppiaClock
+
+ @Inject
+ lateinit var fakeFirestoreEventLogger: FakeFirestoreEventLogger
+
+ @Inject
+ lateinit var networkConnectionUtil: NetworkConnectionDebugUtil
+
+ @Inject
+ lateinit var monitorFactory: DataProviderTestMonitor.Factory
+
+ @field:[Inject BackgroundDispatcher]
+ lateinit var backgroundDispatcher: CoroutineDispatcher
+
+ @Inject
+ lateinit var persistentCacheStoryFactory: PersistentCacheStore.Factory
+
+ private val profileId by lazy { ProfileId.newBuilder().apply { internalId = 0 }.build() }
+
+ private val dataController by lazy { dataControllerProvider.get() }
+
+ @Before
+ fun setUp() {
+ setUpTestApplicationComponent()
+ }
+
+ @Test
+ fun testController_logEvent_withOptionalSurveyQuestionContext_checkLogsEvent() {
+ logOptionalSurveyResponseEvent()
+
+ val eventLog = fakeFirestoreEventLogger.getMostRecentEvent()
+
+ assertThat(eventLog).hasTimestampThat().isEqualTo(TEST_TIMESTAMP)
+ assertThat(eventLog).isEssentialPriority()
+ assertThat(eventLog).hasOptionalSurveyResponseContext()
+ }
+
+ @Test
+ fun testController_logEvent_noProfile_hasNoProfileId() {
+ dataController.logEvent(
+ createOptionalSurveyResponseContext(
+ surveyId = TEST_SURVEY_ID,
+ profileId = null,
+ answer = TEST_ANSWER
+ ),
+ profileId = null,
+ TEST_TIMESTAMP
+ )
+ testCoroutineDispatchers.runCurrent()
+
+ val eventLog = fakeFirestoreEventLogger.getMostRecentEvent()
+ assertThat(eventLog.hasProfileId()).isFalse()
+ }
+
+ @Test
+ fun testController_logEvent_withProfile_includesProfileId() {
+ logOptionalSurveyResponseEvent()
+
+ val eventLog = fakeFirestoreEventLogger.getMostRecentEvent()
+ assertThat(eventLog.hasProfileId()).isTrue()
+ assertThat(eventLog).hasProfileIdThat().isEqualTo(profileId)
+ }
+
+ @Test
+ fun testController_logEvent_withNoNetwork_exceedLimit_checkEventLogStoreSize() {
+ networkConnectionUtil.setCurrentConnectionStatus(
+ NetworkConnectionUtil.ProdConnectionStatus.NONE
+ )
+ logFourEvents()
+
+ val eventLogsProvider = dataController.getEventLogStore()
+
+ val eventLogs = monitorFactory.waitForNextSuccessfulResult(eventLogsProvider)
+ assertThat(eventLogs.eventLogsToUploadList).hasSize(2)
+ assertThat(eventLogs.uploadedEventLogsList).isEmpty()
+ }
+
+ @Test
+ fun testController_logEvents_exceedLimit_withNoNetwork_checkCorrectEventIsEvicted() {
+ networkConnectionUtil.setCurrentConnectionStatus(
+ NetworkConnectionUtil.ProdConnectionStatus.NONE
+ )
+ logFourEvents()
+
+ val logsProvider = dataController.getEventLogStore()
+
+ val eventLogs = monitorFactory.waitForNextSuccessfulResult(logsProvider)
+ val firstEventLog = eventLogs.getEventLogsToUpload(0)
+ val secondEventLog = eventLogs.getEventLogsToUpload(1)
+ assertThat(eventLogs.eventLogsToUploadList).hasSize(2)
+
+ // The pruning will be purely based on timestamp of the event as all the event logs have
+ // ESSENTIAL priority.
+ assertThat(firstEventLog).hasTimestampThat().isEqualTo(1556094120000)
+ assertThat(secondEventLog).hasTimestampThat().isEqualTo(1556094100000)
+ }
+
+ @Test
+ fun testController_uploadEventLogs_noLogs_cacheUnchanged() {
+ setUpTestApplicationComponent()
+ val monitor = monitorFactory.createMonitor(dataController.getEventLogStore())
+
+ runSynchronously { dataController.uploadData() }
+
+ val logs = monitor.ensureNextResultIsSuccess()
+ assertThat(logs.eventLogsToUploadList).isEmpty()
+ assertThat(logs.uploadedEventLogsList).isEmpty()
+ }
+
+ @Test
+ fun testController_uploadEventLogs_withPreviousLogs_recordsEventsAsUploaded() {
+ setUpTestApplicationComponent()
+ logTwoEvents()
+
+ runSynchronously { dataController.uploadData() }
+
+ assertThat(fakeFirestoreEventLogger.getEventListCount()).isEqualTo(2)
+ }
+
+ @Test
+ fun testController_uploadEventLogs_withLogs_recordsEventsAsUploaded() {
+ setUpTestApplicationComponent()
+ logTwoEventsOffline()
+
+ runSynchronously { dataController.uploadData() }
+
+ assertThat(fakeFirestoreEventLogger.getEventListCount()).isEqualTo(2)
+ }
+
+ @Test
+ fun testController_uploadEventLogsAndWait_noLogs_cacheUnchanged() {
+ setUpTestApplicationComponent()
+ val monitor = monitorFactory.createMonitor(dataController.getEventLogStore())
+
+ runSynchronously { dataController.uploadData() }
+
+ val logs = monitor.ensureNextResultIsSuccess()
+ assertThat(logs.eventLogsToUploadList).isEmpty()
+ assertThat(logs.uploadedEventLogsList).isEmpty()
+ }
+
+ @Test
+ fun testController_cachedEventsFromLastAppInstance_logNewEvent_thenForceSync_everythingUploads() {
+ // Simulate events being logged in a previous instance of the app.
+ logTwoCachedEventsDirectlyOnDisk()
+
+ dataController.logEvent(
+ createAbandonSurveyContext(
+ TEST_SURVEY_ID,
+ profileId,
+ SurveyQuestionName.MARKET_FIT
+ ),
+ profileId = profileId
+ )
+
+ runSynchronously { dataController.uploadData() }
+
+ testCoroutineDispatchers.runCurrent()
+
+ // The force sync should ensure everything is uploaded. NOTE TO DEVELOPER: If this test is
+ // failing, it may be due to FirestoreDataController being created before
+ // logTwoCachedEventsDirectlyOnDisk is called above. If that's the case, use the indirect
+ // injection pattern at the top of the test suite (for FirestoreDataController itself) to ensure
+ // whichever dependency is injecting FirestoreDataController is also only injected when needed
+ // (i.e. using a Provider).
+ assertThat(fakeFirestoreEventLogger.getEventListCount()).isEqualTo(3)
+ }
+
+ @Test
+ fun testController_uploadEventLogs_onNetworkRestore_removesAllEventLogsFromStore() {
+ setUpTestApplicationComponent()
+
+ logTwoEventsOffline()
+
+ runSynchronously { dataController.uploadData() }
+
+ val logsProvider = dataController.getEventLogStore()
+
+ val eventLogs = monitorFactory.waitForNextSuccessfulResult(logsProvider)
+
+ assertThat(eventLogs.eventLogsToUploadList).hasSize(0)
+ }
+
+ @Test
+ fun testController_uploadEventLogs_withNetworkConnection_removesAllEventLogsFromStore() {
+ setUpTestApplicationComponent()
+
+ logTwoEvents()
+
+ runSynchronously { dataController.uploadData() }
+
+ val logsProvider = dataController.getEventLogStore()
+
+ val eventLogs = monitorFactory.waitForNextSuccessfulResult(logsProvider)
+
+ assertThat(eventLogs.eventLogsToUploadList).hasSize(0)
+ }
+
+ private fun createAbandonSurveyContext(
+ surveyId: String,
+ profileId: ProfileId,
+ questionName: SurveyQuestionName
+ ): EventLog.Context {
+ return EventLog.Context.newBuilder()
+ .setAbandonSurvey(
+ EventLog.AbandonSurveyContext.newBuilder()
+ .setQuestionName(questionName)
+ .setSurveyDetails(
+ createSurveyResponseContext(surveyId, profileId)
+ )
+ )
+ .build()
+ }
+
+ private fun runSynchronously(operation: suspend () -> Unit) =
+ CoroutineScope(backgroundDispatcher).async { operation() }.waitForSuccessfulResult()
+
+ private fun logTwoEvents() {
+ logOptionalSurveyResponseEvent()
+ logOptionalSurveyResponseEvent(timestamp = 1556094110000)
+ }
+
+ private fun logTwoEventsOffline() {
+ networkConnectionUtil.setCurrentConnectionStatus(
+ NetworkConnectionUtil.ProdConnectionStatus.NONE
+ )
+ logTwoEvents()
+ networkConnectionUtil.setCurrentConnectionStatus(
+ NetworkConnectionUtil.ProdConnectionStatus.LOCAL
+ )
+ }
+
+ private fun logTwoCachedEventsDirectlyOnDisk() {
+ persistentCacheStoryFactory.create(
+ "firestore_data", OppiaEventLogs.getDefaultInstance()
+ ).storeDataAsync {
+ OppiaEventLogs.newBuilder().apply {
+ addEventLogsToUpload(
+ createEventLog(
+ context = createOptionalSurveyResponseContext(
+ surveyId = TEST_SURVEY_ID,
+ profileId = profileId,
+ answer = TEST_ANSWER
+ )
+ )
+ )
+ addEventLogsToUpload(
+ createEventLog(
+ context = createOptionalSurveyResponseContext(
+ surveyId = TEST_SURVEY_ID,
+ profileId = profileId,
+ answer = TEST_ANSWER
+ )
+ )
+ )
+ }.build()
+ }.waitForSuccessfulResult()
+ }
+
+ private fun Deferred.waitForSuccessfulResult() {
+ return when (val result = waitForResult()) {
+ is AsyncResult.Pending -> error("Deferred never finished.")
+ is AsyncResult.Success -> {} // Nothing to do; the result succeeded.
+ is AsyncResult.Failure -> throw IllegalStateException("Deferred failed", result.error)
+ }
+ }
+
+ private fun Deferred.waitForResult() = toStateFlow().waitForLatestValue()
+
+ private fun Deferred.toStateFlow(): StateFlow> {
+ val deferred = this
+ return MutableStateFlow>(value = AsyncResult.Pending()).also { flow ->
+ CoroutineScope(backgroundDispatcher).async {
+ flow.emit(AsyncResult.Success(deferred.await()))
+ }.invokeOnCompletion {
+ it?.let { flow.tryEmit(AsyncResult.Failure(it)) }
+ }
+ }
+ }
+
+ private fun StateFlow.waitForLatestValue(): T =
+ also { testCoroutineDispatchers.runCurrent() }.value
+
+ private fun createEventLog(
+ context: EventLog.Context,
+ priority: EventLog.Priority = EventLog.Priority.ESSENTIAL,
+ timestamp: Long = oppiaClock.getCurrentTimeMs()
+ ) = EventLog.newBuilder().apply {
+ this.timestamp = timestamp
+ this.priority = priority
+ this.context = context
+ }.build()
+
+ private fun logFourEvents() {
+ logOptionalSurveyResponseEvent(timestamp = 1556094120000)
+ logOptionalSurveyResponseEvent(timestamp = 1556094110000)
+ logOptionalSurveyResponseEvent(timestamp = 1556093100000)
+ logOptionalSurveyResponseEvent(timestamp = 1556094100000)
+ }
+
+ private fun logOptionalSurveyResponseEvent(timestamp: Long = TEST_TIMESTAMP) {
+ dataController.logEvent(
+ createOptionalSurveyResponseContext(
+ surveyId = TEST_SURVEY_ID,
+ profileId = profileId,
+ answer = TEST_ANSWER
+ ),
+ profileId,
+ timestamp
+ )
+ testCoroutineDispatchers.runCurrent()
+ }
+
+ private fun createOptionalSurveyResponseContext(
+ surveyId: String,
+ profileId: ProfileId?,
+ answer: String
+ ): EventLog.Context {
+ return EventLog.Context.newBuilder()
+ .setOptionalResponse(
+ EventLog.OptionalSurveyResponseContext.newBuilder()
+ .setFeedbackAnswer(answer)
+ .setSurveyDetails(
+ createSurveyResponseContext(surveyId, profileId)
+ )
+ )
+ .build()
+ }
+
+ private fun createSurveyResponseContext(
+ surveyId: String,
+ profileId: ProfileId?
+ ): EventLog.SurveyResponseContext {
+ return EventLog.SurveyResponseContext.newBuilder()
+ .setProfileId(profileId?.internalId.toString())
+ .setSurveyId(surveyId)
+ .build()
+ }
+
+ private fun setUpTestApplicationComponent() {
+ ApplicationProvider.getApplicationContext().inject(this)
+ }
+
+ private companion object {
+ private const val TEST_SURVEY_ID = "test_survey_id"
+ private const val TEST_ANSWER = "Some text response"
+ private const val TEST_TIMESTAMP = 1556094120000
+ }
+
+ // TODO(#89): Move this to a common test application component.
+ @Module
+ class TestModule {
+ @Provides
+ @Singleton
+ fun provideContext(application: Application): Context {
+ return application
+ }
+
+ // TODO(#59): Either isolate these to their own shared test module, or use the real logging
+ // module in tests to avoid needing to specify these settings for tests.
+ @EnableConsoleLog
+ @Provides
+ fun provideEnableConsoleLog(): Boolean = true
+
+ @EnableFileLog
+ @Provides
+ fun provideEnableFileLog(): Boolean = false
+
+ @GlobalLogLevel
+ @Provides
+ fun provideGlobalLogLevel(): LogLevel = LogLevel.VERBOSE
+ }
+
+ @Module
+ class TestLogStorageModule {
+ @Provides
+ @FirestoreLogStorageCacheSize
+ fun provideFirestoreLogStorageCacheSize(): Int = 2
+ }
+
+ // TODO(#89): Move this to a common test application component.
+ @Singleton
+ @Component(
+ modules = [
+ TestModule::class, TestLogReportingModule::class, TestLogStorageModule::class,
+ TestDispatcherModule::class, RobolectricModule::class, FakeOppiaClockModule::class,
+ NetworkConnectionUtilDebugModule::class, LocaleProdModule::class,
+ PlatformParameterSingletonModule::class, SyncStatusModule::class,
+ ApplicationLifecycleModule::class, PlatformParameterModule::class,
+ CpuPerformanceSnapshotterModule::class, TestAuthenticationModule::class,
+ ]
+ )
+ interface TestApplicationComponent : DataProvidersInjector {
+ @Component.Builder
+ interface Builder {
+ @BindsInstance
+ fun setApplication(application: Application): Builder
+ fun build(): TestApplicationComponent
+ }
+
+ fun inject(dataControllerTest: FirestoreDataControllerTest)
+ }
+
+ class TestApplication : Application(), DataProvidersInjectorProvider {
+ private val component: TestApplicationComponent by lazy {
+ DaggerFirestoreDataControllerTest_TestApplicationComponent.builder()
+ .setApplication(this)
+ .build()
+ }
+
+ fun inject(dataControllerTest: FirestoreDataControllerTest) {
+ component.inject(dataControllerTest)
+ }
+
+ override fun getDataProvidersInjector(): DataProvidersInjector = component
+ }
+}
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt
index 462dd3f04ad..74ab58fe35e 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt
@@ -43,6 +43,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_2
import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_5
import org.oppia.android.testing.FakeAnalyticsEventLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner
@@ -1838,6 +1839,7 @@ class LearnerAnalyticsLoggerTest {
MathEquationInputModule::class, ImageClickInputModule::class, AssetModule::class,
HintsAndSolutionConfigModule::class, HintsAndSolutionProdModule::class,
CachingTestModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : DataProvidersInjector {
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/SurveyEventsLoggerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/SurveyEventsLoggerTest.kt
index 4a5e3723f33..f82ab30c03d 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/SurveyEventsLoggerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/SurveyEventsLoggerTest.kt
@@ -17,10 +17,13 @@ import org.oppia.android.app.model.SurveyQuestionName
import org.oppia.android.app.model.UserTypeAnswer
import org.oppia.android.domain.oppialogger.EventLogStorageCacheSize
import org.oppia.android.domain.oppialogger.ExceptionLogStorageCacheSize
+import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize
import org.oppia.android.domain.oppialogger.LoggingIdentifierModule
import org.oppia.android.domain.oppialogger.survey.SurveyEventsLogger
import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
+import org.oppia.android.testing.FakeFirestoreEventLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat
import org.oppia.android.testing.logging.SyncStatusTestModule
@@ -52,6 +55,7 @@ import javax.inject.Singleton
class SurveyEventsLoggerTest {
private companion object {
private const val TEST_SURVEY_ID = "test_survey_id"
+ private const val TEST_ANSWER = "Some text response"
}
@Inject
@@ -60,6 +64,9 @@ class SurveyEventsLoggerTest {
@Inject
lateinit var fakeAnalyticsEventLogger: FakeAnalyticsEventLogger
+ @Inject
+ lateinit var fakeFirestoreEventLogger: FakeFirestoreEventLogger
+
@Inject
lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
@@ -110,6 +117,26 @@ class SurveyEventsLoggerTest {
}
}
+ @Test
+ fun testLogOptionalResponse_logsEventWithCorrectValues() {
+ surveyEventsLogger.logOptionalResponse(
+ TEST_SURVEY_ID,
+ profileId,
+ TEST_ANSWER
+ )
+ testCoroutineDispatchers.runCurrent()
+
+ val eventLog = fakeFirestoreEventLogger.getMostRecentEvent()
+
+ assertThat(eventLog).hasOptionalSurveyResponseContextThat {
+ hasSurveyDetailsThat {
+ hasSurveyIdThat().isNotEmpty()
+ hasInternalProfileIdThat().isEqualTo("0")
+ }
+ hasFeedbackAnswerThat().isEqualTo(TEST_ANSWER)
+ }
+ }
+
private fun setUpTestApplicationComponent() {
DaggerSurveyEventsLoggerTest_TestApplicationComponent.builder()
.setApplication(ApplicationProvider.getApplicationContext())
@@ -150,6 +177,10 @@ class SurveyEventsLoggerTest {
@Provides
@ExceptionLogStorageCacheSize
fun provideExceptionLogStorageCacheSize(): Int = 2
+
+ @Provides
+ @FirestoreLogStorageCacheSize
+ fun provideFirestoreLogStorageCacheSize(): Int = 2
}
// TODO(#89): Move this to a common test application component.
@@ -161,7 +192,7 @@ class SurveyEventsLoggerTest {
NetworkConnectionUtilDebugModule::class, LocaleProdModule::class, FakeOppiaClockModule::class,
TestPlatformParameterModule::class, PlatformParameterSingletonModule::class,
LoggingIdentifierModule::class, SyncStatusTestModule::class,
- ApplicationLifecycleModule::class, AssetModule::class
+ ApplicationLifecycleModule::class, AssetModule::class, TestAuthenticationModule::class,
]
)
interface TestApplicationComponent : DataProvidersInjector {
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializerTest.kt
index cded74aa82b..50450041a09 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializerTest.kt
@@ -24,6 +24,7 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.oppia.android.domain.oppialogger.EventLogStorageCacheSize
import org.oppia.android.domain.oppialogger.ExceptionLogStorageCacheSize
+import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize
import org.oppia.android.domain.oppialogger.LoggingIdentifierModule
import org.oppia.android.domain.oppialogger.OppiaLogger
import org.oppia.android.domain.oppialogger.PerformanceMetricsLogStorageCacheSize
@@ -37,6 +38,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterModule
import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule
import org.oppia.android.domain.testing.oppialogger.loguploader.FakeLogUploader
import org.oppia.android.testing.FakeExceptionLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
@@ -131,6 +133,8 @@ class LogReportWorkManagerInitializerTest {
val enqueuedSchedulingPeriodicBackgroundPerformanceMetricWorkRequestId =
logReportWorkManagerInitializer
.getWorkRequestForSchedulingPeriodicBackgroundPerformanceMetricLogsId()
+ val enqueuedFirestoreWorkRequestId =
+ logReportWorkManagerInitializer.getWorkRequestForFirestoreId()
assertThat(fakeLogUploader.getMostRecentEventRequestId()).isEqualTo(enqueuedEventWorkRequestId)
assertThat(fakeLogUploader.getMostRecentExceptionRequestId()).isEqualTo(
@@ -148,6 +152,9 @@ class LogReportWorkManagerInitializerTest {
assertThat(fakeLogScheduler.getMostRecentPeriodicBackgroundMetricLoggingRequestId()).isEqualTo(
enqueuedSchedulingPeriodicBackgroundPerformanceMetricWorkRequestId
)
+ assertThat(fakeLogUploader.getMostRecentFirestoreRequestId()).isEqualTo(
+ enqueuedFirestoreWorkRequestId
+ )
}
@Test
@@ -248,6 +255,20 @@ class LogReportWorkManagerInitializerTest {
).isEqualTo(workerCaseForSchedulingMemoryUsageMetricLogs)
}
+ @Test
+ fun testWorkRequest_verifyWorkRequestData_forSchedulingFirestoreUpload() {
+ val workerCaseForUploadingFirestoreData: Data = Data.Builder()
+ .putString(
+ LogUploadWorker.WORKER_CASE_KEY,
+ LogUploadWorker.FIRESTORE_WORKER
+ )
+ .build()
+
+ assertThat(
+ logReportWorkManagerInitializer.getWorkRequestDataForFirestore()
+ ).isEqualTo(workerCaseForUploadingFirestoreData)
+ }
+
private fun setUpTestApplicationComponent() {
ApplicationProvider.getApplicationContext().inject(this)
}
@@ -276,6 +297,10 @@ class LogReportWorkManagerInitializerTest {
@Provides
@PerformanceMetricsLogStorageCacheSize
fun providePerformanceMetricsLogStorageCacheSize(): Int = 2
+
+ @Provides
+ @FirestoreLogStorageCacheSize
+ fun provideFirestoreLogStorageCacheSize(): Int = 2
}
@Module
@@ -299,7 +324,7 @@ class LogReportWorkManagerInitializerTest {
LoggerModule::class, AssetModule::class, LoggerModule::class, PlatformParameterModule::class,
PlatformParameterSingletonModule::class, LoggingIdentifierModule::class,
SyncStatusModule::class, ApplicationLifecycleModule::class,
- CpuPerformanceSnapshotterModule::class
+ CpuPerformanceSnapshotterModule::class, TestAuthenticationModule::class,
]
)
interface TestApplicationComponent : DataProvidersInjector {
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt
index 4f4b2a1ca65..1b715670f33 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt
@@ -29,18 +29,22 @@ import org.oppia.android.app.model.OppiaMetricLog
import org.oppia.android.app.model.ScreenName.SCREEN_NAME_UNSPECIFIED
import org.oppia.android.domain.oppialogger.EventLogStorageCacheSize
import org.oppia.android.domain.oppialogger.ExceptionLogStorageCacheSize
+import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize
import org.oppia.android.domain.oppialogger.LoggingIdentifierModule
import org.oppia.android.domain.oppialogger.OppiaLogger
import org.oppia.android.domain.oppialogger.PerformanceMetricsLogStorageCacheSize
import org.oppia.android.domain.oppialogger.analytics.AnalyticsController
import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
+import org.oppia.android.domain.oppialogger.analytics.FirestoreDataController
import org.oppia.android.domain.oppialogger.analytics.PerformanceMetricsController
import org.oppia.android.domain.oppialogger.exceptions.ExceptionsController
import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule
import org.oppia.android.domain.testing.oppialogger.loguploader.FakeLogUploader
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.FakeExceptionLogger
+import org.oppia.android.testing.FakeFirestoreEventLogger
import org.oppia.android.testing.FakePerformanceMetricsEventLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.logging.SyncStatusTestModule
import org.oppia.android.testing.logging.TestSyncStatusManager
@@ -64,6 +68,7 @@ import org.oppia.android.util.logging.SyncStatusManager.SyncStatus.DATA_UPLOADIN
import org.oppia.android.util.logging.SyncStatusManager.SyncStatus.INITIAL_UNKNOWN
import org.oppia.android.util.logging.SyncStatusManager.SyncStatus.NO_CONNECTIVITY
import org.oppia.android.util.logging.SyncStatusManager.SyncStatus.UPLOAD_ERROR
+import org.oppia.android.util.logging.firebase.FirestoreEventLogger
import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsAssessorModule
import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsConfigurationsModule
import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsEventLogger
@@ -92,8 +97,10 @@ class LogUploadWorkerTest {
@Inject lateinit var fakeAnalyticsEventLogger: FakeAnalyticsEventLogger
@Inject lateinit var fakeExceptionLogger: FakeExceptionLogger
@Inject lateinit var fakePerformanceMetricsEventLogger: FakePerformanceMetricsEventLogger
+ @Inject lateinit var fakeFirestoreEventLogger: FakeFirestoreEventLogger
@Inject lateinit var oppiaLogger: OppiaLogger
@Inject lateinit var analyticsController: AnalyticsController
+ @Inject lateinit var dataController: FirestoreDataController
@Inject lateinit var exceptionsController: ExceptionsController
@Inject lateinit var performanceMetricsController: PerformanceMetricsController
@Inject lateinit var logUploadWorkerFactory: LogUploadWorkerFactory
@@ -102,6 +109,8 @@ class LogUploadWorkerTest {
@Inject lateinit var testSyncStatusManager: TestSyncStatusManager
@Inject lateinit var monitorFactory: DataProviderTestMonitor.Factory
@field:[Inject MockEventLogger] lateinit var mockAnalyticsEventLogger: AnalyticsEventLogger
+ @field:[Inject MockFirestoreEventLogger]
+ lateinit var mockFirestoreEventLogger: FirestoreEventLogger
private lateinit var context: Context
@@ -402,6 +411,95 @@ class LogUploadWorkerTest {
assertThat(currentStatus).isEqualTo(NO_CONNECTIVITY)
}
+ @Test
+ fun testWorker_logFirestoreEvent_withNetwork_enqueueRequest_verifySuccess() {
+ setUpTestApplicationComponent()
+ networkConnectionUtil.setCurrentConnectionStatus(NONE)
+ dataController.logEvent(
+ createOptionalSurveyResponseContext(),
+ profileId = null,
+ 1556094120000
+ )
+ networkConnectionUtil.setCurrentConnectionStatus(LOCAL)
+ testCoroutineDispatchers.runCurrent()
+
+ val workManager = WorkManager.getInstance(ApplicationProvider.getApplicationContext())
+
+ val inputData = Data.Builder().putString(
+ LogUploadWorker.WORKER_CASE_KEY,
+ LogUploadWorker.FIRESTORE_WORKER
+ ).build()
+
+ val request: OneTimeWorkRequest = OneTimeWorkRequestBuilder()
+ .setInputData(inputData)
+ .build()
+
+ workManager.enqueue(request)
+ testCoroutineDispatchers.runCurrent()
+ val workInfo = workManager.getWorkInfoById(request.id)
+
+ assertThat(workInfo.get().state).isEqualTo(WorkInfo.State.SUCCEEDED)
+ assertThat(fakeFirestoreEventLogger.getMostRecentEvent()).isEqualTo(
+ optionalSurveyResponseEventLog
+ )
+ }
+
+ @Test
+ fun testWorker_logFirestoreEvent_withoutNetwork_enqueueRequest_writeFails_verifyFailure() {
+ setUpTestApplicationComponent()
+ networkConnectionUtil.setCurrentConnectionStatus(NONE)
+ dataController.logEvent(
+ createOptionalSurveyResponseContext(),
+ profileId = null,
+ 1556094120000
+ )
+ testCoroutineDispatchers.runCurrent()
+
+ val workManager = WorkManager.getInstance(ApplicationProvider.getApplicationContext())
+
+ val inputData = Data.Builder().putString(
+ LogUploadWorker.WORKER_CASE_KEY,
+ LogUploadWorker.FIRESTORE_WORKER
+ ).build()
+
+ val request: OneTimeWorkRequest = OneTimeWorkRequestBuilder()
+ .setInputData(inputData)
+ .build()
+
+ setUpFirestoreEventLoggerToFail()
+ workManager.enqueue(request)
+ testCoroutineDispatchers.runCurrent()
+ val workInfo = workManager.getWorkInfoById(request.id)
+
+ assertThat(workInfo.get().state).isEqualTo(WorkInfo.State.FAILED)
+ assertThat(fakeFirestoreEventLogger.noEventsPresent()).isTrue()
+ }
+
+ private val optionalSurveyResponseEventLog = EventLog.newBuilder().apply {
+ this.context = createOptionalSurveyResponseContext()
+ this.timestamp = TEST_TIMESTAMP
+ this.priority = EventLog.Priority.ESSENTIAL
+ }
+ .build()
+
+ private fun createOptionalSurveyResponseContext(): EventLog.Context {
+ return EventLog.Context.newBuilder()
+ .setOptionalResponse(
+ EventLog.OptionalSurveyResponseContext.newBuilder()
+ .setFeedbackAnswer("answer")
+ .setSurveyDetails(
+ createSurveyResponseContext()
+ )
+ )
+ .build()
+ }
+
+ private fun createSurveyResponseContext(): EventLog.SurveyResponseContext {
+ return EventLog.SurveyResponseContext.newBuilder()
+ .setSurveyId("test_survey_id")
+ .build()
+ }
+
private fun setUpEventLoggerToFail() {
// Simulate the log attempt itself failing during the job. Note that the reset is necessary here
// to remove the default stubbing for the mock so that it can properly trigger a failure.
@@ -410,6 +508,14 @@ class LogUploadWorkerTest {
.thenThrow(IllegalStateException("Failure."))
}
+ private fun setUpFirestoreEventLoggerToFail() {
+ // Simulate the log attempt itself failing during the job. Note that the reset is necessary here
+ // to remove the default stubbing for the mock so that it can properly trigger a failure.
+ reset(mockFirestoreEventLogger)
+ `when`(mockFirestoreEventLogger.uploadEvent(anyOrNull()))
+ .thenThrow(IllegalStateException("Failure."))
+ }
+
/**
* Returns a list of lists of each relevant element of a [StackTraceElement] to be used for
* comparison in a way that's consistent across JDK versions.
@@ -431,6 +537,9 @@ class LogUploadWorkerTest {
@Qualifier
annotation class MockEventLogger
+ @Qualifier
+ annotation class MockFirestoreEventLogger
+
// TODO(#89): Move this to a common test application component.
@Module
class TestModule {
@@ -451,6 +560,21 @@ class LogUploadWorkerTest {
}
}
+ @Provides
+ @Singleton
+ @MockFirestoreEventLogger
+ fun bindMockFirestoreEventLogger(fakeFirestoreLogger: FakeFirestoreEventLogger):
+ FirestoreEventLogger {
+ return mock(FirestoreEventLogger::class.java).also {
+ `when`(it.uploadEvent(anyOrNull())).then { answer ->
+ fakeFirestoreLogger.uploadEvent(
+ answer.getArgument(/* index= */ 0, /* clazz= */ EventLog::class.java)
+ )
+ return@then null
+ }
+ }
+ }
+
@Provides
fun bindFakeEventLogger(@MockEventLogger delegate: AnalyticsEventLogger):
AnalyticsEventLogger = delegate
@@ -462,6 +586,11 @@ class LogUploadWorkerTest {
fun bindFakePerformanceMetricsLogger(
fakePerformanceMetricsEventLogger: FakePerformanceMetricsEventLogger
): PerformanceMetricsEventLogger = fakePerformanceMetricsEventLogger
+
+ @Provides
+ fun bindFakeFirestoreEventLogger(
+ @MockFirestoreEventLogger delegate: FirestoreEventLogger
+ ): FirestoreEventLogger = delegate
}
@Module
@@ -478,6 +607,10 @@ class LogUploadWorkerTest {
@Provides
@PerformanceMetricsLogStorageCacheSize
fun providePerformanceMetricsLogStorageCacheSize(): Int = 2
+
+ @Provides
+ @FirestoreLogStorageCacheSize
+ fun provideFirestoreLogStorageCacheSize(): Int = 2
}
@Module
@@ -498,7 +631,8 @@ class LogUploadWorkerTest {
AssetModule::class, TestPlatformParameterModule::class,
PlatformParameterSingletonModule::class, LoggingIdentifierModule::class,
SyncStatusTestModule::class, PerformanceMetricsAssessorModule::class,
- ApplicationLifecycleModule::class, PerformanceMetricsConfigurationsModule::class
+ ApplicationLifecycleModule::class, PerformanceMetricsConfigurationsModule::class,
+ TestAuthenticationModule::class,
]
)
interface TestApplicationComponent : DataProvidersInjector {
diff --git a/domain/src/test/java/org/oppia/android/domain/survey/SurveyControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/survey/SurveyControllerTest.kt
index eb9e43ab83a..4517b0b6504 100644
--- a/domain/src/test/java/org/oppia/android/domain/survey/SurveyControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/survey/SurveyControllerTest.kt
@@ -19,6 +19,7 @@ import org.oppia.android.domain.oppialogger.ApplicationIdSeed
import org.oppia.android.domain.oppialogger.LogStorageModule
import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
import org.oppia.android.testing.FakeExceptionLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -211,7 +212,7 @@ class SurveyControllerTest {
ApplicationLifecycleModule::class, TestDispatcherModule::class, LocaleProdModule::class,
ExplorationProgressModule::class, TestLogReportingModule::class, AssetModule::class,
NetworkConnectionUtilDebugModule::class, SyncStatusModule::class, LogStorageModule::class,
- TestLoggingIdentifierModule::class,
+ TestLoggingIdentifierModule::class, TestAuthenticationModule::class,
]
)
interface TestApplicationComponent : DataProvidersInjector {
diff --git a/domain/src/test/java/org/oppia/android/domain/survey/SurveyProgressControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/survey/SurveyProgressControllerTest.kt
index 865120fb089..e0e8e1deade 100644
--- a/domain/src/test/java/org/oppia/android/domain/survey/SurveyProgressControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/survey/SurveyProgressControllerTest.kt
@@ -24,6 +24,8 @@ import org.oppia.android.domain.oppialogger.LogStorageModule
import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.FakeExceptionLogger
+import org.oppia.android.testing.FakeFirestoreEventLogger
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.logging.EventLogSubject
@@ -72,6 +74,9 @@ class SurveyProgressControllerTest {
@Inject
lateinit var fakeAnalyticsEventLogger: FakeAnalyticsEventLogger
+ @Inject
+ lateinit var fakeFirestoreEventLogger: FakeFirestoreEventLogger
+
private val profileId = ProfileId.newBuilder().setInternalId(1).build()
@Before
@@ -397,7 +402,26 @@ class SurveyProgressControllerTest {
}
}
- // TODO(#5001): Add tests for Optional responses logging to Firestore
+ @Test
+ fun testEndSurvey_afterCompletingAllQuestions_logsOptionalSurveyResponseEvent() {
+ startSuccessfulSurveySession()
+ waitForGetCurrentQuestionSuccessfulLoad()
+ submitUserTypeAnswer(UserTypeAnswer.PARENT)
+ submitMarketFitAnswer(MarketFitAnswer.VERY_DISAPPOINTED)
+ submitNpsAnswer(10)
+ submitTextInputAnswer(SurveyQuestionName.PROMOTER_FEEDBACK, TEXT_ANSWER)
+ stopSurveySession(surveyCompleted = true)
+
+ val eventLog = fakeFirestoreEventLogger.getMostRecentEvent()
+
+ EventLogSubject.assertThat(eventLog).hasOptionalSurveyResponseContextThat {
+ hasSurveyDetailsThat {
+ hasSurveyIdThat().isNotEmpty()
+ hasInternalProfileIdThat().isEqualTo("1")
+ }
+ hasFeedbackAnswerThat().isEqualTo(TEXT_ANSWER)
+ }
+ }
private fun stopSurveySession(surveyCompleted: Boolean) {
val stopProvider = surveyController.stopSurveySession(surveyCompleted)
@@ -542,7 +566,7 @@ class SurveyProgressControllerTest {
ApplicationLifecycleModule::class, TestDispatcherModule::class, LocaleProdModule::class,
ExplorationProgressModule::class, TestLogReportingModule::class, AssetModule::class,
NetworkConnectionUtilDebugModule::class, SyncStatusModule::class, LogStorageModule::class,
- TestLoggingIdentifierModule::class
+ TestLoggingIdentifierModule::class, TestAuthenticationModule::class,
]
)
diff --git a/instrumentation/src/java/org/oppia/android/instrumentation/application/BUILD.bazel b/instrumentation/src/java/org/oppia/android/instrumentation/application/BUILD.bazel
index 97be8252f41..5d9fe4ac612 100644
--- a/instrumentation/src/java/org/oppia/android/instrumentation/application/BUILD.bazel
+++ b/instrumentation/src/java/org/oppia/android/instrumentation/application/BUILD.bazel
@@ -25,6 +25,7 @@ kt_android_library(
"//app/src/main/java/org/oppia/android/app/application/testing:testing_build_flavor_module",
"//data/src/main/java/org/oppia/android/data/backends/gae:network_config_annotations",
"//domain",
+ "//testing",
"//utility",
"//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module",
"//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_module",
diff --git a/instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt b/instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt
index 25f666f4029..fbf99ee8103 100644
--- a/instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt
+++ b/instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt
@@ -45,6 +45,7 @@ import org.oppia.android.domain.platformparameter.syncup.PlatformParameterSyncUp
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.util.accessibility.AccessibilityProdModule
import org.oppia.android.util.caching.AssetModule
import org.oppia.android.util.caching.CachingModule
@@ -101,7 +102,8 @@ import javax.inject.Singleton
MetricLogSchedulerModule::class, ActivityRouterModule::class,
PerformanceMetricsAssessorModule::class, PerformanceMetricsConfigurationsModule::class,
TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class,
- ExplorationProgressModule::class, CpuPerformanceSnapshotterModule::class
+ ExplorationProgressModule::class, CpuPerformanceSnapshotterModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/scripts/assets/maven_dependencies.textproto b/scripts/assets/maven_dependencies.textproto
index ddb692a40f3..7305bccdd78 100644
--- a/scripts/assets/maven_dependencies.textproto
+++ b/scripts/assets/maven_dependencies.textproto
@@ -514,6 +514,17 @@ maven_dependency {
}
}
}
+maven_dependency {
+ artifact_name: "com.google.android:annotations:4.1.1.4"
+ artifact_version: "4.1.1.4"
+ license {
+ license_name: "Apache 2.0"
+ original_link: "https://www.apache.org/licenses/LICENSE-2.0"
+ extracted_copy_link {
+ url: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ }
+ }
+}
maven_dependency {
artifact_name: "com.google.auto.service:auto-service-annotations:1.0-rc7"
artifact_version: "1.0-rc7"
@@ -529,6 +540,7 @@ maven_dependency {
artifact_version: "1.8.1"
license {
license_name: "The Apache Software License, Version 2.0"
+ original_link: "https://www.apache.org/licenses/LICENSE-2.0.txt"
scrapable_link {
url: "https://www.apache.org/licenses/LICENSE-2.0.txt"
}
@@ -545,6 +557,16 @@ maven_dependency {
}
}
}
+maven_dependency {
+ artifact_name: "com.google.code.gson:gson:2.8.9"
+ artifact_version: "2.8.9"
+ license {
+ license_name: "Apache 2.0"
+ scrapable_link {
+ url: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ }
+ }
+}
maven_dependency {
artifact_name: "com.google.dagger:dagger:2.28.1"
artifact_version: "2.28.1"
@@ -557,8 +579,8 @@ maven_dependency {
}
}
maven_dependency {
- artifact_name: "com.google.errorprone:error_prone_annotations:2.7.1"
- artifact_version: "2.7.1"
+ artifact_name: "com.google.errorprone:error_prone_annotations:2.9.0"
+ artifact_version: "2.9.0"
license {
license_name: "Apache 2.0"
original_link: "https://www.apache.org/licenses/LICENSE-2.0.txt"
@@ -579,8 +601,19 @@ maven_dependency {
}
}
maven_dependency {
- artifact_name: "com.google.firebase:firebase-common:19.3.0"
- artifact_version: "19.3.0"
+ artifact_name: "com.google.firebase:firebase-auth-ktx:19.3.1"
+ artifact_version: "19.3.1"
+ license {
+ license_name: "Android Software Development Kit License"
+ original_link: "https://developer.android.com/studio/terms.html"
+ direct_link_only {
+ url: "https://developer.android.com/studio/terms.html"
+ }
+ }
+}
+maven_dependency {
+ artifact_name: "com.google.firebase:firebase-common:20.1.1"
+ artifact_version: "20.1.1"
license {
license_name: "The Apache Software License, Version 2.0"
original_link: "https://www.apache.org/licenses/LICENSE-2.0.txt"
@@ -600,6 +633,17 @@ maven_dependency {
}
}
}
+maven_dependency {
+ artifact_name: "com.google.firebase:firebase-firestore-ktx:24.2.1"
+ artifact_version: "24.2.1"
+ license {
+ license_name: "The Apache Software License, Version 2.0"
+ original_link: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ scrapable_link {
+ url: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ }
+ }
+}
maven_dependency {
artifact_name: "com.google.guava:failureaccess:1.0.1"
artifact_version: "1.0.1"
@@ -642,12 +686,12 @@ maven_dependency {
}
}
maven_dependency {
- artifact_name: "com.google.protobuf:protobuf-javalite:3.17.3"
- artifact_version: "3.17.3"
+ artifact_name: "com.google.protobuf:protobuf-javalite:3.19.2"
+ artifact_version: "3.19.2"
license {
- license_name: "Simplified BSD License"
+ license_name: "BSD 3-clause"
extracted_copy_link {
- url: "https://raw.githubusercontent.com/oppia/oppia-android-licenses/develop/simplified-bsd-license.txt"
+ url: "https://opensource.org/license/bsd-3-clause"
}
}
}
@@ -695,6 +739,16 @@ maven_dependency {
}
}
}
+maven_dependency {
+ artifact_name: "com.squareup.okhttp:okhttp:2.7.5"
+ artifact_version: "2.7.5"
+ license {
+ license_name: "The Apache Software License, Version 2.0"
+ scrapable_link {
+ url: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ }
+ }
+}
maven_dependency {
artifact_name: "com.squareup.okio:okio:2.6.0"
artifact_version: "2.6.0"
@@ -768,6 +822,50 @@ maven_dependency {
}
}
}
+maven_dependency {
+ artifact_name: "io.grpc:grpc-api:1.44.1"
+ artifact_version: "1.44.1"
+ license {
+ license_name: "Apache 2.0"
+ original_link: "https://opensource.org/licenses/Apache-2.0"
+ scrapable_link {
+ url: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ }
+ }
+}
+maven_dependency {
+ artifact_name: "io.grpc:grpc-context:1.44.1"
+ artifact_version: "1.44.1"
+ license {
+ license_name: "Apache 2.0"
+ original_link: "https://opensource.org/licenses/Apache-2.0"
+ scrapable_link {
+ url: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ }
+ }
+}
+maven_dependency {
+ artifact_name: "io.grpc:grpc-core:1.44.1"
+ artifact_version: "1.44.1"
+ license {
+ license_name: "Apache 2.0"
+ original_link: "https://opensource.org/licenses/Apache-2.0"
+ scrapable_link {
+ url: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ }
+ }
+}
+maven_dependency {
+ artifact_name: "io.perfmark:perfmark-api:0.23.0"
+ artifact_version: "0.23.0"
+ license {
+ license_name: "Apache 2.0"
+ original_link: "https://opensource.org/licenses/Apache-2.0"
+ scrapable_link {
+ url: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ }
+ }
+}
maven_dependency {
artifact_name: "javax.annotation:javax.annotation-api:1.3.2"
artifact_version: "1.3.2"
@@ -830,6 +928,28 @@ maven_dependency {
}
}
}
+maven_dependency {
+ artifact_name: "org.checkerframework:checker-qual:3.13.0"
+ artifact_version: "3.13.0"
+ license {
+ license_name: "The MIT License"
+ original_link: "https://opensource.org/licenses/MIT"
+ extracted_copy_link {
+ url: "https://raw.githubusercontent.com/oppia/oppia-android-licenses/develop/mit-license.txt"
+ }
+ }
+}
+maven_dependency {
+ artifact_name: "org.codehaus.mojo:animal-sniffer-annotations:1.19"
+ artifact_version: "1.19"
+ license {
+ license_name: "The MIT License"
+ original_link: "https://opensource.org/licenses/MIT"
+ extracted_copy_link {
+ url: "https://raw.githubusercontent.com/oppia/oppia-android-licenses/develop/mit-license.txt"
+ }
+ }
+}
maven_dependency {
artifact_name: "org.jetbrains.kotlin:kotlin-reflect:1.5.0"
artifact_version: "1.5.0"
diff --git a/scripts/assets/test_file_exemptions.textproto b/scripts/assets/test_file_exemptions.textproto
index dac453e5d9b..8a58df32b31 100644
--- a/scripts/assets/test_file_exemptions.textproto
+++ b/scripts/assets/test_file_exemptions.textproto
@@ -652,6 +652,11 @@ exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/mode
exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeVoiceover.kt"
exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeWrittenTranslation.kt"
exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeWrittenTranslations.kt"
+exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstance.kt"
+exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapper.kt"
+exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapperImpl.kt"
+exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapper.kt"
+exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseUserWrapper.kt"
exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/ClassificationContext.kt"
exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/ClassificationResult.kt"
exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/GenericInteractionClassifier.kt"
@@ -754,6 +759,8 @@ exempted_file_path: "scripts/src/java/org/oppia/android/scripts/todo/model/Todo.
exempted_file_path: "testing/src/main/java/org/oppia/android/testing/AccessibilityTestRule.kt"
exempted_file_path: "testing/src/main/java/org/oppia/android/testing/AssertionHelpers.kt"
exempted_file_path: "testing/src/main/java/org/oppia/android/testing/DisableAccessibilityChecks.kt"
+exempted_file_path: "testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt"
+exempted_file_path: "testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt"
exempted_file_path: "testing/src/main/java/org/oppia/android/testing/OppiaTestAnnotations.kt"
exempted_file_path: "testing/src/main/java/org/oppia/android/testing/OppiaTestRule.kt"
exempted_file_path: "testing/src/main/java/org/oppia/android/testing/OppiaTestRunner.kt"
@@ -850,8 +857,13 @@ exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/fireba
exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/DebugLogReportingModule.kt"
exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseAnalyticsEventLogger.kt"
exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseExceptionLogger.kt"
+exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstance.kt"
+exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapper.kt"
+exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapperImpl.kt"
exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploader.kt"
exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploaderModule.kt"
+exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLogger.kt"
+exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLoggerProdImpl.kt"
exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt"
exempted_file_path: "utility/src/main/java/org/oppia/android/util/math/FloatExtensions.kt"
exempted_file_path: "utility/src/main/java/org/oppia/android/util/math/FractionExtensions.kt"
diff --git a/testing/build.gradle b/testing/build.gradle
index 3116f0df05c..834206b8704 100644
--- a/testing/build.gradle
+++ b/testing/build.gradle
@@ -75,6 +75,7 @@ dependencies {
'androidx.test:runner:1.2.0',
'com.google.android.material:material:1.3.0',
'com.google.dagger:dagger:2.24',
+ 'com.google.firebase:firebase-auth-ktx:19.3.1',
'com.google.protobuf:protobuf-javalite:3.17.3',
'com.google.truth:truth:1.1.3',
'com.google.truth.extensions:truth-liteproto-extension:1.1.3',
diff --git a/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt b/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt
new file mode 100644
index 00000000000..ea5ada533eb
--- /dev/null
+++ b/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt
@@ -0,0 +1,11 @@
+package org.oppia.android.testing
+
+import org.oppia.android.domain.auth.FirebaseAuthInstance
+import org.oppia.android.domain.auth.FirebaseAuthInstanceWrapper
+import javax.inject.Inject
+
+/** Implementation of [FirebaseAuthInstanceWrapper]. */
+class FakeFirebaseAuthInstanceWrapperImpl @Inject constructor() : FirebaseAuthInstanceWrapper {
+ override val firebaseAuthInstance: FirebaseAuthInstance?
+ get() = null
+}
diff --git a/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt b/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt
new file mode 100644
index 00000000000..8f8a9d54b53
--- /dev/null
+++ b/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt
@@ -0,0 +1,49 @@
+package org.oppia.android.testing
+
+import org.oppia.android.domain.auth.FirebaseAuthWrapper
+import org.oppia.android.domain.auth.FirebaseUserWrapper
+import java.util.UUID
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** A test specific fake for the [FirebaseAuthWrapper]. */
+@Singleton
+class FakeFirebaseAuthWrapperImpl @Inject constructor() : FirebaseAuthWrapper {
+ private var fakeAuthState: FakeAuthState = FakeAuthState.SUCCESS
+
+ /** Fake a successful auth response. */
+ fun simulateSignInSuccess() {
+ fakeAuthState = FakeAuthState.SUCCESS
+ }
+
+ /** Fake a failed auth response. */
+ fun simulateSignInFailure() {
+ fakeAuthState = FakeAuthState.FAILURE
+ }
+
+ /** Returns the [fakeAuthState] of the controller. */
+ fun getAuthState(): FakeAuthState = fakeAuthState
+
+ override val currentUser: FirebaseUserWrapper?
+ get() = if (fakeAuthState == FakeAuthState.SUCCESS)
+ FirebaseUserWrapper(uid = UUID.randomUUID().toString())
+ else
+ null
+
+ override fun signInAnonymously(onSuccess: () -> Unit, onFailure: (Throwable) -> Unit) {
+ if (fakeAuthState == FakeAuthState.SUCCESS) {
+ onSuccess.invoke()
+ } else {
+ onFailure.invoke(Exception("Sign-in failure"))
+ }
+ }
+
+ /** Represents a faked authentication state. */
+ enum class FakeAuthState {
+ /** Represents a faked successful authentication state. */
+ SUCCESS,
+
+ /** Represents a faked failed authentication state. */
+ FAILURE
+ }
+}
diff --git a/testing/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt b/testing/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt
new file mode 100644
index 00000000000..b2a16c85704
--- /dev/null
+++ b/testing/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt
@@ -0,0 +1,41 @@
+package org.oppia.android.testing
+
+import org.oppia.android.app.model.EventLog
+import org.oppia.android.util.logging.firebase.FirestoreEventLogger
+import java.util.concurrent.CopyOnWriteArrayList
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** A test specific fake for the FirestoreEventLogger. */
+@Singleton
+class FakeFirestoreEventLogger @Inject constructor() : FirestoreEventLogger {
+ private val eventList = CopyOnWriteArrayList()
+
+ override fun uploadEvent(eventLog: EventLog) {
+ eventList.add(eventLog)
+ }
+
+ /** Returns the oldest event that's been logged. */
+ fun getOldestEvent(): EventLog = eventList.first()
+
+ /** Returns the most recently logged event. */
+ fun getMostRecentEvent(): EventLog = getMostRecentEvents(count = 1).first()
+
+ /** Returns the most recent [count] logged events. */
+ fun getMostRecentEvents(count: Int): List = eventList.takeLast(count)
+
+ /** Clears all the events that are currently logged. */
+ fun clearAllEvents() = eventList.clear()
+
+ /** Returns whether a certain event has been logged or not, based on the provided [predicate]. */
+ fun hasEventLogged(predicate: (EventLog) -> Boolean): Boolean = eventList.find(predicate) != null
+
+ /** Returns the number of logged events that match the provided [predicate]. */
+ fun countEvents(predicate: (EventLog) -> Boolean): Int = eventList.count(predicate)
+
+ /** Returns true if there are no events logged. */
+ fun noEventsPresent(): Boolean = eventList.isEmpty()
+
+ /** Returns the number of events logged to date (and not cleared by [clearAllEvents]). */
+ fun getEventListCount(): Int = eventList.size
+}
diff --git a/testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt b/testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt
new file mode 100644
index 00000000000..e5f62715c78
--- /dev/null
+++ b/testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt
@@ -0,0 +1,16 @@
+package org.oppia.android.testing
+
+import org.oppia.android.util.logging.firebase.FirestoreInstance
+import org.oppia.android.util.logging.firebase.FirestoreInstanceWrapper
+import javax.inject.Inject
+
+/**
+ * A test specific fake for the [FirestoreInstanceWrapper]. [FirebaseFirestore] requires an instance
+ * of [FirebaseApp], which is difficult to mock or fake hence this implementation always returns
+ * null when an instance of [FirebaseFirestore] is requested.
+ */
+class FakeFirestoreInstanceWrapperImpl @Inject constructor() : FirestoreInstanceWrapper {
+
+ override val firestoreInstance: FirestoreInstance?
+ get() = null
+}
diff --git a/testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt b/testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt
new file mode 100644
index 00000000000..ed973730f5a
--- /dev/null
+++ b/testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt
@@ -0,0 +1,15 @@
+package org.oppia.android.testing
+
+import dagger.Module
+import dagger.Provides
+import org.oppia.android.domain.auth.FirebaseAuthWrapper
+import javax.inject.Singleton
+
+/** Provides test authentication dependencies. */
+@Module
+class TestAuthenticationModule {
+ @Provides
+ @Singleton
+ fun provideFakeFirebaseAuthWrapper(fakeFirebaseWrapperImpl: FakeFirebaseAuthWrapperImpl):
+ FirebaseAuthWrapper = fakeFirebaseWrapperImpl
+}
diff --git a/testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt b/testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt
index 9d27f8c3a51..f10c83dfa83 100644
--- a/testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt
+++ b/testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt
@@ -4,6 +4,8 @@ import dagger.Binds
import dagger.Module
import org.oppia.android.util.logging.AnalyticsEventLogger
import org.oppia.android.util.logging.ExceptionLogger
+import org.oppia.android.util.logging.firebase.FirestoreEventLogger
+import org.oppia.android.util.logging.firebase.FirestoreInstanceWrapper
import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsAssessor
import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsEventLogger
@@ -26,4 +28,13 @@ interface TestLogReportingModule {
fun bindFakePerformanceMetricsAssessor(
fakePerformanceMetricAssessor: FakePerformanceMetricAssessor
): PerformanceMetricsAssessor
+
+ @Binds
+ fun bindFakeFirestoreEventLogger(
+ fakeFirestoreEventLogger: FakeFirestoreEventLogger
+ ): FirestoreEventLogger
+
+ @Binds
+ fun bindFirebaseFirestoreInstanceWrapper(wrapperImpl: FakeFirestoreInstanceWrapperImpl):
+ FirestoreInstanceWrapper
}
diff --git a/testing/src/main/java/org/oppia/android/testing/logging/EventLogSubject.kt b/testing/src/main/java/org/oppia/android/testing/logging/EventLogSubject.kt
index cbd7163ce19..5f17e632be0 100644
--- a/testing/src/main/java/org/oppia/android/testing/logging/EventLogSubject.kt
+++ b/testing/src/main/java/org/oppia/android/testing/logging/EventLogSubject.kt
@@ -40,6 +40,7 @@ import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.OPEN_QUE
import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.OPEN_REVISION_CARD
import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.OPEN_REVISION_TAB
import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.OPEN_STORY_ACTIVITY
+import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.OPTIONAL_RESPONSE
import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.PAUSE_VOICE_OVER_CONTEXT
import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.PLAY_VOICE_OVER_CONTEXT
import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.REACH_INVESTED_ENGAGEMENT
@@ -1046,6 +1047,34 @@ class EventLogSubject private constructor(
hasBeginSurveyContextThat().block()
}
+ /**
+ * Verifies that the [EventLog] under test has a context corresponding to
+ * [OPTIONAL_RESPONSE] (per [EventLog.Context.getActivityContextCase]).
+ */
+ fun hasOptionalSurveyResponseContext() {
+ assertThat(actual.context.activityContextCase).isEqualTo(OPTIONAL_RESPONSE)
+ }
+
+ /**
+ * Verifies the [EventLog]'s context per [hasOptionalSurveyResponseContext] and returns a
+ * [OptionalSurveyResponseContextSubject] to test the corresponding context.
+ */
+ fun hasOptionalSurveyResponseContextThat(): OptionalSurveyResponseContextSubject {
+ hasOptionalSurveyResponseContext()
+ return OptionalSurveyResponseContextSubject.assertThat(
+ actual.context.optionalResponse
+ )
+ }
+
+ /**
+ * Verifies the [EventLog]'s context and executes [block].
+ */
+ fun hasOptionalSurveyResponseContextThat(
+ block: OptionalSurveyResponseContextSubject.() -> Unit
+ ) {
+ hasOptionalSurveyResponseContextThat().block()
+ }
+
/**
* Truth subject for verifying properties of [AppLanguageSelection]s.
*
@@ -1754,6 +1783,54 @@ class EventLogSubject private constructor(
}
}
+ /**
+ * Truth subject for verifying properties of [EventLog.OptionalSurveyResponseContext]s.
+ *
+ * Note that this class is also a [LiteProtoSubject] so other aspects of the underlying
+ * [EventLog.OptionalSurveyResponseContext] proto can be verified through inherited methods.
+ *
+ * Call [OptionalSurveyResponseContextSubject.assertThat] to create the subject.
+ */
+ class OptionalSurveyResponseContextSubject private constructor(
+ metadata: FailureMetadata,
+ private val actual: EventLog.OptionalSurveyResponseContext
+ ) : LiteProtoSubject(metadata, actual) {
+ /**
+ * Returns a [SurveyResponseContextSubject] to test
+ * [EventLog.OptionalSurveyResponseContext.getSurveyDetails].
+ *
+ * This method never fails since the underlying property defaults to empty string if it's not
+ * defined in the context.
+ */
+ fun hasSurveyDetailsThat(): SurveyResponseContextSubject =
+ SurveyResponseContextSubject.assertThat(actual.surveyDetails)
+
+ /** Executes [block] in the context returned by [hasSurveyDetailsThat]. */
+ fun hasSurveyDetailsThat(block: SurveyResponseContextSubject.() -> Unit) {
+ hasSurveyDetailsThat().block()
+ }
+
+ /**
+ * Returns a [StringSubject] to test
+ * [EventLog.OptionalSurveyResponseContext.getFeedbackAnswer].
+ *
+ * This method never fails since the underlying property defaults to empty object if it's not
+ * defined in the context.
+ */
+ fun hasFeedbackAnswerThat(): StringSubject =
+ assertThat(actual.feedbackAnswer)
+
+ companion object {
+ /**
+ * Returns a new [OptionalSurveyResponseContextSubject] to verify aspects of the specified
+ * [EventLog.OptionalSurveyResponseContext] value.
+ */
+ fun assertThat(actual: EventLog.OptionalSurveyResponseContext):
+ OptionalSurveyResponseContextSubject =
+ assertAbout(::OptionalSurveyResponseContextSubject).that(actual)
+ }
+ }
+
/**
* Truth subject for verifying properties of [EventLog.MandatorySurveyResponseContext]s.
*
@@ -1768,7 +1845,7 @@ class EventLogSubject private constructor(
) : LiteProtoSubject(metadata, actual) {
/**
* Returns a [SurveyResponseContextSubject] to test
- * [EventLog.AbandonSurveyContext.getSurveyDetails].
+ * [EventLog.MandatorySurveyResponseContext.getSurveyDetails].
*
* This method never fails since the underlying property defaults to empty object if it's not
* defined in the context.
@@ -1802,8 +1879,8 @@ class EventLogSubject private constructor(
assertThat(actual.marketFitAnswer)
/**
- * Returns a [ComparableSubject] to test
- * [EventLog.MandatorySurveyResponseContext.getUserTypeAnswer].
+ * Returns a [IntegerSubject] to test
+ * [EventLog.MandatorySurveyResponseContext.getNpsScoreAnswer].
*
* This method never fails since the underlying property defaults to empty object if it's not
* defined in the context.
@@ -1813,8 +1890,8 @@ class EventLogSubject private constructor(
companion object {
/**
- * Returns a new [AbandonSurveyContextSubject] to verify aspects of the specified
- * [EventLog.AbandonSurveyContext] value.
+ * Returns a new [MandatorySurveyResponseContextSubject] to verify aspects of the specified
+ * [EventLog.MandatorySurveyResponseContext] value.
*/
fun assertThat(actual: EventLog.MandatorySurveyResponseContext):
MandatorySurveyResponseContextSubject =
diff --git a/testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt b/testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt
new file mode 100644
index 00000000000..3da520b2da4
--- /dev/null
+++ b/testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt
@@ -0,0 +1,122 @@
+package org.oppia.android.testing
+
+import android.app.Application
+import android.content.Context
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import dagger.BindsInstance
+import dagger.Component
+import dagger.Module
+import dagger.Provides
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.oppia.android.domain.auth.FirebaseUserWrapper
+import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
+import org.oppia.android.testing.FakeFirebaseAuthWrapperImpl.FakeAuthState
+import org.oppia.android.testing.robolectric.RobolectricModule
+import org.oppia.android.testing.threading.TestDispatcherModule
+import org.oppia.android.testing.time.FakeOppiaClockModule
+import org.oppia.android.util.data.DataProvidersInjector
+import org.oppia.android.util.data.DataProvidersInjectorProvider
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.LooperMode
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** Tests for [FakeFirebaseAuthWrapperImpl]. */
+// FunctionName: test names are conventionally named with underscores.
+@Suppress("FunctionName")
+@RunWith(AndroidJUnit4::class)
+@LooperMode(LooperMode.Mode.PAUSED)
+@Config(application = FakeFirebaseAuthWrapperImplTest.TestApplication::class)
+class FakeFirebaseAuthWrapperImplTest {
+ @Inject
+ lateinit var fakeFirebaseAuthWrapperImpl: FakeFirebaseAuthWrapperImpl
+
+ @Before
+ fun setUp() {
+ setUpTestApplicationComponent()
+ }
+
+ @Test
+ fun testFakeAuthWrapper_getCurrentSignedInUser_userIsSignedIn_returnsFirebaseUserWrapper() {
+ fakeFirebaseAuthWrapperImpl.simulateSignInSuccess()
+ val user = fakeFirebaseAuthWrapperImpl.currentUser
+
+ assertThat(user).isInstanceOf(FirebaseUserWrapper::class.java)
+ }
+
+ @Test
+ fun testFakeAuthWrapper_getCurrentSignedInUser_userIsNotSignedIn_returnsNull() {
+ fakeFirebaseAuthWrapperImpl.simulateSignInFailure()
+ val user = fakeFirebaseAuthWrapperImpl.currentUser
+
+ assertThat(user).isNull()
+ }
+
+ @Test
+ fun testFakeAuthWrapper_simulateSignInSuccess_returnsFakeAuthStateSuccess() {
+ fakeFirebaseAuthWrapperImpl.simulateSignInSuccess()
+
+ val authState = fakeFirebaseAuthWrapperImpl.getAuthState()
+ assertThat(authState).isInstanceOf(FakeAuthState.SUCCESS::class.java)
+ }
+
+ @Test
+ fun testFakeAuthWrapper_simulateSignInFailure_returnsFakeAuthStateFailure() {
+ fakeFirebaseAuthWrapperImpl.simulateSignInFailure()
+ val authState = fakeFirebaseAuthWrapperImpl.getAuthState()
+ assertThat(authState).isInstanceOf(FakeAuthState.FAILURE::class.java)
+ }
+
+ private fun setUpTestApplicationComponent() {
+ ApplicationProvider.getApplicationContext()
+ .inject(this)
+ }
+
+ @Module
+ class TestModule {
+ @Provides
+ @Singleton
+ fun provideContext(application: Application): Context {
+ return application
+ }
+ }
+
+ // TODO(#89): Move this to a common test application component.
+ @Singleton
+ @Component(
+ modules = [
+ TestModule::class, RobolectricModule::class, FakeOppiaClockModule::class,
+ ApplicationLifecycleModule::class, TestDispatcherModule::class,
+ TestAuthenticationModule::class, TestLogReportingModule::class,
+ ]
+ )
+ interface TestApplicationComponent : DataProvidersInjector {
+ @Component.Builder
+ interface Builder {
+ @BindsInstance
+ fun setApplication(application: Application): Builder
+
+ fun build(): TestApplicationComponent
+ }
+
+ fun inject(test: FakeFirebaseAuthWrapperImplTest)
+ }
+
+ class TestApplication : Application(), DataProvidersInjectorProvider {
+ private val component: TestApplicationComponent by lazy {
+ DaggerFakeFirebaseAuthWrapperImplTest_TestApplicationComponent.builder()
+ .setApplication(this)
+ .build()
+ }
+
+ fun inject(test: FakeFirebaseAuthWrapperImplTest) {
+ component.inject(test)
+ }
+
+ override fun getDataProvidersInjector(): DataProvidersInjector = component
+ }
+}
diff --git a/testing/src/test/java/org/oppia/android/testing/FakeFirestoreEventLoggerTest.kt b/testing/src/test/java/org/oppia/android/testing/FakeFirestoreEventLoggerTest.kt
new file mode 100644
index 00000000000..41ce667b82f
--- /dev/null
+++ b/testing/src/test/java/org/oppia/android/testing/FakeFirestoreEventLoggerTest.kt
@@ -0,0 +1,302 @@
+package org.oppia.android.testing
+
+import android.app.Application
+import android.content.Context
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import dagger.BindsInstance
+import dagger.Component
+import dagger.Module
+import dagger.Provides
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.oppia.android.app.model.EventLog
+import org.oppia.android.app.model.EventLog.Priority
+import org.oppia.android.domain.oppialogger.LogStorageModule
+import org.oppia.android.testing.robolectric.RobolectricModule
+import org.oppia.android.testing.threading.TestDispatcherModule
+import org.oppia.android.testing.time.FakeOppiaClockModule
+import org.oppia.android.util.logging.firebase.FirestoreEventLogger
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.LooperMode
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** Tests for [fakeEventLogger]. */
+// FunctionName: test names are conventionally named with underscores.
+@Suppress("FunctionName")
+@RunWith(AndroidJUnit4::class)
+@LooperMode(LooperMode.Mode.PAUSED)
+@Config(manifest = Config.NONE)
+class FakeFirestoreEventLoggerTest {
+
+ @Inject
+ lateinit var fakeEventLogger: FakeFirestoreEventLogger
+
+ @Inject
+ lateinit var eventLogger: FirestoreEventLogger
+
+ private val eventLog1 = EventLog.newBuilder().setPriority(Priority.ESSENTIAL).build()
+ private val eventLog2 = EventLog.newBuilder().setPriority(Priority.OPTIONAL).build()
+
+ @Before
+ fun setUp() {
+ setUpTestApplicationComponent()
+ }
+
+ @Test
+ fun testfakeEventLogger_logEvent_returnsEvent() {
+ eventLogger.uploadEvent(eventLog1)
+ val event = fakeEventLogger.getMostRecentEvent()
+
+ assertThat(event).isEqualTo(eventLog1)
+ assertThat(event.priority).isEqualTo(Priority.ESSENTIAL)
+ }
+
+ @Test
+ fun testfakeEventLogger_logEventTwice_returnsLatestEvent() {
+ eventLogger.uploadEvent(eventLog1)
+ eventLogger.uploadEvent(eventLog2)
+ val event = fakeEventLogger.getMostRecentEvent()
+
+ assertThat(event).isEqualTo(eventLog2)
+ assertThat(event.priority).isEqualTo(Priority.OPTIONAL)
+ }
+
+ @Test
+ fun testfakeEventLogger_logEvent_clearAllEvents_logEventAgain_returnsLatestEvent() {
+ eventLogger.uploadEvent(eventLog1)
+ fakeEventLogger.clearAllEvents()
+ eventLogger.uploadEvent(eventLog2)
+ val event = fakeEventLogger.getMostRecentEvent()
+
+ assertThat(event).isEqualTo(eventLog2)
+ assertThat(event.priority).isEqualTo(Priority.OPTIONAL)
+ }
+
+ @Test
+ fun testfakeEventLogger_logNothing_getMostRecent_returnsFailure() {
+ assertThrows(NoSuchElementException::class) { fakeEventLogger.getMostRecentEvent() }
+ }
+
+ @Test
+ fun testfakeEventLogger_logEvent_clearAllEvents_getMostRecent_returnsFailure() {
+ eventLogger.uploadEvent(eventLog1)
+ fakeEventLogger.clearAllEvents()
+
+ val eventException = assertThrows(NoSuchElementException::class) {
+ fakeEventLogger.getMostRecentEvent()
+ }
+
+ assertThat(eventException).isInstanceOf(NoSuchElementException::class.java)
+ }
+
+ @Test
+ fun testfakeEventLogger_clearAllEvents_returnsEmptyList() {
+ fakeEventLogger.clearAllEvents()
+ val isListEmpty = fakeEventLogger.noEventsPresent()
+
+ assertThat(isListEmpty).isTrue()
+ }
+
+ @Test
+ fun testfakeEventLogger_logEvent_clearAllEvents_returnsEmptyList() {
+ eventLogger.uploadEvent(eventLog1)
+ fakeEventLogger.clearAllEvents()
+ val isListEmpty = fakeEventLogger.noEventsPresent()
+
+ assertThat(isListEmpty).isTrue()
+ }
+
+ @Test
+ fun testfakeEventLogger_logMultipleEvents_clearAllEvents_returnsEmptyList() {
+ eventLogger.uploadEvent(eventLog1)
+ eventLogger.uploadEvent(eventLog2)
+ fakeEventLogger.clearAllEvents()
+ val isListEmpty = fakeEventLogger.noEventsPresent()
+
+ assertThat(isListEmpty).isTrue()
+ }
+
+ @Test
+ fun testfakeEventLogger_logEvent_returnsNonEmptyList() {
+ eventLogger.uploadEvent(eventLog1)
+ val isListEmpty = fakeEventLogger.noEventsPresent()
+
+ assertThat(isListEmpty).isFalse()
+ }
+
+ @Test
+ fun testfakeEventLogger_logMultipleEvents_returnsNonEmptyList() {
+ eventLogger.uploadEvent(eventLog1)
+ eventLogger.uploadEvent(eventLog2)
+
+ val eventLogStatus1 = fakeEventLogger.hasEventLogged { it == eventLog1 }
+ val eventLogStatus2 = fakeEventLogger.hasEventLogged { it == eventLog2 }
+ val eventListStatus = fakeEventLogger.noEventsPresent()
+
+ assertThat(eventListStatus).isFalse()
+ assertThat(eventLogStatus1).isTrue()
+ assertThat(eventLogStatus2).isTrue()
+ }
+
+ @Test
+ fun testGetOldestEvent_noEventsLogged_throwsException() {
+ assertThrows(NoSuchElementException::class) { fakeEventLogger.getOldestEvent() }
+ }
+
+ @Test
+ fun testGetOldestEvent_oneEventLogged_returnsLoggedEvent() {
+ eventLogger.uploadEvent(eventLog1)
+
+ val oldestEvent = fakeEventLogger.getOldestEvent()
+
+ assertThat(oldestEvent).isEqualTo(eventLog1)
+ }
+
+ @Test
+ fun testGetOldestEvent_twoEventsLogged_returnsFirstEventLogged() {
+ eventLogger.uploadEvent(eventLog2)
+ eventLogger.uploadEvent(eventLog1)
+
+ val oldestEvent = fakeEventLogger.getOldestEvent()
+
+ assertThat(oldestEvent).isEqualTo(eventLog2)
+ }
+
+ @Test
+ fun testGetOldestEvent_twoEventsLogged_clearEvents_throwsException() {
+ eventLogger.uploadEvent(eventLog2)
+ eventLogger.uploadEvent(eventLog1)
+ fakeEventLogger.clearAllEvents()
+
+ assertThrows(NoSuchElementException::class) { fakeEventLogger.getOldestEvent() }
+ }
+
+ @Test
+ fun testGetOldestEvent_eventLogged_cleared_newEventLogged_returnsLatestEventLog() {
+ eventLogger.uploadEvent(eventLog2)
+ fakeEventLogger.clearAllEvents()
+ eventLogger.uploadEvent(eventLog1)
+
+ val oldestEvent = fakeEventLogger.getOldestEvent()
+
+ assertThat(oldestEvent).isEqualTo(eventLog1)
+ }
+
+ @Test
+ fun testGetMostRecentEvents_twoEvents_noEventsLogged_returnsEmptyList() {
+ val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 2)
+
+ assertThat(mostRecentEvents).isEmpty()
+ }
+
+ @Test
+ fun testGetMostRecentEvents_twoEvents_oneEventLogged_returnsOneItemList() {
+ eventLogger.uploadEvent(eventLog1)
+
+ val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 2)
+
+ assertThat(mostRecentEvents).containsExactly(eventLog1)
+ }
+
+ @Test
+ fun testGetMostRecentEvents_twoEvents_twoEventsLogged_returnsEventsInOrder() {
+ eventLogger.uploadEvent(eventLog2)
+ eventLogger.uploadEvent(eventLog1)
+
+ val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 2)
+
+ assertThat(mostRecentEvents).containsExactly(eventLog2, eventLog1).inOrder()
+ }
+
+ @Test
+ fun testGetMostRecentEvents_oneEvent_twoEventsLogged_returnsSingleLatestEvent() {
+ eventLogger.uploadEvent(eventLog2)
+ eventLogger.uploadEvent(eventLog1)
+
+ val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 1)
+
+ assertThat(mostRecentEvents).containsExactly(eventLog1)
+ }
+
+ @Test
+ fun testGetMostRecentEvents_zeroEvents_twoEventsLogged_returnsEmptyList() {
+ eventLogger.uploadEvent(eventLog2)
+ eventLogger.uploadEvent(eventLog1)
+
+ val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 0)
+
+ assertThat(mostRecentEvents).isEmpty()
+ }
+
+ @Test
+ fun testGetMostRecentEvents_negativeEvents_twoEventsLogged_throwsException() {
+ eventLogger.uploadEvent(eventLog2)
+ eventLogger.uploadEvent(eventLog1)
+
+ assertThrows(IllegalArgumentException::class) {
+ fakeEventLogger.getMostRecentEvents(count = -1)
+ }
+ }
+
+ @Test
+ fun testGetMostRecentEvents_twoEventsLogged_eventsCleared_returnsEmptyList() {
+ eventLogger.uploadEvent(eventLog2)
+ eventLogger.uploadEvent(eventLog1)
+ fakeEventLogger.clearAllEvents()
+
+ val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 2)
+
+ assertThat(mostRecentEvents).isEmpty()
+ }
+
+ @Test
+ fun testGetMostRecentEvents_eventLogged_cleared_newEventLogged_returnsNewestEvent() {
+ eventLogger.uploadEvent(eventLog1)
+ fakeEventLogger.clearAllEvents()
+ eventLogger.uploadEvent(eventLog2)
+
+ val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 2)
+
+ assertThat(mostRecentEvents).containsExactly(eventLog2)
+ }
+
+ private fun setUpTestApplicationComponent() {
+ DaggerFakeFirestoreEventLoggerTest_TestApplicationComponent.builder()
+ .setApplication(ApplicationProvider.getApplicationContext())
+ .build()
+ .inject(this)
+ }
+
+ // TODO(#89): Move this to a common test application component.
+ @Module
+ class TestModule {
+ @Provides
+ @Singleton
+ fun provideContext(application: Application): Context {
+ return application
+ }
+ }
+
+ // TODO(#89): Move this to a common test application component.
+ @Singleton
+ @Component(
+ modules = [
+ TestModule::class, TestLogReportingModule::class, RobolectricModule::class,
+ TestDispatcherModule::class, LogStorageModule::class, FakeOppiaClockModule::class
+ ]
+ )
+ interface TestApplicationComponent {
+ @Component.Builder
+ interface Builder {
+ @BindsInstance
+ fun setApplication(application: Application): Builder
+ fun build(): TestApplicationComponent
+ }
+
+ fun inject(fakeEventLoggerTest: FakeFirestoreEventLoggerTest)
+ }
+}
diff --git a/testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt b/testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt
new file mode 100644
index 00000000000..e9a9a5f9b23
--- /dev/null
+++ b/testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt
@@ -0,0 +1,81 @@
+package org.oppia.android.testing
+
+import android.app.Application
+import android.content.Context
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import dagger.BindsInstance
+import dagger.Component
+import dagger.Module
+import dagger.Provides
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.oppia.android.domain.auth.FirebaseAuthWrapper
+import org.oppia.android.testing.robolectric.RobolectricModule
+import org.oppia.android.testing.threading.TestDispatcherModule
+import org.oppia.android.util.data.DataProvidersInjector
+import org.oppia.android.util.logging.firebase.DebugLogReportingModule
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.LooperMode
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** Tests for [TestAuthenticationModule]. */
+// FunctionName: test names are conventionally named with underscores.
+@Suppress("FunctionName")
+@RunWith(AndroidJUnit4::class)
+@LooperMode(LooperMode.Mode.PAUSED)
+@Config(manifest = Config.NONE)
+class TestAuthenticationModuleTest {
+
+ @Inject
+ lateinit var firebaseAuthWrapper: FirebaseAuthWrapper
+
+ @Before
+ fun setUp() {
+ setUpTestApplicationComponent()
+ }
+
+ @Test
+ fun testModule_injectsFakeInstanceOfFirebaseAuthWrapper() {
+ assertThat(firebaseAuthWrapper).isInstanceOf(FakeFirebaseAuthWrapperImpl::class.java)
+ }
+
+ private fun setUpTestApplicationComponent() {
+ DaggerTestAuthenticationModuleTest_TestApplicationComponent.builder()
+ .setApplication(ApplicationProvider.getApplicationContext())
+ .build()
+ .inject(this)
+ }
+
+ @Module
+ class TestModule {
+ @Provides
+ @Singleton
+ fun provideContext(application: Application): Context {
+ return application
+ }
+ }
+
+ // TODO(#89): Move this to a common test application component.
+ @Singleton
+ @Component(
+ modules = [
+ TestModule::class, TestDispatcherModule::class, RobolectricModule::class,
+ DebugLogReportingModule::class, TestAuthenticationModule::class
+ ]
+ )
+ interface TestApplicationComponent : DataProvidersInjector {
+ @Component.Builder
+ interface Builder {
+ @BindsInstance
+ fun setApplication(application: Application): Builder
+
+ fun build(): TestApplicationComponent
+ }
+
+ fun inject(test: TestAuthenticationModuleTest)
+ }
+}
diff --git a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleCustomContextTest.kt b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleCustomContextTest.kt
index 0939de4682b..71f53946331 100644
--- a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleCustomContextTest.kt
+++ b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleCustomContextTest.kt
@@ -60,6 +60,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
@@ -271,7 +272,8 @@ class InitializeDefaultLocaleRuleCustomContextTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleOmissionTest.kt b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleOmissionTest.kt
index f2f2b2c89f0..385742c3a2c 100644
--- a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleOmissionTest.kt
+++ b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleOmissionTest.kt
@@ -57,6 +57,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
import org.oppia.android.testing.robolectric.RobolectricModule
@@ -147,7 +148,8 @@ class InitializeDefaultLocaleRuleOmissionTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleTest.kt b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleTest.kt
index 89e80d0c6ef..896afc9b13e 100644
--- a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleTest.kt
+++ b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleTest.kt
@@ -61,6 +61,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
@@ -151,7 +152,8 @@ class InitializeDefaultLocaleRuleTest {
LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
EventLoggingConfigurationModule::class, ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
diff --git a/third_party/maven_install.json b/third_party/maven_install.json
index 6ac87f7eab6..24221d97d55 100644
--- a/third_party/maven_install.json
+++ b/third_party/maven_install.json
@@ -1,14 +1,16 @@
{
"dependency_tree": {
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
- "__INPUT_ARTIFACTS_HASH": 521507787,
- "__RESOLVED_ARTIFACTS_HASH": -1467267841,
+ "__INPUT_ARTIFACTS_HASH": -1629412368,
+ "__RESOLVED_ARTIFACTS_HASH": 1784154617,
"conflict_resolution": {
"androidx.constraintlayout:constraintlayout:1.1.3": "androidx.constraintlayout:constraintlayout:2.0.1",
"androidx.core:core:1.0.1": "androidx.core:core:1.3.1",
"androidx.recyclerview:recyclerview:1.0.0": "androidx.recyclerview:recyclerview:1.1.0",
"androidx.test:core:1.0.0": "androidx.test:core:1.4.0",
+ "com.google.firebase:firebase-common:19.3.0": "com.google.firebase:firebase-common:20.1.1",
"com.google.guava:guava:28.1-android": "com.google.guava:guava:30.1.1-android",
+ "com.google.protobuf:protobuf-javalite:3.17.3": "com.google.protobuf:protobuf-javalite:3.19.2",
"com.google.truth:truth:0.43": "com.google.truth:truth:1.1.3",
"junit:junit:4.12": "junit:junit:4.13.2",
"org.jetbrains.kotlin:kotlin-reflect:1.3.41": "org.jetbrains.kotlin:kotlin-reflect:1.5.0",
@@ -989,10 +991,10 @@
"commons-io:commons-io:2.4",
"com.google.guava:guava:30.1.1-android",
"com.googlecode.juniversalchardet:juniversalchardet:1.0.3",
- "com.google.code.gson:gson:2.8.6",
"org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10",
"com.squareup:javapoet:1.11.1",
- "org.jetbrains.kotlin:kotlin-stdlib:1.5.0"
+ "org.jetbrains.kotlin:kotlin-stdlib:1.5.0",
+ "com.google.code.gson:gson:2.8.9"
],
"directDependencies": [
"com.android.tools.build.jetifier:jetifier-core:1.0.0-beta04",
@@ -1003,9 +1005,9 @@
"commons-io:commons-io:2.4",
"com.google.guava:guava:30.1.1-android",
"com.googlecode.juniversalchardet:juniversalchardet:1.0.3",
- "com.google.code.gson:gson:2.8.6",
"org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10",
- "com.squareup:javapoet:1.11.1"
+ "com.squareup:javapoet:1.11.1",
+ "com.google.code.gson:gson:2.8.9"
],
"file": "v1/https/maven.google.com/androidx/databinding/databinding-compiler-common/3.4.2/databinding-compiler-common-3.4.2.jar",
"mirror_urls": [
@@ -1028,7 +1030,7 @@
"com.android.databinding:baseLibrary:jar:sources:3.4.2",
"org.antlr:antlr4:jar:sources:4.5.3",
"org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10",
- "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
"androidx.databinding:databinding-common:jar:sources:3.4.2",
"com.squareup:javapoet:jar:sources:1.11.1",
"commons-io:commons-io:jar:sources:2.4",
@@ -1041,7 +1043,7 @@
"com.android.databinding:baseLibrary:jar:sources:3.4.2",
"org.antlr:antlr4:jar:sources:4.5.3",
"org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10",
- "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
"androidx.databinding:databinding-common:jar:sources:3.4.2",
"com.squareup:javapoet:jar:sources:1.11.1",
"commons-io:commons-io:jar:sources:2.4",
@@ -1069,12 +1071,12 @@
"commons-io:commons-io:2.4",
"com.google.guava:guava:30.1.1-android",
"com.googlecode.juniversalchardet:juniversalchardet:1.0.3",
- "com.google.code.gson:gson:2.8.6",
"androidx.databinding:databinding-compiler-common:3.4.2",
"org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10",
"com.squareup:javapoet:1.11.1",
"commons-codec:commons-codec:1.10",
- "org.jetbrains.kotlin:kotlin-stdlib:1.5.0"
+ "org.jetbrains.kotlin:kotlin-stdlib:1.5.0",
+ "com.google.code.gson:gson:2.8.9"
],
"directDependencies": [
"androidx.databinding:databinding-common:3.4.2",
@@ -1108,7 +1110,7 @@
"androidx.databinding:databinding-compiler-common:jar:sources:3.4.2",
"org.antlr:antlr4:jar:sources:4.5.3",
"org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10",
- "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
"androidx.databinding:databinding-common:jar:sources:3.4.2",
"com.squareup:javapoet:jar:sources:1.11.1",
"commons-io:commons-io:jar:sources:2.4",
@@ -4239,10 +4241,10 @@
"coord": "com.android.tools.build.jetifier:jetifier-core:1.0.0-beta04",
"dependencies": [
"org.jetbrains.kotlin:kotlin-stdlib:1.5.0",
- "com.google.code.gson:gson:2.8.6"
+ "com.google.code.gson:gson:2.8.9"
],
"directDependencies": [
- "com.google.code.gson:gson:2.8.6",
+ "com.google.code.gson:gson:2.8.9",
"org.jetbrains.kotlin:kotlin-stdlib:1.5.0"
],
"file": "v1/https/maven.google.com/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04/jetifier-core-1.0.0-beta04.jar",
@@ -4259,11 +4261,11 @@
{
"coord": "com.android.tools.build.jetifier:jetifier-core:jar:sources:1.0.0-beta04",
"dependencies": [
- "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
"org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0"
],
"directDependencies": [
- "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
"org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0"
],
"file": "v1/https/maven.google.com/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04/jetifier-core-1.0.0-beta04-sources.jar",
@@ -4670,7 +4672,6 @@
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"com.github.bumptech.glide:annotations:4.11.0",
"androidx.interpolator:interpolator:aar:1.0.0",
- "org.codehaus.mojo:animal-sniffer-annotations:1.18",
"androidx.annotation:annotation:1.1.0",
"com.github.bumptech.glide:disklrucache:4.11.0",
"com.google.j2objc:j2objc-annotations:1.3",
@@ -4680,12 +4681,13 @@
"androidx.legacy:legacy-support-core-utils:aar:1.0.0",
"com.google.guava:guava:30.1.1-android",
"androidx.slidingpanelayout:slidingpanelayout:aar:1.0.0",
- "com.google.errorprone:error_prone_annotations:2.7.1",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.19",
"androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.vectordrawable:vectordrawable:aar:1.1.0",
"androidx.cursoradapter:cursoradapter:aar:1.0.0",
"androidx.drawerlayout:drawerlayout:aar:1.1.0",
"androidx.core:core:aar:1.3.1",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
"com.github.bumptech.glide:gifdecoder:4.11.0",
"androidx.coordinatorlayout:coordinatorlayout:aar:1.1.0",
"androidx.print:print:aar:1.0.0",
@@ -4724,7 +4726,6 @@
"dependencies": [
"androidx.documentfile:documentfile:aar:sources:1.0.0",
"com.google.guava:guava:jar:sources:30.1.1-android",
- "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"androidx.print:print:aar:sources:1.0.0",
"androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0",
@@ -4754,8 +4755,9 @@
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
"androidx.customview:customview:aar:sources:1.1.0",
"com.google.guava:failureaccess:jar:sources:1.0.1",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
"androidx.loader:loader:aar:sources:1.0.0",
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19",
"androidx.vectordrawable:vectordrawable:aar:sources:1.1.0"
],
"directDependencies": [
@@ -4917,13 +4919,13 @@
{
"coord": "com.google.android.gms:play-services-ads-identifier:aar:17.0.0",
"dependencies": [
- "com.google.android.gms:play-services-basement:aar:17.0.0",
"androidx.collection:collection:jar:1.1.0",
"androidx.core:core:aar:1.3.1",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.fragment:fragment:aar:1.2.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-basement:aar:17.0.0"
+ "com.google.android.gms:play-services-basement:aar:18.0.0"
],
"file": "v1/https/maven.google.com/com/google/android/gms/play-services-ads-identifier/17.0.0/play-services-ads-identifier-17.0.0.aar",
"mirror_urls": [
@@ -4937,34 +4939,34 @@
"url": "https://maven.google.com/com/google/android/gms/play-services-ads-identifier/17.0.0/play-services-ads-identifier-17.0.0.aar"
},
{
- "coord": "com.google.android.gms:play-services-base:aar:17.0.0",
+ "coord": "com.google.android.gms:play-services-base:aar:18.0.1",
"dependencies": [
"androidx.collection:collection:jar:1.1.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
- "com.google.android.gms:play-services-basement:aar:17.0.0"
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
],
"directDependencies": [
"androidx.collection:collection:jar:1.1.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
- "com.google.android.gms:play-services-basement:aar:17.0.0"
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
],
- "file": "v1/https/maven.google.com/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar",
+ "file": "v1/https/maven.google.com/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar",
"mirror_urls": [
- "https://maven.google.com/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar",
- "https://repo1.maven.org/maven2/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar",
- "https://maven.fabric.io/public/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar",
- "https://maven.google.com/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar",
- "https://repo1.maven.org/maven2/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar"
+ "https://maven.google.com/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar",
+ "https://repo1.maven.org/maven2/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar",
+ "https://maven.fabric.io/public/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar",
+ "https://maven.google.com/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar",
+ "https://repo1.maven.org/maven2/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar"
],
- "sha256": "dd0980edf729e0d346e2b58e70801dc237c1aed0c7ab274fa3f1c8c8efc64cc7",
- "url": "https://maven.google.com/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar"
+ "sha256": "2896d76f432be52167295bb9ce45ade25c310aeffc04d28cf8db6a15868e83de",
+ "url": "https://maven.google.com/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar"
},
{
- "coord": "com.google.android.gms:play-services-basement:aar:17.0.0",
+ "coord": "com.google.android.gms:play-services-basement:aar:18.0.0",
"dependencies": [
"androidx.collection:collection:jar:1.1.0",
"androidx.core:core:aar:1.3.1",
@@ -4975,57 +4977,56 @@
"androidx.core:core:aar:1.3.1",
"androidx.fragment:fragment:aar:1.2.0"
],
- "file": "v1/https/maven.google.com/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar",
+ "file": "v1/https/maven.google.com/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar",
"mirror_urls": [
- "https://maven.google.com/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar",
- "https://repo1.maven.org/maven2/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar",
- "https://maven.fabric.io/public/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar",
- "https://maven.google.com/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar",
- "https://repo1.maven.org/maven2/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar"
+ "https://maven.google.com/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar",
+ "https://maven.fabric.io/public/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar",
+ "https://maven.google.com/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar"
],
- "sha256": "d324a1785bbc48bfe3639fc847cfd3cf43d49e967b5caf2794240a854557a39c",
- "url": "https://maven.google.com/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar"
+ "sha256": "55c1777467901a2d399f3252384c4976284aa35fddfd5995466dbeacb49f9dd6",
+ "url": "https://maven.google.com/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar"
},
{
"coord": "com.google.android.gms:play-services-measurement-api:aar:17.5.0",
"dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
"com.google.firebase:firebase-measurement-connector:aar:18.0.0",
"com.google.firebase:firebase-installations:aar:16.3.2",
"androidx.collection:collection:jar:1.1.0",
"com.google.android.gms:play-services-stats:aar:17.0.0",
"androidx.annotation:annotation:1.1.0",
- "com.google.firebase:firebase-common:aar:19.3.0",
"androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0",
"androidx.legacy:legacy-support-core-utils:aar:1.0.0",
"com.google.android.gms:play-services-measurement-sdk-api:aar:17.5.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
- "com.google.firebase:firebase-components:aar:16.0.0",
"com.google.android.gms:play-services-measurement-impl:aar:17.5.0",
"androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
"com.google.android.gms:play-services-ads-identifier:aar:17.0.0",
"androidx.print:print:aar:1.0.0",
- "androidx.annotation:annotation:jar:1.1.0",
"androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0",
"androidx.documentfile:documentfile:aar:1.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
"com.google.auto.value:auto-value-annotations:jar:1.8.1",
"com.google.firebase:firebase-installations-interop:aar:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
"com.google.android.gms:play-services-measurement-base:aar:17.5.0",
"androidx.loader:loader:aar:1.0.0"
],
"directDependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
"com.google.firebase:firebase-measurement-connector:aar:18.0.0",
"com.google.firebase:firebase-installations:aar:16.3.2",
- "com.google.firebase:firebase-common:aar:19.3.0",
"com.google.android.gms:play-services-measurement-sdk-api:aar:17.5.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
- "com.google.firebase:firebase-components:aar:16.0.0",
"com.google.android.gms:play-services-measurement-impl:aar:17.5.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"com.google.android.gms:play-services-ads-identifier:aar:17.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
"com.google.firebase:firebase-installations-interop:aar:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
"com.google.android.gms:play-services-measurement-base:aar:17.5.0"
],
"file": "v1/https/maven.google.com/com/google/android/gms/play-services-measurement-api/17.5.0/play-services-measurement-api-17.5.0.aar",
@@ -5042,13 +5043,13 @@
{
"coord": "com.google.android.gms:play-services-measurement-base:aar:17.5.0",
"dependencies": [
- "com.google.android.gms:play-services-basement:aar:17.0.0",
"androidx.collection:collection:jar:1.1.0",
"androidx.core:core:aar:1.3.1",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.fragment:fragment:aar:1.2.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-basement:aar:17.0.0"
+ "com.google.android.gms:play-services-basement:aar:18.0.0"
],
"file": "v1/https/maven.google.com/com/google/android/gms/play-services-measurement-base/17.5.0/play-services-measurement-base-17.5.0.aar",
"mirror_urls": [
@@ -5071,21 +5072,21 @@
"androidx.legacy:legacy-support-core-utils:aar:1.0.0",
"androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
"com.google.android.gms:play-services-ads-identifier:aar:17.0.0",
"androidx.print:print:aar:1.0.0",
"androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0",
"androidx.documentfile:documentfile:aar:1.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
"com.google.android.gms:play-services-measurement-base:aar:17.5.0",
"androidx.loader:loader:aar:1.0.0"
],
"directDependencies": [
"androidx.collection:collection:jar:1.1.0",
"com.google.android.gms:play-services-stats:aar:17.0.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
"com.google.android.gms:play-services-ads-identifier:aar:17.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
"com.google.android.gms:play-services-measurement-base:aar:17.5.0"
],
"file": "v1/https/maven.google.com/com/google/android/gms/play-services-measurement-impl/17.5.0/play-services-measurement-impl-17.5.0.aar",
@@ -5104,12 +5105,12 @@
"dependencies": [
"androidx.collection:collection:jar:1.1.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
"com.google.android.gms:play-services-measurement-base:aar:17.5.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-basement:aar:17.0.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"com.google.android.gms:play-services-measurement-base:aar:17.5.0"
],
"file": "v1/https/maven.google.com/com/google/android/gms/play-services-measurement-sdk-api/17.5.0/play-services-measurement-sdk-api-17.5.0.aar",
@@ -5134,18 +5135,18 @@
"com.google.android.gms:play-services-measurement-impl:aar:17.5.0",
"androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
"com.google.android.gms:play-services-ads-identifier:aar:17.0.0",
"androidx.print:print:aar:1.0.0",
"androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0",
"androidx.documentfile:documentfile:aar:1.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
"com.google.android.gms:play-services-measurement-base:aar:17.5.0",
"androidx.loader:loader:aar:1.0.0"
],
"directDependencies": [
"androidx.collection:collection:jar:1.1.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"com.google.android.gms:play-services-measurement-base:aar:17.5.0",
"com.google.android.gms:play-services-measurement-impl:aar:17.5.0"
],
@@ -5171,12 +5172,12 @@
"com.google.android.gms:play-services-measurement-impl:aar:17.5.0",
"androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
"com.google.android.gms:play-services-ads-identifier:aar:17.0.0",
"androidx.print:print:aar:1.0.0",
"androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0",
"androidx.documentfile:documentfile:aar:1.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
"com.google.android.gms:play-services-measurement-base:aar:17.5.0",
"androidx.loader:loader:aar:1.0.0"
],
@@ -5185,8 +5186,8 @@
"com.google.android.gms:play-services-stats:aar:17.0.0",
"androidx.legacy:legacy-support-core-utils:aar:1.0.0",
"com.google.android.gms:play-services-measurement-impl:aar:17.5.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"com.google.android.gms:play-services-ads-identifier:aar:17.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
"com.google.android.gms:play-services-measurement-base:aar:17.5.0"
],
"file": "v1/https/maven.google.com/com/google/android/gms/play-services-measurement/17.5.0/play-services-measurement-17.5.0.aar",
@@ -5209,16 +5210,16 @@
"androidx.legacy:legacy-support-core-utils:aar:1.0.0",
"androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
"androidx.print:print:aar:1.0.0",
"androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0",
"androidx.documentfile:documentfile:aar:1.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
"androidx.loader:loader:aar:1.0.0"
],
"directDependencies": [
"androidx.legacy:legacy-support-core-utils:aar:1.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0"
+ "com.google.android.gms:play-services-basement:aar:18.0.0"
],
"file": "v1/https/maven.google.com/com/google/android/gms/play-services-stats/17.0.0/play-services-stats-17.0.0.aar",
"mirror_urls": [
@@ -5232,26 +5233,26 @@
"url": "https://maven.google.com/com/google/android/gms/play-services-stats/17.0.0/play-services-stats-17.0.0.aar"
},
{
- "coord": "com.google.android.gms:play-services-tasks:aar:17.0.0",
+ "coord": "com.google.android.gms:play-services-tasks:aar:18.0.1",
"dependencies": [
- "com.google.android.gms:play-services-basement:aar:17.0.0",
"androidx.collection:collection:jar:1.1.0",
"androidx.core:core:aar:1.3.1",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.fragment:fragment:aar:1.2.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-basement:aar:17.0.0"
+ "com.google.android.gms:play-services-basement:aar:18.0.0"
],
- "file": "v1/https/maven.google.com/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar",
+ "file": "v1/https/maven.google.com/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar",
"mirror_urls": [
- "https://maven.google.com/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar",
- "https://repo1.maven.org/maven2/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar",
- "https://maven.fabric.io/public/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar",
- "https://maven.google.com/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar",
- "https://repo1.maven.org/maven2/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar"
+ "https://maven.google.com/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar",
+ "https://repo1.maven.org/maven2/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar",
+ "https://maven.fabric.io/public/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar",
+ "https://maven.google.com/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar",
+ "https://repo1.maven.org/maven2/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar"
],
- "sha256": "2e6d1738b73647f3fe7a038b9780b97717b3746eae258009197e36e7bf3112a5",
- "url": "https://maven.google.com/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar"
+ "sha256": "f106db48c6ccfa8e1315a7adc44aecd02ff7355eb3fa7dcdcba8c283a8eb1681",
+ "url": "https://maven.google.com/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar"
},
{
"coord": "com.google.android.gms:strict-version-matcher-plugin:1.2.1",
@@ -5420,6 +5421,36 @@
"sha256": "1d9fe3a4512512a311889be798e4a0f9cf9fbccddea50a7ca330b1b99ee92993",
"url": "https://maven.google.com/com/google/android/material/material/1.3.0/material-1.3.0-sources.jar"
},
+ {
+ "coord": "com.google.android:annotations:4.1.1.4",
+ "dependencies": [],
+ "directDependencies": [],
+ "file": "v1/https/repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar",
+ "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar",
+ "https://maven.fabric.io/public/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar",
+ "https://maven.google.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar",
+ "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar"
+ ],
+ "sha256": "ba734e1e84c09d615af6a09d33034b4f0442f8772dec120efb376d86a565ae15",
+ "url": "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar"
+ },
+ {
+ "coord": "com.google.android:annotations:jar:sources:4.1.1.4",
+ "dependencies": [],
+ "directDependencies": [],
+ "file": "v1/https/repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar",
+ "https://maven.fabric.io/public/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar",
+ "https://maven.google.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar"
+ ],
+ "sha256": "e9b667aa958df78ea1ad115f7bbac18a5869c3128b1d5043feb360b0cfce9d40",
+ "url": "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar"
+ },
{
"coord": "com.google.auto.service:auto-service-annotations:1.0-rc7",
"dependencies": [],
@@ -5511,34 +5542,34 @@
"url": "https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar"
},
{
- "coord": "com.google.code.gson:gson:2.8.6",
+ "coord": "com.google.code.gson:gson:2.8.9",
"dependencies": [],
"directDependencies": [],
- "file": "v1/https/repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar",
+ "file": "v1/https/repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar",
"mirror_urls": [
- "https://maven.google.com/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar",
- "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar",
- "https://maven.fabric.io/public/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar",
- "https://maven.google.com/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar",
- "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar"
+ "https://maven.google.com/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar",
+ "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar",
+ "https://maven.fabric.io/public/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar",
+ "https://maven.google.com/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar",
+ "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar"
],
- "sha256": "c8fb4839054d280b3033f800d1f5a97de2f028eb8ba2eb458ad287e536f3f25f",
- "url": "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar"
+ "sha256": "d3999291855de495c94c743761b8ab5176cfeabe281a5ab0d8e8d45326fd703e",
+ "url": "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar"
},
{
- "coord": "com.google.code.gson:gson:jar:sources:2.8.6",
+ "coord": "com.google.code.gson:gson:jar:sources:2.8.9",
"dependencies": [],
"directDependencies": [],
- "file": "v1/https/repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar",
+ "file": "v1/https/repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar",
"mirror_urls": [
- "https://maven.google.com/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar",
- "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar",
- "https://maven.fabric.io/public/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar",
- "https://maven.google.com/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar",
- "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar"
+ "https://maven.google.com/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar",
+ "https://maven.fabric.io/public/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar",
+ "https://maven.google.com/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar"
],
- "sha256": "da4d787939dc8de214724a20d88614b70ef8c3a4931d9c694300b5d9098ed9bc",
- "url": "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar"
+ "sha256": "ba5bddb1a89eb721fcca39f3b34294532060f851e2407a82d82134a41eec4719",
+ "url": "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar"
},
{
"coord": "com.google.dagger:dagger-compiler:2.28.1",
@@ -5789,34 +5820,34 @@
"url": "https://repo1.maven.org/maven2/com/google/dagger/dagger/2.28.1/dagger-2.28.1-sources.jar"
},
{
- "coord": "com.google.errorprone:error_prone_annotations:2.7.1",
+ "coord": "com.google.errorprone:error_prone_annotations:2.9.0",
"dependencies": [],
"directDependencies": [],
- "file": "v1/https/repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar",
+ "file": "v1/https/repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar",
"mirror_urls": [
- "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar",
- "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar",
- "https://maven.fabric.io/public/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar",
- "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar",
- "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar"
+ "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar",
+ "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar",
+ "https://maven.fabric.io/public/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar",
+ "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar",
+ "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar"
],
- "sha256": "cd5257c08a246cf8628817ae71cb822be192ef91f6881ca4a3fcff4f1de1cff3",
- "url": "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar"
+ "sha256": "f947bdc33ae27a6b4aa44799e6c21e1944797bd0010ba43eb82d11446e163694",
+ "url": "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar"
},
{
- "coord": "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1",
+ "coord": "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
"dependencies": [],
"directDependencies": [],
- "file": "v1/https/repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar",
+ "file": "v1/https/repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar",
"mirror_urls": [
- "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar",
- "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar",
- "https://maven.fabric.io/public/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar",
- "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar",
- "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar"
+ "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar",
+ "https://maven.fabric.io/public/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar",
+ "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar"
],
- "sha256": "e38921f918b8ad8eabd12bc61de426fa96c72de077054e9147d2f9fe7c648923",
- "url": "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar"
+ "sha256": "0e41e099f0d4c9be030c34a6991821e67a57e2846dba908f4e9bc9ec60732837",
+ "url": "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar"
},
{
"coord": "com.google.errorprone:javac-shaded:9-dev-r4023-3",
@@ -5851,32 +5882,31 @@
{
"coord": "com.google.firebase:firebase-analytics:17.5.0",
"dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
"com.google.firebase:firebase-measurement-connector:aar:18.0.0",
"com.google.firebase:firebase-installations:aar:16.3.2",
"androidx.collection:collection:jar:1.1.0",
"com.google.android.gms:play-services-stats:aar:17.0.0",
"androidx.annotation:annotation:1.1.0",
- "com.google.firebase:firebase-common:aar:19.3.0",
"androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0",
"androidx.legacy:legacy-support-core-utils:aar:1.0.0",
"com.google.android.gms:play-services-measurement-sdk-api:aar:17.5.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
- "com.google.firebase:firebase-components:aar:16.0.0",
"com.google.android.gms:play-services-measurement-impl:aar:17.5.0",
"androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"com.google.android.gms:play-services-measurement:aar:17.5.0",
"androidx.core:core:aar:1.3.1",
"com.google.android.gms:play-services-ads-identifier:aar:17.0.0",
"com.google.android.gms:play-services-measurement-api:aar:17.5.0",
"com.google.android.gms:play-services-measurement-sdk:aar:17.5.0",
"androidx.print:print:aar:1.0.0",
- "androidx.annotation:annotation:jar:1.1.0",
"androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0",
"androidx.documentfile:documentfile:aar:1.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
"com.google.auto.value:auto-value-annotations:jar:1.8.1",
"com.google.firebase:firebase-installations-interop:aar:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
"com.google.android.gms:play-services-measurement-base:aar:17.5.0",
"androidx.loader:loader:aar:1.0.0"
],
@@ -5897,147 +5927,376 @@
"url": "https://maven.google.com/com/google/firebase/firebase-analytics/17.5.0/firebase-analytics-17.5.0.aar"
},
{
- "coord": "com.google.firebase:firebase-common:19.3.0",
+ "coord": "com.google.firebase:firebase-annotations:jar:16.1.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar",
+ "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar"
+ ],
+ "sha256": "0393478cf124721c7502ea76a28129a420c462fc4d5c0a4274db9e309785bd7e",
+ "url": "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar",
+ "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar"
+ ],
+ "sha256": "8fd2e91c651391d9c2196eedc784f3ce39bde37dc4b6c8e41055de0656bbb2c9",
+ "url": "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-appcheck-interop:aar:16.0.0",
"dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
"androidx.collection:collection:jar:1.1.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
- "com.google.firebase:firebase-components:aar:16.0.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
"androidx.annotation:annotation:jar:1.1.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
- "com.google.auto.value:auto-value-annotations:jar:1.8.1"
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-annotations:jar:16.1.0"
+ ],
+ "directDependencies": [
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.firebase:firebase-components:aar:17.0.0"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar",
+ "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar"
+ ],
+ "sha256": "44b9133286fe4c550391cf55057b2748323c4052b68412df0f8c83efd6044824",
+ "url": "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-appcheck-interop:aar:sources:16.0.0",
+ "dependencies": [
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
+ "androidx.core:core:aar:sources:1.3.1",
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "androidx.collection:collection:jar:sources:1.1.0",
+ "androidx.annotation:annotation:jar:sources:1.1.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "directDependencies": [
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar",
+ "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar"
+ ],
+ "sha256": "401532d113dcbbafa32132da0d1afb6713726791bb15dc3e311455b4de0b35e6",
+ "url": "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-auth-interop:aar:19.0.2",
+ "dependencies": [
+ "androidx.collection:collection:jar:1.1.0",
+ "androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "androidx.core:core:aar:1.3.1",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-annotations:jar:16.1.0"
+ ],
+ "directDependencies": [
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-annotations:jar:16.1.0",
+ "com.google.firebase:firebase-common:aar:20.1.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar",
+ "https://maven.google.com/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar"
+ ],
+ "sha256": "64dd9a5c20b64d0e367f4731d11e8fd6ea816a89a4e44e4193c72eafb54264d3",
+ "url": "https://maven.google.com/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-auth-ktx:19.3.1",
+ "dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "androidx.collection:collection:jar:1.1.0",
+ "androidx.annotation:annotation:1.1.0",
+ "com.google.firebase:firebase-auth-interop:aar:19.0.2",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10",
+ "androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "androidx.core:core:aar:1.3.1",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.auto.value:auto-value-annotations:jar:1.8.1",
+ "com.google.firebase:firebase-common-ktx:aar:20.1.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-auth:aar:19.3.1"
],
"directDependencies": [
- "com.google.android.gms:play-services-basement:aar:17.0.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.firebase:firebase-common-ktx:aar:20.1.1",
+ "com.google.firebase:firebase-auth:aar:19.3.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar",
+ "https://maven.google.com/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar"
+ ],
+ "sha256": "bd23f0077d8e85c8c57e06c06cdcccdc06a3de96facdd72fabd11159f01c4d4d",
+ "url": "https://maven.google.com/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-auth:aar:19.3.1",
+ "dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "androidx.collection:collection:jar:1.1.0",
+ "androidx.annotation:annotation:1.1.0",
+ "com.google.firebase:firebase-auth-interop:aar:19.0.2",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0",
+ "androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "androidx.core:core:aar:1.3.1",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "com.google.firebase:firebase-common:aar:20.1.1",
"com.google.auto.value:auto-value-annotations:jar:1.8.1",
- "com.google.firebase:firebase-components:aar:16.0.0"
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
+ ],
+ "directDependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "androidx.collection:collection:jar:1.1.0",
+ "com.google.firebase:firebase-auth-interop:aar:19.0.2",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0",
+ "androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar",
+ "https://maven.google.com/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar"
+ ],
+ "sha256": "0523401e4028729d1a882d2f787cd180bdf91bd12cb1d362453a770e6a2f72c1",
+ "url": "https://maven.google.com/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-common-ktx:aar:20.1.1",
+ "dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "androidx.collection:collection:jar:1.1.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10",
+ "androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "androidx.core:core:aar:1.3.1",
+ "androidx.annotation:annotation:jar:1.1.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "org.jetbrains.kotlin:kotlin-stdlib:1.5.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-annotations:jar:16.1.0"
+ ],
+ "directDependencies": [
+ "androidx.annotation:annotation:jar:1.1.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar",
+ "https://maven.google.com/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar"
+ ],
+ "sha256": "32ef394eea17445d3460a11f7128ef412f9aa093cd00106e9cfbec363b17a2c1",
+ "url": "https://maven.google.com/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-common:20.1.1",
+ "dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "androidx.collection:collection:jar:1.1.0",
+ "androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "androidx.core:core:aar:1.3.1",
+ "androidx.annotation:annotation:jar:1.1.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-annotations:jar:16.1.0"
],
- "file": "v1/https/maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar",
+ "directDependencies": [
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-components:aar:17.0.0"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar",
"mirror_urls": [
- "https://maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar",
- "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar",
- "https://maven.fabric.io/public/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar",
- "https://maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar",
- "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar"
+ "https://maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar",
+ "https://maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar"
],
- "sha256": "7bd7971470ff943e3c3abb1d7809ef5cb4b81f1996be0867714372b3efa7405a",
- "url": "https://maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar"
+ "sha256": "1ab1a5054cb82395487fe0645dcfec6acc94efb9f4972fe717a8bff6905b8ecf",
+ "url": "https://maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar"
},
{
- "coord": "com.google.firebase:firebase-common:aar:sources:19.3.0",
+ "coord": "com.google.firebase:firebase-common:aar:sources:20.1.1",
"dependencies": [
- "com.google.firebase:firebase-components:aar:sources:16.0.0",
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
"androidx.core:core:aar:sources:1.3.1",
"androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
"androidx.collection:collection:jar:sources:1.1.0",
"androidx.annotation:annotation:jar:sources:1.1.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
- "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
- "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1",
- "com.google.firebase:firebase-components:aar:sources:16.0.0"
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0"
],
- "file": "v1/https/maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar",
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar",
"mirror_urls": [
- "https://maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar",
- "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar",
- "https://maven.fabric.io/public/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar",
- "https://maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar",
- "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar"
+ "https://maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar",
+ "https://maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar"
],
- "sha256": "1a3f326b3992552200c91db1132c81ec5f6143bc6dd9af8f6f3b66388707c62b",
- "url": "https://maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar"
+ "sha256": "1cfd1e4aa6a4bb4379ead8eb44cac80e0a3f3a9414a3e2535a67b4e9a2209ff8",
+ "url": "https://maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar"
},
{
- "coord": "com.google.firebase:firebase-components:aar:16.0.0",
+ "coord": "com.google.firebase:firebase-components:aar:17.0.0",
"dependencies": [
- "androidx.annotation:annotation:jar:1.1.0"
+ "androidx.annotation:annotation:jar:1.1.0",
+ "com.google.firebase:firebase-annotations:jar:16.1.0"
],
"directDependencies": [
- "androidx.annotation:annotation:jar:1.1.0"
+ "androidx.annotation:annotation:jar:1.1.0",
+ "com.google.firebase:firebase-annotations:jar:16.1.0"
],
- "file": "v1/https/maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar",
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar",
"mirror_urls": [
- "https://maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar",
- "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar",
- "https://maven.fabric.io/public/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar",
- "https://maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar",
- "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar"
+ "https://maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar",
+ "https://maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar"
],
- "sha256": "8ef43b412de4ec3e36a87c66d8a0a14a3de0a2e8566946da6a0e799b7fdd8ec9",
- "url": "https://maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar"
+ "sha256": "dd678b2e24dd9b3f570196c618b6ffba9ea59b232ae6dce1356b0629ecb6fbf7",
+ "url": "https://maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar"
},
{
- "coord": "com.google.firebase:firebase-components:aar:sources:16.0.0",
+ "coord": "com.google.firebase:firebase-components:aar:sources:17.0.0",
"dependencies": [
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
"androidx.annotation:annotation:jar:sources:1.1.0"
],
"directDependencies": [
- "androidx.annotation:annotation:jar:sources:1.1.0"
+ "androidx.annotation:annotation:jar:sources:1.1.0",
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0"
],
- "file": "v1/https/maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar",
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar",
"mirror_urls": [
- "https://maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar",
- "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar",
- "https://maven.fabric.io/public/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar",
- "https://maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar",
- "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar"
+ "https://maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar",
+ "https://maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar"
],
- "sha256": "8c541d1b27245aff00937b08131cb41c99b4a6dcb5b5a7440283018d13fe9747",
- "url": "https://maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar"
+ "sha256": "8910a66c0ed4f81e894da879fd45cc647346a37a75eba0b9184e48d6654f8fcb",
+ "url": "https://maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar"
},
{
"coord": "com.google.firebase:firebase-crashlytics:17.1.1",
"dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
"com.google.firebase:firebase-measurement-connector:aar:18.0.0",
"com.google.firebase:firebase-installations:aar:16.3.2",
"androidx.collection:collection:jar:1.1.0",
"com.google.android.gms:play-services-stats:aar:17.0.0",
"androidx.annotation:annotation:1.1.0",
- "com.google.android.gms:play-services-base:aar:17.0.0",
"com.google.firebase:firebase-iid:aar:20.1.5",
- "com.google.firebase:firebase-common:aar:19.3.0",
"com.google.android.datatransport:transport-backend-cct:aar:2.3.0",
"androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0",
"androidx.legacy:legacy-support-core-utils:aar:1.0.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
"com.google.android.datatransport:transport-api:aar:2.2.0",
- "com.google.firebase:firebase-components:aar:16.0.0",
"androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
"com.google.dagger:dagger:jar:2.28.1",
"com.google.firebase:firebase-encoders-json:aar:16.1.0",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
"com.squareup.okhttp3:okhttp:jar:4.7.2",
"androidx.print:print:aar:1.0.0",
"androidx.annotation:annotation:jar:1.1.0",
"androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0",
"androidx.documentfile:documentfile:aar:1.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
"com.google.firebase:firebase-iid-interop:aar:17.0.0",
"com.google.android.datatransport:transport-runtime:aar:2.2.3",
"com.google.auto.value:auto-value-annotations:jar:1.8.1",
"com.google.firebase:firebase-installations-interop:aar:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
"androidx.loader:loader:aar:1.0.0"
],
"directDependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
"com.google.firebase:firebase-measurement-connector:aar:18.0.0",
"com.google.firebase:firebase-iid:aar:20.1.5",
- "com.google.firebase:firebase-common:aar:19.3.0",
"com.google.android.datatransport:transport-backend-cct:aar:2.3.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
"com.google.android.datatransport:transport-api:aar:2.2.0",
- "com.google.firebase:firebase-components:aar:16.0.0",
"com.google.firebase:firebase-encoders-json:aar:16.1.0",
"com.squareup.okhttp3:okhttp:jar:4.7.2",
+ "com.google.firebase:firebase-common:aar:20.1.1",
"com.google.firebase:firebase-iid-interop:aar:17.0.0",
- "com.google.android.datatransport:transport-runtime:aar:2.2.3"
+ "com.google.android.datatransport:transport-runtime:aar:2.2.3",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
],
"file": "v1/https/maven.google.com/com/google/firebase/firebase-crashlytics/17.1.1/firebase-crashlytics-17.1.1.aar",
"mirror_urls": [
@@ -6050,6 +6309,54 @@
"sha256": "635953640e1bbb277affadbc3e59b43f1c4dd07de79c8973b6341a756ad8b74b",
"url": "https://maven.google.com/com/google/firebase/firebase-crashlytics/17.1.1/firebase-crashlytics-17.1.1.aar"
},
+ {
+ "coord": "com.google.firebase:firebase-database-collection:aar:18.0.1",
+ "dependencies": [
+ "androidx.collection:collection:jar:1.1.0",
+ "androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "androidx.core:core:aar:1.3.1",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
+ ],
+ "directDependencies": [
+ "com.google.android.gms:play-services-base:aar:18.0.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar",
+ "https://maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar"
+ ],
+ "sha256": "fb92604df35bf819e706432ff6e3ca9d4794cc85348d94c887622ba93b5450e0",
+ "url": "https://maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-database-collection:aar:sources:18.0.1",
+ "dependencies": [
+ "androidx.core:core:aar:sources:1.3.1",
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "androidx.collection:collection:jar:sources:1.1.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "directDependencies": [
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar",
+ "https://maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar"
+ ],
+ "sha256": "e010851f4524833f72df62d594ff92f1af34026453721c387f522365d1d68cd5",
+ "url": "https://maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar"
+ },
{
"coord": "com.google.firebase:firebase-encoders-json:aar:16.1.0",
"dependencies": [
@@ -6088,19 +6395,282 @@
"sha256": "791b1521a8f5eda7ded50ccdf3afa7632a1198964e3c60e93e7ae602d54ca314",
"url": "https://maven.google.com/com/google/firebase/firebase-encoders-json/16.1.0/firebase-encoders-json-16.1.0-sources.jar"
},
+ {
+ "coord": "com.google.firebase:firebase-firestore-ktx:24.2.1",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-protobuf-lite:jar:1.44.1",
+ "com.google.firebase:firebase-database-collection:aar:18.0.1",
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "io.grpc:grpc-core:1.44.1",
+ "androidx.collection:collection:jar:1.1.0",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.firebase:firebase-auth-interop:aar:19.0.2",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "io.grpc:grpc-android:aar:1.44.1",
+ "com.squareup.okhttp:okhttp:jar:2.7.5",
+ "com.google.protobuf:protobuf-javalite:3.19.2",
+ "com.google.android:annotations:4.1.1.4",
+ "com.google.guava:guava:30.1.1-android",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10",
+ "io.grpc:grpc-stub:jar:1.44.1",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.19",
+ "io.perfmark:perfmark-api:0.23.0",
+ "com.google.firebase:protolite-well-known-types:aar:18.0.0",
+ "androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "androidx.core:core:aar:1.3.1",
+ "com.google.firebase:firebase-appcheck-interop:aar:16.0.0",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "io.grpc:grpc-context:1.44.1",
+ "com.squareup.okhttp:okhttp:2.7.5",
+ "com.squareup.okio:okio:2.6.0",
+ "io.grpc:grpc-okhttp:jar:1.44.1",
+ "androidx.annotation:annotation:jar:1.1.0",
+ "com.google.guava:failureaccess:1.0.1",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "org.jetbrains.kotlin:kotlin-stdlib:1.5.0",
+ "com.google.protobuf:protobuf-javalite:jar:3.19.2",
+ "io.grpc:grpc-api:1.44.1",
+ "com.google.firebase:firebase-common-ktx:aar:20.1.1",
+ "com.google.firebase:firebase-firestore:aar:24.2.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-annotations:jar:16.1.0",
+ "com.google.code.gson:gson:2.8.9",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10",
+ "androidx.annotation:annotation:jar:1.1.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.firebase:firebase-common-ktx:aar:20.1.1",
+ "com.google.firebase:firebase-firestore:aar:24.2.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar",
+ "https://maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar"
+ ],
+ "sha256": "5c3ebeadfc1feed2fb20c3a974c9f108e2068833af1b9e532cda6a85cb37011f",
+ "url": "https://maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-firestore-ktx:jar:sources:24.2.1",
+ "dependencies": [
+ "io.grpc:grpc-api:jar:sources:1.44.1",
+ "com.google.firebase:protolite-well-known-types:aar:sources:18.0.0",
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0",
+ "com.google.firebase:firebase-common-ktx:aar:sources:20.1.1",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.android:annotations:jar:sources:4.1.1.4",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
+ "androidx.core:core:aar:sources:1.3.1",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "com.google.firebase:firebase-firestore:aar:sources:24.2.1",
+ "io.grpc:grpc-okhttp:jar:sources:1.44.1",
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "androidx.collection:collection:jar:sources:1.1.0",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
+ "com.squareup.okhttp:okhttp:jar:sources:2.7.5",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10",
+ "io.grpc:grpc-android:aar:sources:1.44.1",
+ "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2",
+ "io.grpc:grpc-stub:jar:sources:1.44.1",
+ "androidx.annotation:annotation:jar:sources:1.1.0",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.44.1",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-core:jar:sources:1.44.1",
+ "com.squareup.okio:okio:jar:sources:2.6.0",
+ "com.google.firebase:firebase-appcheck-interop:aar:sources:16.0.0",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
+ "io.perfmark:perfmark-api:jar:sources:0.23.0",
+ "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2",
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.firebase:firebase-database-collection:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0",
+ "io.grpc:grpc-context:jar:sources:1.44.1"
+ ],
+ "directDependencies": [
+ "com.google.firebase:firebase-common-ktx:aar:sources:20.1.1",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-firestore:aar:sources:24.2.1",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10",
+ "androidx.annotation:annotation:jar:sources:1.1.0"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar",
+ "https://maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar"
+ ],
+ "sha256": "b537e0077bcd144f2591e1bf505e9e28bbc0cecef81beefdd16170ac93b7631d",
+ "url": "https://maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-firestore:aar:24.2.1",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-protobuf-lite:jar:1.44.1",
+ "com.google.firebase:firebase-database-collection:aar:18.0.1",
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "io.grpc:grpc-core:1.44.1",
+ "androidx.collection:collection:jar:1.1.0",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.firebase:firebase-auth-interop:aar:19.0.2",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "io.grpc:grpc-android:aar:1.44.1",
+ "com.squareup.okhttp:okhttp:jar:2.7.5",
+ "com.google.protobuf:protobuf-javalite:3.19.2",
+ "com.google.android:annotations:4.1.1.4",
+ "com.google.guava:guava:30.1.1-android",
+ "io.grpc:grpc-stub:jar:1.44.1",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.19",
+ "io.perfmark:perfmark-api:0.23.0",
+ "com.google.firebase:protolite-well-known-types:aar:18.0.0",
+ "androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "androidx.core:core:aar:1.3.1",
+ "com.google.firebase:firebase-appcheck-interop:aar:16.0.0",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "io.grpc:grpc-context:1.44.1",
+ "com.squareup.okhttp:okhttp:2.7.5",
+ "com.squareup.okio:okio:2.6.0",
+ "io.grpc:grpc-okhttp:jar:1.44.1",
+ "androidx.annotation:annotation:jar:1.1.0",
+ "com.google.guava:failureaccess:1.0.1",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.protobuf:protobuf-javalite:jar:3.19.2",
+ "io.grpc:grpc-api:1.44.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-annotations:jar:16.1.0",
+ "com.google.code.gson:gson:2.8.9",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "io.grpc:grpc-protobuf-lite:jar:1.44.1",
+ "com.google.firebase:firebase-database-collection:aar:18.0.1",
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "com.google.firebase:firebase-auth-interop:aar:19.0.2",
+ "io.grpc:grpc-android:aar:1.44.1",
+ "com.squareup.okhttp:okhttp:jar:2.7.5",
+ "io.grpc:grpc-stub:jar:1.44.1",
+ "com.google.firebase:protolite-well-known-types:aar:18.0.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "com.google.firebase:firebase-appcheck-interop:aar:16.0.0",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "io.grpc:grpc-okhttp:jar:1.44.1",
+ "androidx.annotation:annotation:jar:1.1.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-annotations:jar:16.1.0"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar",
+ "https://maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar"
+ ],
+ "sha256": "e0f2b11b93e779f13e7fcc6a91724aeb071114959c55d19e7e0028c0a01003aa",
+ "url": "https://maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-firestore:aar:sources:24.2.1",
+ "dependencies": [
+ "io.grpc:grpc-api:jar:sources:1.44.1",
+ "com.google.firebase:protolite-well-known-types:aar:sources:18.0.0",
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.android:annotations:jar:sources:4.1.1.4",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
+ "androidx.core:core:aar:sources:1.3.1",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "io.grpc:grpc-okhttp:jar:sources:1.44.1",
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "androidx.collection:collection:jar:sources:1.1.0",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
+ "com.squareup.okhttp:okhttp:jar:sources:2.7.5",
+ "io.grpc:grpc-android:aar:sources:1.44.1",
+ "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2",
+ "io.grpc:grpc-stub:jar:sources:1.44.1",
+ "androidx.annotation:annotation:jar:sources:1.1.0",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.44.1",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-core:jar:sources:1.44.1",
+ "com.squareup.okio:okio:jar:sources:2.6.0",
+ "com.google.firebase:firebase-appcheck-interop:aar:sources:16.0.0",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
+ "io.perfmark:perfmark-api:jar:sources:0.23.0",
+ "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2",
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.firebase:firebase-database-collection:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0",
+ "io.grpc:grpc-context:jar:sources:1.44.1"
+ ],
+ "directDependencies": [
+ "com.google.firebase:protolite-well-known-types:aar:sources:18.0.0",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
+ "io.grpc:grpc-okhttp:jar:sources:1.44.1",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "com.squareup.okhttp:okhttp:jar:sources:2.7.5",
+ "io.grpc:grpc-android:aar:sources:1.44.1",
+ "io.grpc:grpc-stub:jar:sources:1.44.1",
+ "androidx.annotation:annotation:jar:sources:1.1.0",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.44.1",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.firebase:firebase-appcheck-interop:aar:sources:16.0.0",
+ "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.firebase:firebase-database-collection:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar",
+ "https://maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar"
+ ],
+ "sha256": "10f45bc182859afbe8da94f9b0b7b2f778dc30ccb903d6a8099a05393d88ce9f",
+ "url": "https://maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar"
+ },
{
"coord": "com.google.firebase:firebase-iid-interop:aar:17.0.0",
"dependencies": [
"androidx.collection:collection:jar:1.1.0",
- "com.google.android.gms:play-services-base:aar:17.0.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
- "com.google.android.gms:play-services-basement:aar:17.0.0"
+ "com.google.android.gms:play-services-base:aar:18.0.1"
],
"directDependencies": [
- "com.google.android.gms:play-services-base:aar:17.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0"
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:18.0.0"
],
"file": "v1/https/maven.google.com/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar",
"mirror_urls": [
@@ -6116,41 +6686,40 @@
{
"coord": "com.google.firebase:firebase-iid:aar:20.1.5",
"dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
"com.google.firebase:firebase-installations:aar:16.3.2",
"androidx.collection:collection:jar:1.1.0",
"com.google.android.gms:play-services-stats:aar:17.0.0",
"androidx.annotation:annotation:1.1.0",
- "com.google.android.gms:play-services-base:aar:17.0.0",
- "com.google.firebase:firebase-common:aar:19.3.0",
"androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0",
"androidx.legacy:legacy-support-core-utils:aar:1.0.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
- "com.google.firebase:firebase-components:aar:16.0.0",
"androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
"androidx.print:print:aar:1.0.0",
- "androidx.annotation:annotation:jar:1.1.0",
"androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0",
"androidx.documentfile:documentfile:aar:1.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
"com.google.firebase:firebase-iid-interop:aar:17.0.0",
"com.google.auto.value:auto-value-annotations:jar:1.8.1",
"com.google.firebase:firebase-installations-interop:aar:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
"androidx.loader:loader:aar:1.0.0"
],
"directDependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
"com.google.firebase:firebase-installations:aar:16.3.2",
"androidx.collection:collection:jar:1.1.0",
"com.google.android.gms:play-services-stats:aar:17.0.0",
- "com.google.firebase:firebase-common:aar:19.3.0",
"androidx.legacy:legacy-support-core-utils:aar:1.0.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
- "com.google.firebase:firebase-components:aar:16.0.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
"com.google.firebase:firebase-iid-interop:aar:17.0.0",
- "com.google.firebase:firebase-installations-interop:aar:16.0.0"
+ "com.google.firebase:firebase-installations-interop:aar:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
],
"file": "v1/https/maven.google.com/com/google/firebase/firebase-iid/20.1.5/firebase-iid-20.1.5.aar",
"mirror_urls": [
@@ -6167,13 +6736,13 @@
"coord": "com.google.firebase:firebase-installations-interop:aar:16.0.0",
"dependencies": [
"androidx.collection:collection:jar:1.1.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
- "com.google.android.gms:play-services-basement:aar:17.0.0"
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
],
"directDependencies": [
- "com.google.android.gms:play-services-tasks:aar:17.0.0"
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
],
"file": "v1/https/maven.google.com/com/google/firebase/firebase-installations-interop/16.0.0/firebase-installations-interop-16.0.0.aar",
"mirror_urls": [
@@ -6189,21 +6758,20 @@
{
"coord": "com.google.firebase:firebase-installations:aar:16.3.2",
"dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
"androidx.collection:collection:jar:1.1.0",
- "com.google.firebase:firebase-common:aar:19.3.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
- "com.google.firebase:firebase-components:aar:16.0.0",
"androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.core:core:aar:1.3.1",
- "androidx.annotation:annotation:jar:1.1.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
"com.google.auto.value:auto-value-annotations:jar:1.8.1",
- "com.google.firebase:firebase-installations-interop:aar:16.0.0"
+ "com.google.firebase:firebase-installations-interop:aar:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
],
"directDependencies": [
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
- "com.google.firebase:firebase-common:aar:19.3.0",
- "com.google.firebase:firebase-components:aar:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.firebase:firebase-components:aar:17.0.0",
"com.google.firebase:firebase-installations-interop:aar:16.0.0"
],
"file": "v1/https/maven.google.com/com/google/firebase/firebase-installations/16.3.2/firebase-installations-16.3.2.aar",
@@ -6220,13 +6788,13 @@
{
"coord": "com.google.firebase:firebase-measurement-connector:aar:18.0.0",
"dependencies": [
- "com.google.android.gms:play-services-basement:aar:17.0.0",
"androidx.collection:collection:jar:1.1.0",
"androidx.core:core:aar:1.3.1",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
"androidx.fragment:fragment:aar:1.2.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-basement:aar:17.0.0"
+ "com.google.android.gms:play-services-basement:aar:18.0.0"
],
"file": "v1/https/maven.google.com/com/google/firebase/firebase-measurement-connector/18.0.0/firebase-measurement-connector-18.0.0.aar",
"mirror_urls": [
@@ -6239,18 +6807,37 @@
"sha256": "17e8b9b60ac0a79fcbed754d03d4b966cc5bb8837e79c2308bf2970f1d05700c",
"url": "https://maven.google.com/com/google/firebase/firebase-measurement-connector/18.0.0/firebase-measurement-connector-18.0.0.aar"
},
+ {
+ "coord": "com.google.firebase:protolite-well-known-types:aar:18.0.0",
+ "dependencies": [
+ "com.google.protobuf:protobuf-javalite:jar:3.19.2"
+ ],
+ "directDependencies": [
+ "com.google.protobuf:protobuf-javalite:jar:3.19.2"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar",
+ "https://maven.fabric.io/public/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar",
+ "https://maven.google.com/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar"
+ ],
+ "sha256": "9ac16b795b44c4ba87937ba0a850260d393f9dc25ff469d52a7bad528daac986",
+ "url": "https://maven.google.com/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar"
+ },
{
"coord": "com.google.gms:google-services:4.3.3",
"dependencies": [
"com.google.code.findbugs:jsr305:3.0.2",
"com.google.guava:guava:30.1.1-android",
- "com.google.code.gson:gson:2.8.6",
"org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10",
- "com.google.android.gms:strict-version-matcher-plugin:1.2.1"
+ "com.google.android.gms:strict-version-matcher-plugin:1.2.1",
+ "com.google.code.gson:gson:2.8.9"
],
"directDependencies": [
"com.google.android.gms:strict-version-matcher-plugin:1.2.1",
- "com.google.code.gson:gson:2.8.6",
+ "com.google.code.gson:gson:2.8.9",
"com.google.guava:guava:30.1.1-android"
],
"file": "v1/https/maven.google.com/com/google/gms/google-services/4.3.3/google-services-4.3.3.jar",
@@ -6270,12 +6857,12 @@
"com.google.guava:guava:jar:sources:30.1.1-android",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10",
- "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
"com.google.android.gms:strict-version-matcher-plugin:jar:sources:1.2.1"
],
"directDependencies": [
"com.google.android.gms:strict-version-matcher-plugin:jar:sources:1.2.1",
- "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
"com.google.guava:guava:jar:sources:30.1.1-android"
],
"file": "v1/https/maven.google.com/com/google/gms/google-services/4.3.3/google-services-4.3.3-sources.jar",
@@ -6367,7 +6954,7 @@
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.j2objc:j2objc-annotations:1.3",
"com.google.code.findbugs:jsr305:3.0.2",
- "com.google.errorprone:error_prone_annotations:2.7.1",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
"com.google.guava:failureaccess:1.0.1",
"org.checkerframework:checker-compat-qual:2.5.5"
],
@@ -6375,7 +6962,7 @@
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.j2objc:j2objc-annotations:1.3",
"com.google.code.findbugs:jsr305:3.0.2",
- "com.google.errorprone:error_prone_annotations:2.7.1",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
"com.google.guava:failureaccess:1.0.1",
"org.checkerframework:checker-compat-qual:2.5.5"
],
@@ -6398,7 +6985,7 @@
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:failureaccess:jar:sources:1.0.1",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1"
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0"
],
"directDependencies": [
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
@@ -6406,7 +6993,7 @@
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:failureaccess:jar:sources:1.0.1",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1"
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0"
],
"file": "v1/https/repo1.maven.org/maven2/com/google/guava/guava/30.1.1-android/guava-30.1.1-android-sources.jar",
"mirror_urls": [
@@ -6471,15 +7058,15 @@
"com.google.j2objc:j2objc-annotations:1.3",
"com.google.code.findbugs:jsr305:3.0.2",
"com.google.guava:guava:30.1.1-android",
- "com.google.errorprone:error_prone_annotations:2.7.1",
- "com.google.code.gson:gson:2.8.6",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
"com.google.protobuf:protobuf-java:3.17.3",
"com.google.guava:failureaccess:1.0.1",
+ "com.google.code.gson:gson:2.8.9",
"org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
- "com.google.code.gson:gson:2.8.6",
- "com.google.errorprone:error_prone_annotations:2.7.1",
+ "com.google.code.gson:gson:2.8.9",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
"com.google.guava:guava:30.1.1-android",
"com.google.protobuf:protobuf-java:3.17.3"
],
@@ -6501,15 +7088,15 @@
"com.google.protobuf:protobuf-java:jar:sources:3.17.3",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"com.google.j2objc:j2objc-annotations:jar:sources:1.3",
- "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:failureaccess:jar:sources:1.0.1",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1"
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0"
],
"directDependencies": [
- "com.google.code.gson:gson:jar:sources:2.8.6",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
"com.google.guava:guava:jar:sources:30.1.1-android",
"com.google.protobuf:protobuf-java:jar:sources:3.17.3"
],
@@ -6555,34 +7142,34 @@
"url": "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.17.3/protobuf-java-3.17.3-sources.jar"
},
{
- "coord": "com.google.protobuf:protobuf-javalite:3.17.3",
+ "coord": "com.google.protobuf:protobuf-javalite:3.19.2",
"dependencies": [],
"directDependencies": [],
- "file": "v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar",
+ "file": "v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar",
"mirror_urls": [
- "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar",
- "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar",
- "https://maven.fabric.io/public/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar",
- "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar",
- "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar"
+ "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar",
+ "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar",
+ "https://maven.fabric.io/public/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar",
+ "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar",
+ "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar"
],
- "sha256": "dc643901cc9d95998a1e45ab11e75d4237a7e1947bcbca0b7eca569aaf5e714d",
- "url": "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar"
+ "sha256": "bfc598474392a015c050d34be38bb84eb3986809374eac437420d51680150e94",
+ "url": "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar"
},
{
- "coord": "com.google.protobuf:protobuf-javalite:jar:sources:3.17.3",
+ "coord": "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2",
"dependencies": [],
"directDependencies": [],
- "file": "v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar",
+ "file": "v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar",
"mirror_urls": [
- "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar",
- "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar",
- "https://maven.fabric.io/public/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar",
- "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar",
- "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar"
+ "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar",
+ "https://maven.fabric.io/public/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar",
+ "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar"
],
- "sha256": "b7bc7b41c266f59c921bf094b4325fb9bcdd0a8d95d742db8cca3a1c76503f9b",
- "url": "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar"
+ "sha256": "0154a27b8b6e4753013922fc8e50c59ebd7108af95f11fa9bc6b72ef14db0dc9",
+ "url": "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar"
},
{
"coord": "com.google.truth.extensions:truth-liteproto-extension:1.1.3",
@@ -6592,10 +7179,10 @@
"com.google.truth:truth:1.1.3",
"com.google.code.findbugs:jsr305:3.0.2",
"com.google.guava:guava:30.1.1-android",
- "com.google.errorprone:error_prone_annotations:2.7.1",
"org.hamcrest:hamcrest-core:1.3",
"org.checkerframework:checker-qual:3.13.0",
"com.google.auto.value:auto-value-annotations:1.8.1",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
"com.google.guava:failureaccess:1.0.1",
"org.ow2.asm:asm:9.1",
"junit:junit:4.13.2",
@@ -6604,9 +7191,9 @@
"directDependencies": [
"com.google.truth:truth:1.1.3",
"com.google.guava:guava:30.1.1-android",
- "com.google.errorprone:error_prone_annotations:2.7.1",
"org.checkerframework:checker-qual:3.13.0",
- "com.google.auto.value:auto-value-annotations:1.8.1"
+ "com.google.auto.value:auto-value-annotations:1.8.1",
+ "com.google.errorprone:error_prone_annotations:2.9.0"
],
"file": "v1/https/repo1.maven.org/maven2/com/google/truth/extensions/truth-liteproto-extension/1.1.3/truth-liteproto-extension-1.1.3.jar",
"mirror_urls": [
@@ -6633,14 +7220,14 @@
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:failureaccess:jar:sources:1.0.1",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
"com.google.auto.value:auto-value-annotations:jar:sources:1.8.1"
],
"directDependencies": [
"com.google.guava:guava:jar:sources:30.1.1-android",
"org.checkerframework:checker-qual:jar:sources:3.13.0",
"com.google.truth:truth:jar:sources:1.1.3",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
"com.google.auto.value:auto-value-annotations:jar:sources:1.8.1"
],
"file": "v1/https/repo1.maven.org/maven2/com/google/truth/extensions/truth-liteproto-extension/1.1.3/truth-liteproto-extension-1.1.3-sources.jar",
@@ -6661,10 +7248,10 @@
"com.google.j2objc:j2objc-annotations:1.3",
"com.google.code.findbugs:jsr305:3.0.2",
"com.google.guava:guava:30.1.1-android",
- "com.google.errorprone:error_prone_annotations:2.7.1",
"org.hamcrest:hamcrest-core:1.3",
"org.checkerframework:checker-qual:3.13.0",
"com.google.auto.value:auto-value-annotations:1.8.1",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
"com.google.guava:failureaccess:1.0.1",
"org.ow2.asm:asm:9.1",
"junit:junit:4.13.2",
@@ -6672,9 +7259,9 @@
],
"directDependencies": [
"com.google.guava:guava:30.1.1-android",
- "com.google.errorprone:error_prone_annotations:2.7.1",
"org.checkerframework:checker-qual:3.13.0",
"com.google.auto.value:auto-value-annotations:1.8.1",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
"org.ow2.asm:asm:9.1",
"junit:junit:4.13.2"
],
@@ -6702,7 +7289,7 @@
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:failureaccess:jar:sources:1.0.1",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
"com.google.auto.value:auto-value-annotations:jar:sources:1.8.1"
],
"directDependencies": [
@@ -6710,7 +7297,7 @@
"org.ow2.asm:asm:jar:sources:9.1",
"org.checkerframework:checker-qual:jar:sources:3.13.0",
"junit:junit:jar:sources:4.13.2",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
"com.google.auto.value:auto-value-annotations:jar:sources:1.8.1"
],
"file": "v1/https/repo1.maven.org/maven2/com/google/truth/truth/1.1.3/truth-1.1.3-sources.jar",
@@ -7033,31 +7620,69 @@
"url": "https://repo1.maven.org/maven2/com/squareup/okhttp3/okhttp/4.7.2/okhttp-4.7.2-sources.jar"
},
{
- "coord": "com.squareup.okio:okio:2.6.0",
+ "coord": "com.squareup.okhttp:okhttp:2.7.5",
"dependencies": [
- "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0",
- "org.jetbrains.kotlin:kotlin-stdlib:1.5.0"
+ "com.squareup.okio:okio:2.6.0"
],
"directDependencies": [
- "org.jetbrains.kotlin:kotlin-stdlib:1.5.0",
- "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0"
+ "com.squareup.okio:okio:2.6.0"
],
- "file": "v1/https/repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar",
+ "file": "v1/https/repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar",
"mirror_urls": [
- "https://maven.google.com/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar",
- "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar",
- "https://maven.fabric.io/public/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar",
- "https://maven.google.com/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar",
- "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar"
+ "https://maven.google.com/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar",
+ "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar",
+ "https://maven.fabric.io/public/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar",
+ "https://maven.google.com/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar",
+ "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar"
],
- "sha256": "4d84ef686277b58eb05691ac19cd3befa3429a27274982ee65ea0f07044bcc00",
- "url": "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar"
+ "sha256": "88ac9fd1bb51f82bcc664cc1eb9c225c90dc4389d660231b4cc737bebfe7d0aa",
+ "url": "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar"
},
{
- "coord": "com.squareup.okio:okio:jar:sources:2.6.0",
+ "coord": "com.squareup.okhttp:okhttp:jar:sources:2.7.5",
"dependencies": [
- "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0",
- "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0"
+ "com.squareup.okio:okio:jar:sources:2.6.0"
+ ],
+ "directDependencies": [
+ "com.squareup.okio:okio:jar:sources:2.6.0"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar",
+ "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar",
+ "https://maven.fabric.io/public/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar",
+ "https://maven.google.com/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar",
+ "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar"
+ ],
+ "sha256": "edfafce3b9abb0fc31b5c72cc5f533516a08f7b86754138f36595a6837746ddf",
+ "url": "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar"
+ },
+ {
+ "coord": "com.squareup.okio:okio:2.6.0",
+ "dependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0",
+ "org.jetbrains.kotlin:kotlin-stdlib:1.5.0"
+ ],
+ "directDependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib:1.5.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar",
+ "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar",
+ "https://maven.fabric.io/public/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar",
+ "https://maven.google.com/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar",
+ "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar"
+ ],
+ "sha256": "4d84ef686277b58eb05691ac19cd3befa3429a27274982ee65ea0f07044bcc00",
+ "url": "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar"
+ },
+ {
+ "coord": "com.squareup.okio:okio:jar:sources:2.6.0",
+ "dependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0"
],
"directDependencies": [
"org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0",
@@ -7403,6 +8028,454 @@
"sha256": "36df4b321ec95e31226ff5abaae73e66f3a99dedddbc2d03054c4e141c8aaa5c",
"url": "https://maven.google.com/io/fabric/sdk/android/fabric/1.4.7/fabric-1.4.7.aar"
},
+ {
+ "coord": "io.grpc:grpc-android:aar:1.44.1",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-core:1.44.1",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.android:annotations:4.1.1.4",
+ "com.google.guava:guava:30.1.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.19",
+ "io.perfmark:perfmark-api:0.23.0",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.grpc:grpc-api:1.44.1",
+ "com.google.code.gson:gson:2.8.9",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "com.google.guava:guava:30.1.1-android",
+ "io.grpc:grpc-core:1.44.1"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar",
+ "https://maven.fabric.io/public/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar",
+ "https://maven.google.com/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar"
+ ],
+ "sha256": "5a2d9a295c6e77cb4e615ed4519edcae2432b7828cac2cc1a8ee798cffb43c9a",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar"
+ },
+ {
+ "coord": "io.grpc:grpc-android:aar:sources:1.44.1",
+ "dependencies": [
+ "io.grpc:grpc-api:jar:sources:1.44.1",
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.android:annotations:jar:sources:4.1.1.4",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-core:jar:sources:1.44.1",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
+ "io.perfmark:perfmark-api:jar:sources:0.23.0",
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19"
+ ],
+ "directDependencies": [
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "io.grpc:grpc-core:jar:sources:1.44.1"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar"
+ ],
+ "sha256": "5239c86a9b850883859275886416c2c8b36eed070201058c538e1e4bdd016f5a",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-api:1.44.1",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.guava:guava:30.1.1-android",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
+ "io.grpc:grpc-context:1.44.1",
+ "com.google.guava:failureaccess:1.0.1",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
+ "com.google.guava:guava:30.1.1-android",
+ "io.grpc:grpc-context:1.44.1"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar",
+ "https://maven.google.com/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar"
+ ],
+ "sha256": "5d2bd58e4003e6b8440b3596c0809ef5c651594d62943edb459d5fa82273bd2f",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-api:jar:sources:1.44.1",
+ "dependencies": [
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
+ "io.grpc:grpc-context:jar:sources:1.44.1"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "io.grpc:grpc-context:jar:sources:1.44.1"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar"
+ ],
+ "sha256": "4439a930dd79c5218fa39aa3fdfd570a8bef99de2aaa4437b3b787d4da1ae6f0",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-context:1.44.1",
+ "dependencies": [],
+ "directDependencies": [],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar",
+ "https://maven.google.com/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar"
+ ],
+ "sha256": "97059fef9e325ecfcc30429921916ebaccd436cf5601af4d706ef1f613f5ea85",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-context:jar:sources:1.44.1",
+ "dependencies": [],
+ "directDependencies": [],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar"
+ ],
+ "sha256": "6b30014c6be890bd7c1ea08aefde722deb29a6b48b404315d4d58f6bff5d85a0",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-core:1.44.1",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.android:annotations:4.1.1.4",
+ "com.google.guava:guava:30.1.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.19",
+ "io.perfmark:perfmark-api:0.23.0",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.grpc:grpc-api:1.44.1",
+ "com.google.code.gson:gson:2.8.9",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "com.google.android:annotations:4.1.1.4",
+ "com.google.guava:guava:30.1.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.19",
+ "io.perfmark:perfmark-api:0.23.0",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
+ "io.grpc:grpc-api:1.44.1",
+ "com.google.code.gson:gson:2.8.9"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar",
+ "https://maven.google.com/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar"
+ ],
+ "sha256": "907dd75d9684dcd1e5664856e45aa05e072870af91796e635405f963f82431da",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-core:jar:sources:1.44.1",
+ "dependencies": [
+ "io.grpc:grpc-api:jar:sources:1.44.1",
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.android:annotations:jar:sources:4.1.1.4",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
+ "io.perfmark:perfmark-api:jar:sources:0.23.0",
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19"
+ ],
+ "directDependencies": [
+ "io.grpc:grpc-api:jar:sources:1.44.1",
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "com.google.android:annotations:jar:sources:4.1.1.4",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
+ "io.perfmark:perfmark-api:jar:sources:0.23.0",
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar"
+ ],
+ "sha256": "9e468a2ef2fe437c6964fed4bf2fa5566829c2dc47b0e2017af7c4f9997e553c",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-okhttp:jar:1.44.1",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-core:1.44.1",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.android:annotations:4.1.1.4",
+ "com.google.guava:guava:30.1.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.19",
+ "io.perfmark:perfmark-api:0.23.0",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
+ "com.squareup.okhttp:okhttp:2.7.5",
+ "com.squareup.okio:okio:2.6.0",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.grpc:grpc-api:1.44.1",
+ "com.google.code.gson:gson:2.8.9",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "io.grpc:grpc-core:1.44.1",
+ "com.google.guava:guava:30.1.1-android",
+ "io.perfmark:perfmark-api:0.23.0",
+ "com.squareup.okhttp:okhttp:2.7.5",
+ "com.squareup.okio:okio:2.6.0"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar",
+ "https://maven.google.com/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar"
+ ],
+ "sha256": "ecd538b47b44b4638fa12b792ae2ac18c9b28c5d5a96595b1d3b75d1af424ac2",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-okhttp:jar:sources:1.44.1",
+ "dependencies": [
+ "io.grpc:grpc-api:jar:sources:1.44.1",
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.android:annotations:jar:sources:4.1.1.4",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "com.google.code.gson:gson:jar:sources:2.8.9",
+ "com.squareup.okhttp:okhttp:jar:sources:2.7.5",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-core:jar:sources:1.44.1",
+ "com.squareup.okio:okio:jar:sources:2.6.0",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
+ "io.perfmark:perfmark-api:jar:sources:0.23.0",
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19"
+ ],
+ "directDependencies": [
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "com.squareup.okhttp:okhttp:jar:sources:2.7.5",
+ "io.grpc:grpc-core:jar:sources:1.44.1",
+ "com.squareup.okio:okio:jar:sources:2.6.0",
+ "io.perfmark:perfmark-api:jar:sources:0.23.0"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar"
+ ],
+ "sha256": "715ad53ba3cf878d7de921a59dae09a296761b35ace4ce3316041a8f5329679b",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-protobuf-lite:jar:1.44.1",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.protobuf:protobuf-javalite:3.19.2",
+ "com.google.guava:guava:30.1.1-android",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
+ "io.grpc:grpc-context:1.44.1",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.grpc:grpc-api:1.44.1",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.guava:guava:30.1.1-android",
+ "com.google.protobuf:protobuf-javalite:3.19.2",
+ "io.grpc:grpc-api:1.44.1"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar",
+ "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar"
+ ],
+ "sha256": "1e53b2f3d856ee83fe58f7b89a36180e00c79141fbc9752682d1fdb36bcb93be",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-protobuf-lite:jar:sources:1.44.1",
+ "dependencies": [
+ "io.grpc:grpc-api:jar:sources:1.44.1",
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
+ "io.grpc:grpc-context:jar:sources:1.44.1"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2",
+ "io.grpc:grpc-api:jar:sources:1.44.1"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar"
+ ],
+ "sha256": "7bc340a0a69b2bf204d9fb00048d8c6b517f2f8670cf4f27d0fd53c09fc6fe47",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-stub:jar:1.44.1",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.guava:guava:30.1.1-android",
+ "com.google.errorprone:error_prone_annotations:2.9.0",
+ "io.grpc:grpc-context:1.44.1",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.grpc:grpc-api:1.44.1",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "com.google.errorprone:error_prone_annotations:2.9.0",
+ "com.google.guava:guava:30.1.1-android",
+ "io.grpc:grpc-api:1.44.1"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar",
+ "https://maven.google.com/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar"
+ ],
+ "sha256": "c34e16c085568df0ca8b22d7fe1326999d5be192deb2ae057238ec0f7707a107",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-stub:jar:sources:1.44.1",
+ "dependencies": [
+ "io.grpc:grpc-api:jar:sources:1.44.1",
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
+ "io.grpc:grpc-context:jar:sources:1.44.1"
+ ],
+ "directDependencies": [
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0",
+ "com.google.guava:guava:jar:sources:30.1.1-android",
+ "io.grpc:grpc-api:jar:sources:1.44.1"
+ ],
+ "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar",
+ "https://maven.fabric.io/public/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar"
+ ],
+ "sha256": "8f5c0bd190963ca36413a1c34b45cbb45249540913311ff028f7e5cebafcf0df",
+ "url": "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar"
+ },
+ {
+ "coord": "io.perfmark:perfmark-api:0.23.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "file": "v1/https/repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar",
+ "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar",
+ "https://maven.fabric.io/public/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar",
+ "https://maven.google.com/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar",
+ "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar"
+ ],
+ "sha256": "c705b5c10c18ff3032b9e81742bc2f6b0e5607f6a6dfc0c8ad0cff75d4913042",
+ "url": "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar"
+ },
+ {
+ "coord": "io.perfmark:perfmark-api:jar:sources:0.23.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "file": "v1/https/repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar",
+ "https://maven.fabric.io/public/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar",
+ "https://maven.google.com/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar"
+ ],
+ "sha256": "8b75ae9cac9c14c8b697501adf74584130a307f2851d135e0ada4667cdf3b7b5",
+ "url": "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar"
+ },
{
"coord": "io.xlate:yaml-json:0.1.0",
"dependencies": [],
@@ -7869,6 +8942,36 @@
"sha256": "52fd5b908ed38b2c543fac371c2192ff2896fec0f3ddea29f23b5db117a7ea6e",
"url": "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/3.13.0/checker-qual-3.13.0-sources.jar"
},
+ {
+ "coord": "org.codehaus.mojo:animal-sniffer-annotations:1.19",
+ "dependencies": [],
+ "directDependencies": [],
+ "file": "v1/https/repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar",
+ "mirror_urls": [
+ "https://maven.google.com/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar",
+ "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar",
+ "https://maven.fabric.io/public/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar",
+ "https://maven.google.com/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar",
+ "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar"
+ ],
+ "sha256": "e67ec27ceeaf13ab5d54cf5fdbcc544c41b4db8d02d9f006678cca2c7c13ee9d",
+ "url": "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar"
+ },
+ {
+ "coord": "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19",
+ "dependencies": [],
+ "directDependencies": [],
+ "file": "v1/https/repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar",
+ "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar",
+ "https://maven.fabric.io/public/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar",
+ "https://maven.google.com/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar",
+ "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar"
+ ],
+ "sha256": "da2e67cba66639197d23c1976e6c27d0967ad4dc69e6228b934e05a0d39e2991",
+ "url": "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar"
+ },
{
"coord": "org.eclipse.parsson:parsson:1.1.2",
"dependencies": [
@@ -9932,36 +11035,36 @@
{
"coord": "com.google.android.gms:play-services-ads-identifier:aar:sources:17.0.0",
"dependencies": [
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
"androidx.core:core:aar:sources:1.3.1",
"androidx.collection:collection:jar:sources:1.1.0",
- "androidx.fragment:fragment:aar:sources:1.2.0"
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"file": null
},
{
- "coord": "com.google.android.gms:play-services-base:aar:sources:17.0.0",
+ "coord": "com.google.android.gms:play-services-base:aar:sources:18.0.1",
"dependencies": [
"androidx.core:core:aar:sources:1.3.1",
"androidx.fragment:fragment:aar:sources:1.2.0",
"androidx.collection:collection:jar:sources:1.1.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
"androidx.core:core:aar:sources:1.3.1",
"androidx.fragment:fragment:aar:sources:1.2.0",
"androidx.collection:collection:jar:sources:1.1.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"file": null
},
{
- "coord": "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
+ "coord": "com.google.android.gms:play-services-basement:aar:sources:18.0.0",
"dependencies": [
"androidx.core:core:aar:sources:1.3.1",
"androidx.collection:collection:jar:sources:1.1.0",
@@ -9978,13 +11081,14 @@
"coord": "com.google.android.gms:play-services-measurement-api:aar:sources:17.5.0",
"dependencies": [
"androidx.documentfile:documentfile:aar:sources:1.0.0",
- "com.google.firebase:firebase-components:aar:sources:16.0.0",
"androidx.print:print:aar:sources:1.0.0",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
"androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0",
"androidx.core:core:aar:sources:1.3.1",
"androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0",
"androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0",
"androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
"com.google.firebase:firebase-measurement-connector:aar:sources:18.0.0",
"androidx.collection:collection:jar:sources:1.1.0",
"com.google.android.gms:play-services-ads-identifier:aar:sources:17.0.0",
@@ -9993,40 +11097,39 @@
"com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0",
"androidx.annotation:annotation:jar:sources:1.1.0",
"com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0",
- "com.google.firebase:firebase-common:aar:sources:19.3.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
"com.google.firebase:firebase-installations:aar:sources:16.3.2",
"com.google.auto.value:auto-value-annotations:jar:sources:1.8.1",
"androidx.loader:loader:aar:sources:1.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
"com.google.android.gms:play-services-stats:aar:sources:17.0.0",
- "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0"
+ "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
- "com.google.firebase:firebase-components:aar:sources:16.0.0",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
"com.google.firebase:firebase-measurement-connector:aar:sources:18.0.0",
"com.google.android.gms:play-services-ads-identifier:aar:sources:17.0.0",
"com.google.android.gms:play-services-measurement-sdk-api:aar:sources:17.5.0",
"com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0",
"com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0",
- "com.google.firebase:firebase-common:aar:sources:19.3.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
"com.google.firebase:firebase-installations:aar:sources:16.3.2",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
- "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0"
+ "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"file": null
},
{
"coord": "com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0",
"dependencies": [
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
"androidx.core:core:aar:sources:1.3.1",
"androidx.collection:collection:jar:sources:1.1.0",
- "androidx.fragment:fragment:aar:sources:1.2.0"
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"file": null
},
@@ -10046,16 +11149,16 @@
"com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0",
"androidx.annotation:annotation:jar:sources:1.1.0",
"androidx.loader:loader:aar:sources:1.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
- "com.google.android.gms:play-services-stats:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-stats:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
"androidx.core:core:aar:sources:1.3.1",
"androidx.collection:collection:jar:sources:1.1.0",
"com.google.android.gms:play-services-ads-identifier:aar:sources:17.0.0",
"com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
- "com.google.android.gms:play-services-stats:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-stats:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"file": null
},
@@ -10066,10 +11169,10 @@
"androidx.fragment:fragment:aar:sources:1.2.0",
"androidx.collection:collection:jar:sources:1.1.0",
"com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0",
"com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0"
],
"file": null
@@ -10091,12 +11194,12 @@
"androidx.annotation:annotation:jar:sources:1.1.0",
"com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0",
"androidx.loader:loader:aar:sources:1.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
- "com.google.android.gms:play-services-stats:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-stats:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
"androidx.collection:collection:jar:sources:1.1.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0",
"com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0",
"com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0"
],
@@ -10119,8 +11222,8 @@
"androidx.annotation:annotation:jar:sources:1.1.0",
"com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0",
"androidx.loader:loader:aar:sources:1.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
- "com.google.android.gms:play-services-stats:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-stats:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
"androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0",
@@ -10128,8 +11231,8 @@
"com.google.android.gms:play-services-ads-identifier:aar:sources:17.0.0",
"com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0",
"com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
- "com.google.android.gms:play-services-stats:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-stats:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"file": null
},
@@ -10147,24 +11250,24 @@
"androidx.lifecycle:lifecycle-livedata:aar:sources:2.2.0",
"androidx.annotation:annotation:jar:sources:1.1.0",
"androidx.loader:loader:aar:sources:1.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
"androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"file": null
},
{
- "coord": "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
+ "coord": "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
"dependencies": [
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
"androidx.core:core:aar:sources:1.3.1",
"androidx.collection:collection:jar:sources:1.1.0",
- "androidx.fragment:fragment:aar:sources:1.2.0"
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"file": null
},
@@ -10186,13 +11289,14 @@
"coord": "com.google.firebase:firebase-analytics:jar:sources:17.5.0",
"dependencies": [
"androidx.documentfile:documentfile:aar:sources:1.0.0",
- "com.google.firebase:firebase-components:aar:sources:16.0.0",
"androidx.print:print:aar:sources:1.0.0",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
"androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0",
"androidx.core:core:aar:sources:1.3.1",
"androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0",
"androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0",
"androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
"com.google.firebase:firebase-measurement-connector:aar:sources:18.0.0",
"androidx.collection:collection:jar:sources:1.1.0",
"com.google.android.gms:play-services-ads-identifier:aar:sources:17.0.0",
@@ -10204,14 +11308,13 @@
"androidx.annotation:annotation:jar:sources:1.1.0",
"com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0",
"com.google.android.gms:play-services-measurement:aar:sources:17.5.0",
- "com.google.firebase:firebase-common:aar:sources:19.3.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
"com.google.firebase:firebase-installations:aar:sources:16.3.2",
"com.google.auto.value:auto-value-annotations:jar:sources:1.8.1",
"androidx.loader:loader:aar:sources:1.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
"com.google.android.gms:play-services-stats:aar:sources:17.0.0",
- "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0"
+ "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
"com.google.android.gms:play-services-measurement:aar:sources:17.5.0",
@@ -10220,21 +11323,120 @@
],
"file": null
},
+ {
+ "coord": "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2",
+ "dependencies": [
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
+ "androidx.core:core:aar:sources:1.3.1",
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "androidx.collection:collection:jar:sources:1.1.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "directDependencies": [
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1"
+ ],
+ "file": null
+ },
+ {
+ "coord": "com.google.firebase:firebase-auth-ktx:jar:sources:19.3.1",
+ "dependencies": [
+ "com.google.firebase:firebase-common-ktx:aar:sources:20.1.1",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "androidx.core:core:aar:sources:1.3.1",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0",
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-auth:aar:sources:19.3.1",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "androidx.collection:collection:jar:sources:1.1.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10",
+ "androidx.annotation:annotation:jar:sources:1.1.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1",
+ "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "directDependencies": [
+ "com.google.firebase:firebase-common-ktx:aar:sources:20.1.1",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-auth:aar:sources:19.3.1",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10"
+ ],
+ "file": null
+ },
+ {
+ "coord": "com.google.firebase:firebase-auth:aar:sources:19.3.1",
+ "dependencies": [
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "androidx.core:core:aar:sources:1.3.1",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0",
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "androidx.collection:collection:jar:sources:1.1.0",
+ "androidx.annotation:annotation:jar:sources:1.1.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1",
+ "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "directDependencies": [
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0",
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "androidx.collection:collection:jar:sources:1.1.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "file": null
+ },
+ {
+ "coord": "com.google.firebase:firebase-common-ktx:aar:sources:20.1.1",
+ "dependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
+ "androidx.core:core:aar:sources:1.3.1",
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "androidx.collection:collection:jar:sources:1.1.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10",
+ "androidx.annotation:annotation:jar:sources:1.1.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "directDependencies": [
+ "androidx.annotation:annotation:jar:sources:1.1.0",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10"
+ ],
+ "file": null
+ },
{
"coord": "com.google.firebase:firebase-crashlytics:jar:sources:17.1.1",
"dependencies": [
"androidx.documentfile:documentfile:aar:sources:1.0.0",
"com.google.android.datatransport:transport-runtime:aar:sources:2.2.3",
"com.squareup.okhttp3:okhttp:jar:sources:4.7.2",
- "com.google.firebase:firebase-components:aar:sources:16.0.0",
"androidx.print:print:aar:sources:1.0.0",
- "com.google.android.gms:play-services-base:aar:sources:17.0.0",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
"androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0",
"androidx.core:core:aar:sources:1.3.1",
"androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0",
"com.google.firebase:firebase-iid:aar:sources:20.1.5",
"androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0",
"androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
"com.google.firebase:firebase-measurement-connector:aar:sources:18.0.0",
"androidx.collection:collection:jar:sources:1.1.0",
"com.google.dagger:dagger:jar:sources:2.28.1",
@@ -10243,27 +11445,27 @@
"com.google.android.datatransport:transport-backend-cct:aar:sources:2.3.0",
"com.google.firebase:firebase-encoders-json:aar:sources:16.1.0",
"androidx.annotation:annotation:jar:sources:1.1.0",
- "com.google.firebase:firebase-common:aar:sources:19.3.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
"com.google.firebase:firebase-installations:aar:sources:16.3.2",
"com.google.auto.value:auto-value-annotations:jar:sources:1.8.1",
"androidx.loader:loader:aar:sources:1.0.0",
"com.google.firebase:firebase-iid-interop:aar:sources:17.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
"com.google.android.gms:play-services-stats:aar:sources:17.0.0",
- "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0"
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
"com.google.android.datatransport:transport-runtime:aar:sources:2.2.3",
"com.squareup.okhttp3:okhttp:jar:sources:4.7.2",
- "com.google.firebase:firebase-components:aar:sources:16.0.0",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
"com.google.firebase:firebase-iid:aar:sources:20.1.5",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
"com.google.firebase:firebase-measurement-connector:aar:sources:18.0.0",
"com.google.android.datatransport:transport-api:aar:sources:2.2.0",
"com.google.android.datatransport:transport-backend-cct:aar:sources:2.3.0",
"com.google.firebase:firebase-encoders-json:aar:sources:16.1.0",
- "com.google.firebase:firebase-common:aar:sources:19.3.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
"com.google.firebase:firebase-iid-interop:aar:sources:17.0.0"
],
"file": null
@@ -10271,16 +11473,15 @@
{
"coord": "com.google.firebase:firebase-iid-interop:aar:sources:17.0.0",
"dependencies": [
- "com.google.android.gms:play-services-base:aar:sources:17.0.0",
"androidx.core:core:aar:sources:1.3.1",
"androidx.fragment:fragment:aar:sources:1.2.0",
"androidx.collection:collection:jar:sources:1.1.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-base:aar:sources:17.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"file": null
},
@@ -10288,39 +11489,39 @@
"coord": "com.google.firebase:firebase-iid:aar:sources:20.1.5",
"dependencies": [
"androidx.documentfile:documentfile:aar:sources:1.0.0",
- "com.google.firebase:firebase-components:aar:sources:16.0.0",
"androidx.print:print:aar:sources:1.0.0",
- "com.google.android.gms:play-services-base:aar:sources:17.0.0",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
"androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0",
"androidx.core:core:aar:sources:1.3.1",
"androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0",
"androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0",
"androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
"androidx.collection:collection:jar:sources:1.1.0",
"androidx.lifecycle:lifecycle-livedata:aar:sources:2.2.0",
"androidx.annotation:annotation:jar:sources:1.1.0",
- "com.google.firebase:firebase-common:aar:sources:19.3.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
"com.google.firebase:firebase-installations:aar:sources:16.3.2",
"com.google.auto.value:auto-value-annotations:jar:sources:1.8.1",
"androidx.loader:loader:aar:sources:1.0.0",
"com.google.firebase:firebase-iid-interop:aar:sources:17.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
"com.google.android.gms:play-services-stats:aar:sources:17.0.0",
- "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0"
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
- "com.google.firebase:firebase-components:aar:sources:16.0.0",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
"androidx.core:core:aar:sources:1.3.1",
"androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
"androidx.collection:collection:jar:sources:1.1.0",
- "com.google.firebase:firebase-common:aar:sources:19.3.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
"com.google.firebase:firebase-installations:aar:sources:16.3.2",
"com.google.firebase:firebase-iid-interop:aar:sources:17.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
"com.google.android.gms:play-services-stats:aar:sources:17.0.0",
- "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0"
+ "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"file": null
},
@@ -10330,32 +11531,31 @@
"androidx.core:core:aar:sources:1.3.1",
"androidx.fragment:fragment:aar:sources:1.2.0",
"androidx.collection:collection:jar:sources:1.1.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0"
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1"
],
"file": null
},
{
"coord": "com.google.firebase:firebase-installations:aar:sources:16.3.2",
"dependencies": [
- "com.google.firebase:firebase-components:aar:sources:16.0.0",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
"androidx.core:core:aar:sources:1.3.1",
"androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
"androidx.collection:collection:jar:sources:1.1.0",
- "androidx.annotation:annotation:jar:sources:1.1.0",
- "com.google.firebase:firebase-common:aar:sources:19.3.0",
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
"com.google.auto.value:auto-value-annotations:jar:sources:1.8.1",
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
- "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0"
+ "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
],
"directDependencies": [
- "com.google.android.gms:play-services-tasks:aar:sources:17.0.0",
- "com.google.firebase:firebase-common:aar:sources:19.3.0",
- "com.google.firebase:firebase-components:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
"com.google.firebase:firebase-installations-interop:aar:sources:16.0.0"
],
"file": null
@@ -10363,13 +11563,23 @@
{
"coord": "com.google.firebase:firebase-measurement-connector:aar:sources:18.0.0",
"dependencies": [
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0",
"androidx.core:core:aar:sources:1.3.1",
"androidx.collection:collection:jar:sources:1.1.0",
- "androidx.fragment:fragment:aar:sources:1.2.0"
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "directDependencies": [
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "file": null
+ },
+ {
+ "coord": "com.google.firebase:protolite-well-known-types:aar:sources:18.0.0",
+ "dependencies": [
+ "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2"
],
"directDependencies": [
- "com.google.android.gms:play-services-basement:aar:sources:17.0.0"
+ "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2"
],
"file": null
},
diff --git a/third_party/versions.bzl b/third_party/versions.bzl
index b51f0c4b457..24195afce9e 100644
--- a/third_party/versions.bzl
+++ b/third_party/versions.bzl
@@ -54,9 +54,12 @@ MAVEN_PRODUCTION_DEPENDENCY_VERSIONS = {
"com.github.bumptech.glide:glide": "4.11.0",
"com.google.android.flexbox:flexbox": "3.0.0",
"com.google.android.material:material": "1.3.0",
+ "com.google.auto.value:auto-value-annotations": "1.8.1",
"com.google.firebase:firebase-analytics": "17.5.0",
+ "com.google.firebase:firebase-auth-ktx": "19.3.1",
"com.google.firebase:firebase-common": "19.3.0",
"com.google.firebase:firebase-crashlytics": "17.1.1",
+ "com.google.firebase:firebase-firestore-ktx": "24.2.1",
"com.google.gms:google-services": "4.3.3",
"com.google.guava:guava": "28.1-android",
"com.google.protobuf:protobuf-javalite": "3.17.3",
@@ -70,6 +73,7 @@ MAVEN_PRODUCTION_DEPENDENCY_VERSIONS = {
"javax.annotation:javax.annotation-api:jar": "1.3.2",
"javax.inject:javax.inject": "1",
"nl.dionsegijn:konfetti": "1.2.5",
+ "org.checkerframework:checker-qual": "3.13.0",
"org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar": "1.3.72",
"org.jetbrains.kotlinx:kotlinx-coroutines-android": "1.4.1",
"org.jetbrains.kotlinx:kotlinx-coroutines-core": "1.4.1",
diff --git a/utility/BUILD.bazel b/utility/BUILD.bazel
index aff05e104d5..b69cab715d7 100644
--- a/utility/BUILD.bazel
+++ b/utility/BUILD.bazel
@@ -69,6 +69,7 @@ kt_android_library(
":resources",
"//app:crashlytics",
"//app:crashlytics_deps",
+ "//app:firestore_deps",
"//model/src/main/proto:event_logger_java_proto_lite",
"//model/src/main/proto:platform_parameter_java_proto_lite",
"//third_party:androidx_appcompat_appcompat",
@@ -107,6 +108,7 @@ TEST_DEPS = [
":utility",
"//app:crashlytics",
"//app:crashlytics_deps",
+ "//app:firestore_deps",
"//model/src/main/proto:test_models",
"//testing",
"//testing/src/main/java/org/oppia/android/testing/data:data_provider_test_monitor",
diff --git a/utility/build.gradle b/utility/build.gradle
index 39589a8692b..be880396432 100644
--- a/utility/build.gradle
+++ b/utility/build.gradle
@@ -89,6 +89,8 @@ dependencies {
'com.google.firebase:firebase-analytics-ktx:17.5.0',
'com.google.firebase:firebase-core:17.5.0',
'com.google.firebase:firebase-crashlytics:17.0.0',
+ 'com.google.firebase:firebase-firestore-ktx:24.2.1',
+ 'com.google.firebase:firebase-auth-ktx:19.3.1',
'com.google.protobuf:protobuf-javalite:3.17.3',
"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version",
'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1',
diff --git a/utility/src/main/java/org/oppia/android/util/logging/LogUploader.kt b/utility/src/main/java/org/oppia/android/util/logging/LogUploader.kt
index 9104e66a24f..0c337ca71a6 100644
--- a/utility/src/main/java/org/oppia/android/util/logging/LogUploader.kt
+++ b/utility/src/main/java/org/oppia/android/util/logging/LogUploader.kt
@@ -17,4 +17,10 @@ interface LogUploader {
workManager: WorkManager,
workRequest: PeriodicWorkRequest
)
+
+ /** Enqueues a [workRequest] using the [workManager] for uploading event logs that are meant for Firestore. */
+ fun enqueueWorkRequestForFirestore(
+ workManager: WorkManager,
+ workRequest: PeriodicWorkRequest
+ )
}
diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/BUILD.bazel b/utility/src/main/java/org/oppia/android/util/logging/firebase/BUILD.bazel
index be07e37c2d8..91e936b66a8 100644
--- a/utility/src/main/java/org/oppia/android/util/logging/firebase/BUILD.bazel
+++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/BUILD.bazel
@@ -47,7 +47,9 @@ kt_android_library(
visibility = ["//:oppia_prod_module_visibility"],
deps = [
":dagger",
+ ":debug_module",
":firebase_exception_logger",
+ ":firestore_logger_impl",
":prod_impl",
"//third_party:com_google_firebase_firebase-analytics",
"//third_party:com_google_firebase_firebase-crashlytics",
@@ -82,8 +84,75 @@ kt_android_library(
deps = [
":dagger",
":debug_event_logger",
+ ":debug_firestore_logger_impl",
":firebase_exception_logger",
],
)
+kt_android_library(
+ name = "firestore_logger_impl",
+ srcs = [
+ "FirestoreEventLoggerProdImpl.kt",
+ ],
+ deps = [
+ ":firestore_logger",
+ ":firestore_wrapper_impl",
+ "//third_party:androidx_work_work-runtime",
+ "//third_party:androidx_work_work-runtime-ktx",
+ "//third_party:com_google_firebase_firebase-firestore-ktx",
+ "//utility/src/main/java/org/oppia/android/util/logging:console_logger",
+ ],
+)
+
+kt_android_library(
+ name = "firestore_logger",
+ srcs = [
+ "FirestoreEventLogger.kt",
+ ],
+ visibility = ["//:oppia_api_visibility"],
+ deps = [
+ "//model/src/main/proto:event_logger_java_proto_lite",
+ ],
+)
+
+kt_android_library(
+ name = "debug_firestore_logger_impl",
+ srcs = [
+ "DebugFirestoreEventLoggerImpl.kt",
+ ],
+ visibility = [
+ "//app:__pkg__",
+ ],
+ deps = [
+ ":firestore_logger_impl",
+ ":firestore_wrapper_impl",
+ "//third_party:javax_inject_javax_inject",
+ ],
+)
+
+kt_android_library(
+ name = "firestore_wrapper",
+ srcs = [
+ "FirestoreInstance.kt",
+ "FirestoreInstanceWrapper.kt",
+ ],
+ deps = [
+ "//third_party:com_google_firebase_firebase-firestore-ktx",
+ "//third_party:org_jetbrains_kotlinx_kotlinx-coroutines-core",
+ "//utility/src/main/java/org/oppia/android/util/data:async_result",
+ ],
+)
+
+kt_android_library(
+ name = "firestore_wrapper_impl",
+ srcs = [
+ "FirestoreInstanceWrapperImpl.kt",
+ ],
+ visibility = ["//:oppia_prod_module_visibility"],
+ deps = [
+ ":dagger",
+ ":firestore_wrapper",
+ ],
+)
+
dagger_rules()
diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImpl.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImpl.kt
new file mode 100644
index 00000000000..f5d39f998cd
--- /dev/null
+++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImpl.kt
@@ -0,0 +1,33 @@
+package org.oppia.android.util.logging.firebase
+
+import org.oppia.android.app.model.EventLog
+import java.util.concurrent.CopyOnWriteArrayList
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/**
+ * A debug implementation of [FirestoreEventLogger] used in developer-only builds of the app.
+ *
+ * It forwards events to a production [FirestoreEventLogger] for real logging, but it also records logged
+ * events for later retrieval (e.g. via [getEventList]).
+ */
+@Singleton
+class DebugFirestoreEventLoggerImpl @Inject constructor(
+ private val realEventLogger: FirestoreEventLoggerProdImpl
+) : FirestoreEventLogger {
+ private val eventList = CopyOnWriteArrayList()
+
+ override fun uploadEvent(eventLog: EventLog) {
+ eventList.add(eventLog)
+ realEventLogger.uploadEvent(eventLog)
+ }
+
+ /** Returns the list of all [EventLog]s logged for Firestore. */
+ fun getEventList(): List = eventList
+
+ /** Returns the most recently logged event. */
+ fun getMostRecentEvent(): EventLog = getEventList().last()
+
+ /** Clears all the events that are currently logged. */
+ fun clearAllEvents() = eventList.clear()
+}
diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugLogReportingModule.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugLogReportingModule.kt
index 1f897833e89..cfcaf2b8b30 100644
--- a/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugLogReportingModule.kt
+++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugLogReportingModule.kt
@@ -27,4 +27,14 @@ class DebugLogReportingModule {
factory: FirebaseAnalyticsEventLogger.Factory
): PerformanceMetricsEventLogger =
factory.createPerformanceMetricEventLogger()
+
+ @Provides
+ @Singleton
+ fun provideDebugFirestoreLogger(debugFirestoreEventLogger: DebugFirestoreEventLoggerImpl):
+ FirestoreEventLogger = debugFirestoreEventLogger
+
+ @Provides
+ @Singleton
+ fun provideFirebaseFirestoreInstanceWrapper(wrapperImpl: FirestoreInstanceWrapperImpl):
+ FirestoreInstanceWrapper = wrapperImpl
}
diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploader.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploader.kt
index 067c7c4c815..40316ac0397 100644
--- a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploader.kt
+++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploader.kt
@@ -9,6 +9,7 @@ import javax.inject.Inject
private const val OPPIA_EVENT_WORK = "OPPIA_EVENT_WORK_REQUEST"
private const val OPPIA_EXCEPTION_WORK = "OPPIA_EXCEPTION_WORK_REQUEST"
private const val OPPIA_PERFORMANCE_METRICS_WORK = "OPPIA_PERFORMANCE_METRICS_WORK"
+private const val OPPIA_FIRESTORE_WORK = "OPPIA_FIRESTORE_WORK_REQUEST"
/** Enqueues work requests for uploading stored event/exception logs to the remote service. */
class FirebaseLogUploader @Inject constructor() :
@@ -46,4 +47,15 @@ class FirebaseLogUploader @Inject constructor() :
workRequest
)
}
+
+ override fun enqueueWorkRequestForFirestore(
+ workManager: WorkManager,
+ workRequest: PeriodicWorkRequest
+ ) {
+ workManager.enqueueUniquePeriodicWork(
+ OPPIA_FIRESTORE_WORK,
+ ExistingPeriodicWorkPolicy.KEEP,
+ workRequest
+ )
+ }
}
diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLogger.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLogger.kt
new file mode 100644
index 00000000000..304557108ca
--- /dev/null
+++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLogger.kt
@@ -0,0 +1,13 @@
+package org.oppia.android.util.logging.firebase
+
+import org.oppia.android.app.model.EventLog
+
+/** Logger for uploading data bundles to Firestore. */
+interface FirestoreEventLogger {
+ /**
+ * Converts eventLogs to Firestore documents and uploads or save them on disk.
+ *
+ * @param eventLog which contains all the relevant data to be reported
+ */
+ fun uploadEvent(eventLog: EventLog)
+}
diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLoggerProdImpl.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLoggerProdImpl.kt
new file mode 100644
index 00000000000..5e6f133b928
--- /dev/null
+++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLoggerProdImpl.kt
@@ -0,0 +1,31 @@
+package org.oppia.android.util.logging.firebase
+
+import org.oppia.android.app.model.EventLog
+import org.oppia.android.util.logging.ConsoleLogger
+import javax.inject.Inject
+
+/** Logger for uploading to Firestore. */
+class FirestoreEventLoggerProdImpl @Inject constructor(
+ private val consoleLogger: ConsoleLogger,
+ private val firestoreInstanceWrapper: FirestoreInstanceWrapper
+) : FirestoreEventLogger {
+ /** Converts an event to a document and uploads it to Firebase Firestore. */
+ override fun uploadEvent(eventLog: EventLog) {
+ val eventContext = eventLog.context.optionalResponse
+ val document = hashMapOf(
+ "survey_id" to eventContext.surveyDetails.surveyId,
+ "open_feedback_answer" to eventContext.feedbackAnswer,
+ "time_submitted" to eventLog.timestamp
+ )
+
+ firestoreInstanceWrapper.firestoreInstance?.firebaseFirestore
+ ?.collection("nps_survey_open_feedback")
+ ?.add(document)
+ ?.addOnSuccessListener {
+ consoleLogger.i("FirestoreEventLoggerProdImpl", "Upload to Firestore was successful")
+ }
+ ?.addOnFailureListener { e ->
+ consoleLogger.e("FirestoreEventLoggerProdImpl", e.toString(), e)
+ }
+ }
+}
diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstance.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstance.kt
new file mode 100644
index 00000000000..a2894cee29d
--- /dev/null
+++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstance.kt
@@ -0,0 +1,8 @@
+package org.oppia.android.util.logging.firebase
+
+import com.google.firebase.firestore.FirebaseFirestore
+
+/** Wrapper for [FirebaseFirestore], used to pass an instance of [FirebaseFirestore]. */
+data class FirestoreInstance(
+ val firebaseFirestore: FirebaseFirestore
+)
diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapper.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapper.kt
new file mode 100644
index 00000000000..246bb505ad4
--- /dev/null
+++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapper.kt
@@ -0,0 +1,7 @@
+package org.oppia.android.util.logging.firebase
+
+/** Interface for providing an implementation of [FirestoreInstance]. */
+interface FirestoreInstanceWrapper {
+ /** Returns a wrapped instance of FirebaseFirestore. */
+ val firestoreInstance: FirestoreInstance?
+}
diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapperImpl.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapperImpl.kt
new file mode 100644
index 00000000000..039c1545509
--- /dev/null
+++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapperImpl.kt
@@ -0,0 +1,13 @@
+package org.oppia.android.util.logging.firebase
+
+import com.google.firebase.firestore.ktx.firestore
+import com.google.firebase.ktx.Firebase
+import javax.inject.Inject
+
+/** Implementation of [FirestoreInstanceWrapper]. */
+class FirestoreInstanceWrapperImpl @Inject constructor() :
+ FirestoreInstanceWrapper {
+
+ override val firestoreInstance: FirestoreInstance
+ get() = FirestoreInstance(Firebase.firestore)
+}
diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt
index c822eb02f2d..9ab74a2cbd3 100644
--- a/utility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt
+++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt
@@ -27,4 +27,14 @@ class LogReportingModule {
factory: FirebaseAnalyticsEventLogger.Factory
): PerformanceMetricsEventLogger =
factory.createPerformanceMetricEventLogger()
+
+ @Provides
+ @Singleton
+ fun provideFirestoreLogger(factory: FirestoreEventLoggerProdImpl):
+ FirestoreEventLogger = factory
+
+ @Provides
+ @Singleton
+ fun provideFirebaseFirestoreInstanceWrapper(wrapperImpl: FirestoreInstanceWrapperImpl):
+ FirestoreInstanceWrapper = wrapperImpl
}
diff --git a/utility/src/test/java/org/oppia/android/util/logging/firebase/BUILD.bazel b/utility/src/test/java/org/oppia/android/util/logging/firebase/BUILD.bazel
index 7d96eebedab..3ae5970b336 100644
--- a/utility/src/test/java/org/oppia/android/util/logging/firebase/BUILD.bazel
+++ b/utility/src/test/java/org/oppia/android/util/logging/firebase/BUILD.bazel
@@ -29,4 +29,29 @@ oppia_android_test(
],
)
+oppia_android_test(
+ name = "DebugFirestoreEventLoggerImplTest",
+ srcs = ["DebugFirestoreEventLoggerImplTest.kt"],
+ custom_package = "org.oppia.android.util.logging.firebase",
+ test_class = "org.oppia.android.util.logging.firebase.DebugFirestoreEventLoggerImplTest",
+ test_manifest = "//utility:test_manifest",
+ deps = [
+ ":dagger",
+ "//testing",
+ "//testing/src/main/java/org/oppia/android/testing/robolectric:test_module",
+ "//testing/src/main/java/org/oppia/android/testing/threading:test_module",
+ "//testing/src/main/java/org/oppia/android/testing/time:test_module",
+ "//third_party:androidx_test_ext_junit",
+ "//third_party:androidx_test_ext_truth",
+ "//third_party:com_google_truth_truth",
+ "//third_party:org_robolectric_robolectric",
+ "//third_party:robolectric_android-all",
+ "//utility/src/main/java/org/oppia/android/util/locale/testing:test_module",
+ "//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module",
+ "//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_module",
+ "//utility/src/main/java/org/oppia/android/util/logging/firebase:prod_module",
+ "//utility/src/main/java/org/oppia/android/util/networking:debug_module",
+ ],
+)
+
dagger_rules()
diff --git a/utility/src/test/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImplTest.kt b/utility/src/test/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImplTest.kt
new file mode 100644
index 00000000000..011eb532a09
--- /dev/null
+++ b/utility/src/test/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImplTest.kt
@@ -0,0 +1,193 @@
+package org.oppia.android.util.logging.firebase
+
+import android.app.Application
+import android.content.Context
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import dagger.BindsInstance
+import dagger.Component
+import dagger.Module
+import dagger.Provides
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.oppia.android.app.model.EventLog
+import org.oppia.android.testing.FakeFirestoreInstanceWrapperImpl
+import org.oppia.android.testing.assertThrows
+import org.oppia.android.testing.robolectric.RobolectricModule
+import org.oppia.android.testing.threading.TestDispatcherModule
+import org.oppia.android.testing.time.FakeOppiaClockModule
+import org.oppia.android.util.locale.testing.LocaleTestModule
+import org.oppia.android.util.logging.EnableConsoleLog
+import org.oppia.android.util.logging.EnableFileLog
+import org.oppia.android.util.logging.GlobalLogLevel
+import org.oppia.android.util.logging.LogLevel
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.LooperMode
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** Tests for [DebugFirestoreEventLoggerImpl]. */
+// FunctionName: test names are conventionally named with underscores.
+@Suppress("FunctionName")
+@RunWith(AndroidJUnit4::class)
+@LooperMode(LooperMode.Mode.PAUSED)
+@Config(manifest = Config.NONE)
+class DebugFirestoreEventLoggerImplTest {
+ @Inject
+ lateinit var debugFirestoreLoggerImpl: DebugFirestoreEventLoggerImpl
+
+ @Inject
+ lateinit var eventLogger: FirestoreEventLogger
+
+ private val eventLog1 = EventLog.newBuilder().setPriority(EventLog.Priority.ESSENTIAL).build()
+ private val eventLog2 = EventLog.newBuilder().setPriority(EventLog.Priority.ESSENTIAL).build()
+
+ @Before
+ fun setUp() {
+ setUpTestApplicationComponent()
+ }
+
+ @Test
+ fun testDebugFirestoreEventLogger_logEvent_returnsEvent() {
+ eventLogger.uploadEvent(eventLog1)
+ val event = debugFirestoreLoggerImpl.getMostRecentEvent()
+
+ assertThat(event).isEqualTo(eventLog1)
+ assertThat(event.priority).isEqualTo(EventLog.Priority.ESSENTIAL)
+ }
+
+ @Test
+ fun testDebugFirestoreEventLogger_logEventTwice_returnsLatestEvent() {
+ eventLogger.uploadEvent(eventLog1)
+ eventLogger.uploadEvent(eventLog2)
+ val event = debugFirestoreLoggerImpl.getMostRecentEvent()
+
+ assertThat(event).isEqualTo(eventLog2)
+ }
+
+ @Test
+ fun testDebugFirestoreEventLogger_logEvent_clearAllEvents_logEventAgain_returnsLatestEvent() {
+ eventLogger.uploadEvent(eventLog1)
+ debugFirestoreLoggerImpl.clearAllEvents()
+ debugFirestoreLoggerImpl.uploadEvent(eventLog2)
+ val event = debugFirestoreLoggerImpl.getMostRecentEvent()
+
+ assertThat(event).isEqualTo(eventLog2)
+ }
+
+ @Test
+ fun testDebugFirestoreEventLogger_logNothing_getMostRecent_returnsFailure() {
+ assertThrows(NoSuchElementException::class) { debugFirestoreLoggerImpl.getMostRecentEvent() }
+ }
+
+ @Test
+ fun testDebugFirestoreEventLogger_logEvent_clearAllEvents_getMostRecent_returnsFailure() {
+ eventLogger.uploadEvent(eventLog1)
+ debugFirestoreLoggerImpl.clearAllEvents()
+
+ val eventException = assertThrows(NoSuchElementException::class) {
+ debugFirestoreLoggerImpl.getMostRecentEvent()
+ }
+
+ assertThat(eventException).isInstanceOf(NoSuchElementException::class.java)
+ }
+
+ @Test
+ fun testDebugFirestoreEventLogger_clearAllEvents_returnsEmptyList() {
+ debugFirestoreLoggerImpl.clearAllEvents()
+ val isListEmpty = debugFirestoreLoggerImpl.getEventList().isEmpty()
+
+ assertThat(isListEmpty).isTrue()
+ }
+
+ @Test
+ fun testDebugFirestoreEventLogger_logEvent_clearAllEvents_returnsEmptyList() {
+ eventLogger.uploadEvent(eventLog1)
+ debugFirestoreLoggerImpl.clearAllEvents()
+ val isListEmpty = debugFirestoreLoggerImpl.getEventList().isEmpty()
+
+ assertThat(isListEmpty).isTrue()
+ }
+
+ @Test
+ fun testDebugFirestoreEventLogger_logMultipleEvents_clearAllEvents_returnsEmptyList() {
+ eventLogger.uploadEvent(eventLog1)
+ eventLogger.uploadEvent(eventLog2)
+ debugFirestoreLoggerImpl.clearAllEvents()
+ val isListEmpty = debugFirestoreLoggerImpl.getEventList().isEmpty()
+
+ assertThat(isListEmpty).isTrue()
+ }
+
+ @Test
+ fun testDebugFirestoreEventLogger_logEvent_returnsNonEmptyList() {
+ eventLogger.uploadEvent(eventLog1)
+ val isListEmpty = debugFirestoreLoggerImpl.getEventList().isEmpty()
+
+ assertThat(isListEmpty).isFalse()
+ }
+
+ private fun setUpTestApplicationComponent() {
+ DaggerDebugFirestoreEventLoggerImplTest_TestApplicationComponent.builder()
+ .setApplication(ApplicationProvider.getApplicationContext())
+ .build()
+ .inject(this)
+ }
+
+ // TODO(#89): Move this to a common test application component.
+ @Module
+ class TestModule {
+ @Provides
+ @Singleton
+ fun provideContext(application: Application): Context {
+ return application
+ }
+
+ // TODO(#59): Either isolate these to their own shared test module, or use the real logging
+ // module in tests to avoid needing to specify these settings for tests.
+ @EnableConsoleLog
+ @Provides
+ fun provideEnableConsoleLog(): Boolean = true
+
+ @EnableFileLog
+ @Provides
+ fun provideEnableFileLog(): Boolean = false
+
+ @GlobalLogLevel
+ @Provides
+ fun provideGlobalLogLevel(): LogLevel = LogLevel.VERBOSE
+
+ @Provides
+ @Singleton
+ fun provideDebugFirestoreLogger(debugFirestoreEventLogger: DebugFirestoreEventLoggerImpl):
+ FirestoreEventLogger = debugFirestoreEventLogger
+
+ @Provides
+ @Singleton
+ fun provideFirebaseFirestoreInstanceWrapper(
+ debugWrapperImpl: FakeFirestoreInstanceWrapperImpl
+ ): FirestoreInstanceWrapper = debugWrapperImpl
+ }
+
+ // TODO(#89): Move this to a common test application component.
+ @Singleton
+ @Component(
+ modules = [
+ TestModule::class, RobolectricModule::class,
+ TestDispatcherModule::class, FakeOppiaClockModule::class, LocaleTestModule::class
+ ]
+ )
+
+ interface TestApplicationComponent {
+ @Component.Builder
+ interface Builder {
+ @BindsInstance
+ fun setApplication(application: Application): Builder
+ fun build(): TestApplicationComponent
+ }
+
+ fun inject(debugEventLoggerTest: DebugFirestoreEventLoggerImplTest)
+ }
+}
From 60de5db925cac8b690a03e21264981d95ace9c20 Mon Sep 17 00:00:00 2001
From: Deon Olarewaju
Date: Sun, 28 Jan 2024 20:52:26 +0100
Subject: [PATCH 08/19] Fix part of #5261: InefficientWeight (#5297)
## Explanation
Fix part of #5261
(A) Added android:layout_width="0dp" to line 34 in
view_event_logs_event_log_item_view.xml
### Layout
Before:
After:
### Lint Check
Before:
After:
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
---------
Co-authored-by: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
---
app/src/main/res/layout/view_event_logs_event_log_item_view.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/layout/view_event_logs_event_log_item_view.xml b/app/src/main/res/layout/view_event_logs_event_log_item_view.xml
index 37a985146e1..b080bc27bc9 100644
--- a/app/src/main/res/layout/view_event_logs_event_log_item_view.xml
+++ b/app/src/main/res/layout/view_event_logs_event_log_item_view.xml
@@ -31,6 +31,7 @@
Date: Wed, 31 Jan 2024 00:48:35 +0530
Subject: [PATCH 09/19] Fix #5250 : Add support for logging device DPI events
(#5270)
## Explanation
Fix #5250 In the EventBundleCreator class, introduced a new item in the
bundle to log the screen density of the device. Stored using the key
"screen_density" and value retrieved from
resources.displayMetrics.screenDensity .
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
## For UI-specific PRs only
If your PR includes UI-related changes, then:
- Add screenshots for portrait/landscape for both a tablet & phone of
the before & after UI changes
- For the screenshots above, include both English and pseudo-localized
(RTL) screenshots (see [RTL
guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines))
- Add a video showing the full UX flow with a screen reader enabled (see
[accessibility
guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide))
- For PRs introducing new UI elements or color changes, both light and
dark mode screenshots must be included
- Add a screenshot demonstrating that you ran affected Espresso tests
locally & that they're passing
---------
Co-authored-by: Tejas-67
Co-authored-by: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
---
.../util/logging/EventBundleCreator.kt | 7 ++
.../util/logging/EventBundleCreatorTest.kt | 106 +++++++++---------
.../KenyaAlphaEventBundleCreatorTest.kt | 102 ++++++++---------
3 files changed, 111 insertions(+), 104 deletions(-)
diff --git a/utility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt b/utility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt
index 100f1c86c4c..1684878eb70 100644
--- a/utility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt
+++ b/utility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt
@@ -1,6 +1,7 @@
package org.oppia.android.util.logging
import android.content.Context
+import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
import org.oppia.android.app.model.AppLanguageSelection
@@ -129,6 +130,9 @@ class EventBundleCreator @Inject constructor(
private val appVersionCode by lazy { context.getVersionCode() }
private val appVersionName by lazy { context.getVersionName() }
private val eventCount by lazy { AtomicInteger() }
+ private val screenDensity by lazy {
+ Configuration().densityDpi
+ }
/**
* Fills the specified [bundle] with a logging-ready representation of [eventLog] and returns a
@@ -150,6 +154,9 @@ class EventBundleCreator @Inject constructor(
bundle.putString(
"oppia_audio_lang", eventLog.audioTranslationLanguageSelection.toAnalyticsText()
)
+ bundle.putInt(
+ "screen_density", screenDensity
+ )
return eventLog.context.convertToActivityContext().also { eventContext ->
// Only allow user IDs to be logged when the learner study feature is enabled.
eventContext.storeValue(
diff --git a/utility/src/test/java/org/oppia/android/util/logging/EventBundleCreatorTest.kt b/utility/src/test/java/org/oppia/android/util/logging/EventBundleCreatorTest.kt
index db424118e1f..7cb8ef98c35 100644
--- a/utility/src/test/java/org/oppia/android/util/logging/EventBundleCreatorTest.kt
+++ b/utility/src/test/java/org/oppia/android/util/logging/EventBundleCreatorTest.kt
@@ -176,7 +176,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(EventLog.getDefaultInstance(), bundle)
assertThat(typeName).isEqualTo("ERROR_internal_logging_failure")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(0)
assertThat(bundle).string("priority").isEqualTo("unspecified_priority")
assertThat(bundle).integer("event_type").isEqualTo(ACTIVITYCONTEXT_NOT_SET.number)
@@ -222,7 +222,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("ERROR_internal_logging_failure")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACTIVITYCONTEXT_NOT_SET.number)
@@ -570,7 +570,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_exploration_player_screen")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_EXPLORATION_ACTIVITY.number)
@@ -594,7 +594,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_exploration_player_screen")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_EXPLORATION_ACTIVITY.number)
@@ -620,7 +620,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("select_topic_info_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_INFO_TAB.number)
@@ -639,7 +639,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("select_topic_lessons_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_LESSONS_TAB.number)
@@ -821,7 +821,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("select_topic_practice_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_PRACTICE_TAB.number)
@@ -840,7 +840,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("select_topic_revision_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_REVISION_TAB.number)
@@ -859,7 +859,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_question_player_screen")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_QUESTION_PLAYER.number)
@@ -879,7 +879,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_story_chapter_list_screen")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_STORY_ACTIVITY.number)
@@ -899,7 +899,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_concept_card")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_CONCEPT_CARD.number)
@@ -918,7 +918,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_revision_card")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_REVISION_CARD.number)
@@ -938,7 +938,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("close_revision_card")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(CLOSE_REVISION_CARD.number)
@@ -958,7 +958,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("start_exploration_card")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_CARD_CONTEXT.number)
@@ -983,7 +983,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("start_exploration_card")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_CARD_CONTEXT.number)
@@ -1010,7 +1010,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("end_exploration_card")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(END_CARD_CONTEXT.number)
@@ -1035,7 +1035,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("end_exploration_card")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(END_CARD_CONTEXT.number)
@@ -1062,7 +1062,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("unlock_hint")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(HINT_UNLOCKED_CONTEXT.number)
@@ -1087,7 +1087,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("unlock_hint")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(HINT_UNLOCKED_CONTEXT.number)
@@ -1114,7 +1114,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("reveal_hint")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_HINT_CONTEXT.number)
@@ -1139,7 +1139,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("reveal_hint")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_HINT_CONTEXT.number)
@@ -1166,7 +1166,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("unlock_solution")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SOLUTION_UNLOCKED_CONTEXT.number)
@@ -1190,7 +1190,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("unlock_solution")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SOLUTION_UNLOCKED_CONTEXT.number)
@@ -1216,7 +1216,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("reveal_solution")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_SOLUTION_CONTEXT.number)
@@ -1240,7 +1240,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("reveal_solution")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_SOLUTION_CONTEXT.number)
@@ -1266,7 +1266,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("submit_answer")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SUBMIT_ANSWER_CONTEXT.number)
@@ -1292,7 +1292,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("submit_answer")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SUBMIT_ANSWER_CONTEXT.number)
@@ -1320,7 +1320,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("click_play_voiceover_button")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PLAY_VOICE_OVER_CONTEXT.number)
@@ -1346,7 +1346,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("click_play_voiceover_button")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PLAY_VOICE_OVER_CONTEXT.number)
@@ -1374,7 +1374,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("click_pause_voiceover_button")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PAUSE_VOICE_OVER_CONTEXT.number)
@@ -1400,7 +1400,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("click_pause_voiceover_button")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PAUSE_VOICE_OVER_CONTEXT.number)
@@ -1428,7 +1428,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("send_app_to_background")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_BACKGROUND_CONTEXT.number)
@@ -1446,7 +1446,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("send_app_to_background")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_BACKGROUND_CONTEXT.number)
@@ -1466,7 +1466,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("bring_app_to_foreground")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_FOREGROUND_CONTEXT.number)
@@ -1484,7 +1484,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("bring_app_to_foreground")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_FOREGROUND_CONTEXT.number)
@@ -1504,7 +1504,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("leave_exploration")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(EXIT_EXPLORATION_CONTEXT.number)
@@ -1528,7 +1528,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("leave_exploration")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(EXIT_EXPLORATION_CONTEXT.number)
@@ -1554,7 +1554,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("complete_exploration")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(FINISH_EXPLORATION_CONTEXT.number)
@@ -1578,7 +1578,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("complete_exploration")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(FINISH_EXPLORATION_CONTEXT.number)
@@ -1604,7 +1604,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("resume_in_progress_exploration")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(RESUME_EXPLORATION_CONTEXT.number)
@@ -1622,7 +1622,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("resume_in_progress_exploration")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(RESUME_EXPLORATION_CONTEXT.number)
@@ -1642,7 +1642,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("restart_in_progress_exploration")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_OVER_EXPLORATION_CONTEXT.number)
@@ -1660,7 +1660,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("restart_in_progress_exploration")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_OVER_EXPLORATION_CONTEXT.number)
@@ -1680,7 +1680,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("delete_profile")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(DELETE_PROFILE_CONTEXT.number)
@@ -1698,7 +1698,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("delete_profile")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(DELETE_PROFILE_CONTEXT.number)
@@ -1718,7 +1718,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_home_screen")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_HOME.number)
@@ -1736,7 +1736,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_profile_chooser_screen")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_PROFILE_CHOOSER.number)
@@ -1754,7 +1754,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("reach_invested_engagement")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(REACH_INVESTED_ENGAGEMENT.number)
@@ -1778,7 +1778,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("reach_invested_engagement")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(REACH_INVESTED_ENGAGEMENT.number)
@@ -1804,7 +1804,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("click_switch_language_in_lesson")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SWITCH_IN_LESSON_LANGUAGE.number)
@@ -1830,7 +1830,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("click_switch_language_in_lesson")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SWITCH_IN_LESSON_LANGUAGE.number)
@@ -1858,7 +1858,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("ERROR_internal_logging_failure")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(INSTALL_ID_FOR_FAILED_ANALYTICS_LOG.number)
@@ -1876,7 +1876,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("ERROR_internal_logging_failure")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(INSTALL_ID_FOR_FAILED_ANALYTICS_LOG.number)
diff --git a/utility/src/test/java/org/oppia/android/util/logging/KenyaAlphaEventBundleCreatorTest.kt b/utility/src/test/java/org/oppia/android/util/logging/KenyaAlphaEventBundleCreatorTest.kt
index 3ec4c2f5169..ccc9f65bf3f 100644
--- a/utility/src/test/java/org/oppia/android/util/logging/KenyaAlphaEventBundleCreatorTest.kt
+++ b/utility/src/test/java/org/oppia/android/util/logging/KenyaAlphaEventBundleCreatorTest.kt
@@ -132,7 +132,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(EventLog.getDefaultInstance(), bundle)
assertThat(typeName).isEqualTo("unknown_activity_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(0)
assertThat(bundle).string("priority").isEqualTo("unspecified_priority")
assertThat(bundle).integer("event_type").isEqualTo(ACTIVITYCONTEXT_NOT_SET.number)
@@ -150,7 +150,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("unknown_activity_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACTIVITYCONTEXT_NOT_SET.number)
@@ -190,7 +190,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_exploration_activity")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_EXPLORATION_ACTIVITY.number)
@@ -214,7 +214,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_exploration_activity")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_EXPLORATION_ACTIVITY.number)
@@ -240,7 +240,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_info_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_INFO_TAB.number)
@@ -259,7 +259,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_lessons_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_LESSONS_TAB.number)
@@ -278,7 +278,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_practice_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_PRACTICE_TAB.number)
@@ -297,7 +297,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_revision_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_REVISION_TAB.number)
@@ -316,7 +316,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_question_player")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_QUESTION_PLAYER.number)
@@ -336,7 +336,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_story_activity")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_STORY_ACTIVITY.number)
@@ -356,7 +356,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_concept_card")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_CONCEPT_CARD.number)
@@ -375,7 +375,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_revision_card")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_REVISION_CARD.number)
@@ -395,7 +395,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("close_revision_card")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(CLOSE_REVISION_CARD.number)
@@ -415,7 +415,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("start_card_context")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_CARD_CONTEXT.number)
@@ -440,7 +440,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("start_card_context")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_CARD_CONTEXT.number)
@@ -467,7 +467,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("end_card_context")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(END_CARD_CONTEXT.number)
@@ -492,7 +492,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("end_card_context")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(END_CARD_CONTEXT.number)
@@ -519,7 +519,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("hint_offered_context")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(HINT_UNLOCKED_CONTEXT.number)
@@ -544,7 +544,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("hint_offered_context")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(HINT_UNLOCKED_CONTEXT.number)
@@ -571,7 +571,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("access_hint_context")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_HINT_CONTEXT.number)
@@ -596,7 +596,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("access_hint_context")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_HINT_CONTEXT.number)
@@ -623,7 +623,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("solution_offered_context")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SOLUTION_UNLOCKED_CONTEXT.number)
@@ -647,7 +647,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("solution_offered_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SOLUTION_UNLOCKED_CONTEXT.number)
@@ -673,7 +673,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("access_solution_context")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_SOLUTION_CONTEXT.number)
@@ -697,7 +697,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("access_solution_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_SOLUTION_CONTEXT.number)
@@ -723,7 +723,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("submit_answer_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SUBMIT_ANSWER_CONTEXT.number)
@@ -749,7 +749,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("submit_answer_context")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SUBMIT_ANSWER_CONTEXT.number)
@@ -777,7 +777,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("play_voice_over_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PLAY_VOICE_OVER_CONTEXT.number)
@@ -803,7 +803,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("play_voice_over_context")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PLAY_VOICE_OVER_CONTEXT.number)
@@ -831,7 +831,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("pause_voice_over_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PAUSE_VOICE_OVER_CONTEXT.number)
@@ -857,7 +857,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("pause_voice_over_context")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PAUSE_VOICE_OVER_CONTEXT.number)
@@ -885,7 +885,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("app_in_background_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_BACKGROUND_CONTEXT.number)
@@ -903,7 +903,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("app_in_background_context")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_BACKGROUND_CONTEXT.number)
@@ -923,7 +923,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("app_in_foreground_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_FOREGROUND_CONTEXT.number)
@@ -941,7 +941,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("app_in_foreground_context")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_FOREGROUND_CONTEXT.number)
@@ -961,7 +961,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("exit_exploration_context")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(EXIT_EXPLORATION_CONTEXT.number)
@@ -985,7 +985,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("exit_exploration_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(EXIT_EXPLORATION_CONTEXT.number)
@@ -1011,7 +1011,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("finish_exploration_context")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(FINISH_EXPLORATION_CONTEXT.number)
@@ -1035,7 +1035,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("finish_exploration_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(FINISH_EXPLORATION_CONTEXT.number)
@@ -1061,7 +1061,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("resume_exploration_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(RESUME_EXPLORATION_CONTEXT.number)
@@ -1079,7 +1079,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("resume_exploration_context")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(RESUME_EXPLORATION_CONTEXT.number)
@@ -1099,7 +1099,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("start_over_exploration_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_OVER_EXPLORATION_CONTEXT.number)
@@ -1117,7 +1117,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("start_over_exploration_context")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_OVER_EXPLORATION_CONTEXT.number)
@@ -1137,7 +1137,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("delete_profile_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(DELETE_PROFILE_CONTEXT.number)
@@ -1155,7 +1155,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("delete_profile_context")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(DELETE_PROFILE_CONTEXT.number)
@@ -1175,7 +1175,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_home")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_HOME.number)
@@ -1193,7 +1193,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_profile_chooser")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_PROFILE_CHOOSER.number)
@@ -1211,7 +1211,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("switch_in_lesson_language")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SWITCH_IN_LESSON_LANGUAGE.number)
@@ -1237,7 +1237,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("switch_in_lesson_language")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SWITCH_IN_LESSON_LANGUAGE.number)
@@ -1265,7 +1265,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("failed_analytics_log")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(INSTALL_ID_FOR_FAILED_ANALYTICS_LOG.number)
@@ -1283,7 +1283,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("failed_analytics_log")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(INSTALL_ID_FOR_FAILED_ANALYTICS_LOG.number)
From d04fee4abf1cdd9ab9b726ea7319137e18bde048 Mon Sep 17 00:00:00 2001
From: RD Rama Devi <122200035+Rd4dev@users.noreply.github.com>
Date: Wed, 7 Feb 2024 03:49:39 +0530
Subject: [PATCH 10/19] Fix #5324: Updated Wiki Instructions for Bazel Setup
Instructions - Windows (#5325)
## Explanation
Fixes #5324
The provided instructions in [Bazel Setup Instructions for
Windows](https://github.com/oppia/oppia-android/wiki/Bazel-Setup-Instructions-for-Windows)
lack several key components which were added in this PR.
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
Special thanks to @sandy99405 for sharing detailed instructions and
@theMr17 for providing additional context!
---------
Co-authored-by: Ben Henning
---
wiki/Bazel-Setup-Instructions-for-Windows.md | 91 ++++++++++++++++++--
1 file changed, 84 insertions(+), 7 deletions(-)
diff --git a/wiki/Bazel-Setup-Instructions-for-Windows.md b/wiki/Bazel-Setup-Instructions-for-Windows.md
index 7a72fa86c34..4200c5a8ead 100644
--- a/wiki/Bazel-Setup-Instructions-for-Windows.md
+++ b/wiki/Bazel-Setup-Instructions-for-Windows.md
@@ -53,18 +53,36 @@ After that, follow each of the subsections below as needed to install prerequisi
**Java**
-JDK 8 is required for the Android build tools, and we suggest installing OpenJDK:
+Bazel Setup requires both JDK 8 and JDK>=17 to complete the setup.
+
+- JDK >= 17 is required for [Android Package Manager](#3-installing-the-android-sdk).
+- JDK 8 is required for the [Android build tools](#6-verifying-the-build), and we suggest installing OpenJDK.
+
+(Note: Our recommendation is to install both JDK 8 and JDK 17 and always make sure to run sdkmanager commands with JDK 17 and build commands with JDK 8. `sudo update-alternatives --config java` is used to set the default Java version).
+
+**Install JDK 8**
```sh
sudo apt install openjdk-8-jdk-headless
```
-#### For Fedora 25+
+**Install JDK 17**
+
+```sh
+sudo apt install openjdk-17-jdk
+```
+
+#### For Fedora 25+
+
- Install JDK 8 by running this command on the terminal:
```
sudo dnf install java-1.8.0-openjdk
```
-- Set the default Java version to jdk-8 by running the following command `sudo update-alternatives --config java` and selecting the number with jdk-8.
+
+- Install JDK 17 by running this command on the terminal:
+```
+sudo dnf install java-17-openjdk
+```
#### Follow [these instructions](https://www.java.com/en/download/help/path.html) to correctly set up $JAVA_HOME.
@@ -76,6 +94,28 @@ Unfortunately, some of the Bazel build actions in the Android pipeline require P
sudo apt install python
```
+(This might throw an error - **E**: Package 'python' has no installation candidate)
+
+Alternatively, installl Python 2 using:
+
+```sh
+sudo apt install python2
+```
+
+To make python2 command accessible as python create a symbolic link from python2 to python:
+
+```sh
+sudo ln -s /usr/bin/python2 /usr/bin/python
+```
+
+**GCC**
+
+Install gcc using the following command:
+
+```sh
+sudo apt install gcc
+```
+
### 3. Installing the Android SDK
We need to be able to run Linux-compatible Android utilities which requires installing a Linux version of the Android SDK. Since we can't install Android Studio in the subsystem, we need to do this via CLI commands. The steps below are extracted from [this article](https://proandroiddev.com/how-to-setup-android-sdk-without-android-studio-6d60d0f2812a).
@@ -86,10 +126,10 @@ First, prepare the environment for the SDK by creating the default directory to
mkdir -p $HOME/Android/Sdk
```
-Second, navigate to https://developer.android.com/studio#command-tools in a web browser (in Windows) and select to download the latest **Linux** command tools (even though you're using Windows, the Linux commandline tools are needed--the Windows version will not work with these instructions). Once downloaded, copy the zip file to the new SDK location (note that the ``/c/mnt/...`` path is based on ``C:\Users\\Downloads`` being the default download location--this may not be the case on your system) with your Windows username filled in for ````:
+Second, navigate to https://developer.android.com/studio#command-tools in a web browser (in Windows) and select to download the latest **Linux** command tools (even though you're using Windows, the Linux commandline tools are needed--the Windows version will not work with these instructions). Once downloaded, copy the zip file to the new SDK location (note that the ``/mnt/c/...`` path is based on ``C:\Users\\Downloads`` being the default download location--this may not be the case on your system) with your Windows username filled in for ````:
```sh
-cp /c/mnt/Users//Downloads/commandlinetools*.zip $HOME/Android/Sdk
+cp /mnt/c/Users//Downloads/commandlinetools*.zip $HOME/Android/Sdk
```
After that, change to the directory, unzip the archive, and remove it:
@@ -121,12 +161,23 @@ source ~/.bashrc
(The last line reloads your Bash configuration file so that the variable adjustments above become live in your local terminal).
-The ``sdkmanager`` command can now be used to install the necessary packages. Run each of the following commands in succession (you may need to accept licenses for the SDK packages in the same way you would when using Android Studio):
+The ``sdkmanager`` command can now be used to install the necessary packages.
+
+**Set the default Java version to JDK-17**
+
+Prior to executing the sdkmanager commands, make sure to set the default Java version to jdk-17 by running the following command:
+
+```sh
+sudo update-alternatives --config java
+```
+Select the number with JDK-17.
+
+Run each of the following commands in succession (you may need to accept licenses for the SDK packages in the same way you would when using Android Studio):
```sh
sdkmanager
sdkmanager --install "platform-tools"
-sdkmanager --install "platforms;android-28"
+sdkmanager --install "platforms;android-33"
sdkmanager --install "build-tools;29.0.2"
```
@@ -155,14 +206,40 @@ The Oppia Android repository generally expects to live under an 'opensource' dir
```sh
mkdir $HOME/opensource
+cd $HOME/opensource
+```
+
+Clone the [oppia-android](https://github.com/oppia/oppia-android) repository into the opensource directory.
+
+```sh
+git clone https://github.com/oppia/oppia-android.git
```
From there, follow [these instructions](https://github.com/oppia/oppia-bazel-tools#readme) in order to prepare your environment to support Oppia Android builds.
+To configure your development environment and set up essential tools, execute the following setup script from the oppia-android directory.
+
+```sh
+scripts/setup.sh
+```
+
### 6. Verifying the build
At this point, your system should be able to build Oppia Android. To verify, try building the APK (from your subsystem terminal -- note that this & all other Bazel commands must be run from the root of the ‘oppia-android’ directory otherwise they will fail):
+To build, it is necessary to configure JDK 8 as the default. To accomplish this, follow these steps:
+
+**Set Default version to JDK 8**
+
+Prior to executing the build commands, make sure to set the default Java version to jdk-8 by running the following command:
+
+```sh
+sudo update-alternatives --config java
+```
+
+Select the number with JDK-8
+
+**Build**
```sh
bazel build //:oppia
```
From 604b609e1fd7dc18519da60c8434bb6e9fec60a5 Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Wed, 7 Feb 2024 09:14:51 +0300
Subject: [PATCH 11/19] Fix Part of #4938: New onboarding flow gating platform
param 1 of 3 (#5269)
## Explanation
Fix Part of #4938: Introduce a new platform parameter that will be used
to gate the revised onboarding flow during development.
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [ ] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
## For UI-specific PRs only
If your PR includes UI-related changes, then:
- Add screenshots for portrait/landscape for both a tablet & phone of
the before & after UI changes
- For the screenshots above, include both English and pseudo-localized
(RTL) screenshots (see [RTL
guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines))
- Add a video showing the full UX flow with a screen reader enabled (see
[accessibility
guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide))
- For PRs introducing new UI elements or color changes, both light and
dark mode screenshots must be included
- Add a screenshot demonstrating that you ran affected Espresso tests
locally & that they're passing
---------
Co-authored-by: Ben Henning
---
.../PlatformParameterAlphaKenyaModule.kt | 14 ++++++++++++++
.../PlatformParameterAlphaModule.kt | 14 ++++++++++++++
.../platformparameter/PlatformParameterModule.kt | 14 ++++++++++++++
.../TestPlatformParameterModule.kt | 16 ++++++++++++++++
.../platformparameter/FeatureFlagConstants.kt | 10 ++++++++++
5 files changed, 68 insertions(+)
diff --git a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt
index 6a9820e4c47..9213fcc5a7f 100644
--- a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt
+++ b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt
@@ -17,6 +17,8 @@ import org.oppia.android.util.platformparameter.ENABLE_EXTRA_TOPIC_TABS_UI_DEFAU
import org.oppia.android.util.platformparameter.ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY
import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2
+import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_SPOTLIGHT_UI_DEFAULT_VALUE
@@ -30,6 +32,7 @@ import org.oppia.android.util.platformparameter.EnableInteractionConfigChangeSta
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
import org.oppia.android.util.platformparameter.EnableNpsSurvey
+import org.oppia.android.util.platformparameter.EnableOnboardingFlowV2
import org.oppia.android.util.platformparameter.EnablePerformanceMetricsCollection
import org.oppia.android.util.platformparameter.EnableSpotlightUi
import org.oppia.android.util.platformparameter.FAST_LANGUAGE_SWITCHING_IN_LESSON
@@ -321,4 +324,15 @@ class PlatformParameterAlphaKenyaModule {
ENABLE_NPS_SURVEY_DEFAULT_VALUE
)
}
+
+ @Provides
+ @EnableOnboardingFlowV2
+ fun provideEnableOnboardingFlowV2(
+ platformParameterSingleton: PlatformParameterSingleton
+ ): PlatformParameterValue {
+ return platformParameterSingleton.getBooleanPlatformParameter(ENABLE_ONBOARDING_FLOW_V2)
+ ?: PlatformParameterValue.createDefaultParameter(
+ ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
+ )
+ }
}
diff --git a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt
index 83c1909dde0..e453cf5d94e 100644
--- a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt
+++ b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt
@@ -17,6 +17,8 @@ import org.oppia.android.util.platformparameter.ENABLE_EXTRA_TOPIC_TABS_UI_DEFAU
import org.oppia.android.util.platformparameter.ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY
import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2
+import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.EXTRA_TOPIC_TABS_UI
@@ -29,6 +31,7 @@ import org.oppia.android.util.platformparameter.EnableInteractionConfigChangeSta
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
import org.oppia.android.util.platformparameter.EnableNpsSurvey
+import org.oppia.android.util.platformparameter.EnableOnboardingFlowV2
import org.oppia.android.util.platformparameter.EnablePerformanceMetricsCollection
import org.oppia.android.util.platformparameter.EnableSpotlightUi
import org.oppia.android.util.platformparameter.FAST_LANGUAGE_SWITCHING_IN_LESSON
@@ -316,4 +319,15 @@ class PlatformParameterAlphaModule {
ENABLE_NPS_SURVEY_DEFAULT_VALUE
)
}
+
+ @Provides
+ @EnableOnboardingFlowV2
+ fun provideEnableOnboardingFlowV2(
+ platformParameterSingleton: PlatformParameterSingleton
+ ): PlatformParameterValue {
+ return platformParameterSingleton.getBooleanPlatformParameter(ENABLE_ONBOARDING_FLOW_V2)
+ ?: PlatformParameterValue.createDefaultParameter(
+ ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
+ )
+ }
}
diff --git a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt
index 17e63902dde..6bf45843564 100644
--- a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt
+++ b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt
@@ -17,6 +17,8 @@ import org.oppia.android.util.platformparameter.ENABLE_EXTRA_TOPIC_TABS_UI_DEFAU
import org.oppia.android.util.platformparameter.ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY
import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2
+import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_SPOTLIGHT_UI_DEFAULT_VALUE
@@ -30,6 +32,7 @@ import org.oppia.android.util.platformparameter.EnableInteractionConfigChangeSta
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
import org.oppia.android.util.platformparameter.EnableNpsSurvey
+import org.oppia.android.util.platformparameter.EnableOnboardingFlowV2
import org.oppia.android.util.platformparameter.EnablePerformanceMetricsCollection
import org.oppia.android.util.platformparameter.EnableSpotlightUi
import org.oppia.android.util.platformparameter.FAST_LANGUAGE_SWITCHING_IN_LESSON
@@ -318,4 +321,15 @@ class PlatformParameterModule {
ENABLE_NPS_SURVEY_DEFAULT_VALUE
)
}
+
+ @Provides
+ @EnableOnboardingFlowV2
+ fun provideEnableOnboardingFlowV2(
+ platformParameterSingleton: PlatformParameterSingleton
+ ): PlatformParameterValue {
+ return platformParameterSingleton.getBooleanPlatformParameter(ENABLE_ONBOARDING_FLOW_V2)
+ ?: PlatformParameterValue.createDefaultParameter(
+ ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
+ )
+ }
}
diff --git a/testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt b/testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt
index 1d0f9f02bfc..604eaf727e4 100644
--- a/testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt
+++ b/testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt
@@ -14,6 +14,7 @@ import org.oppia.android.util.platformparameter.ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_
import org.oppia.android.util.platformparameter.ENABLE_EXTRA_TOPIC_TABS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.EnableAppAndOsDeprecation
import org.oppia.android.util.platformparameter.EnableDownloadsSupport
@@ -24,6 +25,7 @@ import org.oppia.android.util.platformparameter.EnableInteractionConfigChangeSta
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
import org.oppia.android.util.platformparameter.EnableNpsSurvey
+import org.oppia.android.util.platformparameter.EnableOnboardingFlowV2
import org.oppia.android.util.platformparameter.EnablePerformanceMetricsCollection
import org.oppia.android.util.platformparameter.EnableSpotlightUi
import org.oppia.android.util.platformparameter.FAST_LANGUAGE_SWITCHING_IN_LESSON_DEFAULT_VALUE
@@ -271,6 +273,12 @@ class TestPlatformParameterModule {
return PlatformParameterValue.createDefaultParameter(enableNpsSurvey)
}
+ @Provides
+ @EnableOnboardingFlowV2
+ fun provideEnableOnboardingFlowV2(): PlatformParameterValue {
+ return PlatformParameterValue.createDefaultParameter(enableOnboardingFlowV2)
+ }
+
companion object {
private var enableDownloadsSupport = ENABLE_DOWNLOADS_SUPPORT_DEFAULT_VALUE
private var enableEditAccountsOptionsUi = ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
@@ -289,6 +297,7 @@ class TestPlatformParameterModule {
NPS_SURVEY_MINIMUM_AGGREGATE_LEARNING_TIME_IN_A_TOPIC_IN_MINUTES_DEFAULT_VALUE
private var gracePeriodInDays = NPS_SURVEY_GRACE_PERIOD_IN_DAYS_DEFAULT_VALUE
private var enableNpsSurvey = ENABLE_NPS_SURVEY_DEFAULT_VALUE
+ private var enableOnboardingFlowV2 = ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
fun forceEnableDownloadsSupport(value: Boolean) {
@@ -349,6 +358,12 @@ class TestPlatformParameterModule {
enableNpsSurvey = value
}
+ /** Enables forcing [EnableOnboardingFlowV2] platform parameter flag from tests. */
+ @VisibleForTesting(otherwise = VisibleForTesting.NONE)
+ fun forceEnableOnboardingFlowV2(value: Boolean) {
+ enableOnboardingFlowV2 = value
+ }
+
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
fun reset() {
enableDownloadsSupport = ENABLE_DOWNLOADS_SUPPORT_DEFAULT_VALUE
@@ -361,6 +376,7 @@ class TestPlatformParameterModule {
ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
enablePerformanceMetricsCollection = ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
enableAppAndOsDeprecation = ENABLE_APP_AND_OS_DEPRECATION_DEFAULT_VALUE
+ enableOnboardingFlowV2 = ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
}
}
}
diff --git a/utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt b/utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt
index e69e34696dd..ba9dafdb620 100644
--- a/utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt
+++ b/utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt
@@ -166,3 +166,13 @@ const val ENABLE_NPS_SURVEY = "enable_nps_survey"
/** Default value of the feature flag corresponding to [EnableNpsSurvey]. */
const val ENABLE_NPS_SURVEY_DEFAULT_VALUE = false
+
+/** Qualifier for the feature flag that toggles the new onboarding flow. */
+@Qualifier
+annotation class EnableOnboardingFlowV2
+
+/** Name of the feature flag that toggles the new onboarding flow. */
+const val ENABLE_ONBOARDING_FLOW_V2 = "enable_onboarding_flow_v2"
+
+/** Default value of the feature flag corresponding to [EnableOnboardingFlowV2]. */
+const val ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE = false
From 1295328da0d3f8b275cbdf9120aca1b3d005bf5b Mon Sep 17 00:00:00 2001
From: Deon Olarewaju
Date: Thu, 8 Feb 2024 08:52:42 +0100
Subject: [PATCH 12/19] Fix #2587:
testHomeActivity_allTopicsCompleted_displaysAllTopicCards() test not working
(#5330)
## Explanation
Fix for #2587: split test method into 4 versions, [mobilePortrait,
mobileLandscape, tabletPortrait, tabletLandscape]
A. Mobile potrait test
B. Mobile Lanscape
C. Tablet Portrait
D. Tablet Landscape test.
## Essential Checklist
- [X] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [X] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [X] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [X] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [X] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [X] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
---
.../android/app/home/HomeActivityTest.kt | 57 +++++++++++++++++--
1 file changed, 51 insertions(+), 6 deletions(-)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt
index f5e058dfb62..771d5456801 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt
@@ -1333,8 +1333,9 @@ class HomeActivityTest {
}
}
+ @Config(qualifiers = "+port")
@Test
- fun testHomeActivity_allTopicsCompleted_displaysAllTopicCards() {
+ fun testHomeActivity_allTopicsCompleted_mobilePortrait_displaysAllTopicCardsIn2Columns() {
fakeOppiaClock.setFakeTimeMode(FakeOppiaClock.FakeTimeMode.MODE_UPTIME_MILLIS)
storyProgressTestHelper.markAllTopicsAsCompleted(
profileId = profileId,
@@ -1344,11 +1345,55 @@ class HomeActivityTest {
launch(createHomeActivityIntent(internalProfileId)).use {
testCoroutineDispatchers.runCurrent()
scrollToPosition(position = 3)
- if (context.resources.getBoolean(R.bool.isTablet)) {
- verifyHomeRecyclerViewHasGridColumnCount(columnCount = 3)
- } else {
- verifyHomeRecyclerViewHasGridColumnCount(columnCount = 2)
- }
+ verifyHomeRecyclerViewHasGridColumnCount(columnCount = 2)
+ }
+ }
+
+ @Config(qualifiers = "+land")
+ @Test
+ fun testHomeActivity_allTopicsCompleted_mobileLandscape_displaysAllTopicCardsIn3Columns() {
+ fakeOppiaClock.setFakeTimeMode(FakeOppiaClock.FakeTimeMode.MODE_UPTIME_MILLIS)
+ storyProgressTestHelper.markAllTopicsAsCompleted(
+ profileId = profileId,
+ timestampOlderThanOneWeek = false
+ )
+ logIntoAdminTwice()
+ launch(createHomeActivityIntent(internalProfileId)).use {
+ testCoroutineDispatchers.runCurrent()
+ scrollToPosition(position = 3)
+ verifyHomeRecyclerViewHasGridColumnCount(columnCount = 3)
+ }
+ }
+
+ @Config(qualifiers = "+sw600dp-port")
+ @Test
+ fun testHomeActivity_allTopicsCompleted_tabletPortrait_displaysAllTopicCardsIn3Columns() {
+ fakeOppiaClock.setFakeTimeMode(FakeOppiaClock.FakeTimeMode.MODE_UPTIME_MILLIS)
+ storyProgressTestHelper.markAllTopicsAsCompleted(
+ profileId = profileId,
+ timestampOlderThanOneWeek = false
+ )
+ logIntoAdminTwice()
+ launch(createHomeActivityIntent(internalProfileId)).use {
+ testCoroutineDispatchers.runCurrent()
+ scrollToPosition(position = 3)
+ verifyHomeRecyclerViewHasGridColumnCount(columnCount = 3)
+ }
+ }
+
+ @Config(qualifiers = "+sw600dp-land")
+ @Test
+ fun testHomeActivity_allTopicsCompleted_tabletLandscape_displaysAllTopicCardsIn4Columns() {
+ fakeOppiaClock.setFakeTimeMode(FakeOppiaClock.FakeTimeMode.MODE_UPTIME_MILLIS)
+ storyProgressTestHelper.markAllTopicsAsCompleted(
+ profileId = profileId,
+ timestampOlderThanOneWeek = false
+ )
+ logIntoAdminTwice()
+ launch(createHomeActivityIntent(internalProfileId)).use {
+ testCoroutineDispatchers.runCurrent()
+ scrollToPosition(position = 3)
+ verifyHomeRecyclerViewHasGridColumnCount(columnCount = 4)
}
}
From 018e9c97244ea8c86b3b6800a81a3c6f5fd84c74 Mon Sep 17 00:00:00 2001
From: Ben Henning
Date: Thu, 8 Feb 2024 13:54:05 -0800
Subject: [PATCH 13/19] Fix #5334, #3618: Fix broken //instrumentation builds
(#5335)
## Explanation
Fixes #5334
Fixes #3618
The root issue is that ``//instrumentation`` was updated in #5098 to
depend on ``//testing``. However, the current dexer that we use in Bazel
has troubles dexing certain dependencies (including Robolectric &
Mockito), and since ``//testing`` transitively pulls in these test
dependencies, the instrumentation test binaries fail to build.
The main fix is isolating the new Firebase testing dependencies to their
own package instead of needing to pull in ``//testing``. This resulted
in some broad but trivial changes in other tests throughout the
codebase. Note that I opted for just updating ``//testing`` rather than
all affected deps lists to keep things a bit simpler (stricter deps will
fix this in a later PR as part of the Bazel chain using automation to
make things a lot simpler). This addresses issue #5334.
To keep this from happening again in the future, new smoke build tests
were added for instrumentation tests and the top-level
``//instrumentation:oppia_test`` to ensure that our
``ComputeAffectedTests`` utility correctly identifies and picks up these
tests as part of the CI run when relevant (historically, instrumentation
tests have been completely ignored in CI since they can't be run yet;
note this doesn't include the instrumentation package's unit tests since
these use Robolectric and _are_ included in CI runs). This addresses
issue #3618. Note that this was verified as working using an initial
commit to this PR that only added the new smoke tests and verifying that
``//instrumentation:oppia_test_binary_smoke_test`` is now picked up and
fails, per the log output (& CI results):
```
BAZEL_TEST_TARGETS: //instrumentation:oppia_test_binary_smoke_test
```
Finally, note that there are a couple of new test targets added under
``//domain/src/test/java/org/oppia/android/domain/auth`` since it was
noticed during the development of #5138 that these were missed in an
earlier commit to develop (and should be run in both Bazel & Gradle test
passes).
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
## For UI-specific PRs only
N/A -- This change only targets & fixes test-only infrastructure.
---
.github/CODEOWNERS | 5 +-
.../AdministratorControlsActivityTest.kt | 2 +-
.../AdministratorControlsFragmentTest.kt | 2 +-
.../AppVersionActivityTest.kt | 2 +-
.../ProfileAndDeviceIdActivityTest.kt | 2 +-
.../ProfileAndDeviceIdFragmentTest.kt | 2 +-
.../CompletedStoryListActivityTest.kt | 2 +-
.../LessonThumbnailImageViewTest.kt | 2 +-
.../MathExpressionInteractionsViewTest.kt | 2 +-
.../AppCompatCheckBoxBindingAdaptersTest.kt | 2 +-
.../CircularProgressIndicatorAdaptersTest.kt | 2 +-
.../DrawableBindingAdaptersTest.kt | 2 +-
.../ImageViewBindingAdaptersTest.kt | 2 +-
.../databinding/MarginBindingAdaptersTest.kt | 2 +-
...StateAssemblerMarginBindingAdaptersTest.kt | 2 +-
...tateAssemblerPaddingBindingAdaptersTest.kt | 2 +-
.../TextViewBindingAdaptersTest.kt | 2 +-
.../databinding/ViewBindingAdaptersTest.kt | 2 +-
.../DeveloperOptionsActivityTest.kt | 2 +-
.../DeveloperOptionsFragmentTest.kt | 2 +-
.../MarkChaptersCompletedActivityTest.kt | 2 +-
.../MarkChaptersCompletedFragmentTest.kt | 2 +-
.../MarkStoriesCompletedActivityTest.kt | 2 +-
.../MarkStoriesCompletedFragmentTest.kt | 2 +-
.../MarkTopicsCompletedActivityTest.kt | 2 +-
.../MarkTopicsCompletedFragmentTest.kt | 2 +-
.../devoptions/ViewEventLogsActivityTest.kt | 2 +-
.../devoptions/ViewEventLogsFragmentTest.kt | 2 +-
.../ForceNetworkTypeActivityTest.kt | 2 +-
.../ForceNetworkTypeFragmentTest.kt | 2 +-
.../MathExpressionParserActivityTest.kt | 2 +-
.../MathExpressionParserFragmentTest.kt | 2 +-
.../android/app/faq/FAQListFragmentTest.kt | 2 +-
.../android/app/faq/FAQSingleActivityTest.kt | 2 +-
.../android/app/faq/FaqListActivityTest.kt | 2 +-
.../android/app/help/HelpActivityTest.kt | 2 +-
.../android/app/help/HelpFragmentTest.kt | 2 +-
.../android/app/home/HomeActivityTest.kt | 2 +-
.../app/home/RecentlyPlayedFragmentTest.kt | 2 +-
.../app/home/TopicSummaryViewModelTest.kt | 2 +-
.../android/app/home/WelcomeViewModelTest.kt | 2 +-
.../PromotedStoryListViewModelTest.kt | 2 +-
.../PromotedStoryViewModelTest.kt | 2 +-
.../mydownloads/MyDownloadsActivityTest.kt | 2 +-
.../mydownloads/MyDownloadsFragmentTest.kt | 2 +-
.../notice/BetaNoticeDialogFragmentTest.kt | 2 +-
...dAppDeprecationNoticeDialogFragmentTest.kt | 2 +-
...labilityUpgradeNoticeDialogFragmentTest.kt | 2 +-
...lAppDeprecationNoticeDialogFragmentTest.kt | 2 +-
.../OsDeprecationNoticeDialogFragmentTest.kt | 2 +-
.../app/onboarding/OnboardingActivityTest.kt | 2 +-
.../app/onboarding/OnboardingFragmentTest.kt | 2 +-
.../OngoingTopicListActivityTest.kt | 2 +-
.../app/options/AppLanguageActivityTest.kt | 2 +-
.../app/options/AppLanguageFragmentTest.kt | 2 +-
.../app/options/AudioLanguageActivityTest.kt | 2 +-
.../app/options/AudioLanguageFragmentTest.kt | 2 +-
.../app/options/OptionsActivityTest.kt | 2 +-
.../app/options/OptionsFragmentTest.kt | 2 +-
.../options/ReadingTextSizeActivityTest.kt | 2 +-
.../options/ReadingTextSizeFragmentTest.kt | 2 +-
.../android/app/parser/HtmlParserTest.kt | 2 +-
.../app/player/audio/AudioFragmentTest.kt | 2 +-
.../exploration/BottomSheetOptionsMenuTest.kt | 2 +-
.../exploration/ExplorationActivityTest.kt | 2 +-
.../app/player/state/StateFragmentTest.kt | 2 +-
.../app/policies/PoliciesActivityTest.kt | 2 +-
.../app/policies/PoliciesFragmentTest.kt | 2 +-
.../app/profile/AddProfileActivityTest.kt | 2 +-
.../app/profile/AdminAuthActivityTest.kt | 2 +-
.../app/profile/AdminPinActivityTest.kt | 2 +-
.../app/profile/PinPasswordActivityTest.kt | 2 +-
.../app/profile/ProfileChooserActivityTest.kt | 2 +-
.../app/profile/ProfileChooserFragmentTest.kt | 2 +-
.../ProfilePictureActivityTest.kt | 2 +-
.../ProfileProgressActivityTest.kt | 2 +-
.../ProfileProgressFragmentTest.kt | 2 +-
.../app/recyclerview/BindableAdapterTest.kt | 2 +-
.../resumelesson/ResumeLessonActivityTest.kt | 2 +-
.../resumelesson/ResumeLessonFragmentTest.kt | 2 +-
.../profile/ProfileEditActivityTest.kt | 2 +-
.../profile/ProfileEditFragmentTest.kt | 2 +-
.../profile/ProfileListActivityTest.kt | 2 +-
.../profile/ProfileListFragmentTest.kt | 2 +-
.../profile/ProfileRenameActivityTest.kt | 2 +-
.../profile/ProfileRenameFragmentTest.kt | 2 +-
.../profile/ProfileResetPinActivityTest.kt | 2 +-
.../profile/ProfileResetPinFragmentTest.kt | 2 +-
.../android/app/splash/SplashActivityTest.kt | 2 +-
.../app/spotlight/SpotlightFragmentTest.kt | 2 +-
.../android/app/story/StoryActivityTest.kt | 2 +-
.../android/app/story/StoryFragmentTest.kt | 2 +-
.../android/app/survey/SurveyActivityTest.kt | 2 +-
.../android/app/survey/SurveyFragmentTest.kt | 2 +-
.../app/testing/DragDropTestActivityTest.kt | 2 +-
...ionInputInteractionViewTestActivityTest.kt | 2 +-
...ImageRegionSelectionInteractionViewTest.kt | 2 +-
.../InputInteractionViewTestActivityTest.kt | 2 +-
.../NavigationDrawerActivityDebugTest.kt | 2 +-
.../NavigationDrawerActivityProdTest.kt | 2 +-
...tioInputInteractionViewTestActivityTest.kt | 2 +-
...tFontScaleConfigurationUtilActivityTest.kt | 2 +-
.../testing/TopicTestActivityForStoryTest.kt | 2 +-
.../app/thirdparty/LicenseListActivityTest.kt | 2 +-
.../app/thirdparty/LicenseListFragmentTest.kt | 2 +-
.../LicenseTextViewerActivityTest.kt | 2 +-
.../LicenseTextViewerFragmentTest.kt | 2 +-
.../ThirdPartyDependencyListActivityTest.kt | 2 +-
.../ThirdPartyDependencyListFragmentTest.kt | 2 +-
.../android/app/topic/TopicActivityTest.kt | 2 +-
.../android/app/topic/TopicFragmentTest.kt | 2 +-
.../conceptcard/ConceptCardFragmentTest.kt | 2 +-
.../app/topic/info/TopicInfoFragmentTest.kt | 2 +-
.../topic/lessons/TopicLessonsFragmentTest.kt | 2 +-
.../practice/TopicPracticeFragmentTest.kt | 2 +-
.../QuestionPlayerActivityTest.kt | 2 +-
.../revision/TopicRevisionFragmentTest.kt | 2 +-
.../revisioncard/RevisionCardActivityTest.kt | 2 +-
.../revisioncard/RevisionCardFragmentTest.kt | 2 +-
.../app/utility/RatioExtensionsTest.kt | 2 +-
.../walkthrough/WalkthroughActivityTest.kt | 2 +-
.../WalkthroughFinalFragmentTest.kt | 2 +-
.../WalkthroughTopicListFragmentTest.kt | 2 +-
.../WalkthroughWelcomeFragmentTest.kt | 2 +-
.../activity/ActivityIntentFactoriesTest.kt | 2 +-
.../route/ActivityRouterModuleTest.kt | 2 +-
.../app/activity/route/ActivityRouterTest.kt | 2 +-
.../android/app/home/HomeActivityLocalTest.kt | 2 +-
.../app/parser/FractionParsingUiErrorTest.kt | 2 +-
.../parser/ListItemLeadingMarginSpanTest.kt | 2 +-
.../app/parser/StringToRatioParserTest.kt | 2 +-
.../ExplorationActivityLocalTest.kt | 2 +-
.../player/state/StateFragmentLocalTest.kt | 2 +-
.../ProfileChooserFragmentLocalTest.kt | 2 +-
.../app/story/StoryActivityLocalTest.kt | 2 +-
.../app/testing/CompletedStoryListSpanTest.kt | 2 +-
.../oppia/android/app/testing/HomeSpanTest.kt | 2 +-
.../app/testing/OngoingTopicListSpanTest.kt | 2 +-
.../PlatformParameterIntegrationTest.kt | 2 +-
.../app/testing/ProfileChooserSpanTest.kt | 2 +-
.../testing/ProfileProgressSpanCountTest.kt | 2 +-
.../app/testing/RecentlyPlayedSpanTest.kt | 2 +-
.../app/testing/TopicRevisionSpanTest.kt | 2 +-
.../app/testing/activity/TestActivityTest.kt | 2 +-
.../AdministratorControlsFragmentTest.kt | 2 +-
.../testing/options/OptionsFragmentTest.kt | 2 +-
.../player/split/PlayerSplitScreenTest.kt | 2 +-
.../state/StateFragmentAccessibilityTest.kt | 2 +-
.../topic/info/TopicInfoFragmentLocalTest.kt | 2 +-
.../lessons/TopicLessonsFragmentLocalTest.kt | 2 +-
.../QuestionPlayerActivityLocalTest.kt | 2 +-
.../RevisionCardActivityLocalTest.kt | 2 +-
.../ActivityLanguageLocaleHandlerTest.kt | 2 +-
.../AppLanguageResourceHandlerTest.kt | 2 +-
.../AppLanguageWatcherMixinTest.kt | 2 +-
.../app/utility/datetime/DateTimeUtilTest.kt | 2 +-
.../MathExpressionAccessibilityUtilTest.kt | 2 +-
.../domain/audio/AudioPlayerControllerTest.kt | 2 +-
.../auth/AuthenticationControllerTest.kt | 4 +-
.../org/oppia/android/domain/auth/BUILD.bazel | 46 ++++++++++++++++++
.../auth/FirebaseAuthWrapperImplTest.kt | 1 -
.../ExplorationDataControllerTest.kt | 2 +-
.../ExplorationProgressControllerTest.kt | 2 +-
.../ExplorationCheckpointControllerTest.kt | 2 +-
.../analytics/FirestoreDataControllerTest.kt | 2 +-
.../analytics/LearnerAnalyticsLoggerTest.kt | 2 +-
.../analytics/SurveyEventsLoggerTest.kt | 2 +-
.../LogReportWorkManagerInitializerTest.kt | 2 +-
.../loguploader/LogUploadWorkerTest.kt | 2 +-
.../domain/survey/SurveyControllerTest.kt | 2 +-
.../survey/SurveyProgressControllerTest.kt | 2 +-
instrumentation/BUILD.bazel | 7 +++
.../oppia_instrumentation_test.bzl | 17 +++++--
.../instrumentation/application/BUILD.bazel | 2 +-
.../application/TestApplicationComponent.kt | 2 +-
testing/BUILD.bazel | 1 +
.../android/testing/firebase/BUILD.bazel | 22 +++++++++
.../FakeFirebaseAuthWrapperImpl.kt | 2 +-
.../TestAuthenticationModule.kt | 2 +-
.../android/testing/firebase/BUILD.bazel | 48 +++++++++++++++++++
.../FakeFirebaseAuthWrapperImplTest.kt | 5 +-
.../TestAuthenticationModuleTest.kt | 2 +-
...alizeDefaultLocaleRuleCustomContextTest.kt | 2 +-
...InitializeDefaultLocaleRuleOmissionTest.kt | 2 +-
.../junit/InitializeDefaultLocaleRuleTest.kt | 2 +-
185 files changed, 318 insertions(+), 188 deletions(-)
create mode 100644 testing/src/main/java/org/oppia/android/testing/firebase/BUILD.bazel
rename testing/src/main/java/org/oppia/android/testing/{ => firebase}/FakeFirebaseAuthWrapperImpl.kt (97%)
rename testing/src/main/java/org/oppia/android/testing/{ => firebase}/TestAuthenticationModule.kt (90%)
create mode 100644 testing/src/test/java/org/oppia/android/testing/firebase/BUILD.bazel
rename testing/src/test/java/org/oppia/android/testing/{ => firebase}/FakeFirebaseAuthWrapperImplTest.kt (95%)
rename testing/src/test/java/org/oppia/android/testing/{ => firebase}/TestAuthenticationModuleTest.kt (98%)
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 00aff7fcea9..b4a1de1c04a 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -94,22 +94,19 @@
/testing/src/main/java/org/oppia/android/testing/FakeAnalyticsEventLogger.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/FakeExceptionLogger.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt @oppia/android-app-infrastructure-reviewers
-/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/FakePerformanceMetricAssessor.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/FakePerformanceMetricsEventLogger.kt @oppia/android-app-infrastructure-reviewers
-/testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt @oppia/android-app-infrastructure-reviewers
-/testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/TestImageLoaderModule.kt @oppia/android-app-infrastructure-reviewers
/testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt @oppia/android-app-infrastructure-reviewers
/testing/src/test/java/org/oppia/android/testing/FakeAnalyticsEventLoggerTest.kt @oppia/android-app-infrastructure-reviewers
/testing/src/test/java/org/oppia/android/testing/FakeExceptionLoggerTest.kt @oppia/android-app-infrastructure-reviewers
-/testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt @oppia/android-app-infrastructure-reviewers
/testing/src/test/java/org/oppia/android/testing/FakeFirestoreEventLoggerTest.kt @oppia/android-app-infrastructure-reviewers
/testing/src/test/java/org/oppia/android/testing/FakePerformanceMetricAssessorTest.kt @oppia/android-app-infrastructure-reviewers
/testing/src/test/java/org/oppia/android/testing/FakePerformanceMetricsEventLoggerTest.kt @oppia/android-app-infrastructure-reviewers
+/testing/src/*/java/org/oppia/android/testing/firebase/ @oppia/android-app-infrastructure-reviewers
/testing/src/*/java/org/oppia/android/testing/lightweightcheckpointing/ @oppia/android-app-infrastructure-reviewers
/testing/src/*/java/org/oppia/android/testing/logging/ @oppia/android-app-infrastructure-reviewers
/testing/src/*/java/org/oppia/android/testing/math/ @oppia/android-app-infrastructure-reviewers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt
index 7d0dbf96afc..4a340d416ca 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt
@@ -103,8 +103,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.profile.ProfileTestHelper
diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentTest.kt
index ff5cba27e23..b50d9c099f2 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentTest.kt
@@ -91,8 +91,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.profile.ProfileTestHelper
diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt
index cbe287cfaa9..82bc4bd09d3 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt
@@ -81,8 +81,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt
index 2710157c685..4a76dfd4479 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt
@@ -72,8 +72,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt
index 9bd43e39012..925535d3433 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt
@@ -101,8 +101,8 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.logging.SyncStatusTestModule
import org.oppia.android.testing.logging.TestSyncStatusManager
diff --git a/app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt
index 17f0c3d6f73..60c1d8e03c9 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt
@@ -84,8 +84,8 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.story.StoryProgressTestHelper
diff --git a/app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt b/app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt
index 29a4743fe20..7eb357dd46a 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt
@@ -64,9 +64,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsViewTest.kt b/app/src/sharedTest/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsViewTest.kt
index 768ba9a67a0..2b8ea2dc02d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsViewTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsViewTest.kt
@@ -78,9 +78,9 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner.Iteration
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt
index 7ea576a3ebb..ade4a20211d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt
@@ -65,9 +65,9 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt
index c84c6fc96b2..426294f59cf 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt
@@ -68,10 +68,10 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt
index 5a81aa9f654..9817db99f6a 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt
@@ -69,9 +69,9 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt
index 72f19842249..d5690443bad 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt
@@ -74,9 +74,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt
index 7bdc00ef976..b720fc78a5d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt
@@ -78,9 +78,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt
index 9e8a843ee06..0e7f32257a7 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt
@@ -77,9 +77,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt
index 073add10f38..104b314ef64 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt
@@ -75,9 +75,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt
index ca6a286febb..235498e6ef2 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt
@@ -67,9 +67,9 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt
index 9db806e5f0e..716820377d4 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt
@@ -72,9 +72,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt
index 55bbad1e323..e2c0034aad8 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt
@@ -91,8 +91,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt
index 8247b045e36..29ea1a94163 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt
@@ -86,9 +86,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt
index 59415795065..0c666f19607 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt
@@ -77,8 +77,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt
index 6125413e6f6..af03c3a086e 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt
@@ -82,9 +82,9 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.topic.StoryProgressController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.story.StoryProgressTestHelper
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt
index 8d8204d9684..e36a5e93b11 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt
@@ -68,8 +68,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt
index e67d776813a..489691717d9 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt
@@ -77,8 +77,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.story.StoryProgressTestHelper
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt
index 5a575360d80..5e9cfb3fdc4 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt
@@ -68,8 +68,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt
index 78214587b28..47e4e0c33a0 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt
@@ -77,8 +77,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.story.StoryProgressTestHelper
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt
index 94dab9dd41d..a3a48b24828 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt
@@ -69,7 +69,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsFragmentTest.kt
index 6ec2a227ec1..c42f916f8fa 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsFragmentTest.kt
@@ -83,7 +83,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeFirestoreInstanceWrapperImpl
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt
index 7bc720e4ae0..c163e91f5e0 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt
@@ -69,8 +69,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentTest.kt
index 25cccdd0bd1..596ce0b7623 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentTest.kt
@@ -73,8 +73,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityTest.kt
index 517da7ca48a..c8c71821bc8 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityTest.kt
@@ -65,8 +65,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt
index cac62ddb6b4..b5d32fa77ee 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt
@@ -74,10 +74,10 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt
index 41fefe4329b..48da829d39e 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt
@@ -79,8 +79,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt
index 90d49553c6c..9bfd477a36b 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt
@@ -75,8 +75,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt
index 680afbdeb44..9b25a1320d4 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt
@@ -63,8 +63,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt
index f00931977eb..f48c81b20ee 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt
@@ -62,8 +62,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt
index 73cfb22be58..74fbc2f0e70 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt
@@ -93,9 +93,9 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt
index 771d5456801..0a4238a194c 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt
@@ -121,10 +121,10 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.DefineAppLanguageLocaleContext
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt
index 0aca510567f..e03c49a7ca7 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt
@@ -108,9 +108,9 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.lightweightcheckpointing.ExplorationCheckpointTestHelper
import org.oppia.android.testing.lightweightcheckpointing.FRACTIONS_STORY_0_EXPLORATION_0_CURRENT_VERSION
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt
index 97fc6eb4f8c..19d874cc4a9 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt
@@ -66,8 +66,8 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt
index 9ede16565ca..59ec6348510 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt
@@ -63,8 +63,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt
index 99cd9dcd48e..5fd5a452779 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt
@@ -66,8 +66,8 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt
index ac309882dd1..0ac61cb1caa 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt
@@ -64,8 +64,8 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest.kt
index c42a30b0d55..ff6d31f06d7 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest.kt
@@ -61,8 +61,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt
index 2441f617b3d..447b3d33ed1 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt
@@ -71,8 +71,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentTest.kt
index b98726e61f3..423822f8d19 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentTest.kt
@@ -74,9 +74,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentTest.kt
index 675426fe1eb..1af22c3a018 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentTest.kt
@@ -74,9 +74,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentTest.kt
index 29c1cde2351..171e62cd76c 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentTest.kt
@@ -74,9 +74,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentTest.kt
index b981373f23d..db82579e4e9 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentTest.kt
@@ -74,9 +74,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentTest.kt
index 1a522d1242d..51afc4b45e2 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentTest.kt
@@ -74,9 +74,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt
index 23704d8ef36..10a388f6f4a 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt
@@ -62,8 +62,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt
index e1227d6396f..43dc8c7cef0 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt
@@ -88,8 +88,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt
index bf37a173a38..d19b037818d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt
@@ -82,8 +82,8 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.topic.RATIOS_TOPIC_ID
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.story.StoryProgressTestHelper
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt
index 52e8a3cc154..3a2e401d0c5 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt
@@ -63,8 +63,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt
index 07df1432348..cdb12ba202c 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt
@@ -75,9 +75,9 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt
index a87d648e98e..52be8c16782 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt
@@ -63,8 +63,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt
index 9511978a74b..c7b5bfe0d86 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt
@@ -74,8 +74,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt
index 7aff373149c..dd9d85926e2 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt
@@ -62,8 +62,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt
index da8a49d42a3..8788ead2ab6 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt
@@ -90,9 +90,9 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.profile.ProfileTestHelper
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt
index 6c54efd52c8..ee07540d885 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt
@@ -62,8 +62,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt
index 56933de3067..df07900e97a 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt
@@ -77,8 +77,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt b/app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt
index a655da4b9e0..571ba12ee85 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt
@@ -102,10 +102,10 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.DefineAppLanguageLocaleContext
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.mockito.capture
diff --git a/app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt
index 173b024aa5f..4f3fb329a19 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt
@@ -87,9 +87,9 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.IsOnRobolectric
diff --git a/app/src/sharedTest/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuTest.kt b/app/src/sharedTest/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuTest.kt
index e390e6eea1a..e378c5285bd 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuTest.kt
@@ -70,9 +70,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt
index 6245681585e..800916c4391 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt
@@ -130,11 +130,11 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.espresso.EditTextInputAction
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.lightweightcheckpointing.ExplorationCheckpointTestHelper
import org.oppia.android.testing.lightweightcheckpointing.FRACTIONS_STORY_0_EXPLORATION_1_CURRENT_VERSION
diff --git a/app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt
index 0ee896da96d..f295bd9c3e5 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt
@@ -151,13 +151,13 @@ import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.environment.TestEnvironmentConfig
import org.oppia.android.testing.espresso.EditTextInputAction
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.lightweightcheckpointing.ExplorationCheckpointTestHelper
import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat
diff --git a/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesActivityTest.kt
index 95dd5e209d2..d8d95d2bab1 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesActivityTest.kt
@@ -79,9 +79,9 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt
index 2a318c9324a..07790dc33d8 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt
@@ -91,9 +91,9 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt
index 175b0a62bf9..34dfb5f3b18 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt
@@ -96,12 +96,12 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasHelperText
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasNoErrorText
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.profile.ProfileTestHelper
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt
index cb49cff5daa..cfabe083384 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt
@@ -82,10 +82,10 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt
index ea44c5d0d1c..b6fdce97344 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt
@@ -91,11 +91,11 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasNoErrorText
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt
index f65a6f5f45a..90c78003600 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt
@@ -87,11 +87,11 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasNoErrorText
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt
index 3442c182a7d..74d2f607988 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt
@@ -62,8 +62,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt
index 0418a1339a8..5fff9c4006b 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt
@@ -84,8 +84,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt
index 57d8180ed22..deb1c56251e 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt
@@ -70,8 +70,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt
index fc6c676d227..1cad2587804 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt
@@ -62,8 +62,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt
index a4c5187cf25..2f83eb95f5d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt
@@ -108,8 +108,8 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt b/app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt
index 1d48ecfcf71..c85a4d1c524 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt
@@ -98,8 +98,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt
index 988cbe99df3..e1e8707c853 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt
@@ -82,9 +82,9 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt
index 7bbc505d9dc..cf138d0d1f3 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt
@@ -84,9 +84,9 @@ import org.oppia.android.domain.topic.RATIOS_STORY_ID_0
import org.oppia.android.domain.topic.RATIOS_TOPIC_ID
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt
index ab1aa374f27..1b3a285f095 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt
@@ -79,8 +79,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditFragmentTest.kt
index a6f02aa8d7c..72346233590 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditFragmentTest.kt
@@ -84,10 +84,10 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.profile.ProfileTestHelper
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt
index fe93ebd5339..ec65e61024a 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt
@@ -62,8 +62,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt
index 5e571de6a91..d94a0d75a11 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt
@@ -76,8 +76,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt
index dc8534a913f..8aff6c18532 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt
@@ -63,9 +63,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt
index e95194f1de1..77f2aa4d7d0 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt
@@ -78,11 +78,11 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasNoErrorText
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt
index 0a0d8c22316..1e473a5e4a9 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt
@@ -64,9 +64,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt
index ce23631d2a0..a78db5e7ce2 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt
@@ -79,11 +79,11 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText
import org.oppia.android.testing.espresso.TextInputAction.Companion.hasNoErrorText
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt
index 2ccef97076a..5fa6d2d41eb 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt
@@ -95,10 +95,10 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner.Iteration
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner.Parameter
diff --git a/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest.kt
index 36f978df8c1..35df5325f0e 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest.kt
@@ -72,9 +72,9 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt
index c4a1776e814..1dda62f55f4 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt
@@ -85,9 +85,9 @@ import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt
index 1e30882456e..3a9760cec83 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt
@@ -116,8 +116,8 @@ import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.mockito.anyOrNull
import org.oppia.android.testing.mockito.capture
diff --git a/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt
index 4af4459dfef..61ace850d0e 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt
@@ -66,8 +66,8 @@ import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_2
import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt
index f1398787462..cf4de9db27c 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt
@@ -89,8 +89,8 @@ import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.logging.EventLogSubject
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt
index 966ada83745..9e7aa64cd7e 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt
@@ -72,8 +72,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt
index 7f5c52581a6..fb4b7a677f4 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt
@@ -72,9 +72,9 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt
index 11088d08c32..a2097b83928 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt
@@ -83,10 +83,10 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.mockito.capture
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt
index 9041d7fa64d..2ce962ee356 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt
@@ -72,9 +72,9 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt
index 0fac18cd543..6ede2fb1889 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt
@@ -99,9 +99,9 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt
index 9ec9f47ee79..2ac71b84993 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt
@@ -107,9 +107,9 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt
index 57b3c1b0604..3968ee5bda7 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt
@@ -79,9 +79,9 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt
index 5815a6f0971..906d24f97a1 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt
@@ -67,8 +67,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt
index 03c8b40c315..f59711ead38 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt
@@ -71,8 +71,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt
index cc6d13cc284..b73ce7a0773 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt
@@ -63,8 +63,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListFragmentTest.kt
index b50e60a6cfa..a8dd3ae36fd 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListFragmentTest.kt
@@ -78,8 +78,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt
index e1545f34c32..fb424fd2440 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt
@@ -71,8 +71,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerFragmentTest.kt
index 03d9b1c666a..07bb62e85c9 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerFragmentTest.kt
@@ -68,8 +68,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt
index da5a3be066d..0a2fd1f4fa4 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt
@@ -63,8 +63,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListFragmentTest.kt
index 7691445e8a2..419fa4515ef 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListFragmentTest.kt
@@ -77,8 +77,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt
index 8cf06d4dfb4..a82efa5f8cb 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt
@@ -82,9 +82,9 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt
index 0b42029e742..875d5936cb5 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt
@@ -94,8 +94,8 @@ import org.oppia.android.domain.topic.RATIOS_TOPIC_ID
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt
index 846884c529d..ac0c6ab72aa 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt
@@ -103,11 +103,11 @@ import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RichTextViewMatcher.Companion.containsRichText
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.environment.TestEnvironmentConfig
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt
index a8ea6bf7896..9cfb0cd31d6 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt
@@ -88,11 +88,11 @@ import org.oppia.android.domain.topic.RATIOS_TOPIC_ID
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.espresso.ImageViewMatcher.Companion.hasScaleType
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt
index 45abdc11143..ed64716a398 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt
@@ -110,8 +110,8 @@ import org.oppia.android.domain.topic.RATIOS_STORY_ID_0
import org.oppia.android.domain.topic.RATIOS_TOPIC_ID
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.lightweightcheckpointing.ExplorationCheckpointTestHelper
import org.oppia.android.testing.lightweightcheckpointing.FRACTIONS_STORY_0_EXPLORATION_0_CURRENT_VERSION
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt
index 3f8b7eae213..c4ec0d84a88 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt
@@ -88,8 +88,8 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt
index 9bd58c51e8c..03423d24c83 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt
@@ -126,11 +126,11 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.espresso.EditTextInputAction
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt
index 2daf1860e6b..de936dccb21 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt
@@ -89,10 +89,10 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.ImageViewMatcher.Companion.hasScaleType
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt
index 278c43c94d8..d570e4ec204 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt
@@ -82,10 +82,10 @@ import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt
index 7422990cea4..5831cc043b5 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt
@@ -104,11 +104,11 @@ import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.environment.TestEnvironmentConfig
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt b/app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt
index f8e1dedfdb9..fa2d84e008c 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt
@@ -60,8 +60,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt
index e289674673e..b583e012dc7 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt
@@ -74,8 +74,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt
index 79e0caf8e70..2b6ab7d39bc 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt
@@ -76,8 +76,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt
index d90dca2bb15..ee17909aa1d 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt
@@ -77,11 +77,11 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.environment.TestEnvironmentConfig
import org.oppia.android.testing.espresso.GenericViewMatchers.Companion.withOpaqueBackground
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt
index 0634f55de2b..288fa127272 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt
@@ -72,8 +72,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt b/app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt
index 47a343b0316..5d0844289a3 100644
--- a/app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt
+++ b/app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt
@@ -63,8 +63,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt b/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt
index 104ee920e47..d90f9471261 100644
--- a/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt
+++ b/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt
@@ -64,8 +64,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt b/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt
index bea5d205bc5..f644125b802 100644
--- a/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt
+++ b/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt
@@ -74,8 +74,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt
index 5c86e2b542c..d9eb01477ec 100644
--- a/app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt
@@ -64,8 +64,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt b/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt
index 1b5dbb6b44a..d22af58e95b 100644
--- a/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt
+++ b/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt
@@ -58,8 +58,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt b/app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt
index 7aa3bba8f81..d993ffd3de8 100644
--- a/app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt
@@ -84,10 +84,10 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.DefineAppLanguageLocaleContext
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt b/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt
index 794be78f7bc..acbf5c9fec8 100644
--- a/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt
+++ b/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt
@@ -59,9 +59,9 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt
index 9ba1741236e..edc6c0a91e3 100644
--- a/app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt
@@ -70,8 +70,8 @@ import org.oppia.android.domain.topic.TEST_STORY_ID_0
import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt b/app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt
index 1d278a6a9da..c5442bff54e 100644
--- a/app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt
@@ -138,7 +138,6 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestImageLoaderModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
@@ -146,6 +145,7 @@ import org.oppia.android.testing.environment.TestEnvironmentConfig
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.KonfettiViewMatcher.Companion.hasActiveConfetti
import org.oppia.android.testing.espresso.KonfettiViewMatcher.Companion.hasExpectedNumberOfActiveSystems
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.DefineAppLanguageLocaleContext
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
diff --git a/app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt b/app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt
index 35dd0310c63..9ac373f8edd 100644
--- a/app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt
@@ -61,8 +61,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt
index ee383f8ec5b..2b60ef54096 100644
--- a/app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt
@@ -63,8 +63,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt
index 5ecdfdcf3cc..b837db394bf 100644
--- a/app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt
@@ -64,8 +64,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt
index 7ef9b806b93..1ed839774da 100644
--- a/app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt
@@ -64,8 +64,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt
index b38e93506fd..6f4ecf14c9a 100644
--- a/app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt
@@ -65,8 +65,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt b/app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt
index 0941c35c37c..68f5e78c518 100644
--- a/app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt
@@ -81,8 +81,8 @@ import org.oppia.android.domain.platformparameter.syncup.PlatformParameterSyncUp
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.network.MockPlatformParameterService
import org.oppia.android.testing.network.RetrofitTestModule
diff --git a/app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt
index bfea9b66185..e0f11812c55 100644
--- a/app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt
@@ -63,8 +63,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCountTest.kt b/app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCountTest.kt
index 83608031b85..4dd699158b9 100644
--- a/app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCountTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCountTest.kt
@@ -64,8 +64,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt
index fed517d1912..8d05adc7ebf 100644
--- a/app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt
@@ -67,8 +67,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.story.StoryProgressTestHelper
diff --git a/app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt
index 5fe8a3fb3c8..55574573642 100644
--- a/app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt
@@ -63,8 +63,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/testing/activity/TestActivityTest.kt b/app/src/test/java/org/oppia/android/app/testing/activity/TestActivityTest.kt
index f23ffd3dd6b..23e0211298b 100644
--- a/app/src/test/java/org/oppia/android/app/testing/activity/TestActivityTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/activity/TestActivityTest.kt
@@ -60,8 +60,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt b/app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt
index e6d2a7f4812..c9d01ffbce5 100644
--- a/app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt
@@ -70,8 +70,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt b/app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt
index bd942c2b0e4..462d087efd6 100644
--- a/app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt
@@ -66,8 +66,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.profile.ProfileTestHelper
diff --git a/app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTest.kt b/app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTest.kt
index 649ad5306b8..9e3c3edc499 100644
--- a/app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTest.kt
@@ -61,8 +61,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt b/app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt
index 7b33b32cad0..fd39ae0660e 100644
--- a/app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt
+++ b/app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt
@@ -70,8 +70,8 @@ import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_4
import org.oppia.android.domain.topic.TEST_STORY_ID_0
import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt b/app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt
index cda806ffed1..f4e4081e436 100644
--- a/app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt
@@ -60,8 +60,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt b/app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt
index b5ef86c5597..d48ad3f170c 100644
--- a/app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt
@@ -60,8 +60,8 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt
index b388ade740a..c5cfcca74d3 100644
--- a/app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt
@@ -87,10 +87,10 @@ import org.oppia.android.domain.question.WrongAnswerScorePenalty
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.topic.TEST_SKILL_ID_1
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.espresso.KonfettiViewMatcher.Companion.hasActiveConfetti
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt
index 42b14d83075..8667a942f21 100644
--- a/app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt
+++ b/app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt
@@ -62,8 +62,8 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.topic.SUBTOPIC_TOPIC_ID
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt b/app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt
index b234a2ae58a..408d7df55fa 100644
--- a/app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt
+++ b/app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt
@@ -73,9 +73,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.DefineAppLanguageLocaleContext
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt b/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt
index 9ce6d2ce22c..5689577c68c 100644
--- a/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt
+++ b/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt
@@ -66,10 +66,10 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner.Iteration
diff --git a/app/src/test/java/org/oppia/android/app/translation/AppLanguageWatcherMixinTest.kt b/app/src/test/java/org/oppia/android/app/translation/AppLanguageWatcherMixinTest.kt
index 95f05fa2ebb..f3231f3ac7e 100644
--- a/app/src/test/java/org/oppia/android/app/translation/AppLanguageWatcherMixinTest.kt
+++ b/app/src/test/java/org/oppia/android/app/translation/AppLanguageWatcherMixinTest.kt
@@ -71,9 +71,9 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.DefineAppLanguageLocaleContext
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
diff --git a/app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt b/app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt
index 5cd6e77f8cf..ea9a9d89a34 100644
--- a/app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt
+++ b/app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt
@@ -61,8 +61,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt b/app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt
index 64800e1d5e8..97bff878691 100644
--- a/app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt
+++ b/app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt
@@ -78,8 +78,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner.Iteration
diff --git a/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt
index dbf2d829fe1..f7652a7e08b 100644
--- a/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt
@@ -53,11 +53,11 @@ import org.oppia.android.domain.profile.ProfileManagementController
import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_5
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.FakeExceptionLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
import org.oppia.android.testing.data.AsyncResultSubject.Companion.assertThat
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt
index ca80f6e297d..4208244c46e 100644
--- a/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt
@@ -14,10 +14,10 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
-import org.oppia.android.testing.FakeFirebaseAuthWrapperImpl
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
+import org.oppia.android.testing.firebase.FakeFirebaseAuthWrapperImpl
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.time.FakeOppiaClockModule
import org.oppia.android.util.data.DataProvidersInjector
diff --git a/domain/src/test/java/org/oppia/android/domain/auth/BUILD.bazel b/domain/src/test/java/org/oppia/android/domain/auth/BUILD.bazel
index 61f22c5ed07..7b549aa2c45 100644
--- a/domain/src/test/java/org/oppia/android/domain/auth/BUILD.bazel
+++ b/domain/src/test/java/org/oppia/android/domain/auth/BUILD.bazel
@@ -5,6 +5,29 @@ Tests for libraries providing authentication with Firebase functionality.
load("@dagger//:workspace_defs.bzl", "dagger_rules")
load("//:oppia_android_test.bzl", "oppia_android_test")
+oppia_android_test(
+ name = "AuthenticationControllerTest",
+ srcs = ["AuthenticationControllerTest.kt"],
+ custom_package = "org.oppia.android.domain.auth",
+ test_class = "org.oppia.android.domain.auth.AuthenticationControllerTest",
+ test_manifest = "//domain:test_manifest",
+ deps = [
+ ":dagger",
+ "//domain/src/main/java/org/oppia/android/domain/auth:auth_module",
+ "//domain/src/main/java/org/oppia/android/domain/oppialogger/analytics:prod_module",
+ "//testing",
+ "//testing/src/main/java/org/oppia/android/testing/robolectric:test_module",
+ "//testing/src/main/java/org/oppia/android/testing/threading:test_module",
+ "//testing/src/main/java/org/oppia/android/testing/time:test_module",
+ "//third_party:androidx_test_ext_junit",
+ "//third_party:com_google_truth_truth",
+ "//third_party:junit_junit",
+ "//third_party:org_mockito_mockito-core",
+ "//third_party:org_robolectric_robolectric",
+ "//third_party:robolectric_android-all",
+ ],
+)
+
oppia_android_test(
name = "AuthenticationModuleTest",
srcs = ["AuthenticationModuleTest.kt"],
@@ -27,4 +50,27 @@ oppia_android_test(
],
)
+oppia_android_test(
+ name = "FirebaseAuthWrapperImplTest",
+ srcs = ["FirebaseAuthWrapperImplTest.kt"],
+ custom_package = "org.oppia.android.domain.auth",
+ test_class = "org.oppia.android.domain.auth.FirebaseAuthWrapperImplTest",
+ test_manifest = "//domain:test_manifest",
+ deps = [
+ ":dagger",
+ "//domain/src/main/java/org/oppia/android/domain/auth:auth_module",
+ "//domain/src/main/java/org/oppia/android/domain/oppialogger/analytics:prod_module",
+ "//testing",
+ "//testing/src/main/java/org/oppia/android/testing/robolectric:test_module",
+ "//testing/src/main/java/org/oppia/android/testing/threading:test_module",
+ "//testing/src/main/java/org/oppia/android/testing/time:test_module",
+ "//third_party:androidx_test_ext_junit",
+ "//third_party:com_google_truth_truth",
+ "//third_party:junit_junit",
+ "//third_party:org_mockito_mockito-core",
+ "//third_party:org_robolectric_robolectric",
+ "//third_party:robolectric_android-all",
+ ],
+)
+
dagger_rules()
diff --git a/domain/src/test/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImplTest.kt b/domain/src/test/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImplTest.kt
index 28a07b49b39..8983ae92125 100644
--- a/domain/src/test/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImplTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImplTest.kt
@@ -31,7 +31,6 @@ import javax.inject.Singleton
@RunWith(AndroidJUnit4::class)
@LooperMode(LooperMode.Mode.PAUSED)
@Config(application = FirebaseAuthWrapperImplTest.TestApplication::class)
-
class FirebaseAuthWrapperImplTest {
@Inject
diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt
index 8aab3fe63ad..deee65f9f9a 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt
@@ -50,10 +50,10 @@ import org.oppia.android.domain.topic.TEST_STORY_ID_2
import org.oppia.android.domain.topic.TEST_TOPIC_ID_0
import org.oppia.android.domain.topic.TEST_TOPIC_ID_1
import org.oppia.android.testing.FakeExceptionLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.environment.TestEnvironmentConfig
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt
index f70c336f8bc..af38311d4b5 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt
@@ -83,11 +83,11 @@ import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.FakeExceptionLogger
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.environment.TestEnvironmentConfig
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.logging.EventLogSubject
import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat
import org.oppia.android.testing.robolectric.RobolectricModule
diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt
index 6256ff55290..bfef2cedd25 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt
@@ -49,10 +49,10 @@ import org.oppia.android.domain.platformparameter.PlatformParameterModule
import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule
import org.oppia.android.domain.topic.FRACTIONS_EXPLORATION_ID_0
import org.oppia.android.domain.topic.FRACTIONS_EXPLORATION_ID_1
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.environment.TestEnvironmentConfig
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.lightweightcheckpointing.ExplorationCheckpointTestHelper
import org.oppia.android.testing.lightweightcheckpointing.FRACTIONS_EXPLORATION_0_TITLE
import org.oppia.android.testing.lightweightcheckpointing.FRACTIONS_STORY_0_EXPLORATION_0_CURRENT_VERSION
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataControllerTest.kt
index 02b49b292a9..2de079ee3c0 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataControllerTest.kt
@@ -27,9 +27,9 @@ import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize
import org.oppia.android.domain.platformparameter.PlatformParameterModule
import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule
import org.oppia.android.testing.FakeFirestoreEventLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt
index 74ab58fe35e..a036c2a304d 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt
@@ -43,9 +43,9 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_2
import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_5
import org.oppia.android.testing.FakeAnalyticsEventLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner.Iteration
import org.oppia.android.testing.junit.OppiaParameterizedTestRunner.Parameter
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/SurveyEventsLoggerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/SurveyEventsLoggerTest.kt
index f82ab30c03d..a8962bb0af4 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/SurveyEventsLoggerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/SurveyEventsLoggerTest.kt
@@ -23,8 +23,8 @@ import org.oppia.android.domain.oppialogger.survey.SurveyEventsLogger
import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.FakeFirestoreEventLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat
import org.oppia.android.testing.logging.SyncStatusTestModule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializerTest.kt
index 50450041a09..9f9443e1708 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializerTest.kt
@@ -38,8 +38,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterModule
import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule
import org.oppia.android.domain.testing.oppialogger.loguploader.FakeLogUploader
import org.oppia.android.testing.FakeExceptionLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt
index 1b715670f33..6ecf7a83e28 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt
@@ -44,8 +44,8 @@ import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.FakeExceptionLogger
import org.oppia.android.testing.FakeFirestoreEventLogger
import org.oppia.android.testing.FakePerformanceMetricsEventLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.logging.SyncStatusTestModule
import org.oppia.android.testing.logging.TestSyncStatusManager
import org.oppia.android.testing.mockito.anyOrNull
diff --git a/domain/src/test/java/org/oppia/android/domain/survey/SurveyControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/survey/SurveyControllerTest.kt
index 4517b0b6504..8ea319426f5 100644
--- a/domain/src/test/java/org/oppia/android/domain/survey/SurveyControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/survey/SurveyControllerTest.kt
@@ -19,9 +19,9 @@ import org.oppia.android.domain.oppialogger.ApplicationIdSeed
import org.oppia.android.domain.oppialogger.LogStorageModule
import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
import org.oppia.android.testing.FakeExceptionLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
import org.oppia.android.testing.threading.TestDispatcherModule
diff --git a/domain/src/test/java/org/oppia/android/domain/survey/SurveyProgressControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/survey/SurveyProgressControllerTest.kt
index e0e8e1deade..ea336df027a 100644
--- a/domain/src/test/java/org/oppia/android/domain/survey/SurveyProgressControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/survey/SurveyProgressControllerTest.kt
@@ -25,9 +25,9 @@ import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
import org.oppia.android.testing.FakeAnalyticsEventLogger
import org.oppia.android.testing.FakeExceptionLogger
import org.oppia.android.testing.FakeFirestoreEventLogger
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.data.DataProviderTestMonitor
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.logging.EventLogSubject
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
diff --git a/instrumentation/BUILD.bazel b/instrumentation/BUILD.bazel
index 03c56337516..f6ffffcdc8a 100644
--- a/instrumentation/BUILD.bazel
+++ b/instrumentation/BUILD.bazel
@@ -6,6 +6,8 @@ Note that:
of the test suite.
"""
+load("@bazel_skylib//rules:build_test.bzl", "build_test")
+
exports_files(["src/javatests/AndroidManifest.xml"])
# Used for end-to-end tests
@@ -29,3 +31,8 @@ android_binary(
"//instrumentation/src/java/org/oppia/android/instrumentation/application:oppia_test_application",
],
)
+
+build_test(
+ name = "oppia_test_binary_smoke_test",
+ targets = [":oppia_test"],
+)
diff --git a/instrumentation/oppia_instrumentation_test.bzl b/instrumentation/oppia_instrumentation_test.bzl
index 63d8413cd2c..6319bbf0ba3 100644
--- a/instrumentation/oppia_instrumentation_test.bzl
+++ b/instrumentation/oppia_instrumentation_test.bzl
@@ -2,6 +2,7 @@
Instrumentation macros to define up end-to-end tests.
"""
+load("@bazel_skylib//rules:build_test.bzl", "build_test")
load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_android_library")
def oppia_instrumentation_test(
@@ -16,26 +17,34 @@ def oppia_instrumentation_test(
srcs: list of str. List of test files corresponding to this test suite.
deps: list of str. The list of dependencies needed to build and run the test.
"""
+ test_lib_name = "%s_lib" % name
+ test_binary_name = "%sBinary" % name
+
kt_android_library(
- name = "%s_lib" % name,
+ name = test_lib_name,
testonly = True,
srcs = srcs,
deps = deps,
)
native.android_binary(
- name = "%sBinary" % name,
+ name = test_binary_name,
testonly = True,
custom_package = "org.oppia.android",
instruments = "//instrumentation:oppia_test",
manifest = "//instrumentation:src/javatests/AndroidManifest.xml",
- deps = [":%s_lib" % name],
+ deps = [test_lib_name],
)
# TODO(#3617): Target isn't supported yet. Remove the manual tag once fixed.
native.android_instrumentation_test(
name = name,
target_device = "@android_test_support//tools/android/emulated_devices/generic_phone:android_23_x86_qemu2",
- test_app = ":%sBinary" % name,
+ test_app = test_binary_name,
tags = ["manual"],
)
+
+ build_test(
+ name = "%s_smoke_test" % name,
+ targets = [name, test_binary_name],
+ )
diff --git a/instrumentation/src/java/org/oppia/android/instrumentation/application/BUILD.bazel b/instrumentation/src/java/org/oppia/android/instrumentation/application/BUILD.bazel
index 5d9fe4ac612..5e9c6382d77 100644
--- a/instrumentation/src/java/org/oppia/android/instrumentation/application/BUILD.bazel
+++ b/instrumentation/src/java/org/oppia/android/instrumentation/application/BUILD.bazel
@@ -25,7 +25,7 @@ kt_android_library(
"//app/src/main/java/org/oppia/android/app/application/testing:testing_build_flavor_module",
"//data/src/main/java/org/oppia/android/data/backends/gae:network_config_annotations",
"//domain",
- "//testing",
+ "//testing/src/main/java/org/oppia/android/testing/firebase:test_authentication_module",
"//utility",
"//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module",
"//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_module",
diff --git a/instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt b/instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt
index fbf99ee8103..fe588b21105 100644
--- a/instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt
+++ b/instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt
@@ -45,7 +45,7 @@ import org.oppia.android.domain.platformparameter.syncup.PlatformParameterSyncUp
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.util.accessibility.AccessibilityProdModule
import org.oppia.android.util.caching.AssetModule
import org.oppia.android.util.caching.CachingModule
diff --git a/testing/BUILD.bazel b/testing/BUILD.bazel
index 9bed8754f08..95a90957cfd 100644
--- a/testing/BUILD.bazel
+++ b/testing/BUILD.bazel
@@ -40,6 +40,7 @@ kt_android_library(
"//model/src/main/proto:performance_metrics_event_logger_java_proto_lite",
"//testing/src/main/java/org/oppia/android/testing/data:async_result_subject",
"//testing/src/main/java/org/oppia/android/testing/data:data_provider_test_monitor",
+ "//testing/src/main/java/org/oppia/android/testing/firebase:test_authentication_module",
"//testing/src/main/java/org/oppia/android/testing/threading:test_coroutine_dispatchers",
"//testing/src/main/java/org/oppia/android/testing/time:fake_oppia_clock",
"//third_party:androidx_core_core-ktx",
diff --git a/testing/src/main/java/org/oppia/android/testing/firebase/BUILD.bazel b/testing/src/main/java/org/oppia/android/testing/firebase/BUILD.bazel
new file mode 100644
index 00000000000..78b9c0ffb82
--- /dev/null
+++ b/testing/src/main/java/org/oppia/android/testing/firebase/BUILD.bazel
@@ -0,0 +1,22 @@
+"""
+Package for test-only Firebase utilities.
+"""
+
+load("@dagger//:workspace_defs.bzl", "dagger_rules")
+load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_android_library")
+
+kt_android_library(
+ name = "test_authentication_module",
+ testonly = True,
+ srcs = [
+ "FakeFirebaseAuthWrapperImpl.kt",
+ "TestAuthenticationModule.kt",
+ ],
+ visibility = ["//:oppia_testing_visibility"],
+ deps = [
+ ":dagger",
+ "//domain/src/main/java/org/oppia/android/domain/auth:firebase_auth_wrapper",
+ ],
+)
+
+dagger_rules()
diff --git a/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt b/testing/src/main/java/org/oppia/android/testing/firebase/FakeFirebaseAuthWrapperImpl.kt
similarity index 97%
rename from testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt
rename to testing/src/main/java/org/oppia/android/testing/firebase/FakeFirebaseAuthWrapperImpl.kt
index 8f8a9d54b53..616448ce4a2 100644
--- a/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt
+++ b/testing/src/main/java/org/oppia/android/testing/firebase/FakeFirebaseAuthWrapperImpl.kt
@@ -1,4 +1,4 @@
-package org.oppia.android.testing
+package org.oppia.android.testing.firebase
import org.oppia.android.domain.auth.FirebaseAuthWrapper
import org.oppia.android.domain.auth.FirebaseUserWrapper
diff --git a/testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt b/testing/src/main/java/org/oppia/android/testing/firebase/TestAuthenticationModule.kt
similarity index 90%
rename from testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt
rename to testing/src/main/java/org/oppia/android/testing/firebase/TestAuthenticationModule.kt
index ed973730f5a..649f684b064 100644
--- a/testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt
+++ b/testing/src/main/java/org/oppia/android/testing/firebase/TestAuthenticationModule.kt
@@ -1,4 +1,4 @@
-package org.oppia.android.testing
+package org.oppia.android.testing.firebase
import dagger.Module
import dagger.Provides
diff --git a/testing/src/test/java/org/oppia/android/testing/firebase/BUILD.bazel b/testing/src/test/java/org/oppia/android/testing/firebase/BUILD.bazel
new file mode 100644
index 00000000000..c6d5f002b6d
--- /dev/null
+++ b/testing/src/test/java/org/oppia/android/testing/firebase/BUILD.bazel
@@ -0,0 +1,48 @@
+"""
+Tests for test-only Firebase utilities.
+"""
+
+load("@dagger//:workspace_defs.bzl", "dagger_rules")
+load("//:oppia_android_test.bzl", "oppia_android_test")
+
+oppia_android_test(
+ name = "FakeFirebaseAuthWrapperImplTest",
+ srcs = ["FakeFirebaseAuthWrapperImplTest.kt"],
+ custom_package = "org.oppia.android.testing.firebase",
+ test_class = "org.oppia.android.testing.firebase.FakeFirebaseAuthWrapperImplTest",
+ test_manifest = "//testing:test_manifest",
+ deps = [
+ ":dagger",
+ "//domain/src/main/java/org/oppia/android/domain/oppialogger/analytics:prod_module",
+ "//testing",
+ "//testing/src/main/java/org/oppia/android/testing/robolectric:test_module",
+ "//testing/src/main/java/org/oppia/android/testing/threading:test_module",
+ "//testing/src/main/java/org/oppia/android/testing/time:test_module",
+ "//third_party:com_google_truth_truth",
+ "//third_party:junit_junit",
+ "//third_party:org_robolectric_robolectric",
+ "//third_party:robolectric_android-all",
+ ],
+)
+
+oppia_android_test(
+ name = "TestAuthenticationModuleTest",
+ srcs = ["TestAuthenticationModuleTest.kt"],
+ custom_package = "org.oppia.android.testing.firebase",
+ test_class = "org.oppia.android.testing.firebase.TestAuthenticationModuleTest",
+ test_manifest = "//testing:test_manifest",
+ deps = [
+ ":dagger",
+ "//domain/src/main/java/org/oppia/android/domain/oppialogger/analytics:prod_module",
+ "//testing",
+ "//testing/src/main/java/org/oppia/android/testing/robolectric:test_module",
+ "//testing/src/main/java/org/oppia/android/testing/threading:test_module",
+ "//testing/src/main/java/org/oppia/android/testing/time:test_module",
+ "//third_party:com_google_truth_truth",
+ "//third_party:junit_junit",
+ "//third_party:org_robolectric_robolectric",
+ "//third_party:robolectric_android-all",
+ ],
+)
+
+dagger_rules()
diff --git a/testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt b/testing/src/test/java/org/oppia/android/testing/firebase/FakeFirebaseAuthWrapperImplTest.kt
similarity index 95%
rename from testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt
rename to testing/src/test/java/org/oppia/android/testing/firebase/FakeFirebaseAuthWrapperImplTest.kt
index 3da520b2da4..d26d56c8480 100644
--- a/testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt
+++ b/testing/src/test/java/org/oppia/android/testing/firebase/FakeFirebaseAuthWrapperImplTest.kt
@@ -1,4 +1,4 @@
-package org.oppia.android.testing
+package org.oppia.android.testing.firebase
import android.app.Application
import android.content.Context
@@ -14,7 +14,8 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.oppia.android.domain.auth.FirebaseUserWrapper
import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
-import org.oppia.android.testing.FakeFirebaseAuthWrapperImpl.FakeAuthState
+import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.FakeFirebaseAuthWrapperImpl.FakeAuthState
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
import org.oppia.android.testing.time.FakeOppiaClockModule
diff --git a/testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt b/testing/src/test/java/org/oppia/android/testing/firebase/TestAuthenticationModuleTest.kt
similarity index 98%
rename from testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt
rename to testing/src/test/java/org/oppia/android/testing/firebase/TestAuthenticationModuleTest.kt
index e9a9a5f9b23..284f0b27bc4 100644
--- a/testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt
+++ b/testing/src/test/java/org/oppia/android/testing/firebase/TestAuthenticationModuleTest.kt
@@ -1,4 +1,4 @@
-package org.oppia.android.testing
+package org.oppia.android.testing.firebase
import android.app.Application
import android.content.Context
diff --git a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleCustomContextTest.kt b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleCustomContextTest.kt
index 71f53946331..b5076ee912e 100644
--- a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleCustomContextTest.kt
+++ b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleCustomContextTest.kt
@@ -60,8 +60,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
import org.oppia.android.testing.time.FakeOppiaClockModule
diff --git a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleOmissionTest.kt b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleOmissionTest.kt
index 385742c3a2c..5463cb0e542 100644
--- a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleOmissionTest.kt
+++ b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleOmissionTest.kt
@@ -57,9 +57,9 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.assertThrows
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
import org.oppia.android.testing.time.FakeOppiaClockModule
diff --git a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleTest.kt b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleTest.kt
index 896afc9b13e..3a8f7eaf441 100644
--- a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleTest.kt
+++ b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleTest.kt
@@ -61,8 +61,8 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
-import org.oppia.android.testing.TestAuthenticationModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
import org.oppia.android.testing.time.FakeOppiaClockModule
From 4a07d8db69e395c9e076c342c0d1dc3521ff3051 Mon Sep 17 00:00:00 2001
From: MOHIT GUPTA <76530270+MohitGupta121@users.noreply.github.com>
Date: Fri, 9 Feb 2024 07:44:26 +0530
Subject: [PATCH 14/19] Updated new onboarding criteria (#5337)
## Explanation
Updated new onboarding criteria because sometimes 2 PRs can be small
changes. And sometimes the contributor does not communicate well and
will disappear soon. With that we see more new contributors so that we
can keep growing the team, under the stricter acceptance criteria.
## Essential Checklist
- [ ] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [ ] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
---------
Co-authored-by: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
---
wiki/Contributing-to-Oppia-Android.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/wiki/Contributing-to-Oppia-Android.md b/wiki/Contributing-to-Oppia-Android.md
index 1aa80e75d28..5464afe4e07 100644
--- a/wiki/Contributing-to-Oppia-Android.md
+++ b/wiki/Contributing-to-Oppia-Android.md
@@ -53,7 +53,7 @@ When you've found an issue you'd like to tackle:
You are also welcome to tackle non-starter issues, but for those, you might need to be more independent, because we might not know how to solve them either!
-Once you've merged PRs that correspond to **two** different pre-existing GitHub issues, please fill in [this form](https://forms.gle/NxPjimCMqsSTNUgu5) to become an Oppia collaborator! This will grant you access to the repository, and allow you to join a team. (But please don't create your own issues and then make PRs for them -- that won't count.)
+Once you've merged PRs that correspond to **two** different pre-existing GitHub issues, please fill in [this form](https://forms.gle/NxPjimCMqsSTNUgu5) to be considered for a place on a team at Oppia Android! A team lead will evaluate your contributions and give you access to the repository so that you can assign yourself to issues. (But please don't create your own issues and then make PRs for them -- that won't count.)
From f7b9260f32877fad98529343f3a12b418f2cb0ae Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Tue, 13 Feb 2024 03:55:32 +0300
Subject: [PATCH 15/19] Fix Part of #5084: Initialize Appcheck (#5115)
## Explanation
Fixes Part of #5084. This is PR 6 of 6 Planned PRs.
This PR adds Firebase AppCheck and Play Integrity dependencies to the
project. It also initializes AppCheck.
Once a new production build is released with this commit, requests to
all our Firebase resources will include an attestation token, and we
will be able to begin monitoring the type of requests we receive. We
will use this data to inform when we will fully enforce AppCheck for all
Firebase access, after gaining an understanding of how many active users
would be impacted(unable to upload logs to Firestore).
To test this, I added a [debug
token](https://firebase.google.com/docs/app-check/android/debug-provider#emulator)
to the firebase console, to be used to verify our requests to Firestore.
#### The Appcheck console
#### Test on the release token fetch
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
## For UI-specific PRs only
If your PR includes UI-related changes, then:
- Add screenshots for portrait/landscape for both a tablet & phone of
the before & after UI changes
- For the screenshots above, include both English and pseudo-localized
(RTL) screenshots (see [RTL
guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines))
- Add a video showing the full UX flow with a screen reader enabled (see
[accessibility
guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide))
- Add a screenshot demonstrating that you ran affected Espresso tests
locally & that they're passing
---------
Co-authored-by: Ben Henning
---
app/BUILD.bazel | 3 +
app/build.gradle | 3 +
.../application/AbstractOppiaApplication.kt | 18 ++
.../app/application/ApplicationComponent.kt | 3 +
domain/BUILD.bazel | 1 +
.../domain/auth/AuthenticationController.kt | 4 +-
scripts/assets/maven_dependencies.textproto | 33 +++
.../FakeFirebaseAuthWrapperImplTest.kt | 7 +-
third_party/maven_install.json | 253 +++++++++++++++++-
third_party/versions.bzl | 3 +
10 files changed, 312 insertions(+), 16 deletions(-)
diff --git a/app/BUILD.bazel b/app/BUILD.bazel
index 4030f93b7d2..4019ad3cd6c 100644
--- a/app/BUILD.bazel
+++ b/app/BUILD.bazel
@@ -1022,6 +1022,9 @@ android_library(
name = "firestore_deps",
exports = [
"//third_party:com_google_auto_value_auto-value-annotations",
+ "//third_party:com_google_firebase_firebase-appcheck",
+ "//third_party:com_google_firebase_firebase-appcheck-debug",
+ "//third_party:com_google_firebase_firebase-appcheck-playintegrity",
"//third_party:org_checkerframework_checker-qual",
],
)
diff --git a/app/build.gradle b/app/build.gradle
index 95a33a7e7e0..3090289b14a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -169,6 +169,9 @@ dependencies {
'com.google.dagger:dagger:2.24',
'com.google.firebase:firebase-analytics:17.5.0',
'com.google.firebase:firebase-analytics-ktx:17.5.0',
+ 'com.google.firebase:firebase-appcheck:16.0.0',
+ 'com.google.firebase:firebase-appcheck-debug:16.0.0',
+ 'com.google.firebase:firebase-appcheck-playintegrity:16.0.0',
'com.google.firebase:firebase-core:17.5.0',
'com.google.firebase:firebase-crashlytics:17.0.0',
'com.google.firebase:firebase-firestore-ktx:24.2.1',
diff --git a/app/src/main/java/org/oppia/android/app/application/AbstractOppiaApplication.kt b/app/src/main/java/org/oppia/android/app/application/AbstractOppiaApplication.kt
index 7581fc75bf5..11a3025ff14 100644
--- a/app/src/main/java/org/oppia/android/app/application/AbstractOppiaApplication.kt
+++ b/app/src/main/java/org/oppia/android/app/application/AbstractOppiaApplication.kt
@@ -9,8 +9,12 @@ import androidx.multidex.MultiDexApplication
import androidx.work.Configuration
import androidx.work.WorkManager
import com.google.firebase.FirebaseApp
+import com.google.firebase.appcheck.FirebaseAppCheck
+import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory
+import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
import org.oppia.android.app.activity.ActivityComponent
import org.oppia.android.app.activity.ActivityComponentFactory
+import org.oppia.android.app.model.BuildFlavor
import org.oppia.android.domain.oppialogger.ApplicationStartupListener
/** The root base [Application] of the Oppia app. */
@@ -47,6 +51,20 @@ abstract class AbstractOppiaApplication(
// TODO(#4751): Re-enable WorkManager for S+.
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
FirebaseApp.initializeApp(applicationContext)
+ // FirebaseAppCheck protects our API resources from abuse. It works with Firebase services,
+ // Google Cloud services, and can also be implemented for our own APIs.
+ // See https://firebase.google.com/docs/app-check for currently supported Firebase products.
+ // Note that as of this code being checked in, only the app's Firestore usage is affected by
+ // App Check (Analytics is NOT affected).
+ if (component.getCurrentBuildFlavor() == BuildFlavor.DEVELOPER) {
+ FirebaseAppCheck.getInstance().installAppCheckProviderFactory(
+ DebugAppCheckProviderFactory.getInstance(),
+ )
+ } else {
+ FirebaseAppCheck.getInstance().installAppCheckProviderFactory(
+ PlayIntegrityAppCheckProviderFactory.getInstance(),
+ )
+ }
WorkManager.initialize(applicationContext, workManagerConfiguration)
val workManager = WorkManager.getInstance(applicationContext)
component.getAnalyticsStartupListenerStartupListeners().forEach { it.onCreate(workManager) }
diff --git a/app/src/main/java/org/oppia/android/app/application/ApplicationComponent.kt b/app/src/main/java/org/oppia/android/app/application/ApplicationComponent.kt
index 4b36869cda8..4fc1daefb7d 100644
--- a/app/src/main/java/org/oppia/android/app/application/ApplicationComponent.kt
+++ b/app/src/main/java/org/oppia/android/app/application/ApplicationComponent.kt
@@ -4,6 +4,7 @@ import android.app.Application
import androidx.work.Configuration
import dagger.BindsInstance
import org.oppia.android.app.activity.ActivityComponentImpl
+import org.oppia.android.app.model.BuildFlavor
import org.oppia.android.domain.oppialogger.ApplicationStartupListener
import org.oppia.android.domain.oppialogger.analytics.AnalyticsStartupListener
import javax.inject.Provider
@@ -30,4 +31,6 @@ interface ApplicationComponent : ApplicationInjector {
fun getAnalyticsStartupListenerStartupListeners(): Set
fun getWorkManagerConfiguration(): Configuration
+
+ fun getCurrentBuildFlavor(): BuildFlavor
}
diff --git a/domain/BUILD.bazel b/domain/BUILD.bazel
index d25ebd140d7..ebc2daa97ab 100755
--- a/domain/BUILD.bazel
+++ b/domain/BUILD.bazel
@@ -177,6 +177,7 @@ TEST_DEPS = [
":interaction_object_test_builder",
"//app:crashlytics",
"//app:crashlytics_deps",
+ "//app:firestore_deps",
"//app/src/main/java/org/oppia/android/app/application/testing:testing_build_flavor_module",
"//config/src/java/org/oppia/android/config:all_languages_config",
"//data/src/main/java/org/oppia/android/data/backends/gae:network_config_prod_module",
diff --git a/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt b/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt
index 72410c5f597..fadb7c46797 100644
--- a/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt
+++ b/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt
@@ -35,7 +35,7 @@ class AuthenticationController @Inject constructor(
}
} catch (e: TimeoutCancellationException) {
deferredResult.complete(
- AsyncResult.Failure(IllegalStateException(e))
+ AsyncResult.Failure(e)
)
}
}
@@ -44,6 +44,6 @@ class AuthenticationController @Inject constructor(
companion object {
/** The amount of time the authentication task should run before timing out. */
- const val AUTHENTICATION_TIMEOUT_MILLIS = 30_000L
+ private const val AUTHENTICATION_TIMEOUT_MILLIS = 30_000L
}
}
diff --git a/scripts/assets/maven_dependencies.textproto b/scripts/assets/maven_dependencies.textproto
index 7305bccdd78..841c9c94fa0 100644
--- a/scripts/assets/maven_dependencies.textproto
+++ b/scripts/assets/maven_dependencies.textproto
@@ -600,6 +600,39 @@ maven_dependency {
}
}
}
+maven_dependency {
+ artifact_name: "com.google.firebase:firebase-appcheck-debug:16.0.0"
+ artifact_version: "16.0.0"
+ license {
+ license_name: "The Apache Software License, Version 2.0"
+ original_link: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ scrapable_link {
+ url: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ }
+ }
+}
+maven_dependency {
+ artifact_name: "com.google.firebase:firebase-appcheck-playintegrity:16.0.0"
+ artifact_version: "16.0.0"
+ license {
+ license_name: "The Apache Software License, Version 2.0"
+ original_link: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ scrapable_link {
+ url: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ }
+ }
+}
+maven_dependency {
+ artifact_name: "com.google.firebase:firebase-appcheck:16.0.0"
+ artifact_version: "16.0.0"
+ license {
+ license_name: "The Apache Software License, Version 2.0"
+ original_link: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ scrapable_link {
+ url: "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ }
+ }
+}
maven_dependency {
artifact_name: "com.google.firebase:firebase-auth-ktx:19.3.1"
artifact_version: "19.3.1"
diff --git a/testing/src/test/java/org/oppia/android/testing/firebase/FakeFirebaseAuthWrapperImplTest.kt b/testing/src/test/java/org/oppia/android/testing/firebase/FakeFirebaseAuthWrapperImplTest.kt
index d26d56c8480..fff494e2ec3 100644
--- a/testing/src/test/java/org/oppia/android/testing/firebase/FakeFirebaseAuthWrapperImplTest.kt
+++ b/testing/src/test/java/org/oppia/android/testing/firebase/FakeFirebaseAuthWrapperImplTest.kt
@@ -60,16 +60,17 @@ class FakeFirebaseAuthWrapperImplTest {
@Test
fun testFakeAuthWrapper_simulateSignInSuccess_returnsFakeAuthStateSuccess() {
fakeFirebaseAuthWrapperImpl.simulateSignInSuccess()
-
val authState = fakeFirebaseAuthWrapperImpl.getAuthState()
- assertThat(authState).isInstanceOf(FakeAuthState.SUCCESS::class.java)
+
+ assertThat(authState).isEqualTo(FakeAuthState.SUCCESS)
}
@Test
fun testFakeAuthWrapper_simulateSignInFailure_returnsFakeAuthStateFailure() {
fakeFirebaseAuthWrapperImpl.simulateSignInFailure()
val authState = fakeFirebaseAuthWrapperImpl.getAuthState()
- assertThat(authState).isInstanceOf(FakeAuthState.FAILURE::class.java)
+
+ assertThat(authState).isEqualTo(FakeAuthState.FAILURE)
}
private fun setUpTestApplicationComponent() {
diff --git a/third_party/maven_install.json b/third_party/maven_install.json
index 24221d97d55..f154369ddb7 100644
--- a/third_party/maven_install.json
+++ b/third_party/maven_install.json
@@ -1,8 +1,8 @@
{
"dependency_tree": {
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
- "__INPUT_ARTIFACTS_HASH": -1629412368,
- "__RESOLVED_ARTIFACTS_HASH": 1784154617,
+ "__INPUT_ARTIFACTS_HASH": 577686317,
+ "__RESOLVED_ARTIFACTS_HASH": 445130734,
"conflict_resolution": {
"androidx.constraintlayout:constraintlayout:1.1.3": "androidx.constraintlayout:constraintlayout:2.0.1",
"androidx.core:core:1.0.1": "androidx.core:core:1.3.1",
@@ -5421,6 +5421,27 @@
"sha256": "1d9fe3a4512512a311889be798e4a0f9cf9fbccddea50a7ca330b1b99ee92993",
"url": "https://maven.google.com/com/google/android/material/material/1.3.0/material-1.3.0-sources.jar"
},
+ {
+ "coord": "com.google.android.play:integrity:aar:1.0.1",
+ "dependencies": [
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:18.0.0"
+ ],
+ "directDependencies": [
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/android/play/integrity/1.0.1/integrity-1.0.1.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/android/play/integrity/1.0.1/integrity-1.0.1.aar",
+ "https://repo1.maven.org/maven2/com/google/android/play/integrity/1.0.1/integrity-1.0.1.aar",
+ "https://maven.fabric.io/public/com/google/android/play/integrity/1.0.1/integrity-1.0.1.aar",
+ "https://maven.google.com/com/google/android/play/integrity/1.0.1/integrity-1.0.1.aar",
+ "https://repo1.maven.org/maven2/com/google/android/play/integrity/1.0.1/integrity-1.0.1.aar"
+ ],
+ "sha256": "c44e46f3fa25c89840e5edcd76e203d61bba2bb7c2eae485856fbcc7d6fa411b",
+ "url": "https://maven.google.com/com/google/android/play/integrity/1.0.1/integrity-1.0.1.aar"
+ },
{
"coord": "com.google.android:annotations:4.1.1.4",
"dependencies": [],
@@ -5956,6 +5977,74 @@
"sha256": "8fd2e91c651391d9c2196eedc784f3ce39bde37dc4b6c8e41055de0656bbb2c9",
"url": "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar"
},
+ {
+ "coord": "com.google.firebase:firebase-appcheck-debug:16.0.0",
+ "dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "com.google.firebase:firebase-appcheck:aar:16.0.0",
+ "androidx.collection:collection:jar:1.1.0",
+ "androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "androidx.core:core:aar:1.3.1",
+ "com.google.firebase:firebase-appcheck-interop:aar:16.0.0",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "androidx.annotation:annotation:jar:1.1.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-annotations:jar:16.1.0"
+ ],
+ "directDependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "com.google.firebase:firebase-appcheck:aar:16.0.0",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0.aar",
+ "https://maven.google.com/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0.aar"
+ ],
+ "sha256": "544cff5ae13c1d2edcb2478c1d4ebb703d2d1a616f4e0bf261721aefc108ab4c",
+ "url": "https://maven.google.com/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0.aar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-appcheck-debug:jar:sources:16.0.0",
+ "dependencies": [
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
+ "androidx.core:core:aar:sources:1.3.1",
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "androidx.collection:collection:jar:sources:1.1.0",
+ "androidx.annotation:annotation:jar:sources:1.1.0",
+ "com.google.firebase:firebase-appcheck:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.firebase:firebase-appcheck-interop:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "directDependencies": [
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "com.google.firebase:firebase-appcheck:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0-sources.jar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0-sources.jar",
+ "https://maven.google.com/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0-sources.jar"
+ ],
+ "sha256": "6d4d930dffab550d7f940837c33de14eb891cb22a22fb4aec4480a8fda8156f2",
+ "url": "https://maven.google.com/com/google/firebase/firebase-appcheck-debug/16.0.0/firebase-appcheck-debug-16.0.0-sources.jar"
+ },
{
"coord": "com.google.firebase:firebase-appcheck-interop:aar:16.0.0",
"dependencies": [
@@ -6018,6 +6107,144 @@
"sha256": "401532d113dcbbafa32132da0d1afb6713726791bb15dc3e311455b4de0b35e6",
"url": "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar"
},
+ {
+ "coord": "com.google.firebase:firebase-appcheck-playintegrity:16.0.0",
+ "dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "com.google.firebase:firebase-appcheck:aar:16.0.0",
+ "androidx.collection:collection:jar:1.1.0",
+ "androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "androidx.core:core:aar:1.3.1",
+ "com.google.firebase:firebase-appcheck-interop:aar:16.0.0",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "androidx.annotation:annotation:jar:1.1.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-annotations:jar:16.1.0",
+ "com.google.android.play:integrity:aar:1.0.1"
+ ],
+ "directDependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "com.google.firebase:firebase-appcheck:aar:16.0.0",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.android.play:integrity:aar:1.0.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0.aar",
+ "https://maven.google.com/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0.aar"
+ ],
+ "sha256": "de9ca1700814a52272ad157654f1224c6b05da9c3da15121c4da23a5eca1ebda",
+ "url": "https://maven.google.com/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0.aar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-appcheck-playintegrity:jar:sources:16.0.0",
+ "dependencies": [
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
+ "androidx.core:core:aar:sources:1.3.1",
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "com.google.android.play:integrity:aar:sources:1.0.1",
+ "androidx.collection:collection:jar:sources:1.1.0",
+ "androidx.annotation:annotation:jar:sources:1.1.0",
+ "com.google.firebase:firebase-appcheck:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.firebase:firebase-appcheck-interop:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "directDependencies": [
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "com.google.android.play:integrity:aar:sources:1.0.1",
+ "com.google.firebase:firebase-appcheck:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0-sources.jar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0-sources.jar",
+ "https://maven.google.com/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0-sources.jar"
+ ],
+ "sha256": "1bab390147068a9e0f10becdffddd2b1b46f3456b9024e567e7e448679b08b18",
+ "url": "https://maven.google.com/com/google/firebase/firebase-appcheck-playintegrity/16.0.0/firebase-appcheck-playintegrity-16.0.0-sources.jar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-appcheck:16.0.0",
+ "dependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "androidx.collection:collection:jar:1.1.0",
+ "androidx.fragment:fragment:aar:1.2.0",
+ "com.google.android.gms:play-services-basement:aar:18.0.0",
+ "androidx.core:core:aar:1.3.1",
+ "com.google.firebase:firebase-appcheck-interop:aar:16.0.0",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "androidx.annotation:annotation:jar:1.1.0",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1",
+ "com.google.firebase:firebase-annotations:jar:16.1.0"
+ ],
+ "directDependencies": [
+ "com.google.firebase:firebase-components:aar:17.0.0",
+ "com.google.firebase:firebase-appcheck-interop:aar:16.0.0",
+ "com.google.android.gms:play-services-base:aar:18.0.1",
+ "com.google.firebase:firebase-common:aar:20.1.1",
+ "com.google.android.gms:play-services-tasks:aar:18.0.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0.aar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0.aar",
+ "https://maven.google.com/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0.aar"
+ ],
+ "sha256": "f6f093086af3af54797cc8f4070aad5b1e8fbb3e16ccbcfd0f02e7dd3e3c9448",
+ "url": "https://maven.google.com/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0.aar"
+ },
+ {
+ "coord": "com.google.firebase:firebase-appcheck:aar:sources:16.0.0",
+ "dependencies": [
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-annotations:jar:sources:16.1.0",
+ "androidx.core:core:aar:sources:1.3.1",
+ "androidx.fragment:fragment:aar:sources:1.2.0",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "androidx.collection:collection:jar:sources:1.1.0",
+ "androidx.annotation:annotation:jar:sources:1.1.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.firebase:firebase-appcheck-interop:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "directDependencies": [
+ "com.google.firebase:firebase-common:aar:sources:20.1.1",
+ "com.google.firebase:firebase-components:aar:sources:17.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.firebase:firebase-appcheck-interop:aar:sources:16.0.0",
+ "com.google.android.gms:play-services-base:aar:sources:18.0.1"
+ ],
+ "file": "v1/https/maven.google.com/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0-sources.jar",
+ "mirror_urls": [
+ "https://maven.google.com/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0-sources.jar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0-sources.jar",
+ "https://maven.google.com/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0-sources.jar"
+ ],
+ "sha256": "d6b6b35d7c6fd5c4bbb912b62175e285cba8b9e3280ccd6b4bfd3e14d5c3782c",
+ "url": "https://maven.google.com/com/google/firebase/firebase-appcheck/16.0.0/firebase-appcheck-16.0.0-sources.jar"
+ },
{
"coord": "com.google.firebase:firebase-auth-interop:aar:19.0.2",
"dependencies": [
@@ -6735,10 +6962,6 @@
{
"coord": "com.google.firebase:firebase-installations-interop:aar:16.0.0",
"dependencies": [
- "androidx.collection:collection:jar:1.1.0",
- "androidx.fragment:fragment:aar:1.2.0",
- "com.google.android.gms:play-services-basement:aar:18.0.0",
- "androidx.core:core:aar:1.3.1",
"com.google.android.gms:play-services-tasks:aar:18.0.1"
],
"directDependencies": [
@@ -11285,6 +11508,18 @@
],
"file": null
},
+ {
+ "coord": "com.google.android.play:integrity:aar:sources:1.0.1",
+ "dependencies": [
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ ],
+ "directDependencies": [
+ "com.google.android.gms:play-services-basement:aar:sources:18.0.0",
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1"
+ ],
+ "file": null
+ },
{
"coord": "com.google.firebase:firebase-analytics:jar:sources:17.5.0",
"dependencies": [
@@ -11528,11 +11763,7 @@
{
"coord": "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0",
"dependencies": [
- "androidx.core:core:aar:sources:1.3.1",
- "androidx.fragment:fragment:aar:sources:1.2.0",
- "androidx.collection:collection:jar:sources:1.1.0",
- "com.google.android.gms:play-services-tasks:aar:sources:18.0.1",
- "com.google.android.gms:play-services-basement:aar:sources:18.0.0"
+ "com.google.android.gms:play-services-tasks:aar:sources:18.0.1"
],
"directDependencies": [
"com.google.android.gms:play-services-tasks:aar:sources:18.0.1"
diff --git a/third_party/versions.bzl b/third_party/versions.bzl
index 24195afce9e..f62c87f8f15 100644
--- a/third_party/versions.bzl
+++ b/third_party/versions.bzl
@@ -56,6 +56,9 @@ MAVEN_PRODUCTION_DEPENDENCY_VERSIONS = {
"com.google.android.material:material": "1.3.0",
"com.google.auto.value:auto-value-annotations": "1.8.1",
"com.google.firebase:firebase-analytics": "17.5.0",
+ "com.google.firebase:firebase-appcheck": "16.0.0",
+ "com.google.firebase:firebase-appcheck-debug": "16.0.0",
+ "com.google.firebase:firebase-appcheck-playintegrity": "16.0.0",
"com.google.firebase:firebase-auth-ktx": "19.3.1",
"com.google.firebase:firebase-common": "19.3.0",
"com.google.firebase:firebase-crashlytics": "17.1.1",
From 30ba44dc91e42d0fd960aac9306f76170d3ba3e4 Mon Sep 17 00:00:00 2001
From: RD Rama Devi <122200035+Rd4dev@users.noreply.github.com>
Date: Wed, 14 Feb 2024 14:17:51 +0530
Subject: [PATCH 16/19] Fix #4527: FAQ Inappropriate faqs removed (#5332)
## Explanation
Fixes #4527
The [design team](https://github.com/oppia/design-team/issues/75) and
the previous [PRs](https://github.com/oppia/oppia-android/pull/5247)
addressed various issues and revised the FAQ list. However, @seanlip
pointed out in the
[discussions](https://github.com/oppia/design-team/issues/75#issuecomment-1584180125)
that the FAQ related to updating mobile numbers or email addresses
appears inappropriate.
After verifying with @adhiamboperes and @BenHenning, the initial commit
includes removing [that specific
FAQ](https://github.com/oppia/oppia-android/blob/3ced7e14a8bff8c3757ed15a1626b0e63c6ce14d/app/src/main/res/values/strings.xml#L574)
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
---------
Co-authored-by: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
---
app/src/main/res/values-ar/strings.xml | 26 ++++++++++---------
app/src/main/res/values-pcm-rNG/strings.xml | 28 +++++++++++----------
app/src/main/res/values-pt-rBR/strings.xml | 26 ++++++++++---------
app/src/main/res/values-sw/strings.xml | 26 ++++++++++---------
app/src/main/res/values/faqs.xml | 2 --
app/src/main/res/values/strings.xml | 18 ++++++-------
6 files changed, 65 insertions(+), 61 deletions(-)
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 4d3f7e4b8de..df911829dad 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -501,27 +501,29 @@
ما هي %s؟
من هو المشرف؟
كيف يمكنني إنشاء ملف تعريف(حساب) جديد؟
- ما هي %s؟
- من هو المشرف؟
- لماذا لا يتم تحميل مشغل الاستكشاف؟
- لماذا لا يتم تشغيل الصوت الخاص بي؟
+ كيف يمكنني الحصول على التطبيق بلغتي؟
+ وجدت خلل. كيف يمكنني الإبلاغ عنه؟
+ لماذا هناك فقط دروس رياضيات؟
+ هل ستقومون بإنشاء مزيد من الدروس؟
لماذا لا يتم تحميل مشغل الاستكشاف؟
لماذا لا يتم تشغيل الصوت الخاص بي؟
كيف يمكنني حذف ملف التعريف(حساب)؟
- كيف يمكنني تغيير بريدي الإلكتروني / رقم هاتفي؟
- لا أجد سؤالي هنا. ماذا الان؟
+ كيف يمكنني تحديث التطبيق؟
+ كيف يمكنني تحديث نظام التشغيل Android الخاص بي؟
+ لا أجد سؤالي هنا. ماذا الان؟
<p>%1$s <i>\"أو-بي-يا\"</i>(فنلندية) - \"للتعلم\"</p><p><br></p><p>%1$sمهمتنا هي مساعدة أي شخص على تعلم أي شيء يريده بطريقة فعالة وممتعة.</p><p><br></p><p>من خلال إنشاء مجموعة من الدروس المجانية عالية الجودة والفعالة بشكل واضح بمساعدة معلمين من جميع أنحاء العالم ، تهدف %1$s إلى تزويد الطلاب بتعليم جيد - بغض النظر عن مكان وجودهم أو الموارد التقليدية التي يمكنهم الوصول إليها.</p><p><br></p><p>كطالب ، يمكنك أن تبدأ مغامرتك التعليمية من خلال تصفح الموضوعات المدرجة في الصفحة الرئيسية!</p>
<p>المشرف هو المستخدم الرئيسي الذي يدير ملفات التعريف والإعدادات لكل ملف تعريف على حسابه. هم على الأرجح والدك أو معلمك أو وصي عليك الذي أنشأ هذا الملف الشخصي لك.</p><p><br></p><p>يمكن للمسؤولين إدارة الملفات الشخصية وتعيين أرقام التعريف الشخصية وتغيير الإعدادات الأخرى ضمن حساباتهم. بناءً على ملف التعريف الخاص بك ، قد تكون أذونات المسؤول مطلوبة لبعض الميزات مثل تنزيل الموضوعات وتغيير رقم التعريف الشخصي وغير ذلك.</p><p><br></p><p>لمعرفة من هو المسؤول لديك ، انتقل إلى منتقي الملف الشخصي. الملف الشخصي الأول المدرج ولديه \"المسؤول\" مكتوب باسمه هو المسؤول.</p>
<p>إذا كانت هذه هي المرة الأولى التي تنشئ فيها ملفًا شخصيًا وليس لديك رقم تعريف شخصي: <ol><li> من منتقي الملف الشخصي ، اضغط على<strong> قم بإعداد ملفات تعريف متعددة</strong></li><li> قم بإنشاء رقم تعريف شخصي و<strong>احفظ</strong></li><li> املأ جميع البيانات للملف الشخصي.<ol><li>(اختياري) قم بتحميل صورة.</li> <li>إدخال اسم.</li> <li>(اختياري) قم بتعيين رقم تعريف شخصي مكون من 3 أرقام.</li></ol></li><li> اضغط<strong>إنشاء</strong> . تمت إضافة هذا الملف الشخصي إلى منتقي ملف التعريف الخاص بك!</li></ol></p><p> إذا قمت بإنشاء ملف تعريف من قبل ولديك رقم تعريف شخصي:<ol><li> من منتقي الملف الشخصي ، اضغط على<strong>إضافة الملف الشخصي</strong></li> <li> أدخل رقم التعريف الشخصي الخاص بك وانقر فوق<strong>إرسال</strong></li><li> املأ جميع الحقول للملف الشخصي. <ol> <li>(اختياري) قم بتحميل صورة.</li> <li>إدخال اسم.</li> <li>(اختياري) قم بتعيين رقم تعريف شخصي مكون من 3 أرقام. </li></ol></li><li> اضغط<strong>إنشاء</strong> . تمت إضافة هذا الملف الشخصي إلى منتقي ملف التعريف الخاص بك!</li></ol></p><br><p> ملاحظة: فقط ال<u>مدير</u> قادر على إدارة الملفات الشخصية.</p>
- <p>%1$s <i>\"أو-بي-يا\"</i>(فنلندية) - \"للتعلم\"</p><p><br></p><p>%1$sمهمتنا هي مساعدة أي شخص على تعلم أي شيء يريده بطريقة فعالة وممتعة.</p><p><br></p><p>من خلال إنشاء مجموعة من الدروس المجانية عالية الجودة والفعالة بشكل واضح بمساعدة معلمين من جميع أنحاء العالم ، تهدف %1$s إلى تزويد الطلاب بتعليم جيد - بغض النظر عن مكان وجودهم أو الموارد التقليدية التي يمكنهم الوصول إليها.</p><p><br></p><p>كطالب ، يمكنك أن تبدأ مغامرتك التعليمية من خلال تصفح الموضوعات المدرجة في الصفحة الرئيسية!</p>
- <p>المشرف هو المستخدم الرئيسي الذي يدير ملفات التعريف والإعدادات لكل ملف تعريف على حسابه. هم على الأرجح والدك أو معلمك أو وصي عليك الذي أنشأ هذا الملف الشخصي لك.</p><p><br></p><p>يمكن للمسؤولين إدارة الملفات الشخصية وتعيين أرقام التعريف الشخصية وتغيير الإعدادات الأخرى ضمن حساباتهم. بناءً على ملف التعريف الخاص بك ، قد تكون أذونات المسؤول مطلوبة لبعض الميزات مثل تنزيل الموضوعات وتغيير رقم التعريف الشخصي وغير ذلك.</p><p><br></p><p>لمعرفة من هو المسؤول لديك ، انتقل إلى منتقي الملف الشخصي. الملف الشخصي الأول المدرج ولديه \"المسؤول\" مكتوب باسمه هو المسؤول.</p>
- <p>إذا لم يتم تحميل مشغل الاستكشاف</p><p><br></p><p>تحقق لمعرفة ما إذا كان التطبيق محدثًا أم لا:</p><p> <ul> <li> انتقل إلى متجر Play وتأكد من تحديث التطبيق إلى أحدث إصدار </li></ul><p><br></p><p>تحقق من اتصالك بالإنترنت:</p><ul><li> إذا كان اتصالك بالإنترنت بطيئًا ، فحاول إعادة الاتصال بشبكة Wi-Fi أو الاتصال بشبكة أخرى. </li></ul><p>اطلب من المشرف التحقق من أجهزتهم واتصال الإنترنت:</p><ul><li> اطلب من المشرف استكشاف الأخطاء وإصلاحها باستخدام الخطوات المذكورة أعلاه </li></ul><p>أخبرنا إذا كنت لا تزال تواجه مشكلات في التحميل:</p><ul><li> أبلغ عن مشكلة عن طريق الاتصال بنا على admin@oppia.org. </li></ul>
- <p>إذا لم يتم تشغيل الصوت الخاص بك</p><p><br></p><p>تحقق لمعرفة ما إذا كان التطبيق محدثًا أم لا:</p><ul><li>انتقل إلى متجر Play وتأكد من تحديث التطبيق إلى أحدث إصدار</li></ul><p><br></p><p>تحقق من اتصالك بالإنترنت:</p><ul><li>إذا كان اتصالك بالإنترنت بطيئًا ، فحاول إعادة الاتصال بشبكة Wi-Fi أو الاتصال بشبكة أخرى. قد يتسبب الإنترنت البطيء في تحميل الصوت بشكل غير منتظم ، مما يجعل من الصعب تشغيله.</li></ul><p><br></p><p>اطلب من المسؤول التحقق من أجهزتهم واتصال الإنترنت:</p><ul><li>اطلب من المسؤول استكشاف الأخطاء وإصلاحها باستخدام الخطوات المذكورة أعلاه</li></ul><p><br></p><p>أخبرنا إذا كنت لا تزال تواجه مشكلات في التحميل:</p><ul><li>أبلغ عن مشكلة عن طريق الاتصال بنا على admin@oppia.org.</li></ul>
+ تدعم حاليًا تطبيق %s اللغات التالية: الإنجليزية، البرتغالية البرازيلية، العربية، السواحيلية، والبيدجن النيجيري. اختر إحدى هذه اللغات من القائمة، تحت الخيارات. لطلب التطبيق بلغتك، يرجى الاتصال بنا على admin@oppia.org.
+ - من شاشة البداية لتطبيق %s الخاص بك، اضغط على القائمة في الزاوية اليسرى العليا.
- اضغط على مشاركة التعليقات.
- اتبع التعليمات للإبلاغ عن الخلل أو مشاركة التعليقات.
+ مهمة %1$s هي مساعدة المتعلمين في اكتساب المهارات الحياتية الضرورية. الرياضيات هي مهارة أساسية في الحياة اليومية. %1$s سيقدم دروسًا جديدة في العلوم ومواضيع أخرى قريبًا!
+ نعم، %s سيقدم دروس جديدة في العلوم ومواضيع أخرى قريبًا. يرجى التحقق مرة أخرى للحصول على التحديثات!
<p>إذا لم يتم تحميل مشغل الاستكشاف</p><p><br></p><p>تحقق لمعرفة ما إذا كان التطبيق محدثًا أم لا:</p><p> <ul> <li> انتقل إلى متجر Play وتأكد من تحديث التطبيق إلى أحدث إصدار </li></ul><p><br></p><p>تحقق من اتصالك بالإنترنت:</p><ul><li> إذا كان اتصالك بالإنترنت بطيئًا ، فحاول إعادة الاتصال بشبكة Wi-Fi أو الاتصال بشبكة أخرى. </li></ul><p>اطلب من المشرف التحقق من أجهزتهم واتصال الإنترنت:</p><ul><li> اطلب من المشرف استكشاف الأخطاء وإصلاحها باستخدام الخطوات المذكورة أعلاه </li></ul><p>أخبرنا إذا كنت لا تزال تواجه مشكلات في التحميل:</p><ul><li> أبلغ عن مشكلة عن طريق الاتصال بنا على admin@oppia.org. </li></ul>
<p>إذا لم يتم تشغيل الصوت الخاص بك</p><p><br></p><p>تحقق لمعرفة ما إذا كان التطبيق محدثًا أم لا:</p><ul><li>انتقل إلى متجر Play وتأكد من تحديث التطبيق إلى أحدث إصدار</li></ul><p><br></p><p>تحقق من اتصالك بالإنترنت:</p><ul><li>إذا كان اتصالك بالإنترنت بطيئًا ، فحاول إعادة الاتصال بشبكة Wi-Fi أو الاتصال بشبكة أخرى. قد يتسبب الإنترنت البطيء في تحميل الصوت بشكل غير منتظم ، مما يجعل من الصعب تشغيله.</li></ul><p><br></p><p>اطلب من المسؤول التحقق من أجهزتهم واتصال الإنترنت:</p><ul><li>اطلب من المسؤول استكشاف الأخطاء وإصلاحها باستخدام الخطوات المذكورة أعلاه</li></ul><p><br></p><p>أخبرنا إذا كنت لا تزال تواجه مشكلات في التحميل:</p><ul><li>أبلغ عن مشكلة عن طريق الاتصال بنا على admin@oppia.org.</li></ul>
<p>بمجرد حذف ملف التعريف:</p><ol><li>لا يمكن استعادة ملف التعريف.</li><li>سيتم حذف معلومات الملف الشخصي مثل الاسم والصور والتقدم بشكل دائم.</li></ol><p>لحذف ملف تعريف (باستثناء<u>المسؤول</u>):</p><ol><li> من الصفحة الرئيسية للمسؤول ، اضغط على زر القائمة أعلى اليسار.</li><li> اضغط على<strong>ضوابط المسؤول</strong>. </li><li> اضغط على<strong>تحرير ملفات التعريف</strong>.</li><li> اضغط على الملف الشخصي الذي ترغب في حذفه.</li><li> في الجزء السفلي من الشاشة ، انقر فوق<strong>حذف الملف الشخصي</strong>. </li><li> اضغط<strong>حذف</strong>لتأكيد الحذف. </li></ol><p><br></p><p> ملاحظة:<u>المسؤول</u>فقط هو القادر على إدارة الملفات الشخصية.</p>
- <p>لتغيير بريدك الإلكتروني / رقم هاتفك:</p><ol><li> من الصفحة الرئيسية للمشرف ، اضغط على زر القائمة أعلى اليسار.</li><li> اضغط على <strong> عناصر تحكم المسؤول </strong>.</li><li> اضغط على <strong> تعديل الحساب </strong>.</li></ol><p><br></p> <p>إذا كنت تريد تغيير بريدك الإلكتروني:</p><ol><li>أدخل بريدك الإلكتروني الجديد وانقر على <strong> حفظ </strong>.</li><li> يتم إرسال رابط التأكيد لتأكيد بريدك الإلكتروني الجديد. ستنتهي صلاحية الرابط بعد 24 ساعة ويجب النقر عليه لربطه بحسابك.</li></ol><p><br></p> <p>في حالة تغيير رقم هاتفك: </p><ol><li> أدخل رقم هاتفك الجديد وانقر على <strong> تحقق </strong>.</li><li> يتم إرسال رمز لتأكيد رقمك الجديد. ستنتهي صلاحية الرمز بعد 5 دقائق ويجب إدخاله في الشاشة الجديدة لربطه بحسابك.</li></ol>
- <p> إذا لم تتمكن من العثور على سؤالك أو كنت ترغب في الإبلاغ عن خطأ ، فاتصل بنا على admin@oppia.org. </p>
+ - افتح تطبيق متجر Google Play.
- ابحث عن تطبيق %s.
- اضغط على تحديث.
+ - اضغط على تطبيق الإعدادات على هاتفك.
- اضغط على تحديث النظام.
- اضغط على تحديث النظام واتبع التعليمات لتحديث نظام التشغيل Android الخاص بك.
+ <p> إذا لم تتمكن من العثور على سؤالك أو كنت ترغب في الإبلاغ عن خطأ ، فاتصل بنا على admin@oppia.org. </p>
نشاط اختبار جزء تحرير ملف التعريف
يتحكم المسؤول في نشاط اختبار التجزئة
أكمل دراستك
diff --git a/app/src/main/res/values-pcm-rNG/strings.xml b/app/src/main/res/values-pcm-rNG/strings.xml
index 9dcc4a8953c..6ff2280d115 100644
--- a/app/src/main/res/values-pcm-rNG/strings.xml
+++ b/app/src/main/res/values-pcm-rNG/strings.xml
@@ -510,27 +510,29 @@
Wetin be %s?
Who be Administrator?
How I go fit create a new profile?
- Wetin be %s?
- Who be Administrator?
- Why di Exploration player no dey load?
- Why my audio no dey play?
- Why di Exploration player no dey load?
+ How I fit get the app for my language?
+ I see bug for di app. How I fit report am?
+ Why only math lessons dey available?
+ Una go dey create more lessons?
+ Why di Exploration player no dey load?
Why my audio no dey play?
How I go delete a profile?
- How I go take change my email/phone nomba?
- I no dey find my question here. What now?
+ How I fit update di app?
+ How I fit update my Android OS?
+ I no dey find my question here. What now?
<p>%1$s <i>\"O-pee-yah\"</i> (Finnish) - \"to learn\"</p><p><br></p><p>%1$s\'s mission na to help anyone learn anything dey want in an effective and enjoyable way.</p><p><br></p><p>By creating a set of free, high-quality, demonstrably effective lessons with di help of educators from around di world, %1$s dey aim to provide students with quality education — regardless of where dem dey or di traditional resources wey dem get access to.</p><p><br></p><p>As a student, you fit start your learning adventure by browsing di topics listed on di Home Page!</p>
<p>An Administrator na di main user wey dey manage profiles and settings for every profile on top their account. They fit be your parent, teacher, or guardian wey don create dis profile for you. </p><p><br></p><p>Administrators get di ability to manage profiles, assign PINs, and change other settings under their account. Depending on your profile, Administrator permissions fit dey required for some features such as changing your PIN, and more. </p><p><br></p><p>To see who your Administrator be, go di Profile Chooser. Di first profile fot di list and get \"Administrator\" written under their name na di Administrator. </p>
<p>If na your first time creating a profile and not have a PIN:<ol><li>From di Profile Chooser, tap on <strong>Set up Multiple Profiles</strong>.</li><li>Create a PIN and <strong>Save</strong>.</li><li>Fill in all boxes for di profile.<ol><li>(Optional) Upload a photo.</li><li>Enter a name.</li><li>(Optional) Assign a 3-digit PIN.</li></ol></li><li>Tap <strong>Create</strong>. Dis profile go add to your Profile Chooser!</li></ol></p><p> If you don create a profile before and you get a PIN:<ol><li>From di Profile Chooser, tap on <strong>Add Profile</strong>. </li><li>Enter your PIN and tap <strong>Submit</strong>. </li><li>Fill in all boxes for di profile.<ol><li> (Optional) Upload a photo. </li><li> Enter a name. </li><li> (Optional) Assign a 3-digit PIN. </li></ol></li><li>Tap <strong>Create</strong>. Dis profile go add to your Profile Chooser!</li></ol></p><br><p>Note: Only di <u>Administrator</u> go dey able to manage profiles.</p>
- <p>%1$s <i>\"O-pee-yah\"</i> (Finnish) - \"to learn\"</p><p><br></p><p>%1$s\'s mission na to help anyone learn anything dey want in an effective and enjoyable way.</p><p><br></p><p>By creating a set of free, high-quality, demonstrably effective lessons with di help of educators from around di world, %1$s dey aim to provide students with quality education — regardless of where dem dey or di traditional resources wey dem get access to.</p><p><br></p><p>As a student, you fit start your learning adventure by browsing di topics listed on di Home Page!</p>
- <p>An Administrator na di main user wey dey manage profiles and settings for every profile on top their account. They fit be your parent, teacher, or guardian wey don create dis profile for you. </p><p><br></p><p>Administrators get di ability to manage profiles, assign PINs, and change other settings under their account. Depending on your profile, Administrator permissions fit dey required for some features such as changing your PIN, and more. </p><p><br></p><p>To see who your Administrator be, go di Profile Chooser. Di first profile fot di list and get \"Administrator\" written under their name na di Administrator. </p>
- <p>If di Exploration Player no dey load</p><p><br></p><p>Check to see if di app dey up to date:</p><p><ul><li> Go to di Play Store and make sure sey di app dey updated to di latest version </li></ul><p><br></p><p>Check your internet connection:</p><ul><li> If your internet connection dey slow, try re-connecting to your Wi-Fi network or connecting to a different network. </li></ul><p>Ask di Administrator to check their device and internet connection:</p><ul><li> Get di Administrator to troubleshoot using di steps above </li></ul><p>Let us know if you still dey get issues with loading:</p><ul><li> Report a problem by contacting us at admin@oppia.org. </li></ul>
- <p>If your audio no dey play</p><p><br></p><p>Check to see if di app dey up to date:</p><ul><li> Go to di Play Store and make sure sey di app dey updated to di latest version </li></ul><p><br></p><p>Check your internet connection:</p><ul><li> If your internet connection dey slow, try re-connecting to your Wi-Fi network or connecting to a different network. Slow internet fit cause di audio to load irregularly, and go make am difficult to play. </li></ul><p><br></p><p>Ask di Administrator to check their device and internet connection:</p><ul><li> Get di Administrator to troubleshoot using di steps for up</li></ul><p><br></p><p>Let us know if you still dey get issues with loading:</p><ul><li> Report a problem by contacting us at admin@oppia.org. </li></ul>
+ <p>The %s app dey support English, Brazilian Portuguese, Arabic, Swahili, and Nigerian Pidgin. Select one of these languages for di menu, under Options. To ask for the app for your language, abeg contact us for admin@oppia.org.</p>
+ <p>- From your %s app home screen, tap the menu for di top left corner.
- Tap Share feedback.
- Follow di instructions to report di bug or share feedback.
</p>
+ %1$s mission na to help learners gain necessary life skills. Math na essential skill for everyday life. %1$s go dey offer new lessons on science and other subjects very soon!
+ Yes, %s go dey offer new lessons on science and other subjects very soon. Abeg check back for updates!
<p>If di Exploration Player no dey load</p><p><br></p><p>Check to see if di app dey up to date:</p><p><ul><li> Go to di Play Store and make sure sey di app dey updated to di latest version </li></ul><p><br></p><p>Check your internet connection:</p><ul><li> If your internet connection dey slow, try re-connecting to your Wi-Fi network or connecting to a different network. </li></ul><p>Ask di Administrator to check their device and internet connection:</p><ul><li> Get di Administrator to troubleshoot using di steps above </li></ul><p>Let us know if you still dey get issues with loading:</p><ul><li> Report a problem by contacting us at admin@oppia.org. </li></ul>
<p>If your audio no dey play</p><p><br></p><p>Check to see if di app dey up to date:</p><ul><li> Go to di Play Store and make sure sey di app dey updated to di latest version </li></ul><p><br></p><p>Check your internet connection:</p><ul><li> If your internet connection dey slow, try re-connecting to your Wi-Fi network or connecting to a different network. Slow internet fit cause di audio to load irregularly, and go make am difficult to play. </li></ul><p><br></p><p>Ask di Administrator to check their device and internet connection:</p><ul><li> Get di Administrator to troubleshoot using di steps for up</li></ul><p><br></p><p>Let us know if you still dey get issues with loading:</p><ul><li> Report a problem by contacting us at admin@oppia.org. </li></ul>
<p>Once profile don delete:</p><ol><li>Di profile no fit dey recovered. </li><li> Profile information such as name, photos, and progress go permanently delete. </li></ol><p>To delete a profile (excluding the <u>Administrator\'s</u>):</p><ol><li> From di Administrator\'s Home Page, tap on di menu button on di top left. </li><li>Tap on <strong>Administrator Controls</strong>. </li><li>Tap on <strong>Edit Profiles</strong>. </li><li>Tap on di Profile wey you wan delete. </li><li>For di bottom of di screen, tap <strong>Profile Deletion</strong>. </li><li>Tap <strong>Delete</strong> to confirm deletion. </li></ol><p><br></p><p>Note: Only di <u>Administrator</u> go dey able to manage profiles.</p>
- <p>To change your email/phone nomba:</p><ol><li>From di Administrator\'s Home Page, tap on di menu button for di top left.</li><li>Tap on <strong>Administrator Controls</strong>.</li><li>Tap on <strong>Edit Account</strong>.</li></ol><p><br></p> <p>If you wan change your email:</p><ol><li>Enter your new email and tap <strong>Save</strong>.</li><li>A confirmation link go send to confirm your new email. Di link go expire after 24 hours and you must click on am to be associated with your account.</li></ol><p><br></p> <p>If you dey change your phone nomba:</p><ol><li> Enter your new phone nomba and tap <strong>Verify</strong>.</li><li> A code go send to confirm your new nomba. Di code go expire after 5 minutes and you must be enter am in for di new screen to be associated with your account.</li></ol>
- <p>If you no fit find your question or you go like to report a bug, contact us for admin@oppia.org.</p>
+ - Open di Google Play Store app.
- Search for di %s app.
- Tap Update.
+ - Tap your phone\'s Settings app.
- Tap System updates.
- Tap System updates and follow di instructions to update your Android operating system.
+ <p>If you no fit find your question or you go like to report a bug, contact us for admin@oppia.org.</p>
Profile Edit Fragment Test Activity
Administrator Controls Fragment Test Activity
Continue Studying
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index ef9a84e60c5..668870a2bcb 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -481,27 +481,29 @@
O que é %s?
Quem é um administrador?
Como posso criar um novo perfil?
- O que é %s?
- Quem é um administrador?
- Por que a exploração não está carregando?
- Por que meu áudio não está tocando?
+ Como posso obter o aplicativo no meu idioma?
+ Achei um bug. Como posso reportar?
+ Por que só existem aulas de matemática?
+ Vocês vão criar mais lições?
Por que a exploração não está carregando?
Por que meu áudio não está tocando?
Como posso deletar um perfil?
- Como posso alterar meu e-mail/número de telefone?
- Não consigo encontrar minha pergunta aqui. E agora?
+ Como eu atualizo o aplicativo?
+ Como eu atualizo meu sistema operacional Android?
+ Não consigo encontrar minha pergunta aqui. E agora?
<p>%1$s <i>\"O-pee-yah\"</i> (Finnish) - \"aprender\"</p><p><br></p><p>%1$s tem a missão de ajudar qualquer pessoa a aprender o que quiser de uma forma eficaz e agradável.</p><p><br></p><p>Ao criar um conjunto de aulas gratuitas, de alta qualidade e comprovadamente eficazes com a ajuda de educadores de todo o mundo, %1$s visa proporcionar aos alunos uma educação de qualidade - independentemente de onde estejam ou a quais recursos tradicionais tenham acesso.</p><p><br></p><p>Como estudante, você pode começar sua aventura de aprendizado navegando pelos tópicos listados na página inicial!</p>
<p>Um administrador é o usuário principal que gerencia perfis e configurações para cada perfil em sua conta. Provavelmente, eles são seus pais, professores ou responsáveis que criaram este perfil para você.</p><p><br></p><p>Os administradores podem gerenciar perfis, atribuir PINs e alterar outras configurações em suas contas. Dependendo do seu perfil, as permissões de administrador podem ser necessárias para determinados recursos, como download de tópicos, alteração do PIN e mais. </p><p><br></p><p>Para ver quem é o seu administrador, vá para o Seletor de perfil. O primeiro perfil listado e com \"Administrador\" escrito em seu nome é o Administrador. </p>
<p>Se é a sua primeira vez criando um perfil e você não tem um PIN:<ol> <li> No Seletor de Perfil, toque em <strong>Configurar Múltiplos Perfis</strong>. </li> <li> Crie um PIN e <strong>Salvar</strong>. </li> <li> Preencha todos os campos do perfil. <ol> <li> (Opcional) Carregue uma foto. </li> <li> Insira um nome. </li> <li> (Opcional) Atribua um PIN de 3 dígitos. </li></ol></li><li> 4. Toque em <strong>Criar</strong>. Este perfil está adicionado ao seu Seletor de Perfil! </li></ol></p><p> Se você já criou um perfil antes e tem um PIN: <ol> <li>No Seletor de Perfil, toque em <strong>Adicionar Perfil</strong>. </li> <li> 2. Digite seu PIN e toque em <strong>Enviar</strong>. </li> <li> Preencha todos os campos do perfil. <ol> <li> (Opcional) Carregue uma foto. </li> <li> Insira um nome. </li> <li> (Opcional) Atribua um PIN de 3 dígitos. </li> </ol> </li> <li> 4. Toque em <strong>Criar</strong>. Este perfil está adicionado ao seu Seletor de Perfil! </li></ol></p><br><p> Nota: Apenas o <u>Administrador</u> pode gerenciar perfis.</p>
- <p>%1$s <i>\"O-pee-yah\"</i> (Finnish) - \"aprender\"</p><p><br></p><p>%1$s tem a missão de ajudar qualquer pessoa a aprender o que quiser de uma forma eficaz e agradável.</p><p><br></p><p>Ao criar um conjunto de aulas gratuitas, de alta qualidade e comprovadamente eficazes com a ajuda de educadores de todo o mundo, %1$s visa proporcionar aos alunos uma educação de qualidade - independentemente de onde estejam ou a quais recursos tradicionais tenham acesso.</p><p><br></p><p>Como estudante, você pode começar sua aventura de aprendizado navegando pelos tópicos listados na página inicial!</p>
- <p>Um administrador é o usuário principal que gerencia perfis e configurações para cada perfil em sua conta. Provavelmente, eles são seus pais, professores ou responsáveis que criaram este perfil para você.</p><p><br></p><p>Os administradores podem gerenciar perfis, atribuir PINs e alterar outras configurações em suas contas. Dependendo do seu perfil, as permissões de administrador podem ser necessárias para determinados recursos, como download de tópicos, alteração do PIN e mais. </p><p><br></p><p>Para ver quem é o seu administrador, vá para o Seletor de perfil. O primeiro perfil listado e com \"Administrador\" escrito em seu nome é o Administrador. </p>
- <p>Se a exploração não estiver carregando</p><p><br></p><p>Verifique se o aplicativo está atualizado:</p><p> <ul> <li> Acesse a Play Store e certifique-se de que o aplicativo esteja atualizado com a versão mais recente </li></ul><p><br></p><p>Verifique sua conexão com a internet:</p><ul><li> Se sua conexão com a Internet estiver lenta, tente se reconectar à rede Wi-Fi ou conectar-se a uma rede diferente. </li></ul><p>Peça ao administrador para verificar o dispositivo e a conexão com a Internet:</p><ul><li> Peça ao administrador para solucionar o problema usando as etapas acima </li></ul><p>Informe-nos se você ainda tiver problemas com o carregamento::</p><ul><li> Relate um problema entrando em contato conosco em admin@oppia.org. </li> </ul>
- <p>Se o seu áudio não estiver tocando</p><p><br></p><p>Verifique se o aplicativo está atualizado:</p><ul><li> Acesse a Play Store e certifique-se de que o aplicativo esteja atualizado com a versão mais recente </li></ul><p><br></p><p>Verifique sua conexão com a internet:</p><ul><li> Se sua conexão com a Internet estiver lenta, tente se reconectar à rede Wi-Fi ou conectar-se a uma rede diferente. A Internet lenta pode fazer com que o áudio carregue irregularmente, dificultando a reprodução. </li></ul><p><br></p><p>Peça ao administrador para verificar o dispositivo e a conexão com a Internet:</p><ul><li> Peça ao administrador para solucionar o problema usando as etapas acima</li></ul><p><br></p><p>Informe-nos se você ainda tiver problemas com o carregamento:</p><ul><li> Relate um problema entrando em contato conosco em admin@oppia.org. </li></ul>
+ O aplicativo %s atualmente suporta Inglês, Português Brasileiro, Árabe, Suaíli e Pidgin Nigeriano. Escolha uma dessas línguas no menu, em Opções. Para solicitar o aplicativo no seu idioma, entre em contato conosco em admin@oppia.org.
+ - Na tela inicial do seu aplicativo %s, toque no menu no canto superior esquerdo.
- Toque em Compartilhar feedback.
- Siga as instruções para reportar o bug ou compartilhar feedback.
+ A missão de %1$s é ajudar os aprendizes a adquirir habilidades necessárias para a vida. A matemática é uma habilidade essencial no dia a dia. %1$s estará oferecendo novas lições sobre ciência e outras disciplinas em breve!
+ Sim, %s estará oferecendo novas lições sobre ciência e outras disciplinas em breve. Por favor, volte para conferir as atualizações!
<p>Se a exploração não estiver carregando</p><p><br></p><p>Verifique se o aplicativo está atualizado:</p><p> <ul> <li> Acesse a Play Store e certifique-se de que o aplicativo esteja atualizado com a versão mais recente </li></ul><p><br></p><p>Verifique sua conexão com a internet:</p><ul><li> Se sua conexão com a Internet estiver lenta, tente se reconectar à rede Wi-Fi ou conectar-se a uma rede diferente. </li></ul><p>Peça ao administrador para verificar o dispositivo e a conexão com a Internet:</p><ul><li> Peça ao administrador para solucionar o problema usando as etapas acima </li></ul><p>Informe-nos se você ainda tiver problemas com o carregamento::</p><ul><li> Relate um problema entrando em contato conosco em admin@oppia.org. </li> </ul>
<p>Se o seu áudio não estiver tocando</p><p><br></p><p>Verifique se o aplicativo está atualizado:</p><ul><li> Acesse a Play Store e certifique-se de que o aplicativo esteja atualizado com a versão mais recente </li></ul><p><br></p><p>Verifique sua conexão com a internet:</p><ul><li> Se sua conexão com a Internet estiver lenta, tente se reconectar à rede Wi-Fi ou conectar-se a uma rede diferente. A Internet lenta pode fazer com que o áudio carregue irregularmente, dificultando a reprodução. </li></ul><p><br></p><p>Peça ao administrador para verificar o dispositivo e a conexão com a Internet:</p><ul><li> Peça ao administrador para solucionar o problema usando as etapas acima</li></ul><p><br></p><p>Informe-nos se você ainda tiver problemas com o carregamento:</p><ul><li> Relate um problema entrando em contato conosco em admin@oppia.org. </li></ul>
<p>Depois que um perfil é deletado:</p> <ol><li>O perfil não pode ser recuperado. </li> <li> As informações do perfil, como nome, fotos e progresso, serão excluídas permanentemente. </li></ol><p>Para deletar um perfil(excluindo o do <u>Administrador</u>):</p> <ol><li>Na página inicial do administrador, toque no botão de menu no canto superior esquerdo.</li> <li>Toque em <strong>Controles do Administrador</strong>.</li> <li>3. Toque em <strong>Editar Perfis</strong>.</li> <li>4. Toque no perfil que deseja excluir.</li> <li>5. Na parte inferior da tela, toque em <strong>Exclusão de Perfil</strong>.</li> <li>6. Toque em <strong>Deletar</strong> para confirmar a exclusão.</li></ol><p><br></p><p>Nota: Apenas o <u>Administrador</u> pode gerenciar perfis.</p>
- <p>Para alterar seu e-mail/número de telefone:</p><ol><li>Na página inicial do administrador, toque no botão de menu no canto superior esquerdo.</li><li>Toque em <strong>Controles do Administrador</strong>.</li><li>Toque em <strong>Editar Conta</strong>.</li></ol><p><br></p> <p>Se você deseja alterar seu e-mail:</p><ol><li>Digite seu novo e-mail e toque em <strong>Salvar</strong>.</li><li>Um link de confirmação será enviado para confirmar seu novo e-mail. O link irá expirar após 24 horas e deve ser clicado para ser associado à sua conta. </li></ol><p><br></p> <p>Se mudar seu número de telefone:</p><ol><li>Digite seu novo número de telefone e toque em <strong>Verificar</strong>.</li><li>Um código será enviado para confirmar seu novo número. O código expira após 5 minutos e deve ser inserido na nova tela para ser associado à sua conta.</li></ol>
- <p>Se você não consegue encontrar sua pergunta ou gostaria de relatar um problema, entre em contato conosco em admin@oppia.org.</p>
+ - Abra o aplicativo Google Play Store.
- Procure pelo aplicativo %s.
- Toque em Atualizar.
+ - Toque no aplicativo Configurações do seu telefone.
- Toque em Atualizações do sistema.
- Toque em Atualizações do sistema e siga as instruções para atualizar o sistema operacional Android.
+ <p>Se você não consegue encontrar sua pergunta ou gostaria de relatar um problema, entre em contato conosco em admin@oppia.org.</p>
Atividade de Teste de Fragmento de Edição de Perfil
Controle Administrativo da Atividade de Teste de Fragmento
Continuar estudando
diff --git a/app/src/main/res/values-sw/strings.xml b/app/src/main/res/values-sw/strings.xml
index 3a25ec5b46a..2c697434dc8 100644
--- a/app/src/main/res/values-sw/strings.xml
+++ b/app/src/main/res/values-sw/strings.xml
@@ -414,25 +414,27 @@
%s ni nini?
Msimamizi ni nani?
Ninawezaje kuunda wasifu mpya?
- %s ni nini?
- Msimamizi ni nani?
- Kwa nini kicheza Uchunguzi hakipakii?
- Kwa nini sauti yangu haichezwi?
+ Ninawezaje kupata programu kwa lugha yangu?
+ Nimegundua mdudu. Ninawezaje kuripoti?
+ Kwa nini kuna masomo ya hesabu tu?
+ Je, mtatengeneza masomo zaidi?
Kwa nini kicheza Uchunguzi hakipakii?
Kwa nini sauti yangu haichezwi?
Ninawezaje kufuta wasifu?
- Nitabadilisha aje barua pepe/nambari yangu ya simu?
- Sijapata swali langu hapa. Nini sasa?
+ Ni jinsi gani naweza kusasisha programu?
+ Jinsi gani naweza kusasisha mfumo wangu wa Android?
+ Sijapata swali langu hapa. Nini sasa?
<p>%1$s <i>\"O-pee-yah\"</i> (Kifini) - \"kujifunza\"</p><p><br></p><p>%1$s\'s dhamira ni kumsaidia mtu yeyote kujifunza chochote anachotaka kwa njia bora na ya kufurahisha.</p><p><br></p><p>Kwa kuunda seti ya masomo yasiyolipishwa, ya ubora wa juu, na yenye matokeo kwa usaidizi. ya waelimishaji kutoka duniani kote, %1$s inalenga kuwapa wanafunzi elimu bora — bila kujali walipo au ni nyenzo gani za jadi wanazoweza kufikia.</p><p><br></p><p> Kama mwanafunzi, unaweza kuanza safari yako ya kujifunza kwa kuvinjari mada zilizoorodheshwa kwenye Ukurasa wa Mwanzo!</p>
<p>Msimamizi ndiye mtumiaji mkuu anayedhibiti wasifu na mipangilio ya kila wasifu kwenye akaunti yake.Uwezekano mkubwa ni mzazi, mwalimu au mlezi wako aliyekuundia wasifu huu. </p><p><br></p><p>Wasimamizi wana uwezo wa kudhibiti wasifu, kugawa Nambari ya Siri, na kubadilisha mipangilio mingine chini ya akaunti yao. Kulingana na wasifu wako, ruhusa za Msimamizi zinaweza kuhitajika kwa vipengele fulani kama vile kupakua Mada, kubadilisha Nambari yako ya Siri na zaidi. </p><p><br></p><p>Ili kujua Msimamizi wako ni nani, nenda kwa Kichagua Wasifu. Wasifu wa kwanza ulioorodheshwa na una \"Msimamizi\" iliyoandikwa chini ya jina lake ni Msimamizi. </p>
<p>Ikiwa ni mara yako ya kwanza kuunda wasifu na huna Nambari ya Siri: <ol> <li> Kutoka kwa Kichagua Wasifu, gusa <strong>Weka Wasifu Nyingi</strong>. </li> <li> Unda Nambari ya Siri na <strong>Hifadhi</strong>. </li> <li> Jaza sehemu zote za wasifu. <ol><li> (Si lazima) Pakia picha. </li> <li> Weka jina. </li> <li> (Si lazima) Weka Nambari ya Siri yenye tarakimu 3.</li></ol></li><li>Gusa <strong>Unda</strong>. Wasifu huu umeongezwa kwa Kichagua Wasifu wako! </li></ol></p><p> Ikiwa umeunda wasifu hapo awali na una Nambari ya Siri: <ol><li> Kutoka kwa Kichagua Wasifu, gusa <strong>Ongeza Wasifu</strong>. </li><li>Weka Nambari yako ya Siri na uguse <strong>Wasilisha</strong>. </li><li> Jaza sehemu zote za wasifu. <ol><li> (Si lazima) Pakia picha. </li> <li> Weka jina. </li> <li> (Si lazima) Weka Nambari ya Siri yenye tarakimu 3. </li></ol></li><li> Gusa <strong>Unda</strong>. Wasifu huu umeongezwa kwa Kichagua Wasifu wako! </li></ol></p><br><p> Kumbuka: <u>Msimamizi pekee</u> ndiye anayeweza kudhibiti wasifu.</p>
- <p>%1$s <i>\"O-pee-yah\"</i> (Kifini) - \"kujifunza\"</p><p><br></p><p>%1$s\'s dhamira ni kumsaidia mtu yeyote kujifunza chochote anachotaka kwa njia bora na ya kufurahisha.</p><p><br></p><p>Kwa kuunda seti ya masomo yasiyolipishwa, ya ubora wa juu, na yenye matokeo kwa usaidizi. ya waelimishaji kutoka duniani kote, %1$s inalenga kuwapa wanafunzi elimu bora — bila kujali walipo au ni nyenzo gani za jadi wanazoweza kufikia.</p><p><br></p><p> Kama mwanafunzi, unaweza kuanza safari yako ya kujifunza kwa kuvinjari mada zilizoorodheshwa kwenye Ukurasa wa Mwanzo!</p>
- <p>Msimamizi ndiye mtumiaji mkuu anayedhibiti wasifu na mipangilio ya kila wasifu kwenye akaunti yake.Uwezekano mkubwa ni mzazi, mwalimu au mlezi wako aliyekuundia wasifu huu. </p><p><br></p><p>Wasimamizi wana uwezo wa kudhibiti wasifu, kugawa Nambari ya Siri, na kubadilisha mipangilio mingine chini ya akaunti yao. Kulingana na wasifu wako, ruhusa za Msimamizi zinaweza kuhitajika kwa vipengele fulani kama vile kupakua Mada, kubadilisha Nambari yako ya Siri na zaidi. </p><p><br></p><p>Ili kujua Msimamizi wako ni nani, nenda kwa Kichagua Wasifu. Wasifu wa kwanza ulioorodheshwa na una \"Msimamizi\" iliyoandikwa chini ya jina lake ni Msimamizi. </p>
- <p>Ikiwa Kicheza Ugunduzi hakipakii</p><p><br></p><p>Angalia kama programu imesasishwa:</p><p> <ul> <li> Nenda kwenye Hifadhi ya Michezo na uhakikishe kuwa programu imesasishwa hadi toleo lake jipya zaidi </li> </ul> <p><br></p><p>Angalia muunganisho wako wa mtandao:</p><ul><li> Ikiwa muunganisho wako wa mtandao ni wa polepole, jaribu kuunganisha tena kwenye mtandao wako wa Wi-Fi au unganisha kwenye mtandao tofauti. </li></ul><p>Uliza Msimamizi aangalie kifaa chake na muunganisho wa mtandao:</p><ul><li> Pata Msimamizi kusuluhisha kwa kutumia hatua hapo juu </li></ul><p>Tujulishe ikiwa bado una matatizo ya upakiaji:</p><ul><li> Ripoti tatizo kwa kuwasiliana nasi kwa admin@oppia.org. </li></ul>
- <p>Ikiwa sauti yako haichezi</p><p><br></p><p>Angalia ili kuona kama programu imesasishwa:</p><ul><li> Nenda kwenye Hifadhi ya Michezo na uhakikishe kuwa programu imesasishwa hadi toleo lake jipya zaidi </li></ul><p><br></p><p>Angalia muunganisho wako wa mtandao:</p><ul><li> Iwapo muunganisho wako wa mtandao ni wa polepole, jaribu kuunganisha tena kwenye mtandao wako wa Wi-Fi au unganisha kwenye mtandao tofauti. Mtandao wa polepole unaweza kusababisha sauti kupakia kwa njia isiyo ya kawaida, na kuifanya iwe vigumu kucheza. </li></ul><p><br></p><p>Uliza Msimamizi aangalie kifaa chake na muunganisho wa mtandao:</p><ul><li> Wasiliana na Msimamizi ili asuluhishe kwa kutumia hatua hapo juu</li></ul><p><br></p><p>Tujulishe ikiwa bado una matatizo ya upakiaji:</p><ul><li> Ripoti tatizo kwa kuwasiliana nasi kwa admin@oppia.org. </li></ul>
+ Programu ya %s kwa sasa inasaidia Kiingereza, Kireno cha Brazil, Kiarabu, Kiswahili, na Kipidgin cha Nigeria. Chagua moja ya lugha hizi kwenye menyu, chini ya Chaguo. Ili kuomba programu kwa lugha yako, tafadhali wasiliana nasi kwa admin@oppia.org.
+ - Kutoka kwenye skrini kuu ya programu yako ya %s, bonyeza menyu kwenye kona ya juu kushoto.
- Bonyeza Shiriki Maoni.
- Fuata maagizo ya kuripoti mdudu au kushiriki maoni.
+ Malengo ya %1$s ni kusaidia wanafunzi kupata stadi muhimu za maisha. Hisabati ni stadi muhimu katika maisha ya kila siku. %1$s itatoa masomo mapya kuhusu sayansi na masomo mengine hivi karibuni!
+ Ndiyo, %s itatoa masomo mapya kuhusu sayansi na masomo mengine hivi karibuni. Tafadhali rudia kwa ajili ya habari mpya!
<p>Ikiwa Kicheza Ugunduzi hakipakii</p><p><br></p><p>Angalia kama programu imesasishwa:</p><p> <ul> <li> Nenda kwenye Hifadhi ya Michezo na uhakikishe kuwa programu imesasishwa hadi toleo lake jipya zaidi </li> </ul> <p><br></p><p>Angalia muunganisho wako wa mtandao:</p><ul><li> Ikiwa muunganisho wako wa mtandao ni wa polepole, jaribu kuunganisha tena kwenye mtandao wako wa Wi-Fi au unganisha kwenye mtandao tofauti. </li></ul><p>Uliza Msimamizi aangalie kifaa chake na muunganisho wa mtandao:</p><ul><li> Pata Msimamizi kusuluhisha kwa kutumia hatua hapo juu </li></ul><p>Tujulishe ikiwa bado una matatizo ya upakiaji:</p><ul><li> Ripoti tatizo kwa kuwasiliana nasi kwa admin@oppia.org. </li></ul>
<p>Ikiwa sauti yako haichezi</p><p><br></p><p>Angalia ili kuona kama programu imesasishwa:</p><ul><li> Nenda kwenye Hifadhi ya Michezo na uhakikishe kuwa programu imesasishwa hadi toleo lake jipya zaidi </li></ul><p><br></p><p>Angalia muunganisho wako wa mtandao:</p><ul><li> Iwapo muunganisho wako wa mtandao ni wa polepole, jaribu kuunganisha tena kwenye mtandao wako wa Wi-Fi au unganisha kwenye mtandao tofauti. Mtandao wa polepole unaweza kusababisha sauti kupakia kwa njia isiyo ya kawaida, na kuifanya iwe vigumu kucheza. </li></ul><p><br></p><p>Uliza Msimamizi aangalie kifaa chake na muunganisho wa mtandao:</p><ul><li> Wasiliana na Msimamizi ili asuluhishe kwa kutumia hatua hapo juu</li></ul><p><br></p><p>Tujulishe ikiwa bado una matatizo ya upakiaji:</p><ul><li> Ripoti tatizo kwa kuwasiliana nasi kwa admin@oppia.org. </li></ul>
<p>Wasifu unapofutwa:</p><ol><li> Wasifu hauwezi kurejeshwa. </li><li> Taarifa ya wasifu kama vile jina, picha na maendeleo yatafutwa kabisa. </li></ol><p>Ili kufuta wasifu (bila kujumuisha <u>Msimamizi</u>):</p> <ol><li> Kutoka kwa Ukurasa wa Mwanzo wa Msimamizi, gusa kitufe cha menyu kilicho upande wa juu kushoto. </li><li> Gusa <strong>Vidhibiti vya Msimamizi</strong>. </li><li> Gusa <strong>Hariri Wasifu</strong>. </li><li> Gonga Wasifu ambao ungependa kufuta. </li><li> Katika sehemu ya chini ya skrini, gusa <strong>Ufutaji wa Wasifu</strong>. </li><li> Gusa <strong>Futa</strong> ili kuthibitisha kufuta.</li></ol><p><br></p><p>Kumbuka: <u>Msimamizi</u> pekee ndiye anayeweza kudhibiti wasifu.</p>
- <p>Ili kubadilisha barua pepe/nambari yako ya simu:</p> <ol><li>Kutoka kwa Ukurasa wa Mwanzo wa Msimamizi, gusa kitufe cha menyu kilicho upande wa juu kushoto.</li> <li>Gusa <strong>Vidhibiti vya Msimamizi</strong>.</li><li> Gusa <strong>Hariri Akaunti</strong>.</li></ol><p><br></p> <p>Ikiwa ungependa kubadilisha barua pepe yako:</p><ol><li> Weka barua pepe yako mpya na uguse <strong>Hifadhi</strong>.</li><li> Kiungo cha uthibitishaji kinatumwa ili kuthibitisha barua pepe yako mpya. Muda wa kiungo utaisha baada ya saa 24 na lazima ubofye ili kuhusishwa na akaunti yako. </li></ol><p><br></p> <p>Ikiwa unabadilisha nambari yako ya simu:</p><ol><li> Weka nambari yako mpya ya simu na uguse <strong>Thibitisha</strong>.</li><li> Nambari ya kuthibitisha inatumwa ili kuthibitisha nambari yako mpya. Nambari ya kuthibitisha itaisha baada ya dakika 5 na lazima iwekwe kwenye skrini mpya ili kuhusishwa na akaunti yako.</li></ol>
- <p>Ikiwa huwezi kupata swali lako au ungependa kuripoti hitilafu, wasiliana nasi kwa admin@oppia.org.</p>
+ - Fungua programu ya Duka la Google Play.
- Tafuta programu ya %s.
- Bonyeza Sasisha.
+ - Bonyeza programu ya Mipangilio kwenye simu yako.
- Bonyeza Sasisho la mfumo.
- Bonyeza Sasisho la mfumo na fuata maagizo ya kusasisha mfumo wako wa uendeshaji wa Android.
+ <p>Ikiwa huwezi kupata swali lako au ungependa kuripoti hitilafu, wasiliana nasi kwa admin@oppia.org.</p>
diff --git a/app/src/main/res/values/faqs.xml b/app/src/main/res/values/faqs.xml
index e58bc3eef82..1c8e0af249c 100644
--- a/app/src/main/res/values/faqs.xml
+++ b/app/src/main/res/values/faqs.xml
@@ -13,7 +13,6 @@
- @string/faq_question_11
- @string/faq_question_12
- @string/faq_question_13
- - @string/faq_question_14
@@ -29,6 +28,5 @@
- @string/faq_answer_11
- @string/faq_answer_12
- @string/faq_answer_13
- - @string/faq_answer_14
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 419a4fde901..d8f15a46ec2 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -556,25 +556,23 @@
Why is the Exploration player not loading?
Why is my audio not playing?
How can I delete a profile?
- How can I change my email/phone number?
- How do I update the app?
- How do I update my Android OS?
- I can\'t find my question here. What now?
+ How do I update the app?
+ How do I update my Android OS?
+ I can\'t find my question here. What now?
%1$s "O-pee-yah" (Finnish) - "to learn"
%1$s\'s mission is to help anyone learn anything they want in an effective and enjoyable way.
By creating a set of free, high-quality, demonstrably effective lessons with the help of educators from around the world, %1$s aims to provide students with quality education — regardless of where they are or what traditional resources they have access to.
As a student, you can begin your learning adventure by browsing the topics listed on the Home Page!
]]>
An Administrator is the main user that manages profiles and settings for every profile on their account. They are most likely your parent, teacher, or guardian that created this profile for you.
Administrators have the ability to manage profiles, assign PINs, and change other settings under their account. Depending on your profile, Administrator permissions may be required for certain features such as changing your PIN, and more.
To see who your Administrator is, go to the Profile Chooser. The first profile listed and has "Administrator" written under their name is the Administrator.
]]>
If it is your first time creating a profile and you do not have a PIN:- From the Profile Chooser, tap on Set up Multiple Profiles.
- Create a PIN and Save.
- Fill in all fields for the profile.
- (Optional) Upload a photo.
- Enter a name.
- (Optional) Assign a 3-digit PIN.
- Tap Create. This profile is added to your Profile Chooser!
If you have created a profile before and have a PIN:
- From the Profile Chooser, tap on Add Profile.
- Enter your PIN and tap Submit.
- Fill in all fields for the profile.
- (Optional) Upload a photo.
- Enter a name.
- (Optional) Assign a 3-digit PIN.
- Tap Create. This profile is added to your Profile Chooser!
Note: Only the Administrator is able to manage profiles.
]]>
- The %s app currently supports English, Brazilian Portuguese, Arabic, and Nigerian Pidgin. Choose one of these languages in the menu, under Options. To request the app in your language, please contact us at email address.]]>
- - From your %s app home screen, tap the menu in the top left corner.
- Tap Share feedback.
- Follow the instructions to report the bug or share feedback.]]>
+ The %s app currently supports English, Brazilian Portuguese, Arabic, Swahili and Nigerian Pidgin. Choose one of these languages in the menu, under Options. To request the app in your language, please contact us at admin@oppia.org.]]>
+ - From your %s app home screen, tap the menu in the top left corner.
- Tap Share feedback.
- Follow the instructions to report the bug or share feedback.
]]>
%1$s’s mission is to help learners gain necessary life skills. Math is an essential skill in everyday life. %1$s will be offering new lessons on science and other subjects soon!]]>
Yes, %s will be offering new lessons on science and other subjects soon. Please check back for updates!]]>
If the Exploration Player is not loading
Check to see if the app is up to date:
- Go to the Play Store and make sure the app is updated to its latest version
Check your internet connection:
- If your internet connection is slow, try re-connecting to your Wi-Fi network or connecting to a different network.
Ask the Administrator to check their device and internet connection:
- Get the Administrator to troubleshoot using the steps above
Let us know if you still have issues with loading:
- Report a problem by contacting us at admin@oppia.org.
]]>
If your audio is not playing
Check to see if the app is up to date:
- Go to the Play Store and make sure the app is updated to its latest version
Check your internet connection:
- If your internet connection is slow, try re-connecting to your Wi-Fi network or connecting to a different network. Slow internet may cause the audio to load irregularly, making it difficult to play.
Ask the Administrator to check their device and internet connection:
- Get the Administrator to troubleshoot using the steps above
Let us know if you still have issues with loading:
- Report a problem by contacting us at admin@oppia.org.
]]>
Once a profile is deleted:- The profile cannot be recovered.
- Profile information such as name, photos, and progress will be permanently deleted.
To delete a profile (excluding the Administrator\'s):
- From the Administrator\'s Home Page, tap on the menu button on the top left.
- Tap on Administrator Controls.
- Tap on Edit Profiles.
- Tap on the Profile you would like to delete.
- At the bottom of the screen, tap Profile Deletion.
- Tap Delete to confirm deletion.
Note: Only the Administrator is able to manage profiles.
]]>
- To change your email/phone number:- From the Administrator\'s Home Page, tap on the menu button on the top left.
- Tap on Administrator Controls.
- Tap on Edit Account.
If you want to change your email:
- Enter your new email and tap Save.
- A confirmation link is sent to confirm your new email. The link will expire after 24 hours and must be clicked on to be associated with your account.
If changing your phone number:
- Enter your new phone number and tap Verify.
- A code is sent to confirm your new number. The code will expire after 5 minutes and must be entered in the new screen to be associated with your account.
]]>
- - Open the Google Play Store app.
- Search for the %s app.
- Tap Update.]]>
- - Tap your phone\'s Settings app.
- Tap System updates.
- Tap System updates and follow the instructions to update your Android operating system.]]>
- If you cannot find your question or would like to report a bug, contact us at admin@oppia.org.]]>
+ - Open the Google Play Store app.
- Search for the %s app.
- Tap Update.]]>
+ - Tap your phone\'s Settings app.
- Tap System updates.
- Tap System updates and follow the instructions to update your Android operating system.]]>
+ If you cannot find your question or would like to report a bug, contact us at admin@oppia.org.]]>
Profile Edit Fragment Test Activity
Administrator Controls Fragment Test Activity
From a864d5d8aea7c73a8b8bc0624bbb6ff0aae196a8 Mon Sep 17 00:00:00 2001
From: Ben Henning
Date: Wed, 14 Feb 2024 13:13:53 -0800
Subject: [PATCH 17/19] [RunAllTests] Fix #5303, #5304, #5305, #5306, #5309,
part of #5307, part of #5308: Fix a variety of dev platform-specific issues
[Blocked: #5335] (#5138)
## Explanation
Fixes #5303
Fixes #5304
Fixes #5305
Fixes #5306
Fixes #5309
Fixes part of #5307
Fixes part of #5308
This PR fixes a variety of issues that were discovered while trying to
begin development on #4929 with a different workstation than I usually
build on.
Some of the issues were outright problems at the outset, but others were
discovered when trying to fix those issues (e.g. during test utility
upgrades).
Specific issues that were found and fixed:
- #5303: ``AssertionHelpers.assertThrows`` didn't handle cases when
trying to catch an ``AssertionError`` itself (such in the case of
``TestGitRepositoryTest``). This could result in false positives, and it
has since been fixed. Plus, the changes to ``AssertionHelpers`` also
removes the dependency on Kotlin reflection.
- #5304: ``LoggingIdentifierController`` could have ID generation
inconsistencies between environments due to how its ``Random`` instance
was initialized. This could also result in a test order issue if a
subset of tests were run, or run in a different order. The controller
has been updated to have better robustness against the order in which
IDs are generated which fixes the test and environment determinism
issues. \
\
The fix was essentially generating ID-specific seeds for ID-specific
randoms that all originate from the application seed, and are always
generated in the same order deterministically at the creation time of
the controller. This fixes the IDs being generated in different orders
leading to inconsistencies. Note that this is why ID changes are seen in
a variety of tests (since there are now new seeds being used for
generating these IDs as a by-product of the robustness improvements).
- #5305: ``model/src/main/proto/BUILD.bazel`` needed a fix due to a
build warning (that only occurs when trying to build all targets).
- #5306: ``TestGitRepository`` was made more robust by better managing
and setting the configured user & email used in its Git commands. The
utility now manages a locally set configuration for each rather than
relying on the global configuration (which may not be present on all
systems, hence the original issue). Some other improvements in error
detection were also added. Note that this likely wasn't discovered in CI
because it seems that GitHub CI _does_ set up a Git user & email
automatically, as do most people who work on the project.
- #5307 & #5308: ``ActivityTestRule`` is now deprecated in favor of
``ActivityScenarioRule`` since it can interact with activities outside
their lifecycle. However, the scenario rule is also not good to use
anymore since it can result in partial dependencies being initialized
before test-only platform parameter states can be overridden. This PR
introduces a new pattern to prevent using either of these rules, and the
mentioned issues can be used to track the remaining tests that need to
be cleaned up following this PR.
- #5309: ``ProfileAndDeviceIdFragmentTest`` is environment and
order-dependent due to out-of-order platform parameter initialization.
This issue ultimately arose from test parameters being initialized after
they're needed in the launched UI. It is necessary when there are
environment differences (e.g. local vs. CI) or when running certain
tests individually. This was fixed by removing the usage of
``ActivityScenarioRule`` and instead managing the fragment's test
activity lifecycle directly. \
\
Separately, the test performs proto comparisons that can be
machine-dependent. It seemed the test was suffering from some proto
encoding inconsistencies that seem to occur between some development
machines vs. on CI. The fix improves the test's robustness by extracting
the raw encoded string, verifying that the other outputs in the intent
message correctly correspond to that string, and that the string (as a
parsed proto) contains the correct values. As a result, the test no
longer depends on a hardcoded encoding value to be present for
verification. This does result in a slightly lengthier test with more
logic, but should be more stable in the long-term.
Some other miscellaneous notes:
- ``testCreateLearnerId_verifyCreatesCorrectRandomValue`` was removed
from ``LoggingIdentifierControllerTest`` because it wasn't actually
providing useful testing value. The application seed is not itself part
of the class's public API. Instead, the ID generation methods should be
ultimately verified.
- ``ComputeAffectedTestsTest`` had a shard increase to 24 and
``BazelClientTest`` has now been sharded to 4 (ditto for
``GenerateMavenDependenciesListTest`` and
``MavenDependenciesListCheckTest``). Both were done to help distribute
the more expensive tests in each suite across multiple runners to try
and reduce the long-tail of script test runs. More optimization will
probably be useful in the future. Note also that some of these tests are
*much* slower on certain systems (the one I've been working on, for
instance), hence the need for these adjustments.
-
``testEnsureNextResultIsSuccess_failureThenSuccess_notified_throwsException``
was removed from ``DataProviderTestMonitorTest`` since it *seems* that
it wasn't actually written correctly (and the issue wasn't discovered
until ``assertThrows`` was fixed). Per the existing test coverage, it
doesn't seem necessary to try and fix the test so it was instead
removed.
- ``ProfileAndDeviceIdFragmentTest`` changes led to a new
``EventLogSubject.hasNoProfileId`` being added.
- There are a few miscellaneous script infrastructure changes that were
pulled into this PR in preparation for downstream work. Specifically:
- ``ComputeAffectedTests`` now allows for its command executor to be
used for Bazel operations (which provides its tests with a bit more
execution flexibility). Its tests were also updated to use a longer
timeout for commands to try and improve test stability.
``BazelClientTest`` was similarly updated.
- ``TestBazelWorkspace`` was updated to:
- Have better workspace initialization robustness (since the workspace
can actually be generated at several different points, not singularly
with a call to ``initEmptyWorkspace``).
- Add a ``.bazelrc`` file to disable bzlmod (since it causes network
stability issues in some environments when using newer Bazel versions
even if the project isn't upgraded, and we don't use bzlmod yet,
anyway).
- Add a ``.bazelversion`` file to ensure that tests are using the same
Bazel version as the project build.
- ``AuthenticationControllerTest`` was largely updated since the changes
to ``assertThrows`` behavior revealed that the failure test wasn't
actually correctly verifying an exception was being passed (since it
isn't actually being thrown; the test was a false positive possibly
because it was using ``Throwable``, but I didn't dig into exactly why it
was passing before). The changes ensure that the callbacks are actually
verified rather than the user result (since there's a separate test to
do that), as well as the exception's failure message.
## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
## For UI-specific PRs only
N/A since all of the changes in this PR are infrastructural or only
affect tests.
---------
Co-authored-by: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
---
.../learneranalytics/BUILD.bazel | 1 +
.../ProfileAndDeviceIdFragmentTest.kt | 915 ++++++++++--------
.../DeveloperOptionsFragmentTest.kt | 4 +-
.../app/parser/StringToRatioParserTest.kt | 2 +-
.../AppLanguageLocaleHandlerTest.kt | 8 +-
.../AppLanguageResourceHandlerTest.kt | 14 +-
.../LoggingIdentifierController.kt | 14 +-
.../domain/audio/AudioPlayerControllerTest.kt | 8 +-
.../auth/AuthenticationControllerTest.kt | 78 +-
.../AnswerClassificationControllerTest.kt | 4 +-
...tXAtPositionYRuleClassifierProviderTest.kt | 12 +-
...eforeElementYRuleClassifierProviderTest.kt | 12 +-
...IsEqualToOrderingClassifierProviderTest.kt | 2 +-
...IncorrectPositionClassifierProviderTest.kt | 4 +-
...inatorEqualToRuleClassifierProviderTest.kt | 4 +-
...xactlyEqualToRuleClassifierProviderTest.kt | 4 +-
...erPartEqualToRuleClassifierProviderTest.kt | 4 +-
...eratorEqualToRuleClassifierProviderTest.kt | 4 +-
...nSimplestFormRuleClassifierProviderTest.kt | 6 +-
...sEquivalentToRuleClassifierProviderTest.kt | 2 +-
...xactlyEqualToRuleClassifierProviderTest.kt | 4 +-
...IsGreaterThanRuleClassifierProviderTest.kt | 4 +-
...putIsLessThanRuleClassifierProviderTest.kt | 4 +-
...putIsInRegionRuleClassifierProviderTest.kt | 4 +-
...nAtLeastOneOfRuleClassifierProviderTest.kt | 6 +-
...onInputEqualsRuleClassifierProviderTest.kt | 2 +-
...roperSubsetOfRuleClassifierProviderTest.kt | 6 +-
...ceInputEqualsRuleClassifierProviderTest.kt | 6 +-
...nitsIsEqualToRuleClassifierProviderTest.kt | 2 +-
...sEquivalentToRuleClassifierProviderTest.kt | 4 +-
...icInputEqualsRuleClassifierProviderTest.kt | 4 +-
...ThanOrEqualToRuleClassifierProviderTest.kt | 4 +-
...IsGreaterThanRuleClassifierProviderTest.kt | 4 +-
...sivelyBetweenRuleClassifierProviderTest.kt | 16 +-
...ThanOrEqualToRuleClassifierProviderTest.kt | 8 +-
...putIsLessThanRuleClassifierProviderTest.kt | 8 +-
...thinToleranceRuleClassifierProviderTest.kt | 20 +-
...ioInputEqualsRuleClassifierProviderTest.kt | 4 +-
...berOfTermsEqualToClassifierProviderTest.kt | 4 +-
...icTermEqualToRuleClassifierProviderTest.kt | 10 +-
...tIsEquivalentRuleClassifierProviderTest.kt | 4 +-
...InputContainsRuleClassifierProviderTest.kt | 4 +-
...xtInputEqualsRuleClassifierProviderTest.kt | 4 +-
...utFuzzyEqualsRuleClassifierProviderTest.kt | 2 +-
...putStartsWithRuleClassifierProviderTest.kt | 4 +-
.../ExplorationActiveTimeControllerTest.kt | 2 +-
.../ExplorationProgressControllerTest.kt | 2 +-
.../testing/FakeExplorationRetrieverTest.kt | 10 +-
.../HintHandlerProdImplTest.kt | 18 +-
.../domain/locale/LocaleControllerTest.kt | 2 +-
.../LoggingIdentifierControllerTest.kt | 38 +-
.../CpuPerformanceSnapshotterTest.kt | 2 +-
.../analytics/LearnerAnalyticsLoggerTest.kt | 2 +-
.../ProfileManagementControllerTest.kt | 8 +-
...uestionAssessmentProgressControllerTest.kt | 2 +-
model/src/main/proto/BUILD.bazel | 5 +-
.../file_content_validation_checks.textproto | 87 ++
scripts/assets/todo_open_exemptions.textproto | 48 +-
.../scripts/ci/ComputeAffectedTests.kt | 11 +-
.../scripts/testing/TestBazelWorkspace.kt | 30 +-
.../scripts/testing/TestGitRepository.kt | 64 +-
.../build/FilterPerLanguageResourcesTest.kt | 12 +-
.../build/TransformAndroidManifestTest.kt | 30 +-
.../org/oppia/android/scripts/ci/BUILD.bazel | 2 +-
.../scripts/ci/ComputeAffectedTestsTest.kt | 33 +-
.../scripts/ci/RetrieveAffectedTestsTest.kt | 8 +-
.../oppia/android/scripts/common/BUILD.bazel | 1 +
.../android/scripts/common/BazelClientTest.kt | 48 +-
.../scripts/common/CommandExecutorImplTest.kt | 6 +-
.../android/scripts/common/GitClientTest.kt | 8 +-
.../scripts/common/ProtoStringEncoderTest.kt | 4 +-
.../scripts/docs/KdocValidityCheckTest.kt | 152 ++-
.../label/AccessibilityLabelCheckTest.kt | 12 +-
.../oppia/android/scripts/license/BUILD.bazel | 1 +
.../scripts/license/LicenseTextsCheckTest.kt | 8 +-
.../license/MavenDependenciesListCheckTest.kt | 22 +-
.../oppia/android/scripts/maven/BUILD.bazel | 1 +
.../GenerateMavenDependenciesListTest.kt | 20 +-
.../scripts/maven/RetrieveLicenseTextsTest.kt | 10 +-
.../regex/RegexPatternValidationCheckTest.kt | 417 +++-----
.../scripts/testfile/TestFileCheckTest.kt | 18 +-
.../scripts/testing/TestBazelWorkspaceTest.kt | 233 +++--
.../scripts/testing/TestGitRepositoryTest.kt | 52 +-
.../scripts/todo/TodoIssueCommentCheckTest.kt | 6 +-
.../todo/TodoIssueResolvedCheckTest.kt | 6 +-
.../android/scripts/todo/TodoOpenCheckTest.kt | 46 +-
.../xml/StringLanguageTranslationCheckTest.kt | 4 +-
.../scripts/xml/StringResourceParserTest.kt | 18 +-
.../xml/StringResourceValidationCheckTest.kt | 14 +-
.../android/scripts/xml/XmlSyntaxCheckTest.kt | 18 +-
testing/BUILD.bazel | 5 +-
.../oppia/android/testing/AssertionHelpers.kt | 39 +-
.../testing/logging/EventLogSubject.kt | 7 +
.../testing/FakeAnalyticsEventLoggerTest.kt | 10 +-
.../testing/FakeExceptionLoggerTest.kt | 4 +-
.../testing/FakeFirestoreEventLoggerTest.kt | 10 +-
.../FakePerformanceMetricsEventLoggerTest.kt | 10 +-
.../data/DataProviderTestMonitorTest.kt | 77 +-
...InitializeDefaultLocaleRuleOmissionTest.kt | 2 +-
.../threading/CoroutineExecutorServiceTest.kt | 34 +-
.../testing/time/FakeOppiaClockTest.kt | 8 +-
.../testing/TestNoOpAssetRepositoryTest.kt | 12 +-
.../data/AsyncDataSubscriptionManagerTest.kt | 6 +-
.../util/data/InMemoryBlockingCacheTest.kt | 8 +-
.../util/locale/AndroidLocaleFactoryTest.kt | 14 +-
.../util/locale/DisplayLocaleImplTest.kt | 16 +-
.../testing/TestOppiaBidiFormatterTest.kt | 2 +-
.../util/logging/SyncStatusManagerTestBase.kt | 2 +-
.../DebugFirestoreEventLoggerImplTest.kt | 4 +-
.../util/math/FractionExtensionsTest.kt | 10 +-
.../android/util/math/FractionParserTest.kt | 4 +-
.../android/util/math/PeekableIteratorTest.kt | 2 +-
.../android/util/math/RealExtensionsTest.kt | 24 +-
113 files changed, 1636 insertions(+), 1459 deletions(-)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/BUILD.bazel b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/BUILD.bazel
index f98a384b911..da61bfc0e69 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/BUILD.bazel
+++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/BUILD.bazel
@@ -51,6 +51,7 @@ app_test(
"//app/src/main/java/org/oppia/android/app/translation/testing:test_module",
"//testing",
"//testing/src/main/java/org/oppia/android/testing/junit:initialize_default_locale_rule",
+ "//testing/src/main/java/org/oppia/android/testing/logging:event_log_subject",
"//testing/src/main/java/org/oppia/android/testing/logging:sync_status_test_module",
"//testing/src/main/java/org/oppia/android/testing/platformparameter:test_module",
"//testing/src/main/java/org/oppia/android/testing/robolectric:test_module",
diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt
index 925535d3433..5e41e379417 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt
@@ -9,6 +9,7 @@ import android.view.View
import androidx.annotation.IdRes
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView
+import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.ViewInteraction
@@ -23,7 +24,6 @@ import androidx.test.espresso.matcher.ViewMatchers.isEnabled
import androidx.test.espresso.matcher.ViewMatchers.isRoot
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
-import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.ext.truth.content.IntentSubject.assertThat
import androidx.work.Configuration
@@ -56,6 +56,7 @@ import org.oppia.android.app.application.ApplicationStartupListenerModule
import org.oppia.android.app.application.testing.TestingBuildFlavorModule
import org.oppia.android.app.devoptions.DeveloperOptionsModule
import org.oppia.android.app.devoptions.DeveloperOptionsStarterModule
+import org.oppia.android.app.model.OppiaEventLogs
import org.oppia.android.app.model.ProfileId
import org.oppia.android.app.player.state.itemviewmodel.SplitScreenInteractionModule
import org.oppia.android.app.recyclerview.RecyclerViewMatcher.Companion.atPositionOnView
@@ -104,6 +105,9 @@ import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
+import org.oppia.android.testing.logging.EventLogSubject
+import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat
+import org.oppia.android.testing.logging.EventLogSubject.LearnerDetailsContextSubject
import org.oppia.android.testing.logging.SyncStatusTestModule
import org.oppia.android.testing.logging.TestSyncStatusManager
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
@@ -118,6 +122,7 @@ import org.oppia.android.util.caching.AssetModule
import org.oppia.android.util.caching.testing.CachingTestModule
import org.oppia.android.util.gcsresource.GcsResourceModule
import org.oppia.android.util.locale.LocaleProdModule
+import org.oppia.android.util.locale.OppiaLocale
import org.oppia.android.util.logging.EventLoggingConfigurationModule
import org.oppia.android.util.logging.LoggerModule
import org.oppia.android.util.logging.SyncStatusManager.SyncStatus
@@ -131,7 +136,10 @@ import org.oppia.android.util.parser.image.GlideImageLoaderModule
import org.oppia.android.util.parser.image.ImageParsingModule
import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode
+import java.security.MessageDigest
+import java.util.Base64
import java.util.concurrent.TimeUnit
+import java.util.zip.GZIPInputStream
import javax.inject.Inject
import javax.inject.Singleton
@@ -148,11 +156,6 @@ import javax.inject.Singleton
class ProfileAndDeviceIdFragmentTest {
@get:Rule val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
@get:Rule val oppiaTestRule = OppiaTestRule()
- @get:Rule
- var activityRule =
- ActivityScenarioRule(
- TestActivity.createIntent(ApplicationProvider.getApplicationContext())
- )
@Inject lateinit var profileTestHelper: ProfileTestHelper
@Inject lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
@@ -164,6 +167,7 @@ class ProfileAndDeviceIdFragmentTest {
@Inject lateinit var syncStatusManager: TestSyncStatusManager
@Inject lateinit var learnerAnalyticsLogger: LearnerAnalyticsLogger
@Inject lateinit var fakeAnalyticsEventLogger: FakeAnalyticsEventLogger
+ @Inject lateinit var machineLocale: OppiaLocale.MachineLocale
private val clipboardManager by lazy {
context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
@@ -194,559 +198,587 @@ class ProfileAndDeviceIdFragmentTest {
@Test
fun testFragment_withOnlyAdminProfile_hasThreeItems() {
- initializeActivityAndAddFragment()
-
- // There should be three items: a header, a profile, and the sync status.
- onView(withId(R.id.profile_and_device_id_recycler_view)).check(hasItemCount(count = 4))
+ runWithLaunchedActivityAndAddedFragment {
+ // There should be three items: a header, a profile, and the sync status.
+ onView(withId(R.id.profile_and_device_id_recycler_view)).check(hasItemCount(count = 4))
+ }
}
@Test
fun testFragment_withOnlyAdminProfile_hasDeviceIdHeader() {
- initializeActivityAndAddFragment()
-
- onDeviceIdLabelAt(position = 0).check(matches(isDisplayed()))
+ runWithLaunchedActivityAndAddedFragment {
+ onDeviceIdLabelAt(position = 0).check(matches(isDisplayed()))
+ }
}
@Test
fun testFragment_hasDeviceId() {
- initializeActivityAndAddFragment()
-
- onDeviceIdLabelAt(position = 0).check(matches(withText(containsString("0347439ebe8b"))))
+ runWithLaunchedActivityAndAddedFragment {
+ onDeviceIdLabelAt(position = 0).check(matches(withText(containsString("113e04cc09a3"))))
+ }
}
@Test
fun testFragment_deviceId_hasCopyButton() {
- initializeActivityAndAddFragment()
-
- onDeviceIdCopyButtonAt(position = 0).check(matches(isDisplayed()))
+ runWithLaunchedActivityAndAddedFragment {
+ onDeviceIdCopyButtonAt(position = 0).check(matches(isDisplayed()))
+ }
}
@Test
fun testFragment_deviceId_clickCopyButton_copiesDeviceIdToClipboard() {
- initializeActivityAndAddFragment()
-
- onDeviceIdCopyButtonAt(position = 0).perform(click())
- testCoroutineDispatchers.runCurrent()
+ runWithLaunchedActivityAndAddedFragment {
+ onDeviceIdCopyButtonAt(position = 0).perform(click())
+ testCoroutineDispatchers.runCurrent()
+ }
val clipData = getCurrentClipData()
assertThat(clipData?.description?.label).isEqualTo("Oppia installation ID")
assertThat(clipData?.itemCount).isEqualTo(1)
- assertThat(clipData?.getItemAt(0)?.text).isEqualTo("0347439ebe8b")
+ assertThat(clipData?.getItemAt(0)?.text).isEqualTo("113e04cc09a3")
}
@Test
fun testFragment_withOnlyAdminProfile_hasOneProfileListed() {
- initializeActivityAndAddFragment()
-
- onProfileNameAt(position = 1).check(matches(isDisplayed()))
+ runWithLaunchedActivityAndAddedFragment {
+ onProfileNameAt(position = 1).check(matches(isDisplayed()))
+ }
}
@Test
fun testFragment_profileEntry_hasProfileName() {
- initializeActivityAndAddFragment()
-
- onProfileNameAt(position = 1).check(matches(withText("Admin")))
+ runWithLaunchedActivityAndAddedFragment {
+ onProfileNameAt(position = 1).check(matches(withText("Admin")))
+ }
}
@Test
fun testFragment_profileEntry_hasLearnerId() {
- initializeActivityAndAddFragment()
-
- onLearnerIdAt(position = 1).check(matches(withText("a9fe66ab")))
+ runWithLaunchedActivityAndAddedFragment {
+ onLearnerIdAt(position = 1).check(matches(withText("8dcbbd21")))
+ }
}
@Test
fun testFragment_profileEntry_hasCopyButton() {
- initializeActivityAndAddFragment()
-
- onLearnerIdCopyButtonAt(position = 1).check(matches(isDisplayed()))
+ runWithLaunchedActivityAndAddedFragment {
+ onLearnerIdCopyButtonAt(position = 1).check(matches(isDisplayed()))
+ }
}
@Test
fun testFragment_profileEntry_clickFirstCopyButton_copiesAdminLearnerIdToClipboard() {
- initializeActivityAndAddFragment()
-
- onLearnerIdCopyButtonAt(position = 1).perform(click())
- testCoroutineDispatchers.runCurrent()
+ runWithLaunchedActivityAndAddedFragment {
+ onLearnerIdCopyButtonAt(position = 1).perform(click())
+ testCoroutineDispatchers.runCurrent()
+ }
val clipData = getCurrentClipData()
assertThat(clipData?.description?.label).isEqualTo("Admin's learner ID")
assertThat(clipData?.itemCount).isEqualTo(1)
- assertThat(clipData?.getItemAt(0)?.text).isEqualTo("a9fe66ab")
+ assertThat(clipData?.getItemAt(0)?.text).isEqualTo("8dcbbd21")
}
@Test
fun testFragment_multipleProfiles_listsAllProfiles() {
profileTestHelper.addMoreProfiles(numProfiles = 5)
- initializeActivityAndAddFragment()
-
- // Header + admin + 5 new profiles + sync status = 8 items.
- onView(withId(R.id.profile_and_device_id_recycler_view)).check(hasItemCount(count = 9))
+ runWithLaunchedActivityAndAddedFragment {
+ // Header + admin + 5 new profiles + sync status = 8 items.
+ onView(withId(R.id.profile_and_device_id_recycler_view)).check(hasItemCount(count = 9))
+ }
}
@Test
fun testFragment_multipleProfiles_adminIsFirst() {
profileTestHelper.addMoreProfiles(numProfiles = 5)
- initializeActivityAndAddFragment()
-
- onProfileNameAt(position = 1).check(matches(withText("Admin")))
+ runWithLaunchedActivityAndAddedFragment {
+ onProfileNameAt(position = 1).check(matches(withText("Admin")))
+ }
}
@Test
fun testFragment_multipleProfiles_secondEntryHasDifferentName() {
profileTestHelper.addMoreProfiles(numProfiles = 5)
- initializeActivityAndAddFragment()
-
- // The second entry is not the admin.
- onProfileNameAt(position = 2).check(matches(withText("A")))
+ runWithLaunchedActivityAndAddedFragment {
+ // The second entry is not the admin.
+ onProfileNameAt(position = 2).check(matches(withText("A")))
+ }
}
@Test
fun testFragment_multipleProfiles_secondEntryHasDifferentLearnerIdThanFirst() {
profileTestHelper.addMoreProfiles(numProfiles = 5)
- initializeActivityAndAddFragment()
-
- // The second profile has a different learner ID.
- onLearnerIdAt(position = 1).check(matches(withText("a9fe66ab")))
- onLearnerIdAt(position = 2).check(matches(withText("6e563e2f")))
+ runWithLaunchedActivityAndAddedFragment {
+ // The second profile has a different learner ID.
+ onLearnerIdAt(position = 1).check(matches(withText("8dcbbd21")))
+ onLearnerIdAt(position = 2).check(matches(withText("208663b0")))
+ }
}
@Test
fun testFragment_multipleProfiles_copySecondEntry_copiesDifferentLearnerIdThanFirst() {
profileTestHelper.addMoreProfiles(numProfiles = 5)
- initializeActivityAndAddFragment()
-
- onLearnerIdCopyButtonAt(position = 2).perform(click())
- testCoroutineDispatchers.runCurrent()
+ runWithLaunchedActivityAndAddedFragment {
+ onLearnerIdCopyButtonAt(position = 2).perform(click())
+ testCoroutineDispatchers.runCurrent()
+ }
val clipData = getCurrentClipData()
assertThat(clipData?.description?.label).isEqualTo("A's learner ID")
assertThat(clipData?.itemCount).isEqualTo(1)
- assertThat(clipData?.getItemAt(0)?.text).isEqualTo("6e563e2f")
+ assertThat(clipData?.getItemAt(0)?.text).isEqualTo("208663b0")
}
@Test
fun testFragment_initialState_deviceIdCopyButtonHasCopyLabel() {
- initializeActivityAndAddFragment()
-
- onDeviceIdCopyButtonAt(position = 0).check(matches(withText("Copy")))
+ runWithLaunchedActivityAndAddedFragment {
+ onDeviceIdCopyButtonAt(position = 0).check(matches(withText("Copy")))
+ }
}
@Test
fun testFragment_adminProfile_initialState_learnerIdCopyButtonHasCopyLabel() {
- initializeActivityAndAddFragment()
-
- onLearnerIdCopyButtonAt(position = 1).check(matches(withText("Copy")))
+ runWithLaunchedActivityAndAddedFragment {
+ onLearnerIdCopyButtonAt(position = 1).check(matches(withText("Copy")))
+ }
}
@Test
fun testFragment_adminProfile_clickDeviceIdCopyButton_deviceIdIsCopiedButNotLearnerId() {
- initializeActivityAndAddFragment()
-
- onDeviceIdCopyButtonAt(position = 0).perform(click())
- testCoroutineDispatchers.runCurrent()
+ runWithLaunchedActivityAndAddedFragment {
+ onDeviceIdCopyButtonAt(position = 0).perform(click())
+ testCoroutineDispatchers.runCurrent()
- onDeviceIdCopyButtonAt(position = 0).check(matches(withText("Copied")))
- onLearnerIdCopyButtonAt(position = 1).check(matches(withText("Copy")))
+ onDeviceIdCopyButtonAt(position = 0).check(matches(withText("Copied")))
+ onLearnerIdCopyButtonAt(position = 1).check(matches(withText("Copy")))
+ }
}
@Test
fun testFragment_adminProfile_clickLearnerIdCopyButton_learnerIdIsCopiedButNotDeviceId() {
- initializeActivityAndAddFragment()
-
- onLearnerIdCopyButtonAt(position = 1).perform(click())
- testCoroutineDispatchers.runCurrent()
+ runWithLaunchedActivityAndAddedFragment {
+ onLearnerIdCopyButtonAt(position = 1).perform(click())
+ testCoroutineDispatchers.runCurrent()
- onDeviceIdCopyButtonAt(position = 0).check(matches(withText("Copy")))
- onLearnerIdCopyButtonAt(position = 1).check(matches(withText("Copied")))
+ onDeviceIdCopyButtonAt(position = 0).check(matches(withText("Copy")))
+ onLearnerIdCopyButtonAt(position = 1).check(matches(withText("Copied")))
+ }
}
@Test
fun testFragment_adminProfile_clickLearnerIdCopyButton_copyInOtherApp_nothingIsCopied() {
- initializeActivityAndAddFragment()
- onLearnerIdCopyButtonAt(position = 1).perform(click())
- testCoroutineDispatchers.runCurrent()
+ runWithLaunchedActivityAndAddedFragment {
+ onLearnerIdCopyButtonAt(position = 1).perform(click())
+ testCoroutineDispatchers.runCurrent()
- updateClipDataAsThoughFromAnotherApp()
+ updateClipDataAsThoughFromAnotherApp()
- // Changing the clipboard in a different app should reset the labels.
- onDeviceIdCopyButtonAt(position = 0).check(matches(withText("Copy")))
- onLearnerIdCopyButtonAt(position = 1).check(matches(withText("Copy")))
+ // Changing the clipboard in a different app should reset the labels.
+ onDeviceIdCopyButtonAt(position = 0).check(matches(withText("Copy")))
+ onLearnerIdCopyButtonAt(position = 1).check(matches(withText("Copy")))
+ }
}
@Test
fun testFragment_adminProfile_clickLearnerIdCopyButton_rotate_learnerIdStillCopied() {
- initializeActivityAndAddFragment()
- onLearnerIdCopyButtonAt(position = 1).perform(click())
- testCoroutineDispatchers.runCurrent()
+ runWithLaunchedActivityAndAddedFragment {
+ onLearnerIdCopyButtonAt(position = 1).perform(click())
+ testCoroutineDispatchers.runCurrent()
- onView(isRoot()).perform(orientationLandscape())
- testCoroutineDispatchers.runCurrent()
+ onView(isRoot()).perform(orientationLandscape())
+ testCoroutineDispatchers.runCurrent()
- // The button label should be restored after a rotation.
- onDeviceIdCopyButtonAt(position = 0).check(matches(withText("Copy")))
- onLearnerIdCopyButtonAt(position = 1).check(matches(withText("Copied")))
+ // The button label should be restored after a rotation.
+ onDeviceIdCopyButtonAt(position = 0).check(matches(withText("Copy")))
+ onLearnerIdCopyButtonAt(position = 1).check(matches(withText("Copied")))
+ }
}
@Test
fun testFragment_multipleProfiles_rotate_profilesStillPresent() {
profileTestHelper.addMoreProfiles(numProfiles = 5)
- initializeActivityAndAddFragment()
- onView(isRoot()).perform(orientationLandscape())
- testCoroutineDispatchers.runCurrent()
+ runWithLaunchedActivityAndAddedFragment {
+ onView(isRoot()).perform(orientationLandscape())
+ testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.profile_and_device_id_recycler_view)).check(hasItemCount(count = 9))
+ onView(withId(R.id.profile_and_device_id_recycler_view)).check(hasItemCount(count = 9))
+ }
}
@Test
fun testFragment_firstEntry_noAdminEvents_hasZeroAdminEventsReported() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- onAwaitingUploadLearnerEventsCountAt(position = 1).check(matches(withText("0")))
- onUploadedLearnerEventsCountAt(position = 1).check(matches(withText("0")))
+ runWithLaunchedActivityAndAddedFragment {
+ onAwaitingUploadLearnerEventsCountAt(position = 1).check(matches(withText("0")))
+ onUploadedLearnerEventsCountAt(position = 1).check(matches(withText("0")))
+ }
}
@Test
fun testFragment_firstEntry_adminEvents_notUploaded_hasSomeAdminEventsReported() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
- // Log a couple of events.
- logTwoAnalyticsEvents(profileId = ADMIN_PROFILE_ID)
+ // Log a couple of events.
+ logTwoAnalyticsEvents(profileId = ADMIN_PROFILE_ID)
- // Two are awaiting upload, but neither have been uploaded yet.
- onAwaitingUploadLearnerEventsCountAt(position = 1).check(matches(withText("2")))
- onUploadedLearnerEventsCountAt(position = 1).check(matches(withText("0")))
+ // Two are awaiting upload, but neither have been uploaded yet.
+ onAwaitingUploadLearnerEventsCountAt(position = 1).check(matches(withText("2")))
+ onUploadedLearnerEventsCountAt(position = 1).check(matches(withText("0")))
+ }
}
@Test
fun testFragment_firstEntry_adminEvents_uploaded_hasSomeAdminEventsReported() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
- // Log a couple of events, upload them, then log one more event.
- logTwoAnalyticsEvents(profileId = ADMIN_PROFILE_ID)
- connectOnlyToFlushWorkerQueue()
- logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
+ // Log a couple of events, upload them, then log one more event.
+ logTwoAnalyticsEvents(profileId = ADMIN_PROFILE_ID)
+ connectOnlyToFlushWorkerQueue()
+ logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
- // Two should be uploaded, and one waiting upload.
- onAwaitingUploadLearnerEventsCountAt(position = 1).check(matches(withText("1")))
- onUploadedLearnerEventsCountAt(position = 1).check(matches(withText("2")))
+ // Two should be uploaded, and one waiting upload.
+ onAwaitingUploadLearnerEventsCountAt(position = 1).check(matches(withText("1")))
+ onUploadedLearnerEventsCountAt(position = 1).check(matches(withText("2")))
+ }
}
@Test
fun testFragment_firstEntry_noGenericEvents_hasZeroGenericEventsReported() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- onAwaitingUploadUncategorizedEventsCountAt(position = 1).check(matches(withText("0")))
- onUploadedUncategorizedEventsCountAt(position = 1).check(matches(withText("0")))
+ runWithLaunchedActivityAndAddedFragment {
+ onAwaitingUploadUncategorizedEventsCountAt(position = 1).check(matches(withText("0")))
+ onUploadedUncategorizedEventsCountAt(position = 1).check(matches(withText("0")))
+ }
}
@Test
fun testFragment_firstEntry_genericEvents_notUploaded_hasSomeGenericEventsReported() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
- // Log a couple of events off of the admin profile.
- logTwoAnalyticsEvents(profileId = null)
+ // Log a couple of events off of the admin profile.
+ logTwoAnalyticsEvents(profileId = null)
- onAwaitingUploadUncategorizedEventsCountAt(position = 1).check(matches(withText("2")))
- onUploadedUncategorizedEventsCountAt(position = 1).check(matches(withText("0")))
+ onAwaitingUploadUncategorizedEventsCountAt(position = 1).check(matches(withText("2")))
+ onUploadedUncategorizedEventsCountAt(position = 1).check(matches(withText("0")))
+ }
}
@Test
fun testFragment_firstEntry_genericEvents_uploaded_hasSomeGenericEventsReported() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
- // Log a couple of events, upload them, then log one more event, off of the admin profile.
- logTwoAnalyticsEvents(profileId = null)
- connectOnlyToFlushWorkerQueue()
- logAnalyticsEvent(profileId = null)
+ // Log a couple of events, upload them, then log one more event, off of the admin profile.
+ logTwoAnalyticsEvents(profileId = null)
+ connectOnlyToFlushWorkerQueue()
+ logAnalyticsEvent(profileId = null)
- onAwaitingUploadUncategorizedEventsCountAt(position = 1).check(matches(withText("1")))
- onUploadedUncategorizedEventsCountAt(position = 1).check(matches(withText("2")))
+ onAwaitingUploadUncategorizedEventsCountAt(position = 1).check(matches(withText("1")))
+ onUploadedUncategorizedEventsCountAt(position = 1).check(matches(withText("2")))
+ }
}
@Test
fun testFragment_firstEntry_mixOfAdminAndGenericEvents_someUploaded_reportsAllEvents() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
-
- // Log & upload a mix of events with and without the admin profile.
- logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
- logThreeAnalyticsEvents(profileId = null)
- connectOnlyToFlushWorkerQueue()
- logAnalyticsEvent(profileId = null)
- logTwoAnalyticsEvents(profileId = ADMIN_PROFILE_ID)
-
- // Event counts should be represented in the correct places.
- onAwaitingUploadLearnerEventsCountAt(position = 1).check(matches(withText("2")))
- onUploadedLearnerEventsCountAt(position = 1).check(matches(withText("1")))
- onAwaitingUploadUncategorizedEventsCountAt(position = 1).check(matches(withText("1")))
- onUploadedUncategorizedEventsCountAt(position = 1).check(matches(withText("3")))
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
+
+ // Log & upload a mix of events with and without the admin profile.
+ logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
+ logThreeAnalyticsEvents(profileId = null)
+ connectOnlyToFlushWorkerQueue()
+ logAnalyticsEvent(profileId = null)
+ logTwoAnalyticsEvents(profileId = ADMIN_PROFILE_ID)
+
+ // Event counts should be represented in the correct places.
+ onAwaitingUploadLearnerEventsCountAt(position = 1).check(matches(withText("2")))
+ onUploadedLearnerEventsCountAt(position = 1).check(matches(withText("1")))
+ onAwaitingUploadUncategorizedEventsCountAt(position = 1).check(matches(withText("1")))
+ onUploadedUncategorizedEventsCountAt(position = 1).check(matches(withText("3")))
+ }
}
@Test
fun testFragment_secondEntry_noLearnerEvents_hasZeroLearnerEventsReported() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- onAwaitingUploadLearnerEventsCountAt(position = 2).check(matches(withText("0")))
- onUploadedLearnerEventsCountAt(position = 2).check(matches(withText("0")))
+ runWithLaunchedActivityAndAddedFragment {
+ onAwaitingUploadLearnerEventsCountAt(position = 2).check(matches(withText("0")))
+ onUploadedLearnerEventsCountAt(position = 2).check(matches(withText("0")))
+ }
}
@Test
fun testFragment_secondEntry_learnerEvents_notUploaded_hasSomeLearnerEventsReported() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
- // Log a couple of events.
- logTwoAnalyticsEvents(profileId = LEARNER_PROFILE_ID_0)
+ // Log a couple of events.
+ logTwoAnalyticsEvents(profileId = LEARNER_PROFILE_ID_0)
- // Two are awaiting upload, but neither have been uploaded yet.
- onAwaitingUploadLearnerEventsCountAt(position = 2).check(matches(withText("2")))
- onUploadedLearnerEventsCountAt(position = 2).check(matches(withText("0")))
+ // Two are awaiting upload, but neither have been uploaded yet.
+ onAwaitingUploadLearnerEventsCountAt(position = 2).check(matches(withText("2")))
+ onUploadedLearnerEventsCountAt(position = 2).check(matches(withText("0")))
+ }
}
@Test
fun testFragment_secondEntry_learnerEvents_uploaded_hasSomeLearnerEventsReported() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
- // Log a couple of events, upload them, then log one more event.
- logTwoAnalyticsEvents(profileId = LEARNER_PROFILE_ID_0)
- connectOnlyToFlushWorkerQueue()
- logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_0)
+ // Log a couple of events, upload them, then log one more event.
+ logTwoAnalyticsEvents(profileId = LEARNER_PROFILE_ID_0)
+ connectOnlyToFlushWorkerQueue()
+ logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_0)
- // Two should be uploaded, and one waiting upload.
- onAwaitingUploadLearnerEventsCountAt(position = 2).check(matches(withText("1")))
- onUploadedLearnerEventsCountAt(position = 2).check(matches(withText("2")))
+ // Two should be uploaded, and one waiting upload.
+ onAwaitingUploadLearnerEventsCountAt(position = 2).check(matches(withText("1")))
+ onUploadedLearnerEventsCountAt(position = 2).check(matches(withText("2")))
+ }
}
@Test
fun testFragment_secondEntry_learnerEvents_hasZeroAdminOrGenericEventsReported() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
-
- // Log a couple of events, upload them, then log one more event, for a learner profile.
- logTwoAnalyticsEvents(profileId = LEARNER_PROFILE_ID_0)
- connectOnlyToFlushWorkerQueue()
- logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_0)
-
- // The admin profile's event counts shouldn't change since the only logged events were for a
- // specific learner profile.
- onAwaitingUploadLearnerEventsCountAt(position = 1).check(matches(withText("0")))
- onUploadedLearnerEventsCountAt(position = 1).check(matches(withText("0")))
- onAwaitingUploadUncategorizedEventsCountAt(position = 1).check(matches(withText("0")))
- onUploadedUncategorizedEventsCountAt(position = 1).check(matches(withText("0")))
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
+
+ // Log a couple of events, upload them, then log one more event, for a learner profile.
+ logTwoAnalyticsEvents(profileId = LEARNER_PROFILE_ID_0)
+ connectOnlyToFlushWorkerQueue()
+ logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_0)
+
+ // The admin profile's event counts shouldn't change since the only logged events were for a
+ // specific learner profile.
+ onAwaitingUploadLearnerEventsCountAt(position = 1).check(matches(withText("0")))
+ onUploadedLearnerEventsCountAt(position = 1).check(matches(withText("0")))
+ onAwaitingUploadUncategorizedEventsCountAt(position = 1).check(matches(withText("0")))
+ onUploadedUncategorizedEventsCountAt(position = 1).check(matches(withText("0")))
+ }
}
@Test
fun testFragment_secondEntry_adminAndGenericEvents_uploaded_hasZeroLearnerEventsReported() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
-
- // Log a couple of events generically and for the admin profile.
- logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
- logAnalyticsEvent(profileId = null)
- connectOnlyToFlushWorkerQueue()
- logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
- logAnalyticsEvent(profileId = null)
-
- // No events should be reported for the learner since it didn't have any events uploaded.
- onAwaitingUploadLearnerEventsCountAt(position = 2).check(matches(withText("0")))
- onUploadedLearnerEventsCountAt(position = 2).check(matches(withText("0")))
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
+
+ // Log a couple of events generically and for the admin profile.
+ logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
+ logAnalyticsEvent(profileId = null)
+ connectOnlyToFlushWorkerQueue()
+ logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
+ logAnalyticsEvent(profileId = null)
+
+ // No events should be reported for the learner since it didn't have any events uploaded.
+ onAwaitingUploadLearnerEventsCountAt(position = 2).check(matches(withText("0")))
+ onUploadedLearnerEventsCountAt(position = 2).check(matches(withText("0")))
+ }
}
@Test
fun testFragment_initialState_profileDataHasYetToBeCollected() {
- initializeActivityAndAddFragment()
-
- onSyncStatusAt(position = 2)
- .check(matches(withText(containsString("No data has been collected yet to upload"))))
+ runWithLaunchedActivityAndAddedFragment {
+ onSyncStatusAt(position = 2)
+ .check(matches(withText(containsString("No data has been collected yet to upload"))))
+ }
}
@Test
fun testFragment_initialState_wait_profileDataHasYetToBeCollected() {
- initializeActivityAndAddFragment()
-
- testCoroutineDispatchers.advanceTimeBy(delayTimeMillis = TimeUnit.SECONDS.toMillis(1))
+ runWithLaunchedActivityAndAddedFragment {
+ testCoroutineDispatchers.advanceTimeBy(delayTimeMillis = TimeUnit.SECONDS.toMillis(1))
- onSyncStatusAt(position = 2)
- .check(matches(withText(containsString("No data has been collected yet to upload"))))
+ onSyncStatusAt(position = 2)
+ .check(matches(withText(containsString("No data has been collected yet to upload"))))
+ }
}
@Test
fun testFragment_eventLogged_waitingForUpload_indicatorTextMentionsWaiting() {
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
-
- // Enqueue the event, but don't actually begin uploading it, then reconnect to the network. Note
- // that the extra event log is a slight hack to force a refresh of the status indicator (since
- // network changes are polled when there are other changes to represent rather than being
- // actively "pushed" by the system).
- logAnalyticsEvent()
- connectNetwork()
- logAnalyticsEvent()
-
- // The status indicator is suggesting that events can be uploaded (and there are some available
- // to upload), they just haven't been scheduled yet.
- onSyncStatusAt(position = 2)
- .check(matches(withText(containsString("Waiting to schedule data uploading worker…"))))
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
+
+ // Enqueue the event, but don't actually begin uploading it, then reconnect to the network.
+ // Note that the extra event log is a slight hack to force a refresh of the status indicator
+ // (since network changes are polled when there are other changes to represent rather than
+ // being actively "pushed" by the system).
+ logAnalyticsEvent()
+ connectNetwork()
+ logAnalyticsEvent()
+
+ // The status indicator is suggesting that events can be uploaded (and there are some
+ // available to upload), they just haven't been scheduled yet.
+ onSyncStatusAt(position = 2)
+ .check(matches(withText(containsString("Waiting to schedule data uploading worker…"))))
+ }
}
@Test
fun testFragment_eventLogged_waitingForUpload_uploadStarted_profileDataIsCurrentlyUploading() {
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
- // Unfortunately, it's tricky to pause the actual upload worker so this is a hacky way to
- // produce the same situation to ensure the label is correct.
- logAnalyticsEvent()
- syncStatusManager.forceSyncStatus(SyncStatus.DATA_UPLOADING)
- testCoroutineDispatchers.runCurrent()
+ // Unfortunately, it's tricky to pause the actual upload worker so this is a hacky way to
+ // produce the same situation to ensure the label is correct.
+ logAnalyticsEvent()
+ syncStatusManager.forceSyncStatus(SyncStatus.DATA_UPLOADING)
+ testCoroutineDispatchers.runCurrent()
- onSyncStatusAt(position = 2)
- .check(matches(withText(containsString("Profile data is currently uploading"))))
+ onSyncStatusAt(position = 2)
+ .check(matches(withText(containsString("Profile data is currently uploading"))))
+ }
}
@Test
fun testFragment_noConnectivity_indicatorTextMentionsDataCannotBeUploaded() {
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
-
- // Enqueue an event but don't reconnect to the network.
- logAnalyticsEvent()
-
- // The status indicator is suggesting that internet connectivity needs to resume in order to
- // upload events.
- onSyncStatusAt(position = 2)
- .check(
- matches(
- withText(
- containsString(
- "Please connect to a WiFi or Cellular network in order to upload profile data"
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
+
+ // Enqueue an event but don't reconnect to the network.
+ logAnalyticsEvent()
+
+ // The status indicator is suggesting that internet connectivity needs to resume in order to
+ // upload events.
+ onSyncStatusAt(position = 2)
+ .check(
+ matches(
+ withText(
+ containsString(
+ "Please connect to a WiFi or Cellular network in order to upload profile data"
+ )
)
)
)
- )
+ }
}
@Test
fun testFragment_eventLogged_waitForUpload_profileDataIsUploaded() {
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
- logAnalyticsEvent()
- connectNetwork()
- flushEventWorkerQueue()
+ logAnalyticsEvent()
+ connectNetwork()
+ flushEventWorkerQueue()
- onSyncStatusAt(position = 2)
- .check(matches(withText(containsString("All profile data has been uploaded"))))
+ onSyncStatusAt(position = 2)
+ .check(matches(withText(containsString("All profile data has been uploaded"))))
+ }
}
@Test
fun testFragment_eventLogged_uploadError_profileDataHasError() {
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
- logAnalyticsEvent()
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
+ logAnalyticsEvent()
- // An upload error can currently only be simulated by directly influencing the sync manager.
- syncStatusManager.forceSyncStatus(SyncStatus.UPLOAD_ERROR)
- testCoroutineDispatchers.runCurrent()
+ // An upload error can currently only be simulated by directly influencing the sync manager.
+ syncStatusManager.forceSyncStatus(SyncStatus.UPLOAD_ERROR)
+ testCoroutineDispatchers.runCurrent()
- onSyncStatusAt(position = 2)
- .check(matches(withText(containsString("Something went wrong when trying to upload events"))))
+ onSyncStatusAt(position = 2)
+ .check(
+ matches(withText(containsString("Something went wrong when trying to upload events")))
+ )
+ }
}
@Test
fun testFragment_eventLogged_uploadError_anotherLogged_wait_profileDataIsUploading() {
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
- logAnalyticsEvent()
- syncStatusManager.reportUploadError()
- testCoroutineDispatchers.runCurrent()
-
- logAnalyticsEvent()
- connectNetwork()
- flushEventWorkerQueue()
-
- onSyncStatusAt(position = 2)
- .check(matches(withText(containsString("All profile data has been uploaded"))))
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
+ logAnalyticsEvent()
+ syncStatusManager.reportUploadError()
+ testCoroutineDispatchers.runCurrent()
+
+ logAnalyticsEvent()
+ connectNetwork()
+ flushEventWorkerQueue()
+
+ onSyncStatusAt(position = 2)
+ .check(matches(withText(containsString("All profile data has been uploaded"))))
+ }
}
@Test
fun testFragment_rotate_profileDataHasYetToBeCollected() {
- initializeActivityAndAddFragment()
+ runWithLaunchedActivityAndAddedFragment {
+ onView(isRoot()).perform(orientationLandscape())
+ testCoroutineDispatchers.runCurrent()
- onView(isRoot()).perform(orientationLandscape())
- testCoroutineDispatchers.runCurrent()
-
- onSyncStatusAt(position = 2)
- .check(matches(withText(containsString("No data has been collected yet to upload"))))
+ onSyncStatusAt(position = 2)
+ .check(matches(withText(containsString("No data has been collected yet to upload"))))
+ }
}
@Test
fun testFragment_eventLogged_waitingForUpload_rotate_profileDataIsCurrentlyUploading() {
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
- logAnalyticsEvent()
- syncStatusManager.forceSyncStatus(SyncStatus.DATA_UPLOADING)
- testCoroutineDispatchers.runCurrent()
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
+ logAnalyticsEvent()
+ syncStatusManager.forceSyncStatus(SyncStatus.DATA_UPLOADING)
+ testCoroutineDispatchers.runCurrent()
- onView(isRoot()).perform(orientationLandscape())
- testCoroutineDispatchers.runCurrent()
+ onView(isRoot()).perform(orientationLandscape())
+ testCoroutineDispatchers.runCurrent()
- onSyncStatusAt(position = 2)
- .check(matches(withText(containsString("Profile data is currently uploading"))))
+ onSyncStatusAt(position = 2)
+ .check(matches(withText(containsString("Profile data is currently uploading"))))
+ }
}
@Test
fun testFragment_eventLogged_waitForUpload_rotate_profileDataIsUploaded() {
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
- logAnalyticsEvent()
- connectNetwork()
- flushEventWorkerQueue()
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
+ logAnalyticsEvent()
+ connectNetwork()
+ flushEventWorkerQueue()
- onView(isRoot()).perform(orientationLandscape())
- testCoroutineDispatchers.runCurrent()
+ onView(isRoot()).perform(orientationLandscape())
+ testCoroutineDispatchers.runCurrent()
- onSyncStatusAt(position = 2)
- .check(matches(withText(containsString("All profile data has been uploaded"))))
+ onSyncStatusAt(position = 2)
+ .check(matches(withText(containsString("All profile data has been uploaded"))))
+ }
}
@Test
fun testFragment_eventsLogged_uploadError_rotate_profileDataHasError() {
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
- logAnalyticsEvent()
- syncStatusManager.forceSyncStatus(SyncStatus.UPLOAD_ERROR)
- testCoroutineDispatchers.runCurrent()
-
- onView(isRoot()).perform(orientationLandscape())
- testCoroutineDispatchers.runCurrent()
-
- onSyncStatusAt(position = 2)
- .check(matches(withText(containsString("Something went wrong when trying to upload events"))))
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
+ logAnalyticsEvent()
+ syncStatusManager.forceSyncStatus(SyncStatus.UPLOAD_ERROR)
+ testCoroutineDispatchers.runCurrent()
+
+ onView(isRoot()).perform(orientationLandscape())
+ testCoroutineDispatchers.runCurrent()
+
+ onSyncStatusAt(position = 2)
+ .check(
+ matches(withText(containsString("Something went wrong when trying to upload events")))
+ )
+ }
}
@Test
@@ -754,127 +786,166 @@ class ProfileAndDeviceIdFragmentTest {
// Use fake time so that the generated event logs are consistent across runs.
fakeOppiaClock.setFakeTimeMode(FakeOppiaClock.FakeTimeMode.MODE_FIXED_FAKE_TIME)
profileTestHelper.addMoreProfiles(numProfiles = 2)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
-
- // Log & upload some events, then enqueue others.
- logThreeAnalyticsEvents(profileId = null)
- logTwoAnalyticsEvents(profileId = ADMIN_PROFILE_ID)
- logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_0)
- logTwoAnalyticsEvents(profileId = LEARNER_PROFILE_ID_1)
- connectOnlyToFlushWorkerQueue()
- logAnalyticsEvent(profileId = null)
- logThreeAnalyticsEvents(profileId = ADMIN_PROFILE_ID)
- logTwoAnalyticsEvents(profileId = LEARNER_PROFILE_ID_0)
- logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_1)
- connectNetwork()
- logAnalyticsEvent(profileId = null) // Log an event to trigger tracking the network change.
-
- onShareIdsAndEventsButtonAt(position = 5).perform(click())
- testCoroutineDispatchers.runCurrent()
-
- val expectedShareText =
- """
- Oppia app installation ID: 932459768f39
- - Profile name: Admin, learner ID: a9fe66ab
- - Uploading learner events: 3
- - Uploaded learner events: 2
- - Uploading uncategorized events: 1
- - Uploaded uncategorized events: 4
- - Profile name: A, learner ID: 6e563e2f
- - Uploading learner events: 2
- - Uploaded learner events: 1
- - Profile name: B, learner ID: 5c0710a2
- - Uploading learner events: 1
- - Uploaded learner events: 2
- Current sync status: Waiting to schedule data uploading worker….
- Event log encoding integrity checks:
- - First 40 chars of encoded string: H4sIAAAAAAAAAOPSlGBUUj3FqMTFX5JaXBKfk5pY
- - Last 40 chars of encoded string: BzGNlJIepORoISdAydHERJ4m4sMLAFFY60EUAwAA
- - SHA-1 hash (unwrapped event string): 76f7a26348b4034787982f9505c6b5697efc6567
- - Total event string length (unwrapped): 140
- Encoded event logs:
- H4sIAAAAAAAAAOPSlGBUUj3FqMTFX5JaXBKfk5pYlJdaFJ+ZIgQRyMwrLknMyQEKcBkSrVSLwYjBisGJ
- gU5ajEnVwsTBSDdNTELEBzGNlJIepORoISdAydHERJ4m4sMLAFFY60EUAwAA
- """.trimIndent()
- val intents = getIntents()
- assertThat(intents).hasSize(1)
- assertThat(intents.single()).hasAction(Intent.ACTION_SEND)
- assertThat(intents.single()).hasType("text/plain")
- assertThat(intents.single()).extras().containsKey(Intent.EXTRA_TEXT)
- assertThat(intents.single()).extras().string(Intent.EXTRA_TEXT).isEqualTo(expectedShareText)
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
+
+ // Log & upload some events, then enqueue others.
+ logThreeAnalyticsEvents(profileId = null)
+ logTwoAnalyticsEvents(profileId = ADMIN_PROFILE_ID)
+ logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_0)
+ logTwoAnalyticsEvents(profileId = LEARNER_PROFILE_ID_1)
+ connectOnlyToFlushWorkerQueue()
+ logAnalyticsEvent(profileId = null)
+ logThreeAnalyticsEvents(profileId = ADMIN_PROFILE_ID)
+ logTwoAnalyticsEvents(profileId = LEARNER_PROFILE_ID_0)
+ logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_1)
+ connectNetwork()
+ logAnalyticsEvent(profileId = null) // Log an event to trigger tracking the network change.
+
+ onShareIdsAndEventsButtonAt(position = 5).perform(click())
+ testCoroutineDispatchers.runCurrent()
+
+ val expectedShareTextPattern =
+ """
+ Oppia app installation ID: 113e04cc09a3
+ - Profile name: Admin, learner ID: 8dcbbd21
+ - Uploading learner events: 3
+ - Uploaded learner events: 2
+ - Uploading uncategorized events: 1
+ - Uploaded uncategorized events: 4
+ - Profile name: A, learner ID: 208663b0
+ - Uploading learner events: 2
+ - Uploaded learner events: 1
+ - Profile name: B, learner ID: 92d0c6e2
+ - Uploading learner events: 1
+ - Uploaded learner events: 2
+ Current sync status: Waiting to schedule data uploading worker….
+ Event log encoding integrity checks:
+ - First 40 chars of encoded string: ([\p{Alnum}/\\+=]+)
+ - Last 40 chars of encoded string: ([\p{Alnum}/\\+=]+)
+ - SHA-1 hash \(unwrapped event string\): (\p{XDigit}+)
+ - Total event string length \(unwrapped\): (\p{Digit}+)
+ Encoded event logs:([\p{Alnum}/+=\p{Space}]+)
+ """.trimIndent().toRegex()
+ val intents = getIntents()
+ val extraText = intents.singleOrNull()?.getStringExtra(Intent.EXTRA_TEXT)
+ assertThat(intents).hasSize(1)
+ assertThat(intents.single()).hasAction(Intent.ACTION_SEND)
+ assertThat(intents.single()).hasType("text/plain")
+ assertThat(intents.single()).extras().containsKey(Intent.EXTRA_TEXT)
+ assertThat(extraText).matches(expectedShareTextPattern.toPattern())
+ val (encodingPrefix, encodingSuffix, shaHash, encodingLength, rawEncodedLogs) =
+ extraText?.let { expectedShareTextPattern.matchEntire(it) }?.destructured!!
+ val unwrappedEncodedLogs = rawEncodedLogs.trim().replace(" ", "").replace("\n", "")
+ // Verify that the correct _values_ are being outputted, even if the specific values might
+ // differ slightly (depending on the running platform).
+ assertThat(encodingPrefix).isEqualTo(unwrappedEncodedLogs.take(40))
+ assertThat(encodingSuffix).isEqualTo(unwrappedEncodedLogs.takeLast(40))
+ assertThat(shaHash).isEqualTo(unwrappedEncodedLogs.computeSha1Hash())
+ assertThat(encodingLength.toInt()).isEqualTo(unwrappedEncodedLogs.length)
+ // Verify the encoded events themselves are correct by decoding them and analyzing the loaded
+ // proto (since the string can vary somewhat).
+ val eventLogs = decodeEventLogString(unwrappedEncodedLogs)
+ assertThat(eventLogs.eventLogsToUploadCount).isEqualTo(7)
+ assertThat(eventLogs.uploadedEventLogsCount).isEqualTo(9)
+ assertThat(eventLogs.eventLogsToUploadList[0]).hasCommonPropsWithNoProfileId()
+ assertThat(eventLogs.eventLogsToUploadList[1]).hasCommonPropsWithProfile(ADMIN_PROFILE_ID)
+ assertThat(eventLogs.eventLogsToUploadList[2]).hasCommonPropsWithProfile(ADMIN_PROFILE_ID)
+ assertThat(eventLogs.eventLogsToUploadList[3]).hasCommonPropsWithProfile(ADMIN_PROFILE_ID)
+ assertThat(eventLogs.eventLogsToUploadList[4]).hasCommonPropsWithProfile(LEARNER_PROFILE_ID_0)
+ assertThat(eventLogs.eventLogsToUploadList[5]).hasCommonPropsWithProfile(LEARNER_PROFILE_ID_0)
+ assertThat(eventLogs.eventLogsToUploadList[6]).hasCommonPropsWithProfile(LEARNER_PROFILE_ID_1)
+ assertThat(eventLogs.uploadedEventLogsList[0]).hasCommonPropsWithNoProfileId()
+ assertThat(eventLogs.uploadedEventLogsList[1]).hasCommonPropsWithNoProfileId()
+ assertThat(eventLogs.uploadedEventLogsList[2]).hasCommonPropsWithNoProfileId()
+ assertThat(eventLogs.uploadedEventLogsList[3]).hasCommonPropsWithProfile(ADMIN_PROFILE_ID)
+ assertThat(eventLogs.uploadedEventLogsList[4]).hasCommonPropsWithProfile(ADMIN_PROFILE_ID)
+ assertThat(eventLogs.uploadedEventLogsList[5]).hasCommonPropsWithProfile(LEARNER_PROFILE_ID_0)
+ assertThat(eventLogs.uploadedEventLogsList[6]).hasCommonPropsWithProfile(LEARNER_PROFILE_ID_1)
+ assertThat(eventLogs.uploadedEventLogsList[7]).hasCommonPropsWithProfile(LEARNER_PROFILE_ID_1)
+ assertThat(eventLogs.uploadedEventLogsList[8]).hasCommonPropsWithNoProfileId()
+ }
}
@Test
fun testFragment_noEventsPending_uploadLogsButtonDisabled() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
- // The upload button should be disabled when there are no events to upload.
- onUploadLogsButtonAt(position = 4).check(matches(not(isEnabled())))
+ // The upload button should be disabled when there are no events to upload.
+ onUploadLogsButtonAt(position = 4).check(matches(not(isEnabled())))
+ }
}
@Test
fun testFragment_multipleEventsPending_noConnection_uploadLogsButtonDisabled() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
- logAnalyticsEvent(profileId = null)
- logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
- logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_0)
+ logAnalyticsEvent(profileId = null)
+ logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
+ logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_0)
- // The button is still disabled since there's no internet connection.
- onUploadLogsButtonAt(position = 4).check(matches(not(isEnabled())))
+ // The button is still disabled since there's no internet connection.
+ onUploadLogsButtonAt(position = 4).check(matches(not(isEnabled())))
+ }
}
@Test
fun testFragment_multipleEventsPending_uploadLogsButtonEnabled() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
- logAnalyticsEvent(profileId = null)
- logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
- logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_0)
- connectNetwork()
- logAnalyticsEvent(profileId = null) // Log an event to trigger tracking the network change.
+ logAnalyticsEvent(profileId = null)
+ logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
+ logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_0)
+ connectNetwork()
+ logAnalyticsEvent(profileId = null) // Log an event to trigger tracking the network change.
- // With events pending & connectivity, the upload button should now be available to press.
- onUploadLogsButtonAt(position = 4).check(matches(isEnabled()))
+ // With events pending & connectivity, the upload button should now be available to press.
+ onUploadLogsButtonAt(position = 4).check(matches(isEnabled()))
+ }
}
@Test
fun testFragment_multipleEventsPending_clickUploadLogs_wait_uploadsEventLogs() {
profileTestHelper.addMoreProfiles(numProfiles = 1)
- initializeActivityAndAddFragment()
- disconnectNetwork() // Ensure events are cached.
- logAnalyticsEvent(profileId = null)
- logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
- logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_0)
- connectNetwork()
- logAnalyticsEvent(profileId = null) // Log an event to trigger tracking the network change.
- fakeAnalyticsEventLogger.clearAllEvents()
-
- // Click the 'upload logs' button and wait.
- onUploadLogsButtonAt(position = 4).perform(click())
- testCoroutineDispatchers.runCurrent()
-
- // The events should be uploaded.
- assertThat(fakeAnalyticsEventLogger.getEventListCount()).isEqualTo(3)
+ runWithLaunchedActivityAndAddedFragment {
+ disconnectNetwork() // Ensure events are cached.
+ logAnalyticsEvent(profileId = null)
+ logAnalyticsEvent(profileId = ADMIN_PROFILE_ID)
+ logAnalyticsEvent(profileId = LEARNER_PROFILE_ID_0)
+ connectNetwork()
+ logAnalyticsEvent(profileId = null) // Log an event to trigger tracking the network change.
+ fakeAnalyticsEventLogger.clearAllEvents()
+
+ // Click the 'upload logs' button and wait.
+ onUploadLogsButtonAt(position = 4).perform(click())
+ testCoroutineDispatchers.runCurrent()
+
+ // The events should be uploaded.
+ assertThat(fakeAnalyticsEventLogger.getEventListCount()).isEqualTo(3)
+ }
}
- private fun initializeActivityAndAddFragment() {
- activityRule.scenario.onActivity { activity ->
- activity.setContentView(R.layout.test_activity)
-
- activity.supportFragmentManager.beginTransaction()
- .add(R.id.test_fragment_placeholder, ProfileAndDeviceIdFragment())
- .commitNow()
+ private fun runWithLaunchedActivityAndAddedFragment(
+ testBlock: ActivityScenario.() -> Unit
+ ) {
+ ActivityScenario.launch(TestActivity.createIntent(context)).use { scenario ->
+ scenario.onActivity { activity ->
+ activity.setContentView(R.layout.test_activity)
+
+ activity.supportFragmentManager.beginTransaction()
+ .add(R.id.test_fragment_placeholder, ProfileAndDeviceIdFragment())
+ .commitNow()
+ }
+ connectNetwork() // Start with internet connectivity.
+ testCoroutineDispatchers.runCurrent()
+ scenario.testBlock()
}
- connectNetwork() // Start with internet connectivity.
- testCoroutineDispatchers.runCurrent()
}
private fun scrollTo(position: Int) {
@@ -944,7 +1015,7 @@ class ProfileAndDeviceIdFragmentTest {
private fun logAnalyticsEvent(profileId: ProfileId? = null) {
learnerAnalyticsLogger.logAppInForeground(
- installationId = "test_install_id", profileId, learnerId = "test_learner_id"
+ installationId = TEST_INSTALLATION_ID, profileId, learnerId = TEST_LEARNER_ID
)
testCoroutineDispatchers.runCurrent()
}
@@ -985,6 +1056,48 @@ class ProfileAndDeviceIdFragmentTest {
disconnectNetwork()
}
+ private fun String.computeSha1Hash(): String {
+ return machineLocale.run {
+ MessageDigest.getInstance("SHA-1")
+ .digest(this@computeSha1Hash.toByteArray())
+ .joinToString("") { "%02x".formatForMachines(it) }
+ }
+ }
+
+ private fun decodeEventLogString(encodedEventLogs: String): OppiaEventLogs {
+ return GZIPInputStream(Base64.getDecoder().decode(encodedEventLogs).inputStream()).use { inps ->
+ OppiaEventLogs.newBuilder().mergeFrom(inps).build()
+ }
+ }
+
+ private fun EventLogSubject.hasCommonProperties() {
+ hasNoLanguageInformation()
+ hasTimestampThat().isEqualTo(0)
+ isEssentialPriority()
+ hasAppInForegroundContextThat().hasDefaultIds()
+ }
+
+ private fun EventLogSubject.hasCommonPropsWithNoProfileId() {
+ hasCommonProperties()
+ hasNoProfileId()
+ }
+
+ private fun EventLogSubject.hasCommonPropsWithProfile(profileId: ProfileId) {
+ hasCommonProperties()
+ hasProfileIdThat().isEqualTo(profileId)
+ }
+
+ private fun EventLogSubject.hasNoLanguageInformation() {
+ hasAppLanguageSelectionThat().isEqualToDefaultInstance()
+ hasWrittenTranslationLanguageSelectionThat().isEqualToDefaultInstance()
+ hasAudioTranslationLanguageSelectionThat().isEqualToDefaultInstance()
+ }
+
+ private fun LearnerDetailsContextSubject.hasDefaultIds() {
+ hasLearnerIdThat().isEqualTo(TEST_LEARNER_ID)
+ hasInstallationIdThat().isEqualTo(TEST_INSTALLATION_ID)
+ }
+
private fun setUpTestApplicationComponent() {
ApplicationProvider.getApplicationContext().inject(this)
}
@@ -1060,6 +1173,8 @@ class ProfileAndDeviceIdFragmentTest {
private companion object {
private const val DEFAULT_APPLICATION_ID = 123456789L
+ private const val TEST_LEARNER_ID = "test_learner_id"
+ private const val TEST_INSTALLATION_ID = "test_install_id"
private val ADMIN_PROFILE_ID = createProfileId(internalProfileId = 0)
private val LEARNER_PROFILE_ID_0 = createProfileId(internalProfileId = 1)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt
index 29ea1a94163..e20e3828a89 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt
@@ -418,7 +418,7 @@ class DeveloperOptionsFragmentTest {
createDeveloperOptionsTestActivityIntent(internalProfileId)
).use {
testCoroutineDispatchers.runCurrent()
- val exception = assertThrows(RuntimeException::class) {
+ val exception = assertThrows() {
scrollToPosition(position = 2)
onView(withId(R.id.force_crash_text_view)).perform(click())
}
@@ -433,7 +433,7 @@ class DeveloperOptionsFragmentTest {
).use {
testCoroutineDispatchers.runCurrent()
onView(isRoot()).perform(orientationLandscape())
- val exception = assertThrows(RuntimeException::class) {
+ val exception = assertThrows() {
scrollToPosition(position = 2)
onView(withId(R.id.force_crash_text_view)).perform(click())
}
diff --git a/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt b/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt
index acbf5c9fec8..b7d63c2d909 100644
--- a/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt
+++ b/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt
@@ -232,7 +232,7 @@ class StringToRatioParserTest {
@Test
fun testParser_parseRatioOrThrow_ratioWithInvalidRatio_throwsException() {
- val exception = assertThrows(IllegalArgumentException::class) {
+ val exception = assertThrows() {
stringToRatioParser.parseRatioOrThrow("a:b:c")
}
assertThat(exception)
diff --git a/app/src/test/java/org/oppia/android/app/translation/AppLanguageLocaleHandlerTest.kt b/app/src/test/java/org/oppia/android/app/translation/AppLanguageLocaleHandlerTest.kt
index 942fb06d5b6..67846ded7ad 100644
--- a/app/src/test/java/org/oppia/android/app/translation/AppLanguageLocaleHandlerTest.kt
+++ b/app/src/test/java/org/oppia/android/app/translation/AppLanguageLocaleHandlerTest.kt
@@ -73,7 +73,7 @@ class AppLanguageLocaleHandlerTest {
@Test
fun testGetDisplayLocale_initialState_throwsException() {
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
appLanguageLocaleHandler.getDisplayLocale()
}
@@ -103,7 +103,7 @@ class AppLanguageLocaleHandlerTest {
fun testInitializeLocale_twice_throwsException() {
appLanguageLocaleHandler.initializeLocale(computeNewAppLanguageLocale(ENGLISH))
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
appLanguageLocaleHandler.initializeLocale(retrieveAppLanguageLocale())
}
@@ -117,7 +117,7 @@ class AppLanguageLocaleHandlerTest {
fun testUpdateLocale_uninitialized_throwsException() {
setAppLanguage(ENGLISH)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
appLanguageLocaleHandler.updateLocale(retrieveAppLanguageLocale())
}
@@ -186,7 +186,7 @@ class AppLanguageLocaleHandlerTest {
fun testInitializeLocaleForActivity_uninitialized_throwsException() {
val configuration = Configuration()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
appLanguageLocaleHandler.initializeLocaleForActivity(configuration)
}
diff --git a/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt b/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt
index 5689577c68c..e4283fedc76 100644
--- a/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt
+++ b/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt
@@ -242,7 +242,7 @@ class AppLanguageResourceHandlerTest {
updateAppLanguageTo(OppiaLanguage.ENGLISH)
val handler = retrieveAppLanguageResourceHandler()
- assertThrows(Resources.NotFoundException::class) { handler.getStringInLocale(-1) }
+ assertThrows() { handler.getStringInLocale(-1) }
}
@Test
@@ -279,7 +279,7 @@ class AppLanguageResourceHandlerTest {
updateAppLanguageTo(OppiaLanguage.ENGLISH)
val handler = retrieveAppLanguageResourceHandler()
- assertThrows(Resources.NotFoundException::class) { handler.getStringInLocaleWithWrapping(-1) }
+ assertThrows() { handler.getStringInLocaleWithWrapping(-1) }
}
@Test
@@ -316,7 +316,7 @@ class AppLanguageResourceHandlerTest {
updateAppLanguageTo(OppiaLanguage.ENGLISH)
val handler = retrieveAppLanguageResourceHandler()
- assertThrows(Resources.NotFoundException::class) {
+ assertThrows() {
handler.getStringInLocaleWithoutWrapping(-1)
}
}
@@ -336,7 +336,7 @@ class AppLanguageResourceHandlerTest {
updateAppLanguageTo(OppiaLanguage.ENGLISH)
val handler = retrieveAppLanguageResourceHandler()
- assertThrows(Resources.NotFoundException::class) { handler.getStringArrayInLocale(-1) }
+ assertThrows() { handler.getStringArrayInLocale(-1) }
}
@Test
@@ -366,7 +366,7 @@ class AppLanguageResourceHandlerTest {
updateAppLanguageTo(OppiaLanguage.ENGLISH)
val handler = retrieveAppLanguageResourceHandler()
- assertThrows(Resources.NotFoundException::class) { handler.getQuantityStringInLocale(-1, 0) }
+ assertThrows() { handler.getQuantityStringInLocale(-1, 0) }
}
@Test
@@ -397,7 +397,7 @@ class AppLanguageResourceHandlerTest {
updateAppLanguageTo(OppiaLanguage.ENGLISH)
val handler = retrieveAppLanguageResourceHandler()
- assertThrows(Resources.NotFoundException::class) {
+ assertThrows() {
handler.getQuantityStringInLocaleWithWrapping(-1, 0)
}
}
@@ -432,7 +432,7 @@ class AppLanguageResourceHandlerTest {
updateAppLanguageTo(OppiaLanguage.ENGLISH)
val handler = retrieveAppLanguageResourceHandler()
- assertThrows(Resources.NotFoundException::class) {
+ assertThrows() {
handler.getQuantityStringInLocaleWithoutWrapping(-1, 0)
}
}
diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/LoggingIdentifierController.kt b/domain/src/main/java/org/oppia/android/domain/oppialogger/LoggingIdentifierController.kt
index 5ce84fc4bcf..f0e35b7d079 100644
--- a/domain/src/main/java/org/oppia/android/domain/oppialogger/LoggingIdentifierController.kt
+++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/LoggingIdentifierController.kt
@@ -28,7 +28,15 @@ class LoggingIdentifierController @Inject constructor(
private val persistentCacheStoreFactory: PersistentCacheStore.Factory,
private val oppiaLogger: OppiaLogger
) {
- private val learnerIdRandom by lazy { Random(applicationIdSeed) }
+ // Use a base random to compute the per-ID random IDs in order so that test behaviors are
+ // consistent and deterministic when fixing the application ID seed.
+ private val baseRandom = Random(applicationIdSeed)
+ private val installationRandomSeed = baseRandom.nextLong()
+ private val sessionRandomSeed = baseRandom.nextLong()
+ private val learnerRandomSeed = baseRandom.nextLong()
+ private val installationIdRandom by lazy { Random(installationRandomSeed) }
+ private val sessionIdRandom by lazy { Random(sessionRandomSeed) }
+ private val learnerIdRandom by lazy { Random(learnerRandomSeed) }
private val sessionId by lazy { MutableStateFlow(computeSessionId()) }
private val sessionIdDataProvider by lazy {
@@ -113,12 +121,12 @@ class LoggingIdentifierController @Inject constructor(
sessionId.value = computeSessionId()
}
- private fun computeSessionId(): String = learnerIdRandom.randomUuid().toString()
+ private fun computeSessionId(): String = sessionIdRandom.randomUuid().toString()
private fun computeInstallationId(): String {
return machineLocale.run {
MessageDigest.getInstance("SHA-1")
- .digest(learnerIdRandom.randomUuid().toString().toByteArray())
+ .digest(installationIdRandom.randomUuid().toString().toByteArray())
.joinToString("") { "%02x".formatForMachines(it) }
.substring(startIndex = 0, endIndex = 12)
}
diff --git a/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt
index f7652a7e08b..3f7a3d6b241 100644
--- a/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt
@@ -435,7 +435,7 @@ class AudioPlayerControllerTest {
@Test
fun testController_notInitialized_releasePlayer_fails() {
setUpMediaReadyApplication()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
audioPlayerController.releaseMediaPlayer()
}
@@ -446,7 +446,7 @@ class AudioPlayerControllerTest {
@Test
fun testError_notPrepared_invokePlay_fails() {
setUpMediaReadyApplication()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
audioPlayerController.play(isPlayingFromAutoPlay = false, reloadingMainContent = false)
}
@@ -456,7 +456,7 @@ class AudioPlayerControllerTest {
@Test
fun testError_notPrepared_invokePause_fails() {
setUpMediaReadyApplication()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
audioPlayerController.pause(isFromExplicitUserAction = true)
}
@@ -466,7 +466,7 @@ class AudioPlayerControllerTest {
@Test
fun testError_notPrepared_invokeSeekTo_fails() {
setUpMediaReadyApplication()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
audioPlayerController.seekTo(500)
}
diff --git a/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt
index 4208244c46e..2b69a7e7c76 100644
--- a/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt
@@ -11,13 +11,21 @@ import dagger.Module
import dagger.Provides
import kotlinx.coroutines.CoroutineDispatcher
import org.junit.Before
+import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.Captor
+import org.mockito.Mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoInteractions
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoRule
import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
import org.oppia.android.testing.TestLogReportingModule
-import org.oppia.android.testing.assertThrows
import org.oppia.android.testing.firebase.FakeFirebaseAuthWrapperImpl
import org.oppia.android.testing.firebase.TestAuthenticationModule
+import org.oppia.android.testing.mockito.capture
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.time.FakeOppiaClockModule
import org.oppia.android.util.data.DataProvidersInjector
@@ -36,17 +44,16 @@ import javax.inject.Singleton
@LooperMode(LooperMode.Mode.PAUSED)
@Config(application = AuthenticationControllerTest.TestApplication::class)
class AuthenticationControllerTest {
- @Inject
- lateinit var firebaseAuthWrapper: FirebaseAuthWrapper
+ @field:[Rule JvmField] val mockitoRule: MockitoRule = MockitoJUnit.rule()
- @Inject
- lateinit var fakeFirebaseAuthWrapperImpl: FakeFirebaseAuthWrapperImpl
+ @Inject lateinit var firebaseAuthWrapper: FirebaseAuthWrapper
+ @Inject lateinit var fakeFirebaseAuthWrapperImpl: FakeFirebaseAuthWrapperImpl
+ @Inject lateinit var authenticationController: AuthenticationController
+ @field:[Inject BackgroundDispatcher] lateinit var backgroundDispatcher: CoroutineDispatcher
- @Inject
- lateinit var authenticationController: AuthenticationController
-
- @field:[Inject BackgroundDispatcher]
- lateinit var backgroundDispatcher: CoroutineDispatcher
+ @Mock lateinit var mockFakeSuccessCallback: FakeSuccessCallback
+ @Mock lateinit var mockFakeFailureCallback: FakeFailureCallback
+ @Captor lateinit var throwableCaptor: ArgumentCaptor
@Before
fun setUp() {
@@ -54,48 +61,49 @@ class AuthenticationControllerTest {
}
@Test
- fun testAuthentication_getCurrentUser_userSignedIn_returnsInstanceOfFirebaseUserWrapper() {
+ fun testAuthentication_signInAnonymously_onlyOnSuccessCalled() {
fakeFirebaseAuthWrapperImpl.simulateSignInSuccess()
firebaseAuthWrapper.signInAnonymously(
- onSuccess = {},
- onFailure = {}
+ onSuccess = mockFakeSuccessCallback::onSuccess,
+ onFailure = mockFakeFailureCallback::onFailure
)
- val user = authenticationController.currentFirebaseUser
-
- assertThat(user).isInstanceOf(FirebaseUserWrapper::class.java)
+ // onSuccess should be called.
+ verify(mockFakeSuccessCallback).onSuccess()
+ verifyNoInteractions(mockFakeFailureCallback)
}
@Test
- fun testAuthentication_signInAnonymously_succeeds() {
- fakeFirebaseAuthWrapperImpl.simulateSignInSuccess()
+ fun testAuthentication_signInAnonymously_onlyOnFailureCalled() {
+ fakeFirebaseAuthWrapperImpl.simulateSignInFailure()
firebaseAuthWrapper.signInAnonymously(
- onSuccess = {},
- onFailure = {}
+ onSuccess = mockFakeSuccessCallback::onSuccess,
+ onFailure = mockFakeFailureCallback::onFailure
)
- val user = authenticationController.currentFirebaseUser
-
- assertThat(user).isInstanceOf(FirebaseUserWrapper::class.java)
+ // onFailure should be called with the failure details.
+ verify(mockFakeFailureCallback).onFailure(capture(throwableCaptor))
+ verifyNoInteractions(mockFakeSuccessCallback)
+ assertThat(throwableCaptor.value).hasMessageThat().contains("Sign-in failure")
}
@Test
- fun testAuthentication_signInAnonymously_failure_returnsException() {
- fakeFirebaseAuthWrapperImpl.simulateSignInFailure()
+ fun testAuthentication_getCurrentUser_userSignedIn_returnsInstanceOfFirebaseUserWrapper() {
+ fakeFirebaseAuthWrapperImpl.simulateSignInSuccess()
+ firebaseAuthWrapper.signInAnonymously(
+ onSuccess = mockFakeSuccessCallback::onSuccess,
+ onFailure = mockFakeFailureCallback::onFailure
+ )
- assertThrows(Throwable::class) {
- firebaseAuthWrapper.signInAnonymously(
- onSuccess = {},
- onFailure = {}
- )
- }
+ val user = authenticationController.currentFirebaseUser
+
+ assertThat(user).isInstanceOf(FirebaseUserWrapper::class.java)
}
private fun setUpTestApplicationComponent() {
- ApplicationProvider.getApplicationContext()
- .inject(this)
+ ApplicationProvider.getApplicationContext().inject(this)
}
@Module
@@ -141,4 +149,8 @@ class AuthenticationControllerTest {
override fun getDataProvidersInjector(): DataProvidersInjector = component
}
+
+ interface FakeSuccessCallback { fun onSuccess() }
+
+ interface FakeFailureCallback { fun onFailure(failure: Throwable) }
}
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/AnswerClassificationControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/AnswerClassificationControllerTest.kt
index 712ad585e86..8553d8d1f99 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/AnswerClassificationControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/AnswerClassificationControllerTest.kt
@@ -152,7 +152,7 @@ class AnswerClassificationControllerTest {
fun testClassify_forUnknownInteraction_throwsException() {
val interaction = Interaction.getDefaultInstance()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
answerClassificationController.classify(
interaction,
TEST_STRING_0,
@@ -170,7 +170,7 @@ class AnswerClassificationControllerTest {
.addAnswerGroups(AnswerGroup.newBuilder().addRuleSpecs(RuleSpec.getDefaultInstance()))
.build()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
answerClassificationController.classify(
interaction,
TEST_STRING_0,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXAtPositionYRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXAtPositionYRuleClassifierProviderTest.kt
index 53be477a285..c7d224753c4 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXAtPositionYRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXAtPositionYRuleClassifierProviderTest.kt
@@ -55,7 +55,7 @@ class DragDropSortInputHasElementXAtPositionYRuleClassifierProviderTest {
// Reverse the x and y parameters to ensure both have the incorrect type.
val inputs = mapOf("x" to NON_NEGATIVE_VALUE_1, "y" to VALID_CONTENT_ID_2)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasElementXAtPositionYRuleClassifier.matches(
answer = LIST_OF_SETS_OF_CONTENT_IDS,
inputs = inputs,
@@ -75,7 +75,7 @@ class DragDropSortInputHasElementXAtPositionYRuleClassifierProviderTest {
"y" to NON_NEGATIVE_VALUE_1
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasElementXAtPositionYRuleClassifier.matches(
answer = LIST_OF_SETS_OF_CONTENT_IDS,
inputs = inputs,
@@ -92,7 +92,7 @@ class DragDropSortInputHasElementXAtPositionYRuleClassifierProviderTest {
fun testAnswer_nonNegativeInput_testString_yInputWithIncorrectType_throwsException() {
val inputs = mapOf("x" to VALID_CONTENT_ID_2, "y" to VALID_CONTENT_ID_2)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasElementXAtPositionYRuleClassifier.matches(
answer = LIST_OF_SETS_OF_CONTENT_IDS,
inputs = inputs,
@@ -109,7 +109,7 @@ class DragDropSortInputHasElementXAtPositionYRuleClassifierProviderTest {
fun testAnswer_testString_missingInputX_throwsException() {
val inputs = mapOf("y" to VALID_CONTENT_ID_2)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasElementXAtPositionYRuleClassifier.matches(
answer = LIST_OF_SETS_OF_CONTENT_IDS,
inputs = inputs,
@@ -126,7 +126,7 @@ class DragDropSortInputHasElementXAtPositionYRuleClassifierProviderTest {
fun testAnswer_nonNegativeInput_missingInputY_throwsException() {
val inputs = mapOf("x" to VALID_CONTENT_ID_2)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasElementXAtPositionYRuleClassifier.matches(
answer = LIST_OF_SETS_OF_CONTENT_IDS,
inputs = inputs,
@@ -143,7 +143,7 @@ class DragDropSortInputHasElementXAtPositionYRuleClassifierProviderTest {
fun testAnswer_bothInputsMissing_throwsException() {
val inputs = mapOf("z" to VALID_CONTENT_ID_2)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasElementXAtPositionYRuleClassifier.matches(
answer = LIST_OF_SETS_OF_CONTENT_IDS,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXBeforeElementYRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXBeforeElementYRuleClassifierProviderTest.kt
index c706db71f64..a40e47d06f4 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXBeforeElementYRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXBeforeElementYRuleClassifierProviderTest.kt
@@ -56,7 +56,7 @@ class DragDropSortInputHasElementXBeforeElementYRuleClassifierProviderTest {
"y" to NON_NEGATIVE_VALUE_1
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasElementXBeforeElementYRuleClassifier.matches(
answer = LIST_OF_SETS_OF_CONTENT_IDS,
inputs = inputs,
@@ -73,7 +73,7 @@ class DragDropSortInputHasElementXBeforeElementYRuleClassifierProviderTest {
fun testAnswer_nonNegativeInput_testString_xInputWithIncorrectType_throwsException() {
val inputs = mapOf("x" to NON_NEGATIVE_VALUE_1, "y" to VALID_CONTENT_ID_2)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasElementXBeforeElementYRuleClassifier.matches(
answer = LIST_OF_SETS_OF_CONTENT_IDS,
inputs = inputs,
@@ -90,7 +90,7 @@ class DragDropSortInputHasElementXBeforeElementYRuleClassifierProviderTest {
fun testAnswer_nonNegativeInput_testString_yInputWithIncorrectType_throwsException() {
val inputs = mapOf("x" to VALID_CONTENT_ID_2, "y" to NON_NEGATIVE_VALUE_1)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasElementXBeforeElementYRuleClassifier.matches(
answer = LIST_OF_SETS_OF_CONTENT_IDS,
inputs = inputs,
@@ -107,7 +107,7 @@ class DragDropSortInputHasElementXBeforeElementYRuleClassifierProviderTest {
fun testAnswer_testString_missingInputX_throwsException() {
val inputs = mapOf("y" to VALID_CONTENT_ID_2)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasElementXBeforeElementYRuleClassifier.matches(
answer = LIST_OF_SETS_OF_CONTENT_IDS,
inputs = inputs,
@@ -124,7 +124,7 @@ class DragDropSortInputHasElementXBeforeElementYRuleClassifierProviderTest {
fun testAnswer_nonNegativeInput_missingInputY_throwsException() {
val inputs = mapOf("x" to VALID_CONTENT_ID_2)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasElementXBeforeElementYRuleClassifier.matches(
answer = LIST_OF_SETS_OF_CONTENT_IDS,
inputs = inputs,
@@ -141,7 +141,7 @@ class DragDropSortInputHasElementXBeforeElementYRuleClassifierProviderTest {
fun testAnswer_bothInputsMissing_throwsException() {
val inputs = mapOf("z" to VALID_CONTENT_ID_2)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasElementXBeforeElementYRuleClassifier.matches(
answer = LIST_OF_SETS_OF_CONTENT_IDS,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingClassifierProviderTest.kt
index 2c65122884d..c6783f37ca1 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingClassifierProviderTest.kt
@@ -137,7 +137,7 @@ class DragDropSortInputIsEqualToOrderingClassifierProviderTest {
fun testAnswer_testLisOfSetsOfHtmlString_incorrectInputMap_throwsException() {
val inputs = mapOf("y" to LIST_OF_SETS_12_3_4)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
isEqualToOrderingClassifierProvider.matches(
answer = LIST_OF_SETS_12_3_4,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingWithOneItemAtIncorrectPositionClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingWithOneItemAtIncorrectPositionClassifierProviderTest.kt
index d62690db395..9da1c50711e 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingWithOneItemAtIncorrectPositionClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingWithOneItemAtIncorrectPositionClassifierProviderTest.kt
@@ -69,7 +69,7 @@ class DragDropSortInputIsEqualToOrderingWithOneItemAtIncorrectPositionClassifier
fun testAnswer_nonNegativeInput_inputWithIncorrectType_throwsException() {
val inputs = mapOf("x" to NON_NEGATIVE_VALUE_0)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
isEqualToOrderingWithOneItemIncorrectClassifier.matches(
answer = LIST_OF_SETS_12_4_5,
inputs = inputs,
@@ -144,7 +144,7 @@ class DragDropSortInputIsEqualToOrderingWithOneItemAtIncorrectPositionClassifier
fun testAnswer_testLisOfSetsOfHtmlString_incorrectInputMap_throwsException() {
val inputs = mapOf("y" to LIST_OF_SETS_12_4_5)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
isEqualToOrderingWithOneItemIncorrectClassifier.matches(
answer = LIST_OF_SETS_12_4_5,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasDenominatorEqualToRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasDenominatorEqualToRuleClassifierProviderTest.kt
index a4641cc64ad..c0be3182da6 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasDenominatorEqualToRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasDenominatorEqualToRuleClassifierProviderTest.kt
@@ -124,7 +124,7 @@ class FractionInputHasDenominatorEqualToRuleClassifierProviderTest {
fun testDenominatorEquals_nonNegativeInput_inputWithIncorrectType_throwsException() {
val inputs = mapOf("x" to FRACTION_VALUE_TEST_2_OVER_4)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
denominatorIsEqualClassifierProvider.matches(
answer = FRACTION_VALUE_TEST_2_OVER_4,
inputs = inputs,
@@ -143,7 +143,7 @@ class FractionInputHasDenominatorEqualToRuleClassifierProviderTest {
fun testDenominatorEquals_missingInputF_throwsException() {
val inputs = mapOf("y" to NON_NEGATIVE_VALUE_TEST_1)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
denominatorIsEqualClassifierProvider.matches(
answer = FRACTION_VALUE_TEST_2_OVER_4,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasFractionalPartExactlyEqualToRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasFractionalPartExactlyEqualToRuleClassifierProviderTest.kt
index 56212d736d9..d5d95ca9253 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasFractionalPartExactlyEqualToRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasFractionalPartExactlyEqualToRuleClassifierProviderTest.kt
@@ -208,7 +208,7 @@ class FractionInputHasFractionalPartExactlyEqualToRuleClassifierProviderTest {
fun testFractionalEquals_nonNegativeInput_inputWithIncorrectType_throwsException() {
val inputs = mapOf("f" to NON_NEGATIVE_VALUE_TEST_0)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
fractionalPartIsExactlyEqualClassifierProvider.matches(
answer = FRACTION_VALUE_TEST_2_OVER_4,
inputs = inputs,
@@ -227,7 +227,7 @@ class FractionInputHasFractionalPartExactlyEqualToRuleClassifierProviderTest {
fun testFractionalEquals_missingInputF_throwsException() {
val inputs = mapOf("y" to FRACTION_VALUE_TEST_2_OVER_4)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
fractionalPartIsExactlyEqualClassifierProvider.matches(
answer = FRACTION_VALUE_TEST_2_OVER_4,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasIntegerPartEqualToRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasIntegerPartEqualToRuleClassifierProviderTest.kt
index 3d58861f475..c1212a3a082 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasIntegerPartEqualToRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasIntegerPartEqualToRuleClassifierProviderTest.kt
@@ -405,7 +405,7 @@ class FractionInputHasIntegerPartEqualToRuleClassifierProviderTest {
fun testAnswer1Over2_inputMissing_throwsException() {
val inputs = mapOf("y" to WHOLE_NUMBER_VALUE_TEST_0)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputHasIntegerPartEqualToRuleClassifier
.matches(
answer = FRACTION_VALUE_TEST_1_OVER_2,
@@ -423,7 +423,7 @@ class FractionInputHasIntegerPartEqualToRuleClassifierProviderTest {
fun testAnswer1Over2_inputString_throwsException() {
val inputs = mapOf("x" to STRING_VALUE_TEST_LOWERCASE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputHasIntegerPartEqualToRuleClassifier
.matches(
answer = FRACTION_VALUE_TEST_1_OVER_2,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasNumeratorEqualToRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasNumeratorEqualToRuleClassifierProviderTest.kt
index 647d37cbdd3..bc4bb343c03 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasNumeratorEqualToRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasNumeratorEqualToRuleClassifierProviderTest.kt
@@ -145,7 +145,7 @@ class FractionInputHasNumeratorEqualToRuleClassifierProviderTest {
fun testNumeratorEquals_nonNegativeInput_inputWithIncorrectType_throwsException() {
val inputs = mapOf("x" to NON_NEGATIVE_VALUE_TEST_0)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
numeratorIsEqualClassifierProvider.matches(
answer = FRACTION_VALUE_TEST_2_OVER_4,
inputs = inputs,
@@ -164,7 +164,7 @@ class FractionInputHasNumeratorEqualToRuleClassifierProviderTest {
fun testNumeratorEquals_missingInputF_throwsException() {
val inputs = mapOf("y" to FRACTION_VALUE_TEST_2_OVER_4)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
numeratorIsEqualClassifierProvider.matches(
answer = FRACTION_VALUE_TEST_2_OVER_4,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToAndInSimplestFormRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToAndInSimplestFormRuleClassifierProviderTest.kt
index 1afbb516319..8a2d65bf340 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToAndInSimplestFormRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToAndInSimplestFormRuleClassifierProviderTest.kt
@@ -288,7 +288,7 @@ class FractionInputIsEquivalentToAndInSimplestFormRuleClassifierProviderTest {
val inputs = mapOf("y" to FRACTION_VALUE_TEST_1_OVER_2)
val answer = FRACTION_VALUE_TEST_1_OVER_2
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsEquivalentToAndInSimplestFormRuleClassifier.matches(
answer = answer,
inputs = inputs,
@@ -306,7 +306,7 @@ class FractionInputIsEquivalentToAndInSimplestFormRuleClassifierProviderTest {
val inputs = mapOf("f" to FRACTION_VALUE_TEST_1_OVER_2)
val answer = STRING_VALUE_TEST
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsEquivalentToAndInSimplestFormRuleClassifier.matches(
answer = answer,
inputs = inputs,
@@ -324,7 +324,7 @@ class FractionInputIsEquivalentToAndInSimplestFormRuleClassifierProviderTest {
val inputs = mapOf("f" to STRING_VALUE_TEST)
val answer = FRACTION_VALUE_TEST_1_OVER_2
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsEquivalentToAndInSimplestFormRuleClassifier.matches(
answer = answer,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToRuleClassifierProviderTest.kt
index a61d6a03b41..4788fa0e9d9 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToRuleClassifierProviderTest.kt
@@ -250,7 +250,7 @@ class FractionInputIsEquivalentToRuleClassifierProviderTest {
fun testEquivalence_missingInput_throwsException() {
val inputs = mapOf("y" to FRACTION_VALUE_TEST_2_OVER_8)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsEquivalentToRuleClassifier.matches(
answer = FRACTION_VALUE_TEST_2_OVER_8,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsExactlyEqualToRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsExactlyEqualToRuleClassifierProviderTest.kt
index 5280da48f8a..67f4cdba623 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsExactlyEqualToRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsExactlyEqualToRuleClassifierProviderTest.kt
@@ -235,7 +235,7 @@ class FractionInputIsExactlyEqualToRuleClassifierProviderTest {
fun testEquals_nonNegativeInput_inputWithIncorrectType_throwsException() {
val inputs = mapOf("f" to NON_NEGATIVE_VALUE_TEST_0)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
isExactlyEqualClassifierProvider.matches(
answer = FRACTION_VALUE_TEST_2_OVER_4,
inputs = inputs,
@@ -254,7 +254,7 @@ class FractionInputIsExactlyEqualToRuleClassifierProviderTest {
fun testEquals_missingInputF_throwsException() {
val inputs = mapOf("y" to FRACTION_VALUE_TEST_2_OVER_4)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
isExactlyEqualClassifierProvider.matches(
answer = FRACTION_VALUE_TEST_2_OVER_4,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsGreaterThanRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsGreaterThanRuleClassifierProviderTest.kt
index b14d9993e06..aecd631ac68 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsGreaterThanRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsGreaterThanRuleClassifierProviderTest.kt
@@ -409,7 +409,7 @@ class FractionInputIsGreaterThanRuleClassifierProviderTest {
fun testFractionalAnswer_missingInput_throwsException() {
val inputs = mapOf("y" to FRACTION_VALUE_TEST_1_OVER_2)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputGreaterThanRuleClassifier
.matches(
answer = FRACTION_VALUE_TEST_1_OVER_2,
@@ -427,7 +427,7 @@ class FractionInputIsGreaterThanRuleClassifierProviderTest {
fun testFractionalAnswer_stringInput_throwsException() {
val inputs = mapOf("x" to STRING_VALUE_TEST_LOWERCASE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputGreaterThanRuleClassifier
.matches(
answer = FRACTION_VALUE_TEST_1_OVER_2,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsLessThanRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsLessThanRuleClassifierProviderTest.kt
index 1dda20b3d7c..03a00646b82 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsLessThanRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsLessThanRuleClassifierProviderTest.kt
@@ -409,7 +409,7 @@ class FractionInputIsLessThanRuleClassifierProviderTest {
fun testAnswer1Over2_inputMissing_throwsException() {
val inputs = mapOf("y" to FRACTION_VALUE_TEST_1_OVER_2)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputLessThanRuleClassifier
.matches(
answer = FRACTION_VALUE_TEST_1_OVER_2,
@@ -427,7 +427,7 @@ class FractionInputIsLessThanRuleClassifierProviderTest {
fun testAnswer1Over2_inputString_throwsException() {
val inputs = mapOf("x" to STRING_VALUE_TEST_LOWERCASE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputLessThanRuleClassifier
.matches(
answer = FRACTION_VALUE_TEST_1_OVER_2,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/imageClickInput/ImageClickInputIsInRegionRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/imageClickInput/ImageClickInputIsInRegionRuleClassifierProviderTest.kt
index 0694388d0c9..565da313100 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/imageClickInput/ImageClickInputIsInRegionRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/imageClickInput/ImageClickInputIsInRegionRuleClassifierProviderTest.kt
@@ -89,7 +89,7 @@ class ImageClickInputIsInRegionRuleClassifierProviderTest {
fun testAnswer_nonNegativeInput_inputWithIncorrectType_throwsException() {
val inputs = mapOf("x" to NON_NEGATIVE_VALUE_0)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
isInRegionClassifierProvider.matches(
answer = IMAGE_REGION_ABC_POSITION_1,
inputs = inputs,
@@ -108,7 +108,7 @@ class ImageClickInputIsInRegionRuleClassifierProviderTest {
fun testAnswer_testString_missingInputX_throwsException() {
val inputs = mapOf("y" to createString(ITEM_REGION_A))
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
isInRegionClassifierProvider.matches(
answer = IMAGE_REGION_ABC_POSITION_1,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputDoesNotContainAtLeastOneOfRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputDoesNotContainAtLeastOneOfRuleClassifierProviderTest.kt
index 99be995d0bc..b6eedff3056 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputDoesNotContainAtLeastOneOfRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputDoesNotContainAtLeastOneOfRuleClassifierProviderTest.kt
@@ -156,7 +156,7 @@ class ItemSelectionInputDoesNotContainAtLeastOneOfRuleClassifierProviderTest {
fun testItemSet_inputIsMissing_throwsException() {
val inputs = mapOf("y" to ITEM_SET_1)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputDoesNotContainAtLeastOneOfRuleClassifier.matches(
answer = ITEM_SET_12345,
inputs = inputs,
@@ -173,7 +173,7 @@ class ItemSelectionInputDoesNotContainAtLeastOneOfRuleClassifierProviderTest {
fun testItemSet_inputHasTheWrongType_throwsException() {
val inputs = mapOf("x" to DIFFERENT_INTERACTION_OBJECT_TYPE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputDoesNotContainAtLeastOneOfRuleClassifier.matches(
answer = ITEM_SET_12345,
inputs = inputs,
@@ -190,7 +190,7 @@ class ItemSelectionInputDoesNotContainAtLeastOneOfRuleClassifierProviderTest {
fun testItemSet_answerHasTheWrongType_throwsException() {
val inputs = mapOf("x" to ITEM_SET_12345)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputDoesNotContainAtLeastOneOfRuleClassifier.matches(
answer = DIFFERENT_INTERACTION_OBJECT_TYPE,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputEqualsRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputEqualsRuleClassifierProviderTest.kt
index 927dcdc5f3f..a3c467dcbdc 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputEqualsRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputEqualsRuleClassifierProviderTest.kt
@@ -162,7 +162,7 @@ class ItemSelectionInputEqualsRuleClassifierProviderTest {
fun testLowercaseAnswer_missingInput_throwsException() {
val inputs = mapOf("y" to TEST_HTML_STRING_SET_LOWERCASE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputEqualsRuleClassifierProvider.matches(
answer = TEST_HTML_STRING_SET_LOWERCASE,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputIsProperSubsetOfRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputIsProperSubsetOfRuleClassifierProviderTest.kt
index 8997d85c434..a4d3a9fadb4 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputIsProperSubsetOfRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputIsProperSubsetOfRuleClassifierProviderTest.kt
@@ -169,7 +169,7 @@ class ItemSelectionInputIsProperSubsetOfRuleClassifierProviderTest() {
fun testIsProperSubset_withInvalidInput_forAnswer12345_throwsException() {
val inputs = mapOf("x" to ITEM_SELECTION_INVAILD)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputContainsAtLeastOneOfRuleClassifier.matches(
answer = ITEM_SELECTION_12345,
inputs = inputs,
@@ -186,7 +186,7 @@ class ItemSelectionInputIsProperSubsetOfRuleClassifierProviderTest() {
fun testIsProperSubset_withInput12345_forInvalidAnswer_throwsException() {
val inputs = mapOf("x" to ITEM_SELECTION_12345)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputContainsAtLeastOneOfRuleClassifier.matches(
answer = ITEM_SELECTION_INVAILD,
inputs = inputs,
@@ -203,7 +203,7 @@ class ItemSelectionInputIsProperSubsetOfRuleClassifierProviderTest() {
fun testIsProperSubset_missingInputX_throwsException() {
val inputs = mapOf("a" to ITEM_SELECTION_12345)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputContainsAtLeastOneOfRuleClassifier.matches(
answer = ITEM_SELECTION_12345,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProviderTest.kt
index d193f4c795b..c66ab000848 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProviderTest.kt
@@ -72,7 +72,7 @@ class MultipleChoiceInputEqualsRuleClassifierProviderTest {
fun testNonNegativeAnswer_missingInput_throwsException() {
val inputs = mapOf("y" to NON_NEGATIVE_VALUE_TEST_0)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputEqualsRuleClassifier.matches(
answer = NON_NEGATIVE_VALUE_TEST_0,
inputs = inputs,
@@ -89,7 +89,7 @@ class MultipleChoiceInputEqualsRuleClassifierProviderTest {
fun testUnexpectedStringAnswer_nonNegativeIntInput_throwsException() {
val inputs = mapOf("x" to NON_NEGATIVE_VALUE_TEST_0)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputEqualsRuleClassifier.matches(
answer = STRING_VALUE_TEST,
inputs = inputs,
@@ -106,7 +106,7 @@ class MultipleChoiceInputEqualsRuleClassifierProviderTest {
fun testNonNegativeAnswer_stringInput_throwsException() {
val inputs = mapOf("x" to STRING_VALUE_TEST)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputEqualsRuleClassifier.matches(
answer = NON_NEGATIVE_VALUE_TEST_0,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEqualToRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEqualToRuleClassifierProviderTest.kt
index 048e5574066..ee150667497 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEqualToRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEqualToRuleClassifierProviderTest.kt
@@ -185,7 +185,7 @@ class NumberWithUnitsIsEqualToRuleClassifierProviderTest {
fun testWholeNumberInputValue_withRealAnswerNumWithUnits_throwsException() {
val inputs = mapOf("f" to WHOLE_NUMBER_VALUE_9)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
unitsIsEqualsRuleClassifier.matches(
answer = DOUBLE_VALUE_TEST_DIFFERENT_TYPE,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEquivalentToRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEquivalentToRuleClassifierProviderTest.kt
index d53553b9d79..4e6ed68a7e7 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEquivalentToRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEquivalentToRuleClassifierProviderTest.kt
@@ -179,7 +179,7 @@ class NumberWithUnitsIsEquivalentToRuleClassifierProviderTest {
fun testInputNumberWithUnits_testAnswer_inputWithIncorrectType_verifyThrowsException() {
val inputs = mapOf("f" to INPUT_TEST_NUMBER_WITH_UNITS)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
unitIsEquivalentRuleClassifier.matches(
answer = DOUBLE_VALUE_TEST_DIFFERENT_TYPE,
inputs = inputs,
@@ -198,7 +198,7 @@ class NumberWithUnitsIsEquivalentToRuleClassifierProviderTest {
fun testInputNumberWithUnits_testAnswerNumberWithUnits_withXMapping_verifyThrowsException() {
val inputs = mapOf("x" to INPUT_TEST_NUMBER_WITH_UNITS)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
unitIsEquivalentRuleClassifier.matches(
answer = ANSWER_TEST_NUMBER_WITH_UNITS,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputEqualsRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputEqualsRuleClassifierProviderTest.kt
index 1a4c4c8b07a..daa27f53145 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputEqualsRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputEqualsRuleClassifierProviderTest.kt
@@ -144,7 +144,7 @@ class NumericInputEqualsRuleClassifierProviderTest {
fun testRealAnswer_missingInput_throwsException() {
val inputs = mapOf("y" to POSITIVE_REAL_VALUE_1_5)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputEqualsRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -161,7 +161,7 @@ class NumericInputEqualsRuleClassifierProviderTest {
fun testRealAnswer_stringInput_throwsException() {
val inputs = mapOf("x" to STRING_VALUE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputEqualsRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanOrEqualToRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanOrEqualToRuleClassifierProviderTest.kt
index b7298602e46..95bab873ae0 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanOrEqualToRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanOrEqualToRuleClassifierProviderTest.kt
@@ -199,7 +199,7 @@ class NumericInputIsGreaterThanOrEqualToRuleClassifierProviderTest {
fun testRealAnswer_missingInput_throwsException() {
val inputs = mapOf("y" to POSITIVE_REAL_VALUE_1_5)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsGreaterThanOrEqualToRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -216,7 +216,7 @@ class NumericInputIsGreaterThanOrEqualToRuleClassifierProviderTest {
fun testRealAnswer_stringInput_throwsException() {
val inputs = mapOf("x" to STRING_VALUE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsGreaterThanOrEqualToRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanRuleClassifierProviderTest.kt
index aa4f78a021d..d488eba6b5a 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanRuleClassifierProviderTest.kt
@@ -200,7 +200,7 @@ class NumericInputIsGreaterThanRuleClassifierProviderTest {
fun testRealAnswer_missingInput_throwsException() {
val inputs = mapOf("y" to POSITIVE_REAL_VALUE_1_5)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsGreaterThanRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -217,7 +217,7 @@ class NumericInputIsGreaterThanRuleClassifierProviderTest {
fun testRealAnswer_stringInput_throwsException() {
val inputs = mapOf("x" to STRING_VALUE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsGreaterThanRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsInclusivelyBetweenRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsInclusivelyBetweenRuleClassifierProviderTest.kt
index 504117c488e..948327a4ec9 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsInclusivelyBetweenRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsInclusivelyBetweenRuleClassifierProviderTest.kt
@@ -231,7 +231,7 @@ class NumericInputIsInclusivelyBetweenRuleClassifierProviderTest {
"c" to NEGATIVE_REAL_VALUE_3_5,
"b" to POSITIVE_REAL_VALUE_3_5
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsInclusivelyBetweenRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -250,7 +250,7 @@ class NumericInputIsInclusivelyBetweenRuleClassifierProviderTest {
"a" to NEGATIVE_REAL_VALUE_3_5,
"c" to POSITIVE_REAL_VALUE_1_5
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsInclusivelyBetweenRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -269,7 +269,7 @@ class NumericInputIsInclusivelyBetweenRuleClassifierProviderTest {
"a" to STRING_VALUE_1,
"b" to NEGATIVE_REAL_VALUE_3_5
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsInclusivelyBetweenRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -288,7 +288,7 @@ class NumericInputIsInclusivelyBetweenRuleClassifierProviderTest {
"a" to POSITIVE_REAL_VALUE_1_5,
"b" to STRING_VALUE_2
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsInclusivelyBetweenRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -307,7 +307,7 @@ class NumericInputIsInclusivelyBetweenRuleClassifierProviderTest {
"c" to POSITIVE_INT_VALUE_1,
"b" to POSITIVE_INT_VALUE_3
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsInclusivelyBetweenRuleClassifier.matches(
answer = POSITIVE_INT_VALUE_2,
inputs = inputs,
@@ -326,7 +326,7 @@ class NumericInputIsInclusivelyBetweenRuleClassifierProviderTest {
"a" to POSITIVE_INT_VALUE_1,
"c" to POSITIVE_INT_VALUE_3
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsInclusivelyBetweenRuleClassifier.matches(
answer = POSITIVE_INT_VALUE_2,
inputs = inputs,
@@ -345,7 +345,7 @@ class NumericInputIsInclusivelyBetweenRuleClassifierProviderTest {
"a" to STRING_VALUE_1,
"b" to POSITIVE_INT_VALUE_3
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsInclusivelyBetweenRuleClassifier.matches(
answer = POSITIVE_INT_VALUE_1,
inputs = inputs,
@@ -364,7 +364,7 @@ class NumericInputIsInclusivelyBetweenRuleClassifierProviderTest {
"a" to NEGATIVE_INT_VALUE_3,
"b" to STRING_VALUE_2
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsInclusivelyBetweenRuleClassifier.matches(
answer = POSITIVE_INT_VALUE_2,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanOrEqualToRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanOrEqualToRuleClassifierProviderTest.kt
index 1bcc688f8c3..90cba1612af 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanOrEqualToRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanOrEqualToRuleClassifierProviderTest.kt
@@ -199,7 +199,7 @@ class NumericInputIsLessThanOrEqualToRuleClassifierProviderTest {
fun testRealAnswer_missingInput_throwsException() {
val inputs = mapOf("y" to POSITIVE_REAL_VALUE_1_5)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsLessThanOrEqualToRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -216,7 +216,7 @@ class NumericInputIsLessThanOrEqualToRuleClassifierProviderTest {
fun testRealAnswer_stringInput_throwsException() {
val inputs = mapOf("x" to STRING_VALUE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsLessThanOrEqualToRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -233,7 +233,7 @@ class NumericInputIsLessThanOrEqualToRuleClassifierProviderTest {
fun testIntAnswer_missingInput_throwsException() {
val inputs = mapOf("y" to POSITIVE_INT_VALUE_1)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsLessThanOrEqualToRuleClassifier.matches(
answer = POSITIVE_INT_VALUE_1,
inputs = inputs,
@@ -250,7 +250,7 @@ class NumericInputIsLessThanOrEqualToRuleClassifierProviderTest {
fun testIntAnswer_stringInput_throwsException() {
val inputs = mapOf("x" to STRING_VALUE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsLessThanOrEqualToRuleClassifier.matches(
answer = POSITIVE_INT_VALUE_1,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanRuleClassifierProviderTest.kt
index 97d152ce3e4..e1819859a89 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanRuleClassifierProviderTest.kt
@@ -199,7 +199,7 @@ class NumericInputIsLessThanRuleClassifierProviderTest {
fun testRealAnswer_missingInput_throwsException() {
val inputs = mapOf("y" to POSITIVE_REAL_VALUE_1_5)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsLessThanRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -216,7 +216,7 @@ class NumericInputIsLessThanRuleClassifierProviderTest {
fun testRealAnswer_stringInput_throwsException() {
val inputs = mapOf("x" to STRING_VALUE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsLessThanRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -233,7 +233,7 @@ class NumericInputIsLessThanRuleClassifierProviderTest {
fun testIntAnswer_missingInput_throwsException() {
val inputs = mapOf("y" to POSITIVE_INT_VALUE_1)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsLessThanRuleClassifier.matches(
answer = POSITIVE_INT_VALUE_3,
inputs = inputs,
@@ -250,7 +250,7 @@ class NumericInputIsLessThanRuleClassifierProviderTest {
fun testIntAnswer_stringInput_throwsException() {
val inputs = mapOf("x" to STRING_VALUE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsLessThanRuleClassifier.matches(
answer = NEGATIVE_INT_VALUE_1,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsWithinToleranceRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsWithinToleranceRuleClassifierProviderTest.kt
index d5481c0ac89..710210dcc39 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsWithinToleranceRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsWithinToleranceRuleClassifierProviderTest.kt
@@ -393,7 +393,7 @@ class NumericInputIsWithinToleranceRuleClassifierProviderTest {
val inputs = mapOf(
"tol" to POSITIVE_REAL_VALUE_3_5
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsWithinToleranceRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -411,7 +411,7 @@ class NumericInputIsWithinToleranceRuleClassifierProviderTest {
val inputs = mapOf(
"x" to NEGATIVE_REAL_VALUE_3_5
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsWithinToleranceRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -430,7 +430,7 @@ class NumericInputIsWithinToleranceRuleClassifierProviderTest {
"c" to NEGATIVE_REAL_VALUE_3_5,
"tol" to POSITIVE_REAL_VALUE_3_5
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsWithinToleranceRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -449,7 +449,7 @@ class NumericInputIsWithinToleranceRuleClassifierProviderTest {
"x" to NEGATIVE_REAL_VALUE_3_5,
"c" to POSITIVE_REAL_VALUE_1_5
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsWithinToleranceRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -468,7 +468,7 @@ class NumericInputIsWithinToleranceRuleClassifierProviderTest {
"x" to STRING_VALUE_1,
"tol" to NEGATIVE_REAL_VALUE_3_5
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsWithinToleranceRuleClassifier.matches(
answer = POSITIVE_REAL_VALUE_1_5,
inputs = inputs,
@@ -486,7 +486,7 @@ class NumericInputIsWithinToleranceRuleClassifierProviderTest {
val inputs = mapOf(
"tol" to POSITIVE_INT_VALUE_3
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsWithinToleranceRuleClassifier.matches(
answer = POSITIVE_INT_VALUE_2,
inputs = inputs,
@@ -504,7 +504,7 @@ class NumericInputIsWithinToleranceRuleClassifierProviderTest {
val inputs = mapOf(
"x" to POSITIVE_INT_VALUE_1
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsWithinToleranceRuleClassifier.matches(
answer = POSITIVE_INT_VALUE_2,
inputs = inputs,
@@ -523,7 +523,7 @@ class NumericInputIsWithinToleranceRuleClassifierProviderTest {
"c" to POSITIVE_INT_VALUE_1,
"tol" to POSITIVE_INT_VALUE_3
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsWithinToleranceRuleClassifier.matches(
answer = POSITIVE_INT_VALUE_2,
inputs = inputs,
@@ -542,7 +542,7 @@ class NumericInputIsWithinToleranceRuleClassifierProviderTest {
"x" to POSITIVE_INT_VALUE_1,
"c" to POSITIVE_INT_VALUE_3
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsWithinToleranceRuleClassifier.matches(
answer = POSITIVE_INT_VALUE_2,
inputs = inputs,
@@ -561,7 +561,7 @@ class NumericInputIsWithinToleranceRuleClassifierProviderTest {
"x" to STRING_VALUE_1,
"tol" to POSITIVE_INT_VALUE_3
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputIsWithinToleranceRuleClassifier.matches(
answer = POSITIVE_INT_VALUE_1,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputEqualsRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputEqualsRuleClassifierProviderTest.kt
index 244cb981571..07945a20691 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputEqualsRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputEqualsRuleClassifierProviderTest.kt
@@ -100,7 +100,7 @@ class RatioInputEqualsRuleClassifierProviderTest {
fun testAnswer_nonNegativeInput_inputWithIncorrectType_throwsException() {
val inputs = mapOf("x" to NON_NEGATIVE_VALUE_TEST_0)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
equalsClassifierProvider.matches(
answer = RATIO_VALUE_TEST_1_2_3,
inputs = inputs,
@@ -119,7 +119,7 @@ class RatioInputEqualsRuleClassifierProviderTest {
fun testAnswer_testRatio_missingInputX_throwsException() {
val inputs = mapOf("y" to RATIO_VALUE_TEST_1_2_3)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
equalsClassifierProvider.matches(
answer = RATIO_VALUE_TEST_1_2_3,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasNumberOfTermsEqualToClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasNumberOfTermsEqualToClassifierProviderTest.kt
index 2cbb3b324a4..a8c1b27243c 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasNumberOfTermsEqualToClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasNumberOfTermsEqualToClassifierProviderTest.kt
@@ -82,7 +82,7 @@ class RatioInputHasNumberOfTermsEqualToClassifierProviderTest {
fun testAnswer_nonNegativeInput_inputWithIncorrectType_throwsException() {
val inputs = mapOf("y" to RATIO_VALUE_TEST_1_2_3)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasNumberOfTermsEqualToClassifierProvider.matches(
answer = RATIO_VALUE_TEST_1_2_3,
inputs = inputs,
@@ -101,7 +101,7 @@ class RatioInputHasNumberOfTermsEqualToClassifierProviderTest {
fun testAnswer_testRatio_missingInputY_throwsException() {
val inputs = mapOf("x" to NON_NEGATIVE_VALUE_TEST_4)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasNumberOfTermsEqualToClassifierProvider.matches(
answer = RATIO_VALUE_TEST_1_2_3,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasSpecificTermEqualToRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasSpecificTermEqualToRuleClassifierProviderTest.kt
index 81968647149..14101f1d79e 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasSpecificTermEqualToRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasSpecificTermEqualToRuleClassifierProviderTest.kt
@@ -198,7 +198,7 @@ class RatioInputHasSpecificTermEqualToRuleClassifierProviderTest {
fun testAnswer_threeTerms_indexInputWithIncorrectType_throwsException() {
val inputs = mapOf("x" to STRING_VALUE, "y" to NON_NEGATIVE_VALUE_TEST_3)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasSpecificTermEqualToClassifierProvider.matches(
answer = RATIO_VALUE_TEST_1_2_3,
inputs = inputs,
@@ -215,7 +215,7 @@ class RatioInputHasSpecificTermEqualToRuleClassifierProviderTest {
fun testAnswer_threeTerms_valueInputWithIncorrectType_throwsException() {
val inputs = mapOf("x" to NON_NEGATIVE_VALUE_TEST_4, "y" to STRING_VALUE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasSpecificTermEqualToClassifierProvider.matches(
answer = RATIO_VALUE_TEST_1_2_3,
inputs = inputs,
@@ -232,7 +232,7 @@ class RatioInputHasSpecificTermEqualToRuleClassifierProviderTest {
fun testAnswer_threeTerms_missingIndexInput_throwsException() {
val inputs = mapOf("y" to NON_NEGATIVE_VALUE_TEST_3)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasSpecificTermEqualToClassifierProvider.matches(
answer = RATIO_VALUE_TEST_1_2_3,
inputs = inputs,
@@ -249,7 +249,7 @@ class RatioInputHasSpecificTermEqualToRuleClassifierProviderTest {
fun testAnswer_threeTerms_missingValueInput_throwsException() {
val inputs = mapOf("x" to NON_NEGATIVE_VALUE_TEST_4)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasSpecificTermEqualToClassifierProvider.matches(
answer = RATIO_VALUE_TEST_1_2_3,
inputs = inputs,
@@ -264,7 +264,7 @@ class RatioInputHasSpecificTermEqualToRuleClassifierProviderTest {
@Test
fun testAnswer_threeTerms_missingBothInputs_throwsException() {
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hasSpecificTermEqualToClassifierProvider.matches(
answer = RATIO_VALUE_TEST_1_2_3,
inputs = mapOf(),
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputIsEquivalentRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputIsEquivalentRuleClassifierProviderTest.kt
index c93b44f8dc2..09fdeb952bb 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputIsEquivalentRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputIsEquivalentRuleClassifierProviderTest.kt
@@ -146,7 +146,7 @@ class RatioInputIsEquivalentRuleClassifierProviderTest {
fun testAnswer_nonNegativeInput_inputWithIncorrectType_throwsException() {
val inputs = mapOf("x" to NON_NEGATIVE_VALUE_TEST_0)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
isEquivalentClassifierProvider.matches(
answer = RATIO_VALUE_TEST_1_2_3,
inputs = inputs,
@@ -165,7 +165,7 @@ class RatioInputIsEquivalentRuleClassifierProviderTest {
fun testAnswer_testRatio_missingInputX_throwsException() {
val inputs = mapOf("y" to RATIO_VALUE_TEST_1_2_3)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
isEquivalentClassifierProvider.matches(
answer = RATIO_VALUE_TEST_1_2_3,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputContainsRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputContainsRuleClassifierProviderTest.kt
index 6f4fc9013b1..1c258aec94e 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputContainsRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputContainsRuleClassifierProviderTest.kt
@@ -268,7 +268,7 @@ class TextInputContainsRuleClassifierProviderTest {
fun testStringAnswer_missingInput_throwsException() {
val inputs = mapOf("y" to STRING_VALUE_TEST_ANSWER_INPUT_SET)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputContainsRuleClassifier.matches(
answer = STRING_VALUE_TEST_ANSWER,
inputs = inputs,
@@ -285,7 +285,7 @@ class TextInputContainsRuleClassifierProviderTest {
fun testStringAnswer_nonNegativeIntInput_throwsException() {
val inputs = mapOf("x" to NON_NEGATIVE_VALUE_TEST_1)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputContainsRuleClassifier.matches(
answer = STRING_VALUE_TEST_ANSWER,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputEqualsRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputEqualsRuleClassifierProviderTest.kt
index 3b658cca5df..6c5c53471c2 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputEqualsRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputEqualsRuleClassifierProviderTest.kt
@@ -210,7 +210,7 @@ class TextInputEqualsRuleClassifierProviderTest {
fun testStringAnswer_missingInput_throwsException() {
val inputs = mapOf("y" to STRING_VALUE_TEST_LOWERCASE_INPUT_SET)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputEqualsRuleClassifier.matches(
answer = STRING_VALUE_TEST_LOWERCASE,
inputs = inputs,
@@ -227,7 +227,7 @@ class TextInputEqualsRuleClassifierProviderTest {
fun testStringAnswer_nonNegativeIntInput_throwsException() {
val inputs = mapOf("x" to INT_VALUE_TEST_NON_NEGATIVE)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputEqualsRuleClassifier.matches(
answer = STRING_VALUE_TEST_UPPERCASE,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputFuzzyEqualsRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputFuzzyEqualsRuleClassifierProviderTest.kt
index 67c7874d515..3bb592d1499 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputFuzzyEqualsRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputFuzzyEqualsRuleClassifierProviderTest.kt
@@ -267,7 +267,7 @@ class TextInputFuzzyEqualsRuleClassifierProviderTest {
fun testStringAnswer_nonNegativeIntInput_verifyThrowsException() {
val inputs = mapOf("x" to NON_NEGATIVE_TEST_VALUE_1)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputFuzzyEqualsRuleClassifier.matches(
answer = STRING_VALUE_TEST_ANSWER_UPPERCASE,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputStartsWithRuleClassifierProviderTest.kt b/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputStartsWithRuleClassifierProviderTest.kt
index c88983ed5fc..60ea011ad34 100644
--- a/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputStartsWithRuleClassifierProviderTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputStartsWithRuleClassifierProviderTest.kt
@@ -292,7 +292,7 @@ class TextInputStartsWithRuleClassifierProviderTest {
fun testStringAns_missingInput_throwsException() {
val inputs = mapOf("y" to STRING_VALUE_TEST_STRING_LOWERCASE_INPUT_SET)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputStartsWithRuleClassifier.matches(
answer = STRING_VALUE_TEST_STRING_LOWERCASE,
inputs = inputs,
@@ -309,7 +309,7 @@ class TextInputStartsWithRuleClassifierProviderTest {
fun testStringAns_nonNegativeIntInput_throwsException() {
val inputs = mapOf("x" to NON_NEGATIVE_TEST_VALUE_1)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
inputStartsWithRuleClassifier.matches(
answer = STRING_VALUE_TEST_STRING_LOWERCASE,
inputs = inputs,
diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationActiveTimeControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationActiveTimeControllerTest.kt
index d012e057068..7f33cbe96ab 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationActiveTimeControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationActiveTimeControllerTest.kt
@@ -229,7 +229,7 @@ class ExplorationActiveTimeControllerTest {
fun testStopTimer_beforeStarting_isFailure() {
setUpTestApplicationComponent()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
stopExploration()
}
assertThat(exception)
diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt
index af38311d4b5..b75654bcdf7 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt
@@ -167,7 +167,7 @@ class ExplorationProgressControllerTest {
@Test
fun testGetCurrentState_noExploration_throwsException() {
// Can't retrieve the current state until the play session is started.
- assertThrows(UninitializedPropertyAccessException::class) {
+ assertThrows() {
explorationProgressController.getCurrentState()
}
}
diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/testing/FakeExplorationRetrieverTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/testing/FakeExplorationRetrieverTest.kt
index ae53ac8a2e0..6d8ed9c82fa 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/testing/FakeExplorationRetrieverTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/testing/FakeExplorationRetrieverTest.kt
@@ -58,7 +58,7 @@ class FakeExplorationRetrieverTest {
@Test
fun testLoadExploration_noProxySet_fakeExpId_throwsException() {
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runBlocking { fakeExplorationRetriever.loadExploration("fake_id") }
}
@@ -83,7 +83,7 @@ class FakeExplorationRetrieverTest {
expIdToLoad = TEST_EXPLORATION_ID_2, expIdToLoadInstead = "fake_id"
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runBlocking { fakeExplorationRetriever.loadExploration(TEST_EXPLORATION_ID_2) }
}
@@ -120,7 +120,7 @@ class FakeExplorationRetrieverTest {
expIdToLoad = "fake_id", expIdToLoadInstead = "other_fake_id"
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runBlocking { fakeExplorationRetriever.loadExploration("fake_id") }
}
@@ -133,7 +133,7 @@ class FakeExplorationRetrieverTest {
expIdToLoad = TEST_EXPLORATION_ID_2, expIdToLoadInstead = TEST_EXPLORATION_ID_5
)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runBlocking { fakeExplorationRetriever.loadExploration("fake_id") }
}
@@ -175,7 +175,7 @@ class FakeExplorationRetrieverTest {
)
fakeExplorationRetriever.clearExplorationProxy("fake_id")
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runBlocking { fakeExplorationRetriever.loadExploration("fake_id") }
}
diff --git a/domain/src/test/java/org/oppia/android/domain/hintsandsolution/HintHandlerProdImplTest.kt b/domain/src/test/java/org/oppia/android/domain/hintsandsolution/HintHandlerProdImplTest.kt
index faa4e98c9f2..c66cc01efe6 100644
--- a/domain/src/test/java/org/oppia/android/domain/hintsandsolution/HintHandlerProdImplTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/hintsandsolution/HintHandlerProdImplTest.kt
@@ -976,7 +976,7 @@ class HintHandlerProdImplTest {
val state = expWithHintsAndSolution.getInitialState()
hintHandler.startWatchingForHintsInNewStateSync(state)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hintHandler.viewHintSync(hintIndex = 0)
}
@@ -1157,7 +1157,7 @@ class HintHandlerProdImplTest {
hintHandler.startWatchingForHintsInNewStateSync(state)
triggerAndRevealFirstHint()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hintHandler.viewHintSync(hintIndex = 0)
}
@@ -1172,7 +1172,7 @@ class HintHandlerProdImplTest {
triggerAndRevealFirstHint()
triggerAndRevealSecondHint()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hintHandler.viewHintSync(hintIndex = 0)
}
@@ -1188,7 +1188,7 @@ class HintHandlerProdImplTest {
triggerAndRevealSecondHint()
triggerAndRevealSolution()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hintHandler.viewHintSync(hintIndex = 0)
}
@@ -1203,7 +1203,7 @@ class HintHandlerProdImplTest {
val state = expWithHintsAndSolution.getInitialState()
hintHandler.startWatchingForHintsInNewStateSync(state)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hintHandler.viewSolutionSync()
}
@@ -1217,7 +1217,7 @@ class HintHandlerProdImplTest {
hintHandler.startWatchingForHintsInNewStateSync(state)
triggerFirstHint()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hintHandler.viewSolutionSync()
}
@@ -1231,7 +1231,7 @@ class HintHandlerProdImplTest {
hintHandler.startWatchingForHintsInNewStateSync(state)
triggerAndRevealFirstHint()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hintHandler.viewSolutionSync()
}
@@ -1247,7 +1247,7 @@ class HintHandlerProdImplTest {
triggerAndRevealFirstHint()
triggerAndRevealSecondHint()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hintHandler.viewSolutionSync()
}
@@ -1344,7 +1344,7 @@ class HintHandlerProdImplTest {
triggerAndRevealSecondHint()
triggerAndRevealSolution()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
hintHandler.viewSolutionSync()
}
diff --git a/domain/src/test/java/org/oppia/android/domain/locale/LocaleControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/locale/LocaleControllerTest.kt
index 098fcde27de..30467ee6263 100644
--- a/domain/src/test/java/org/oppia/android/domain/locale/LocaleControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/locale/LocaleControllerTest.kt
@@ -775,7 +775,7 @@ class LocaleControllerTest {
@Test
fun testSetAsDefault_customLocaleImpl_throwsException() {
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
localeController.setAsDefault(mockDisplayLocale, Configuration())
}
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/LoggingIdentifierControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/LoggingIdentifierControllerTest.kt
index 303d6f466ac..b2c74d34ad0 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/LoggingIdentifierControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/LoggingIdentifierControllerTest.kt
@@ -52,7 +52,6 @@ import org.robolectric.annotation.LooperMode
import java.io.File
import java.io.FileOutputStream
import java.lang.IllegalStateException
-import java.util.Random
import javax.inject.Inject
import javax.inject.Singleton
@@ -77,17 +76,6 @@ class LoggingIdentifierControllerTest {
setUpTestApplicationComponent()
}
- @Test
- fun testCreateLearnerId_verifyCreatesCorrectRandomValue() {
- val randomLearnerId = loggingIdentifierController.createLearnerId()
-
- val testLearnerId = machineLocale.run {
- "%08x".formatForMachines(Random(TestLoggingIdentifierModule.applicationIdSeed).nextInt())
- }
- assertThat(randomLearnerId).isEqualTo(testLearnerId)
- assertThat(randomLearnerId.length).isEqualTo(8)
- }
-
@Test
fun testCreateLearnerId_twice_bothAreDifferent() {
val learnerId1 = loggingIdentifierController.createLearnerId()
@@ -104,7 +92,7 @@ class LoggingIdentifierControllerTest {
val installationId =
monitorFactory.waitForNextSuccessfulResult(loggingIdentifierController.getInstallationId())
- assertThat(installationId).isEqualTo("bc1f80ab5d8c")
+ assertThat(installationId).isEqualTo("1d079efe67ee")
assertThat(installationId.length).isEqualTo(12)
}
@@ -117,7 +105,7 @@ class LoggingIdentifierControllerTest {
monitorFactory.waitForNextSuccessfulResult(loggingIdentifierController.getInstallationId())
// The same value should return for the second instance of the controller.
- assertThat(installationId).isEqualTo("bc1f80ab5d8c")
+ assertThat(installationId).isEqualTo("1d079efe67ee")
}
@Test
@@ -135,7 +123,7 @@ class LoggingIdentifierControllerTest {
fun testFetchInstallationId_initialAppState_returnsNewInstallationIdValue() {
val installationId = fetchSuccessfulAsyncValue(loggingIdentifierController::fetchInstallationId)
- assertThat(installationId).isEqualTo("bc1f80ab5d8c")
+ assertThat(installationId).isEqualTo("1d079efe67ee")
assertThat(installationId?.length).isEqualTo(12)
}
@@ -147,7 +135,7 @@ class LoggingIdentifierControllerTest {
val installationId = fetchSuccessfulAsyncValue(loggingIdentifierController::fetchInstallationId)
// The same value should return for the second instance of the controller.
- assertThat(installationId).isEqualTo("bc1f80ab5d8c")
+ assertThat(installationId).isEqualTo("1d079efe67ee")
}
@Test
@@ -165,7 +153,7 @@ class LoggingIdentifierControllerTest {
val sessionIdProvider = loggingIdentifierController.getSessionId()
val sessionId = monitorFactory.waitForNextSuccessfulResult(sessionIdProvider)
- assertThat(sessionId).isEqualTo("1c46e9d5-5902-311a-bbba-a75973c3ccd2")
+ assertThat(sessionId).isEqualTo("4d0a66f3-82b6-3aa9-8f61-140bdd5f49d3")
}
@Test
@@ -176,7 +164,7 @@ class LoggingIdentifierControllerTest {
// The second call should return the same ID (since the ID doesn't automatically change).
val sessionId = monitorFactory.waitForNextSuccessfulResult(sessionIdProvider)
- assertThat(sessionId).isEqualTo("1c46e9d5-5902-311a-bbba-a75973c3ccd2")
+ assertThat(sessionId).isEqualTo("4d0a66f3-82b6-3aa9-8f61-140bdd5f49d3")
}
@Test
@@ -184,7 +172,7 @@ class LoggingIdentifierControllerTest {
val sessionIdFlow = loggingIdentifierController.getSessionIdFlow()
val sessionId = sessionIdFlow.waitForLatestValue()
- assertThat(sessionId).isEqualTo("1c46e9d5-5902-311a-bbba-a75973c3ccd2")
+ assertThat(sessionId).isEqualTo("4d0a66f3-82b6-3aa9-8f61-140bdd5f49d3")
}
@Test
@@ -195,7 +183,7 @@ class LoggingIdentifierControllerTest {
// The second call should return the same ID (since the ID doesn't automatically change).
val sessionId = sessionIdFlow.waitForLatestValue()
- assertThat(sessionId).isEqualTo("1c46e9d5-5902-311a-bbba-a75973c3ccd2")
+ assertThat(sessionId).isEqualTo("4d0a66f3-82b6-3aa9-8f61-140bdd5f49d3")
}
@Test
@@ -207,7 +195,7 @@ class LoggingIdentifierControllerTest {
// The session ID should be changed since updateSessionId() was called.
val sessionId = monitorFactory.waitForNextSuccessfulResult(sessionIdProvider)
- assertThat(sessionId).isEqualTo("8808493e-6576-3e26-9cbf-d1008051b253")
+ assertThat(sessionId).isEqualTo("59aea8d4-af4b-3249-b889-dfeba06d0495")
}
@Test
@@ -221,7 +209,7 @@ class LoggingIdentifierControllerTest {
// The existing provider should've been notified of the changed session ID.
val sessionId = monitor.ensureNextResultIsSuccess()
- assertThat(sessionId).isEqualTo("8808493e-6576-3e26-9cbf-d1008051b253")
+ assertThat(sessionId).isEqualTo("59aea8d4-af4b-3249-b889-dfeba06d0495")
}
@Test
@@ -236,7 +224,7 @@ class LoggingIdentifierControllerTest {
// The session ID should be changed yet again due to updateSessionId() being called twice.
val sessionId = monitorFactory.waitForNextSuccessfulResult(sessionIdProvider)
- assertThat(sessionId).isEqualTo("8aeabb00-af70-39e4-89b3-c47c9900ec4f")
+ assertThat(sessionId).isEqualTo("8cbd31f7-bb52-3129-9fac-78dcb5cb857a")
}
@Test
@@ -248,7 +236,7 @@ class LoggingIdentifierControllerTest {
// The session ID should be changed since updateSessionId() was called.
val sessionId = sessionIdFlow.waitForLatestValue()
- assertThat(sessionId).isEqualTo("8808493e-6576-3e26-9cbf-d1008051b253")
+ assertThat(sessionId).isEqualTo("59aea8d4-af4b-3249-b889-dfeba06d0495")
}
@Test
@@ -260,7 +248,7 @@ class LoggingIdentifierControllerTest {
testCoroutineDispatchers.runCurrent()
// The current value of the exist flow should be changed now since the session ID was updated.
- assertThat(sessionIdFlow.value).isEqualTo("8808493e-6576-3e26-9cbf-d1008051b253")
+ assertThat(sessionIdFlow.value).isEqualTo("59aea8d4-af4b-3249-b889-dfeba06d0495")
}
private fun writeFileCache(cacheName: String, value: T) {
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/CpuPerformanceSnapshotterTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/CpuPerformanceSnapshotterTest.kt
index 1641eb00223..adf3376b77d 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/CpuPerformanceSnapshotterTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/CpuPerformanceSnapshotterTest.kt
@@ -426,7 +426,7 @@ class CpuPerformanceSnapshotterTest {
@Test
fun testSnapshotter_initializeOnce_initializeAgain_throwsErrorOnReinitialization() {
cpuPerformanceSnapshotter.initialiseSnapshotter()
- val exception = assertThrows(IllegalArgumentException::class) {
+ val exception = assertThrows() {
cpuPerformanceSnapshotter.initialiseSnapshotter()
}
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt
index a036c2a304d..80368c18df9 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt
@@ -87,7 +87,7 @@ class LearnerAnalyticsLoggerTest {
private const val TEST_STORY_ID = "test_story_id"
private const val TEST_EXP_5_STATE_THREE_NAME = "NumericExpressionInput.IsEquivalentTo"
private const val TEST_EXP_5_STATE_FOUR_NAME = "AlgebraicExpressionInput.MatchesExactlyWith"
- private const val DEFAULT_INITIAL_SESSION_ID = "e6eacc69-e636-3c90-ba29-32bf3dd17161"
+ private const val DEFAULT_INITIAL_SESSION_ID = "ab4532d6-476c-3727-bc5a-ad84e5dae60f"
}
@Inject
diff --git a/domain/src/test/java/org/oppia/android/domain/profile/ProfileManagementControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/profile/ProfileManagementControllerTest.kt
index e95142771be..ae98ccd5ae1 100644
--- a/domain/src/test/java/org/oppia/android/domain/profile/ProfileManagementControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/profile/ProfileManagementControllerTest.kt
@@ -156,7 +156,7 @@ class ProfileManagementControllerTest {
val profileDatabase = readProfileDatabase()
val profile = profileDatabase.profilesMap[0]!!
- assertThat(profile.learnerId).isEqualTo("bb1ad573")
+ assertThat(profile.learnerId).isEqualTo("26504347")
}
@Test
@@ -255,7 +255,7 @@ class ProfileManagementControllerTest {
val profileProvider = profileManagementController.getProfile(profileId)
val profile = monitorFactory.waitForNextSuccessfulResult(profileProvider)
- assertThat(profile.learnerId).isEqualTo("68fb0e6f")
+ assertThat(profile.learnerId).isEqualTo("a625db55")
}
@Test
@@ -430,7 +430,7 @@ class ProfileManagementControllerTest {
val learnerId = fetchSuccessfulAsyncValue(profileManagementController::fetchCurrentLearnerId)
- assertThat(learnerId).isEqualTo("19b89cd8")
+ assertThat(learnerId).isEqualTo("02308fa0")
}
@Test
@@ -465,7 +465,7 @@ class ProfileManagementControllerTest {
profileManagementController.fetchLearnerId(PROFILE_ID_2)
}
- assertThat(learnerId).isEqualTo("68fb0e6f")
+ assertThat(learnerId).isEqualTo("a625db55")
}
@Test
diff --git a/domain/src/test/java/org/oppia/android/domain/question/QuestionAssessmentProgressControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/question/QuestionAssessmentProgressControllerTest.kt
index f5aad0432a1..0c686230064 100644
--- a/domain/src/test/java/org/oppia/android/domain/question/QuestionAssessmentProgressControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/question/QuestionAssessmentProgressControllerTest.kt
@@ -134,7 +134,7 @@ class QuestionAssessmentProgressControllerTest {
setUpTestApplicationWithSeed(questionSeed = 0)
// Can't retrieve the current question until the training session is started.
- assertThrows(UninitializedPropertyAccessException::class) {
+ assertThrows() {
questionAssessmentProgressController.getCurrentQuestion()
}
}
diff --git a/model/src/main/proto/BUILD.bazel b/model/src/main/proto/BUILD.bazel
index a168e981191..e512512b10f 100644
--- a/model/src/main/proto/BUILD.bazel
+++ b/model/src/main/proto/BUILD.bazel
@@ -273,7 +273,10 @@ java_lite_proto_library(
oppia_proto_library(
name = "feedback_reporting_proto",
srcs = ["feedback_reporting.proto"],
- deps = [":profile_proto"],
+ deps = [
+ ":languages_proto",
+ ":profile_proto",
+ ],
)
java_lite_proto_library(
diff --git a/scripts/assets/file_content_validation_checks.textproto b/scripts/assets/file_content_validation_checks.textproto
index a53a46416f4..67116fbd5a2 100644
--- a/scripts/assets/file_content_validation_checks.textproto
+++ b/scripts/assets/file_content_validation_checks.textproto
@@ -511,3 +511,90 @@ file_content_checks {
failure_message: "Badly formatted KDoc. Single-line KDocs should end with punctuation."
exempted_file_name: "scripts/src/javatests/org/oppia/android/scripts/regex/RegexPatternValidationCheckTest.kt"
}
+file_content_checks {
+ file_path_regex: ".+?Test\\.kt"
+ prohibited_content_regex: "androidx.test.rule.ActivityTestRule"
+ failure_message: "ActivityTestRule is deprecated since it operates test activities in sometimes unsafe situations. Use ActivityScenario, instead."
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt"
+ exempted_file_name: "scripts/src/javatests/org/oppia/android/scripts/regex/RegexPatternValidationCheckTest.kt"
+}
+file_content_checks {
+ file_path_regex: ".+?Test\\.kt"
+ prohibited_content_regex: "androidx.test.ext.junit.rules.ActivityScenarioRule"
+ failure_message: "ActivityScenarioRule can result in order dependence when static state leaks across tests (such as static module variables), and can make staging much more difficult for platform parameters. Use ActivityScenario directly, instead."
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt"
+ exempted_file_name: "app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt"
+ exempted_file_name: "app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt"
+ exempted_file_name: "app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt"
+ exempted_file_name: "app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt"
+ exempted_file_name: "app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt"
+ exempted_file_name: "app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt"
+ exempted_file_name: "app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt"
+ exempted_file_name: "app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt"
+ exempted_file_name: "app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt"
+ exempted_file_name: "app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt"
+ exempted_file_name: "app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt"
+ exempted_file_name: "domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/ApplicationLifecycleObserverTest.kt"
+ exempted_file_name: "scripts/src/javatests/org/oppia/android/scripts/regex/RegexPatternValidationCheckTest.kt"
+ exempted_file_name: "testing/src/test/java/org/oppia/android/testing/espresso/TextInputActionTest.kt"
+}
diff --git a/scripts/assets/todo_open_exemptions.textproto b/scripts/assets/todo_open_exemptions.textproto
index cb81317adae..8b201928380 100644
--- a/scripts/assets/todo_open_exemptions.textproto
+++ b/scripts/assets/todo_open_exemptions.textproto
@@ -1,37 +1,37 @@
todo_open_exemption {
exempted_file_path: "scripts/src/javatests/org/oppia/android/scripts/todo/TodoOpenCheckTest.kt"
- line_number: 67
- line_number: 68
+ line_number: 65
+ line_number: 66
+ line_number: 72
line_number: 74
- line_number: 76
+ line_number: 96
+ line_number: 97
line_number: 98
line_number: 99
line_number: 100
- line_number: 101
- line_number: 102
+ line_number: 132
+ line_number: 133
line_number: 136
- line_number: 137
- line_number: 140
- line_number: 173
+ line_number: 167
+ line_number: 168
+ line_number: 169
line_number: 174
- line_number: 175
- line_number: 180
- line_number: 182
- line_number: 221
+ line_number: 176
+ line_number: 213
+ line_number: 214
+ line_number: 215
+ line_number: 220
line_number: 222
- line_number: 223
line_number: 228
- line_number: 230
- line_number: 236
- line_number: 275
- line_number: 279
- line_number: 317
- line_number: 318
- line_number: 322
- line_number: 371
- line_number: 372
- line_number: 373
- line_number: 377
+ line_number: 265
+ line_number: 269
+ line_number: 307
+ line_number: 308
+ line_number: 312
+ line_number: 359
+ line_number: 360
+ line_number: 361
+ line_number: 365
}
todo_open_exemption {
exempted_file_path: "scripts/src/javatests/org/oppia/android/scripts/todo/TodoCollectorTest.kt"
diff --git a/scripts/src/java/org/oppia/android/scripts/ci/ComputeAffectedTests.kt b/scripts/src/java/org/oppia/android/scripts/ci/ComputeAffectedTests.kt
index f7cc482c72a..5437874f191 100644
--- a/scripts/src/java/org/oppia/android/scripts/ci/ComputeAffectedTests.kt
+++ b/scripts/src/java/org/oppia/android/scripts/ci/ComputeAffectedTests.kt
@@ -1,6 +1,8 @@
package org.oppia.android.scripts.ci
import org.oppia.android.scripts.common.BazelClient
+import org.oppia.android.scripts.common.CommandExecutor
+import org.oppia.android.scripts.common.CommandExecutorImpl
import org.oppia.android.scripts.common.GitClient
import org.oppia.android.scripts.common.ProtoStringEncoder.Companion.toCompressedBase64
import org.oppia.android.scripts.proto.AffectedTestsBucket
@@ -73,9 +75,10 @@ private fun String.toBooleanStrictOrNull(): Boolean? {
/** Utility used to compute affected test targets. */
class ComputeAffectedTests(
- val maxTestCountPerLargeShard: Int = MAX_TEST_COUNT_PER_LARGE_SHARD,
- val maxTestCountPerMediumShard: Int = MAX_TEST_COUNT_PER_MEDIUM_SHARD,
- val maxTestCountPerSmallShard: Int = MAX_TEST_COUNT_PER_SMALL_SHARD
+ private val maxTestCountPerLargeShard: Int = MAX_TEST_COUNT_PER_LARGE_SHARD,
+ private val maxTestCountPerMediumShard: Int = MAX_TEST_COUNT_PER_MEDIUM_SHARD,
+ private val maxTestCountPerSmallShard: Int = MAX_TEST_COUNT_PER_SMALL_SHARD,
+ private val commandExecutor: CommandExecutor = CommandExecutorImpl()
) {
private companion object {
private const val GENERIC_TEST_BUCKET_NAME = "generic"
@@ -106,7 +109,7 @@ class ComputeAffectedTests(
println("Running from directory root: $rootDirectory")
val gitClient = GitClient(rootDirectory, baseDevelopBranchReference)
- val bazelClient = BazelClient(rootDirectory)
+ val bazelClient = BazelClient(rootDirectory, commandExecutor)
println("Current branch: ${gitClient.currentBranch}")
println("Most recent common commit: ${gitClient.branchMergeBase}")
diff --git a/scripts/src/java/org/oppia/android/scripts/testing/TestBazelWorkspace.kt b/scripts/src/java/org/oppia/android/scripts/testing/TestBazelWorkspace.kt
index 68487b6062b..7bec4b85889 100644
--- a/scripts/src/java/org/oppia/android/scripts/testing/TestBazelWorkspace.kt
+++ b/scripts/src/java/org/oppia/android/scripts/testing/TestBazelWorkspace.kt
@@ -4,6 +4,9 @@ import com.google.common.truth.Truth.assertThat
import org.junit.rules.TemporaryFolder
import java.io.File
+/** The version of Bazel to use in tests that set up Bazel workspaces. */
+const val BAZEL_VERSION = "4.0.0"
+
/**
* Test utility for generating various test & library targets in the specified [TemporaryFolder].
* This is meant to be used to arrange the local test filesystem for use with a real Bazel
@@ -23,6 +26,13 @@ class TestBazelWorkspace(private val temporaryRootFolder: TemporaryFolder) {
*/
val rootBuildFile: File by lazy { temporaryRootFolder.newFile("BUILD.bazel") }
+ private val bazelVersionFile by lazy {
+ temporaryRootFolder.newFile(".bazelversion").also { it.writeText(BAZEL_VERSION) }
+ }
+ private val bazelRcFile by lazy {
+ temporaryRootFolder.newFile(".bazelrc").also { it.writeText("--noenable_bzlmod") }
+ }
+
private val testFileMap = mutableMapOf()
private val libraryFileMap = mutableMapOf()
private val testDependencyNameMap = mutableMapOf()
@@ -33,9 +43,11 @@ class TestBazelWorkspace(private val temporaryRootFolder: TemporaryFolder) {
/** Initializes the local Bazel workspace by introducing a new, empty WORKSPACE file. */
fun initEmptyWorkspace() {
- // Sanity check, but in reality this is just initializing workspaceFile to ensure that it
+ // Sanity checks, but in reality this is just initializing workspaceFile to ensure that it
// exists.
assertThat(workspaceFile.exists()).isTrue()
+ assertThat(bazelVersionFile.exists()).isTrue()
+ assertThat(bazelRcFile.exists()).isTrue()
}
/**
@@ -61,6 +73,8 @@ class TestBazelWorkspace(private val temporaryRootFolder: TemporaryFolder) {
withExtraDependency: String? = null,
subpackage: String? = null
): Iterable {
+ initEmptyWorkspace() // Ensure the workspace is at least initialized.
+
check(testName !in testFileMap) { "Test '$testName' already set up" }
val prereqFiles = ensureWorkspaceIsConfiguredForKotlin()
val (dependencyTargetName, libPrereqFiles) = if (withGeneratedDependency) {
@@ -109,6 +123,9 @@ class TestBazelWorkspace(private val temporaryRootFolder: TemporaryFolder) {
withExtraDependency: String? = null,
subpackage: String? = null
): Iterable {
+ // Note that the workspace doesn't need to be explicitly initialized here since the call below
+ // to addTestToBuildFile() will initialize it.
+
check(testName !in testFileMap) { "Test '$testName' already exists" }
val testFile = if (subpackage != null) {
if (!File(temporaryRootFolder.root, subpackage.replace(".", "/")).exists()) {
@@ -137,6 +154,8 @@ class TestBazelWorkspace(private val temporaryRootFolder: TemporaryFolder) {
* iterable of files that were changed as part of generating this library
*/
fun createLibrary(dependencyName: String): Pair> {
+ initEmptyWorkspace() // Ensure the workspace is at least initialized.
+
val libTargetName = "${dependencyName}_lib"
check("//:$libTargetName" !in libraryFileMap) { "Library '$dependencyName' already exists" }
val prereqFiles = ensureWorkspaceIsConfiguredForKotlin()
@@ -187,6 +206,7 @@ class TestBazelWorkspace(private val temporaryRootFolder: TemporaryFolder) {
/** Appends rules_jvm_external configuration to the WORKSPACE file if not done already. */
fun setUpWorkspaceForRulesJvmExternal(depsList: List) {
if (!isConfiguredForRulesJvmExternal) {
+ initEmptyWorkspace()
workspaceFile.appendText("artifactsList = [")
for (dep in depsList) {
workspaceFile.appendText("\"$dep\",\n")
@@ -198,23 +218,23 @@ class TestBazelWorkspace(private val temporaryRootFolder: TemporaryFolder) {
RULES_JVM_EXTERNAL_TAG = "4.0"
RULES_JVM_EXTERNAL_SHA = "31701ad93dbfe544d597dbe62c9a1fdd76d81d8a9150c2bf1ecf928ecdf97169"
-
+
http_archive(
name = "rules_jvm_external",
strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG,
sha256 = RULES_JVM_EXTERNAL_SHA,
url = "https://github.com/bazelbuild/rules_jvm_external/archive/%s.zip" % RULES_JVM_EXTERNAL_TAG,
)
-
+
load("@rules_jvm_external//:defs.bzl", "maven_install")
-
+
maven_install(
artifacts = artifactsList,
repositories = [
"https://maven.google.com",
"https://repo1.maven.org/maven2",
],
- )
+ )
""".trimIndent() + "\n"
)
diff --git a/scripts/src/java/org/oppia/android/scripts/testing/TestGitRepository.kt b/scripts/src/java/org/oppia/android/scripts/testing/TestGitRepository.kt
index 61d5c055992..2de94e3fc1f 100644
--- a/scripts/src/java/org/oppia/android/scripts/testing/TestGitRepository.kt
+++ b/scripts/src/java/org/oppia/android/scripts/testing/TestGitRepository.kt
@@ -19,20 +19,29 @@ class TestGitRepository(
private val commandExecutor: CommandExecutor
) {
private val rootDirectory by lazy { temporaryRootFolder.root }
+ private val gitDirectory: File get() = File(rootDirectory, ".git")
+ private val userEmail: String?
+ get() = maybeExecuteGitCommand("config", "--local", "--get", "user.email")?.joinOutput()?.trim()
+ private val userName: String?
+ get() = maybeExecuteGitCommand("config", "--local", "--get", "user.name")?.joinOutput()?.trim()
/** Creates the repository using git init. */
fun init() {
+ verifyNotInGitRepository()
executeSuccessfulGitCommand("init")
}
/** Sets the user's [email] and [name] using git config. */
fun setUser(email: String, name: String) {
- executeSuccessfulGitCommand("config", "user.email", email)
- executeSuccessfulGitCommand("config", "user.name", name)
+ verifyInGitRepository()
+ verifyUserIsNotSet()
+ executeSuccessfulGitCommand("config", "--local", "user.email", email)
+ executeSuccessfulGitCommand("config", "--local", "user.name", name)
}
/** Creates a new branch with the specified name, and switches to it. */
fun checkoutNewBranch(branchName: String) {
+ verifyInGitRepository()
executeSuccessfulGitCommand("checkout", "-b", branchName)
}
@@ -42,6 +51,7 @@ class TestGitRepository(
* This does not perform a commit. See [commit] for actually committing the change.
*/
fun stageFileForCommit(file: File) {
+ verifyInGitRepository()
executeSuccessfulGitCommand("add", file.toRelativeString(rootDirectory))
}
@@ -57,6 +67,7 @@ class TestGitRepository(
* This does not perform a commit. See [commit] for actually committing the change.
*/
fun removeFileForCommit(file: File) {
+ verifyInGitRepository()
executeSuccessfulGitCommand("rm", file.toRelativeString(rootDirectory))
}
@@ -67,6 +78,7 @@ class TestGitRepository(
* This does not perform a commit. See [commit] for actually committing the change.
*/
fun moveFileForCommit(oldFile: File, newFile: File) {
+ verifyInGitRepository()
executeSuccessfulGitCommand(
"mv",
oldFile.toRelativeString(rootDirectory),
@@ -81,25 +93,59 @@ class TestGitRepository(
* @param allowEmpty whether to allow empty commits (i.e. committing with no staged files)
*/
fun commit(message: String, allowEmpty: Boolean = false) {
+ verifyInGitRepository()
+ verifyUserIsSet()
val arguments = mutableListOf("commit", "-m", message)
if (allowEmpty) arguments += "--allow-empty"
executeSuccessfulGitCommand(*arguments.toTypedArray())
}
/** Returns the result of git status. */
- fun status(): String {
- return commandExecutor.executeCommand(rootDirectory, "git", "status").output.joinOutputString()
+ fun status(checkForGitRepository: Boolean = true): String {
+ if (checkForGitRepository) verifyInGitRepository()
+ return executeGitCommand("status").joinOutput()
}
- private fun executeSuccessfulGitCommand(vararg arguments: String) {
- verifySuccessfulCommand(commandExecutor.executeCommand(rootDirectory, "git", *arguments))
- }
+ private fun executeGitCommand(vararg arguments: String): CommandResult =
+ commandExecutor.executeCommand(rootDirectory, "git", *arguments)
+
+ private fun maybeExecuteGitCommand(vararg arguments: String): CommandResult? =
+ executeGitCommand(*arguments).takeIf { it.exitCode == 0 }
+
+ private fun executeSuccessfulGitCommand(vararg arguments: String) =
+ verifySuccessfulCommand(executeGitCommand(*arguments))
private fun verifySuccessfulCommand(result: CommandResult) {
- assertWithMessage("Output: ${result.output.joinOutputString()}")
+ assertWithMessage("Output: ${result.joinOutput()}")
.that(result.exitCode)
.isEqualTo(0)
}
- private fun List.joinOutputString(): String = joinToString(separator = "\n") { " $it" }
+ private fun verifyInGitRepository() {
+ failUnless(gitDirectory.exists()) { "Not operating in an initialized Git repository." }
+ }
+
+ private fun verifyNotInGitRepository() {
+ failUnless(!gitDirectory.exists()) { "Git repository is already initialized." }
+ }
+
+ private fun verifyUserIsNotSet() {
+ verifyIsNotSet(name = "User email", userEmail)
+ verifyIsNotSet(name = "User name", userName)
+ }
+
+ private fun verifyUserIsSet() {
+ failUnless(userEmail != null) { "User email has not yet been set." }
+ failUnless(userName != null) { "User name has not yet been set." }
+ }
+
+ private fun verifyIsNotSet(name: String, value: String?) {
+ failUnless(value == null) { "$name has already been set: $value." }
+ }
+
+ private fun failUnless(condition: Boolean, lazyMessage: () -> String) {
+ if (!condition) throw AssertionError(lazyMessage())
+ }
+
+ private fun CommandResult.joinOutput(): String = output.joinToString(separator = "\n") { " $it" }
}
diff --git a/scripts/src/javatests/org/oppia/android/scripts/build/FilterPerLanguageResourcesTest.kt b/scripts/src/javatests/org/oppia/android/scripts/build/FilterPerLanguageResourcesTest.kt
index 8c217740d10..511b07f37e9 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/build/FilterPerLanguageResourcesTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/build/FilterPerLanguageResourcesTest.kt
@@ -86,21 +86,21 @@ class FilterPerLanguageResourcesTest {
@Test
fun testUtility_noArgs_failsWithUsageString() {
- val error = assertThrows(IllegalArgumentException::class) { runScript() }
+ val error = assertThrows() { runScript() }
assertThat(error).hasMessageThat().contains(USAGE_STRING)
}
@Test
fun testUtility_oneArg_failsWithUsageString() {
- val error = assertThrows(IllegalArgumentException::class) { runScript("first_file.zip") }
+ val error = assertThrows() { runScript("first_file.zip") }
assertThat(error).hasMessageThat().contains(USAGE_STRING)
}
@Test
fun testUtility_threeArgs_failsWithUsageString() {
- val error = assertThrows(IllegalArgumentException::class) {
+ val error = assertThrows() {
runScript(
tempFolder.getFilePath("input.zip"), tempFolder.getFilePath("output.zip"), "extra_param"
)
@@ -114,7 +114,7 @@ class FilterPerLanguageResourcesTest {
// Create an empty zip file.
ZipOutputStream(File(tempFolder.root, "input.zip").outputStream()).close()
- val error = assertThrows(IllegalStateException::class) {
+ val error = assertThrows() {
runScript(tempFolder.getFilePath("input.zip"), tempFolder.getFilePath("output.zip"))
}
@@ -129,7 +129,7 @@ class FilterPerLanguageResourcesTest {
ResourceTable.getDefaultInstance().writeTo(outputStream)
}
- val error = assertThrows(IllegalStateException::class) {
+ val error = assertThrows() {
runScript(tempFolder.getFilePath("input.zip"), tempFolder.getFilePath("output.zip"))
}
@@ -147,7 +147,7 @@ class FilterPerLanguageResourcesTest {
supportedLanguages = SUPPORTED_LANGUAGES_EN
)
- val error = assertThrows(IllegalStateException::class) {
+ val error = assertThrows() {
runScript(tempFolder.getFilePath("input.zip"), tempFolder.getFilePath("output.zip"))
}
diff --git a/scripts/src/javatests/org/oppia/android/scripts/build/TransformAndroidManifestTest.kt b/scripts/src/javatests/org/oppia/android/scripts/build/TransformAndroidManifestTest.kt
index 424d22b661f..5d197b04615 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/build/TransformAndroidManifestTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/build/TransformAndroidManifestTest.kt
@@ -70,7 +70,7 @@ class TransformAndroidManifestTest {
fun testUtility_noArgs_failsWithUsageString() {
initializeEmptyGitRepository()
- val exception = assertThrows(IllegalStateException::class) { runScript() }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(USAGE_STRING)
}
@@ -79,7 +79,7 @@ class TransformAndroidManifestTest {
fun testUtility_oneArg_failsWithUsageString() {
initializeEmptyGitRepository()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(tempFolder.root.absolutePath)
}
@@ -91,7 +91,7 @@ class TransformAndroidManifestTest {
initializeEmptyGitRepository()
val manifestFile = tempFolder.newFile(TEST_MANIFEST_FILE_NAME)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(tempFolder.root.absolutePath, manifestFile.absolutePath)
}
@@ -103,7 +103,7 @@ class TransformAndroidManifestTest {
initializeEmptyGitRepository()
val manifestFile = tempFolder.newFile(TEST_MANIFEST_FILE_NAME)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(
tempFolder.root.absolutePath,
manifestFile.absolutePath,
@@ -119,7 +119,7 @@ class TransformAndroidManifestTest {
initializeEmptyGitRepository()
val manifestFile = tempFolder.newFile(TEST_MANIFEST_FILE_NAME)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(
tempFolder.root.absolutePath,
manifestFile.absolutePath,
@@ -136,7 +136,7 @@ class TransformAndroidManifestTest {
initializeEmptyGitRepository()
val manifestFile = tempFolder.newFile(TEST_MANIFEST_FILE_NAME)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(
tempFolder.root.absolutePath,
manifestFile.absolutePath,
@@ -154,7 +154,7 @@ class TransformAndroidManifestTest {
initializeEmptyGitRepository()
val manifestFile = tempFolder.newFile(TEST_MANIFEST_FILE_NAME)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(
tempFolder.root.absolutePath,
manifestFile.absolutePath,
@@ -173,7 +173,7 @@ class TransformAndroidManifestTest {
initializeEmptyGitRepository()
val manifestFile = tempFolder.newFile(TEST_MANIFEST_FILE_NAME)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(
tempFolder.root.absolutePath,
manifestFile.absolutePath,
@@ -193,7 +193,7 @@ class TransformAndroidManifestTest {
initializeEmptyGitRepository()
val manifestFile = tempFolder.newFile(TEST_MANIFEST_FILE_NAME)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(
tempFolder.root.absolutePath,
manifestFile.absolutePath,
@@ -214,7 +214,7 @@ class TransformAndroidManifestTest {
initializeEmptyGitRepository()
val manifestFile = tempFolder.newFile(TEST_MANIFEST_FILE_NAME)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(
tempFolder.root.absolutePath,
manifestFile.absolutePath,
@@ -236,7 +236,7 @@ class TransformAndroidManifestTest {
initializeEmptyGitRepository()
val manifestFile = tempFolder.newFile(TEST_MANIFEST_FILE_NAME)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(
tempFolder.root.absolutePath,
manifestFile.absolutePath,
@@ -258,7 +258,7 @@ class TransformAndroidManifestTest {
initializeEmptyGitRepository()
val manifestFile = tempFolder.newFile(TEST_MANIFEST_FILE_NAME)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(
tempFolder.root.absolutePath,
manifestFile.absolutePath,
@@ -280,7 +280,7 @@ class TransformAndroidManifestTest {
initializeEmptyGitRepository()
val manifestFile = tempFolder.newFile(TEST_MANIFEST_FILE_NAME)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(
"nowhere",
manifestFile.absolutePath,
@@ -301,7 +301,7 @@ class TransformAndroidManifestTest {
fun testUtility_allArgs_manifestDoesNotExist_failsWithError() {
initializeEmptyGitRepository()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(
tempFolder.root.absolutePath,
"fake_manifest_file",
@@ -325,7 +325,7 @@ class TransformAndroidManifestTest {
writeText(TEST_MANIFEST_CONTENT_WITHOUT_VERSIONS_AND_APPLICATION)
}
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
runScript(
tempFolder.root.absolutePath,
manifestFile.absolutePath,
diff --git a/scripts/src/javatests/org/oppia/android/scripts/ci/BUILD.bazel b/scripts/src/javatests/org/oppia/android/scripts/ci/BUILD.bazel
index cb9eafb6d21..fcdb77f2f1d 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/ci/BUILD.bazel
+++ b/scripts/src/javatests/org/oppia/android/scripts/ci/BUILD.bazel
@@ -8,7 +8,7 @@ kt_jvm_test(
name = "ComputeAffectedTestsTest",
size = "large",
srcs = ["ComputeAffectedTestsTest.kt"],
- shard_count = 4,
+ shard_count = 24,
deps = [
"//scripts/src/java/org/oppia/android/scripts/ci:compute_affected_tests_lib",
"//scripts/src/java/org/oppia/android/scripts/common:proto_string_encoder",
diff --git a/scripts/src/javatests/org/oppia/android/scripts/ci/ComputeAffectedTestsTest.kt b/scripts/src/javatests/org/oppia/android/scripts/ci/ComputeAffectedTestsTest.kt
index 654e42425c8..2bf59212f66 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/ci/ComputeAffectedTestsTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/ci/ComputeAffectedTestsTest.kt
@@ -16,6 +16,7 @@ import java.io.ByteArrayOutputStream
import java.io.File
import java.io.OutputStream
import java.io.PrintStream
+import java.util.concurrent.TimeUnit
/**
* Tests for the compute_affected_tests utility.
@@ -28,13 +29,12 @@ import java.io.PrintStream
// Function name: test names are conventionally named with underscores.
@Suppress("SameParameterValue", "FunctionName")
class ComputeAffectedTestsTest {
- @Rule
- @JvmField
- var tempFolder = TemporaryFolder()
+ @field:[Rule JvmField] val tempFolder = TemporaryFolder()
+
+ private val commandExecutor by lazy { initiazeCommandExecutorWithLongProcessWaitTime() }
private lateinit var testBazelWorkspace: TestBazelWorkspace
private lateinit var testGitRepository: TestGitRepository
-
private lateinit var pendingOutputStream: ByteArrayOutputStream
private lateinit var originalStandardOutputStream: OutputStream
@@ -57,12 +57,12 @@ class ComputeAffectedTestsTest {
// Print the status of the git repository to help with debugging in the cases of test failures
// and to help manually verify the expect git state at the end of each test.
println("git status (at end of test):")
- println(testGitRepository.status())
+ println(testGitRepository.status(checkForGitRepository = false))
}
@Test
fun testUtility_noArguments_printsUsageStringAndExits() {
- val exception = assertThrows(SecurityException::class) { main(arrayOf()) }
+ val exception = assertThrows() { main(arrayOf()) }
// Bazel catches the System.exit() call and throws a SecurityException. This is a bit hacky way
// to verify that System.exit() is called, but it's helpful.
@@ -72,7 +72,7 @@ class ComputeAffectedTestsTest {
@Test
fun testUtility_oneArgument_printsUsageStringAndExits() {
- val exception = assertThrows(SecurityException::class) { main(arrayOf("first")) }
+ val exception = assertThrows() { main(arrayOf("first")) }
// Bazel catches the System.exit() call and throws a SecurityException. This is a bit hacky way
// to verify that System.exit() is called, but it's helpful.
@@ -82,7 +82,7 @@ class ComputeAffectedTestsTest {
@Test
fun testUtility_twoArguments_printsUsageStringAndExits() {
- val exception = assertThrows(SecurityException::class) { main(arrayOf("first", "second")) }
+ val exception = assertThrows() { main(arrayOf("first", "second")) }
// Bazel catches the System.exit() call and throws a SecurityException. This is a bit hacky way
// to verify that System.exit() is called, but it's helpful.
@@ -92,7 +92,7 @@ class ComputeAffectedTestsTest {
@Test
fun testUtility_threeArguments_printsUsageStringAndExits() {
- val exception = assertThrows(SecurityException::class) {
+ val exception = assertThrows() {
main(arrayOf("first", "second", "third"))
}
@@ -104,7 +104,7 @@ class ComputeAffectedTestsTest {
@Test
fun testUtility_directoryRootDoesNotExist_throwsException() {
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
main(arrayOf("fake", "alsofake", "andstillfake", "compute_all_tests=false"))
}
@@ -113,7 +113,7 @@ class ComputeAffectedTestsTest {
@Test
fun testUtility_invalid_lastArgument_throwsException() {
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
main(arrayOf("fake", "alsofake", "andstillfake", "compute_all_testss=false"))
}
@@ -123,7 +123,7 @@ class ComputeAffectedTestsTest {
@Test
fun testUtility_invalid_lastArgumentValue_throwsException() {
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
main(arrayOf("fake", "alsofake", "andstillfake", "compute_all_tests=blah"))
}
@@ -133,7 +133,7 @@ class ComputeAffectedTestsTest {
@Test
fun testUtility_emptyDirectory_throwsException() {
- val exception = assertThrows(IllegalStateException::class) { runScript() }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains("run from the workspace's root directory")
}
@@ -724,7 +724,8 @@ class ComputeAffectedTestsTest {
ComputeAffectedTests(
maxTestCountPerLargeShard = maxTestCountPerLargeShard,
maxTestCountPerMediumShard = maxTestCountPerMediumShard,
- maxTestCountPerSmallShard = maxTestCountPerSmallShard
+ maxTestCountPerSmallShard = maxTestCountPerSmallShard,
+ commandExecutor = commandExecutor
).compute(
pathToRoot = tempFolder.root.absolutePath,
pathToOutputFile = outputLog.absolutePath,
@@ -862,4 +863,8 @@ class ComputeAffectedTestsTest {
testGitRepository.stageFileForCommit(libFile)
testGitRepository.commit(message = "Modified library $name")
}
+
+ private fun initiazeCommandExecutorWithLongProcessWaitTime(): CommandExecutorImpl {
+ return CommandExecutorImpl(processTimeout = 5, processTimeoutUnit = TimeUnit.MINUTES)
+ }
}
diff --git a/scripts/src/javatests/org/oppia/android/scripts/ci/RetrieveAffectedTestsTest.kt b/scripts/src/javatests/org/oppia/android/scripts/ci/RetrieveAffectedTestsTest.kt
index d43a7055f51..e449b856a6f 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/ci/RetrieveAffectedTestsTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/ci/RetrieveAffectedTestsTest.kt
@@ -45,7 +45,7 @@ class RetrieveAffectedTestsTest {
@Test
fun testUtility_noArguments_printsUsageStringAndExits() {
- val exception = assertThrows(SecurityException::class) { runScript() }
+ val exception = assertThrows() { runScript() }
// Bazel catches the System.exit() call and throws a SecurityException. This is a bit hacky way
// to verify that System.exit() is called, but it's helpful.
@@ -55,7 +55,7 @@ class RetrieveAffectedTestsTest {
@Test
fun testUtility_oneArgument_printsUsageStringAndExits() {
- val exception = assertThrows(SecurityException::class) { runScript("arg1") }
+ val exception = assertThrows() { runScript("arg1") }
// Bazel catches the System.exit() call and throws a SecurityException. This is a bit hacky way
// to verify that System.exit() is called, but it's helpful.
@@ -65,7 +65,7 @@ class RetrieveAffectedTestsTest {
@Test
fun testUtility_twoArguments_printsUsageStringAndExits() {
- val exception = assertThrows(SecurityException::class) { runScript("arg1", "arg2") }
+ val exception = assertThrows() { runScript("arg1", "arg2") }
// Bazel catches the System.exit() call and throws a SecurityException. This is a bit hacky way
// to verify that System.exit() is called, but it's helpful.
@@ -75,7 +75,7 @@ class RetrieveAffectedTestsTest {
@Test
fun testUtility_invalidBase64_throwsException() {
- assertThrows(IllegalArgumentException::class) { runScript("badbase64", "file1", "file2") }
+ assertThrows() { runScript("badbase64", "file1", "file2") }
}
@Test
diff --git a/scripts/src/javatests/org/oppia/android/scripts/common/BUILD.bazel b/scripts/src/javatests/org/oppia/android/scripts/common/BUILD.bazel
index e47fc741ab6..bceb5cfe864 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/common/BUILD.bazel
+++ b/scripts/src/javatests/org/oppia/android/scripts/common/BUILD.bazel
@@ -8,6 +8,7 @@ load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_test")
kt_jvm_test(
name = "BazelClientTest",
srcs = ["BazelClientTest.kt"],
+ shard_count = 4,
deps = [
"//scripts/src/java/org/oppia/android/scripts/common:bazel_client",
"//scripts/src/java/org/oppia/android/scripts/testing:test_bazel_workspace",
diff --git a/scripts/src/javatests/org/oppia/android/scripts/common/BazelClientTest.kt b/scripts/src/javatests/org/oppia/android/scripts/common/BazelClientTest.kt
index f2e7914682c..2109155025f 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/common/BazelClientTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/common/BazelClientTest.kt
@@ -25,20 +25,14 @@ import java.util.concurrent.TimeUnit
// Function name: test names are conventionally named with underscores.
@Suppress("SameParameterValue", "FunctionName")
class BazelClientTest {
- @Rule
- @JvmField
- var tempFolder = TemporaryFolder()
+ @field:[Rule JvmField] val tempFolder = TemporaryFolder()
+ @field:[Rule JvmField] val mockitoRule: MockitoRule = MockitoJUnit.rule()
- @Rule
- @JvmField
- val mockitoRule: MockitoRule = MockitoJUnit.rule()
+ @Mock lateinit var mockCommandExecutor: CommandExecutor
private val commandExecutor by lazy { initiazeCommandExecutorWithLongProcessWaitTime() }
private lateinit var testBazelWorkspace: TestBazelWorkspace
- @Mock
- lateinit var mockCommandExecutor: CommandExecutor
-
@Before
fun setUp() {
testBazelWorkspace = TestBazelWorkspace(tempFolder)
@@ -46,9 +40,9 @@ class BazelClientTest {
@Test
fun testRetrieveTestTargets_emptyFolder_fails() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
bazelClient.retrieveAllTestTargets()
}
@@ -59,10 +53,10 @@ class BazelClientTest {
@Test
fun testRetrieveTestTargets_emptyWorkspace_fails() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
bazelClient.retrieveAllTestTargets()
}
@@ -73,7 +67,7 @@ class BazelClientTest {
@Test
fun testRetrieveTestTargets_workspaceWithTest_returnsTestTarget() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
testBazelWorkspace.createTest("ExampleTest")
@@ -84,7 +78,7 @@ class BazelClientTest {
@Test
fun testRetrieveTestTargets_workspaceWithMultipleTests_returnsTestTargets() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
testBazelWorkspace.createTest("FirstTest")
testBazelWorkspace.createTest("SecondTest")
@@ -106,7 +100,7 @@ class BazelClientTest {
@Test
fun testRetrieveBazelTargets_forFileNotInBuildGraph_returnsEmptyList() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
tempFolder.newFile("filenotingraph")
@@ -117,7 +111,7 @@ class BazelClientTest {
@Test
fun testRetrieveBazelTargets_forTestFile_returnsBazelTarget() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
testBazelWorkspace.createTest("FirstTest")
@@ -128,7 +122,7 @@ class BazelClientTest {
@Test
fun testRetrieveBazelTargets_forMultipleMixedFiles_returnsBazelTargets() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
testBazelWorkspace.createTest("FirstTest")
testBazelWorkspace.createTest("SecondTest", withGeneratedDependency = true)
@@ -157,7 +151,7 @@ class BazelClientTest {
@Test
fun testRetrieveRelatedTestTargets_forTargetWithNoTestDependency_returnsNoTargets() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
testBazelWorkspace.createLibrary("SomeDependency")
testBazelWorkspace.createTest("FirstTest")
@@ -170,7 +164,7 @@ class BazelClientTest {
@Test
fun testRetrieveRelatedTestTargets_forTestFileTarget_returnsTestTarget() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
testBazelWorkspace.createTest("FirstTest")
@@ -181,7 +175,7 @@ class BazelClientTest {
@Test
fun testRetrieveRelatedTestTargets_forDependentFileTarget_returnsTestTarget() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
testBazelWorkspace.createTest("FirstTest", withGeneratedDependency = true)
@@ -192,7 +186,7 @@ class BazelClientTest {
@Test
fun testRetrieveRelatedTestTargets_forMixedFileTargets_returnsRelatedTestTargets() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
testBazelWorkspace.createLibrary("ExtraDep")
testBazelWorkspace.createTest("FirstTest", withExtraDependency = "//:ExtraDep_lib")
@@ -227,7 +221,7 @@ class BazelClientTest {
@Test
fun testRetrieveTransitiveTestTargets_forNoFiles_returnsEmptyList() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
val testTargets = bazelClient.retrieveTransitiveTestTargets(listOf())
@@ -238,7 +232,7 @@ class BazelClientTest {
@Test
fun testRetrieveTransitiveTestTargets_forBuildFile_returnsAllTestsInThatBuildFile() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
testBazelWorkspace.createTest("FirstTest")
testBazelWorkspace.createTest("SecondTest")
@@ -253,7 +247,7 @@ class BazelClientTest {
@Test
fun testRetrieveTransitiveTestTargets_forMultipleBuildFiles_returnsAllRelatedTests() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
testBazelWorkspace.createTest("FirstTest")
testBazelWorkspace.createTest("SecondTest", subpackage = "two")
@@ -269,7 +263,7 @@ class BazelClientTest {
@Test
fun testRetrieveTransitiveTestTargets_forBzlFile_returnsRelatedTests() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
// Generate tests.
testBazelWorkspace.createTest("FirstTest")
@@ -298,7 +292,7 @@ class BazelClientTest {
@Test
fun testRetrieveTransitiveTestTargets_forWorkspace_returnsAllTests() {
- val bazelClient = BazelClient(tempFolder.root)
+ val bazelClient = BazelClient(tempFolder.root, commandExecutor)
testBazelWorkspace.initEmptyWorkspace()
testBazelWorkspace.createTest("FirstTest")
testBazelWorkspace.createTest("SecondTest", subpackage = "two")
diff --git a/scripts/src/javatests/org/oppia/android/scripts/common/CommandExecutorImplTest.kt b/scripts/src/javatests/org/oppia/android/scripts/common/CommandExecutorImplTest.kt
index e04c0954b85..78dc945dff6 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/common/CommandExecutorImplTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/common/CommandExecutorImplTest.kt
@@ -37,7 +37,7 @@ class CommandExecutorImplTest {
fun testExecute_echo_invalidDirectory_throwsException() {
val commandExecutor = CommandExecutorImpl()
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
commandExecutor.executeCommand(File("invaliddirectory"), "echo", "value")
}
@@ -53,7 +53,7 @@ class CommandExecutorImplTest {
// Produce a large output so that echo takes a bit longer to reduce the likelihood of this test
// flaking on faster machines.
val largeOutput = "a".repeat(100_000)
- val exception = assertThrows(IllegalStateException::class) {
+ val exception = assertThrows() {
commandExecutor.executeCommand(tempFolder.root, "echo", largeOutput)
}
@@ -65,7 +65,7 @@ class CommandExecutorImplTest {
fun testExecute_nonexistentCommand_throwsException() {
val commandExecutor = CommandExecutorImpl()
- val exception = assertThrows(IOException::class) {
+ val exception = assertThrows() {
commandExecutor.executeCommand(tempFolder.root, "commanddoesnotexist")
}
diff --git a/scripts/src/javatests/org/oppia/android/scripts/common/GitClientTest.kt b/scripts/src/javatests/org/oppia/android/scripts/common/GitClientTest.kt
index 9362d7dd006..c3126339eca 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/common/GitClientTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/common/GitClientTest.kt
@@ -35,16 +35,16 @@ class GitClientTest {
@After
fun tearDown() {
// Print the status of the git repository to help with debugging in the cases of test failures
- // and to help manually verify the expect git state at the end of each test.
+ // and to help manually verify the expected git state at the end of each test.
println("git status (at end of test):")
- println(testGitRepository.status())
+ println(testGitRepository.status(checkForGitRepository = false))
}
@Test
fun testCurrentCommit_forNonRepository_throwsException() {
val gitClient = GitClient(tempFolder.root, "develop")
- val exception = assertThrows(IllegalStateException::class) { gitClient.currentCommit }
+ val exception = assertThrows() { gitClient.currentCommit }
assertThat(exception).hasMessageThat().contains("Expected non-zero exit code")
assertThat(exception).hasMessageThat().ignoringCase().contains("not a git repository")
@@ -80,7 +80,7 @@ class GitClientTest {
fun testCurrentBranch_forNonRepository_throwsException() {
val gitClient = GitClient(tempFolder.root, "develop")
- val exception = assertThrows(IllegalStateException::class) { gitClient.currentBranch }
+ val exception = assertThrows() { gitClient.currentBranch }
assertThat(exception).hasMessageThat().contains("Expected non-zero exit code")
assertThat(exception).hasMessageThat().ignoringCase().contains("not a git repository")
diff --git a/scripts/src/javatests/org/oppia/android/scripts/common/ProtoStringEncoderTest.kt b/scripts/src/javatests/org/oppia/android/scripts/common/ProtoStringEncoderTest.kt
index b03c106500a..bed9db19a1b 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/common/ProtoStringEncoderTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/common/ProtoStringEncoderTest.kt
@@ -34,14 +34,14 @@ class ProtoStringEncoderTest {
@Test
fun testDecode_emptyString_throwsException() {
- assertThrows(EOFException::class) {
+ assertThrows() {
TestMessage.getDefaultInstance().mergeFromCompressedBase64(base64 = "")
}
}
@Test
fun testDecode_badString_throwsException() {
- assertThrows(ZipException::class) {
+ assertThrows() {
TestMessage.getDefaultInstance().mergeFromCompressedBase64(base64 = "asdf")
}
}
diff --git a/scripts/src/javatests/org/oppia/android/scripts/docs/KdocValidityCheckTest.kt b/scripts/src/javatests/org/oppia/android/scripts/docs/KdocValidityCheckTest.kt
index 9a7b61faa6a..6850c951041 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/docs/KdocValidityCheckTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/docs/KdocValidityCheckTest.kt
@@ -46,7 +46,7 @@ class KdocValidityCheckTest {
val testContent =
"""
/**
- * Returns the string corresponding to this error's string resources, or null if there
+ * Returns the string corresponding to this error's string resources, or null if there
* is none.
*/
fun getErrorMessageFromStringRes(context: Context): String? {
@@ -260,7 +260,7 @@ class KdocValidityCheckTest {
val testContent =
"""
val testVal = "testContent"
-
+
fun provideContext(application: Application): Context
""".trimIndent()
val tempFile = tempFolder.newFile("testfiles/TempFileTest.kt")
@@ -281,16 +281,14 @@ class KdocValidityCheckTest {
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
"""
KDoc missing for files:
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:2
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -352,21 +350,19 @@ class KdocValidityCheckTest {
fun testKdoc_class_withoutKdoc_checkShouldFail() {
val testContent =
"""
- class TestClass {}
+ class TestClass {}
""".trimIndent()
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
"""
KDoc missing for files:
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:1
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -382,21 +378,19 @@ class KdocValidityCheckTest {
class NestedClass {
class NestedLevel2Class {}
}
- }
+ }
""".trimIndent()
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
"""
KDoc missing for files:
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:5
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -409,16 +403,14 @@ class KdocValidityCheckTest {
/** Test KDoc 1. */
class TestClass {
val testVal = "test"
-
+
fun testFunc(){}
- }
+ }
""".trimIndent()
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
@@ -426,7 +418,7 @@ class KdocValidityCheckTest {
KDoc missing for files:
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:3
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:5
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -442,9 +434,7 @@ class KdocValidityCheckTest {
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
@@ -452,7 +442,7 @@ class KdocValidityCheckTest {
KDoc missing for files:
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:1
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:2
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -468,16 +458,14 @@ class KdocValidityCheckTest {
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
"""
KDoc missing for files:
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:2
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -495,16 +483,14 @@ class KdocValidityCheckTest {
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
"""
KDoc missing for files:
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:4
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -522,9 +508,7 @@ class KdocValidityCheckTest {
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
@@ -533,7 +517,7 @@ class KdocValidityCheckTest {
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:1
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:2
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:3
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -544,15 +528,13 @@ class KdocValidityCheckTest {
val testContent =
"""
const val TABLE_USER_ATTRIBUTE_EMPID = "_id"
-
+
const val TABLE_USER_ATTRIBUTE_DATA = "data"
""".trimIndent()
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
@@ -560,7 +542,7 @@ class KdocValidityCheckTest {
KDoc missing for files:
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:1
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:3
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -572,21 +554,19 @@ class KdocValidityCheckTest {
"""
fun getErrorMessageFromStringRes(context: Context): String? {
return error?.let(context::getString)
- }
+ }
""".trimIndent()
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
"""
KDoc missing for files:
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:1
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -604,16 +584,14 @@ class KdocValidityCheckTest {
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
"""
KDoc missing for files:
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:3
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -627,14 +605,12 @@ class KdocValidityCheckTest {
WELCOME(0),
TOPIC_LIST(1),
FINAL(2)
- }
+ }
""".trimIndent()
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
@@ -644,7 +620,7 @@ class KdocValidityCheckTest {
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:2
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:3
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:4
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -655,22 +631,20 @@ class KdocValidityCheckTest {
val testContent =
"""
interface ChapterSelector {
-
+
fun chapterSelected(chapterIndex: Int, nextStoryIndex: Int, explorationId: String)
-
+
fun chapterUnselected(chapterIndex: Int, nextStoryIndex: Int)
-
+
interface ChildInterface {
fun testFunction()
}
- }
+ }
""".trimIndent()
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
@@ -681,7 +655,7 @@ class KdocValidityCheckTest {
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:5
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:7
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:8
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -695,11 +669,11 @@ class KdocValidityCheckTest {
class TestClass {
companion object {
val pos = 1
-
+
fun incrementedPosition(position: Int): Int {
return position+1
}
-
+
fun decrementedPosition(position: Int): Int {
return position-1
}
@@ -709,9 +683,7 @@ class KdocValidityCheckTest {
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
@@ -720,7 +692,7 @@ class KdocValidityCheckTest {
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:4
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:6
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:10
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -748,23 +720,21 @@ class KdocValidityCheckTest {
val testContent =
"""
import javax.inject.Qualifier
-
+
@Qualifier
annotation class DelayShowAdditionalHintsFromWrongAnswerMillis
""".trimIndent()
val tempFile = tempFolder.newFile("testfiles/TempFile.kt")
tempFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
"""
KDoc missing for files:
- ${retrieveTestFilesDirectoryPath()}/TempFile.kt:4
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -775,7 +745,7 @@ class KdocValidityCheckTest {
val testContent1 =
"""
import javax.inject.Qualifier
-
+
@Qualifier
annotation class DelayShowAdditionalHintsFromWrongAnswerMillis
""".trimIndent()
@@ -783,9 +753,9 @@ class KdocValidityCheckTest {
"""
class TestClass {
fun testFunc(){}
-
+
private val testVal = "test"
-
+
val testVal2 = "test2"
}
""".trimIndent()
@@ -800,9 +770,7 @@ class KdocValidityCheckTest {
tempFile2.writeText(testContent2)
tempFile3.writeText(testContent3)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
@@ -813,7 +781,7 @@ class KdocValidityCheckTest {
- ${retrieveTestFilesDirectoryPath()}/TempFile2.kt:2
- ${retrieveTestFilesDirectoryPath()}/TempFile2.kt:6
- ${retrieveTestFilesDirectoryPath()}/TempFile3.kt:1
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
@@ -825,9 +793,9 @@ class KdocValidityCheckTest {
"""
/** test kdoc. */
val testVal1 = "test content"
-
+
val testVal2 = "test content"
-
+
fun getErrorMessageFromStringRes(context: Context): String? {
return error?.let(context::getString)
}
@@ -858,7 +826,7 @@ class KdocValidityCheckTest {
"""
/** test Kdoc1. */
val testVal = "test content"
-
+
/** test Kdoc2. */
fun getErrorMessageFromStringRes(context: Context): String? {
return error?.let(context::getString)
@@ -879,9 +847,7 @@ class KdocValidityCheckTest {
}.build()
exemptions.writeTo(exemptionFile.outputStream())
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
@@ -913,9 +879,7 @@ class KdocValidityCheckTest {
}.build()
exemptions.writeTo(exemptionFile.outputStream())
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR)
val failureMessage =
@@ -923,10 +887,10 @@ class KdocValidityCheckTest {
Redundant exemptions:
- app/src/main/java/org/oppia/android/app/splash/SplashActivity.kt
Please remove them from scripts/assets/kdoc_validity_exemptions.textproto
-
+
KDoc missing for files:
- ${retrieveTestFilesDirectoryPath()}/HomeActivity.kt:1
-
+
$wikiReferenceNote
""".trimIndent()
assertThat(outContent.toString().trim()).isEqualTo(failureMessage)
diff --git a/scripts/src/javatests/org/oppia/android/scripts/label/AccessibilityLabelCheckTest.kt b/scripts/src/javatests/org/oppia/android/scripts/label/AccessibilityLabelCheckTest.kt
index a1410b3ead2..900140e93f7 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/label/AccessibilityLabelCheckTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/label/AccessibilityLabelCheckTest.kt
@@ -92,7 +92,7 @@ class AccessibilityLabelCheckTest {
val manifestFile = tempFolder.newFile("testfiles/$tempFileRelativePath")
manifestFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
main(
retrieveTestFilesDirectoryPath(),
"${tempFolder.root}/$pathToProtoBinary",
@@ -134,7 +134,7 @@ class AccessibilityLabelCheckTest {
val manifestFile = tempFolder.newFile("testfiles/$tempFileRelativePath")
manifestFile.writeText(testContent)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
main(
retrieveTestFilesDirectoryPath(),
"${tempFolder.root}/$pathToProtoBinary",
@@ -244,7 +244,7 @@ class AccessibilityLabelCheckTest {
appManifestFile.writeText(testContent1)
splashManifestFile.writeText(testContent2)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
main(
retrieveTestFilesDirectoryPath(),
"${tempFolder.root}/$pathToProtoBinary",
@@ -308,7 +308,7 @@ class AccessibilityLabelCheckTest {
appManifestFile.writeText(testContent1)
splashManifestFile.writeText(testContent2)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
main(
retrieveTestFilesDirectoryPath(),
"${tempFolder.root}/$pathToProtoBinary",
@@ -393,7 +393,7 @@ class AccessibilityLabelCheckTest {
}.build()
exemptions.writeTo(exemptionFile.outputStream())
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
main(
retrieveTestFilesDirectoryPath(),
"${tempFolder.root}/$pathToProtoBinary",
@@ -436,7 +436,7 @@ class AccessibilityLabelCheckTest {
}.build()
exemptions.writeTo(exemptionFile.outputStream())
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
main(
retrieveTestFilesDirectoryPath(),
"${tempFolder.root}/$pathToProtoBinary",
diff --git a/scripts/src/javatests/org/oppia/android/scripts/license/BUILD.bazel b/scripts/src/javatests/org/oppia/android/scripts/license/BUILD.bazel
index 707ec3e8081..ab6b739a3b8 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/license/BUILD.bazel
+++ b/scripts/src/javatests/org/oppia/android/scripts/license/BUILD.bazel
@@ -19,6 +19,7 @@ kt_jvm_test(
name = "MavenDependenciesListCheckTest",
size = "large",
srcs = ["MavenDependenciesListCheckTest.kt"],
+ shard_count = 4,
deps = [
"//scripts/src/java/org/oppia/android/scripts/license:maven_dependencies_list_check_lib",
"//scripts/src/java/org/oppia/android/scripts/testing:test_bazel_workspace",
diff --git a/scripts/src/javatests/org/oppia/android/scripts/license/LicenseTextsCheckTest.kt b/scripts/src/javatests/org/oppia/android/scripts/license/LicenseTextsCheckTest.kt
index 8a70436c6c7..baf034a9095 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/license/LicenseTextsCheckTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/license/LicenseTextsCheckTest.kt
@@ -41,7 +41,7 @@ class LicenseTextsCheckTest {
val thirdPartyDepsXmlFile = tempFolder.newFile("values/third_party_dependencies.xml")
thirdPartyDepsXmlFile.writeText(WARNING_COMMENT)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
main(arrayOf())
}
@@ -53,7 +53,7 @@ class LicenseTextsCheckTest {
val thirdPartyDepsXmlFile = tempFolder.newFile("values/third_party_dependencies.xml")
thirdPartyDepsXmlFile.writeText("")
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
main(arrayOf("${tempFolder.root}/values/third_party_dependencies.xml"))
}
@@ -72,7 +72,7 @@ class LicenseTextsCheckTest {
""".trimIndent()
)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
main(arrayOf("${tempFolder.root}/values/third_party_dependencies.xml"))
}
@@ -110,7 +110,7 @@ class LicenseTextsCheckTest {
@Test
fun testLicenseTexsCheck_xmlFileNotPresent_checkFailsWithFileNotFoundException() {
val pathToThirdPartyDepsXml = "${tempFolder.root}/values/third_party_dependencies.xml"
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
main(arrayOf("${tempFolder.root}/values/third_party_dependencies.xml"))
}
diff --git a/scripts/src/javatests/org/oppia/android/scripts/license/MavenDependenciesListCheckTest.kt b/scripts/src/javatests/org/oppia/android/scripts/license/MavenDependenciesListCheckTest.kt
index f30b261f53a..5fdc807e3db 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/license/MavenDependenciesListCheckTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/license/MavenDependenciesListCheckTest.kt
@@ -110,7 +110,7 @@ class MavenDependenciesListCheckTest {
val coordsList = listOf(DATA_BINDING_DEP, FIREBASE_ANALYTICS_DEP)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
MavenDependenciesListCheck(
mockLicenseFetcher,
commandExecutor
@@ -186,7 +186,7 @@ class MavenDependenciesListCheckTest {
)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
MavenDependenciesListCheck(
mockLicenseFetcher,
commandExecutor
@@ -250,7 +250,7 @@ class MavenDependenciesListCheckTest {
)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
MavenDependenciesListCheck(
mockLicenseFetcher,
commandExecutor
@@ -326,7 +326,7 @@ class MavenDependenciesListCheckTest {
val coordsList = listOf(GLIDE_DEP)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
MavenDependenciesListCheck(
mockLicenseFetcher,
commandExecutor
@@ -405,7 +405,7 @@ class MavenDependenciesListCheckTest {
val coordsList = listOf(GLIDE_DEP)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
MavenDependenciesListCheck(
mockLicenseFetcher,
commandExecutor
@@ -481,7 +481,7 @@ class MavenDependenciesListCheckTest {
)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
MavenDependenciesListCheck(
mockLicenseFetcher,
commandExecutor
@@ -559,7 +559,7 @@ class MavenDependenciesListCheckTest {
)
setUpBazelEnvironmentWithUpdatedFirebaseDependency(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
MavenDependenciesListCheck(
mockLicenseFetcher,
commandExecutor
@@ -637,7 +637,7 @@ class MavenDependenciesListCheckTest {
)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
MavenDependenciesListCheck(
mockLicenseFetcher,
commandExecutor
@@ -770,7 +770,7 @@ class MavenDependenciesListCheckTest {
)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
MavenDependenciesListCheck(
mockLicenseFetcher,
commandExecutor
@@ -819,7 +819,7 @@ class MavenDependenciesListCheckTest {
)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
MavenDependenciesListCheck(
mockLicenseFetcher,
commandExecutor
@@ -874,7 +874,7 @@ class MavenDependenciesListCheckTest {
)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
MavenDependenciesListCheck(
mockLicenseFetcher,
commandExecutor
diff --git a/scripts/src/javatests/org/oppia/android/scripts/maven/BUILD.bazel b/scripts/src/javatests/org/oppia/android/scripts/maven/BUILD.bazel
index a46ee7ad500..68b0d6fad28 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/maven/BUILD.bazel
+++ b/scripts/src/javatests/org/oppia/android/scripts/maven/BUILD.bazel
@@ -9,6 +9,7 @@ kt_jvm_test(
name = "GenerateMavenDependenciesListTest",
size = "large",
srcs = ["GenerateMavenDependenciesListTest.kt"],
+ shard_count = 4,
deps = [
"//scripts/src/java/org/oppia/android/scripts/common:command_executor",
"//scripts/src/java/org/oppia/android/scripts/maven:generate_maven_dependencies_list_lib",
diff --git a/scripts/src/javatests/org/oppia/android/scripts/maven/GenerateMavenDependenciesListTest.kt b/scripts/src/javatests/org/oppia/android/scripts/maven/GenerateMavenDependenciesListTest.kt
index 6d63a6e9c6d..4507d76a5dc 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/maven/GenerateMavenDependenciesListTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/maven/GenerateMavenDependenciesListTest.kt
@@ -96,7 +96,7 @@ class GenerateMavenDependenciesListTest {
val coordsList = listOf(DEP_WITH_SCRAPABLE_LICENSE, DEP_WITH_DIRECT_LINK_ONLY_LICENSE)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
GenerateMavenDependenciesList(
mockLicenseFetcher,
commandExecutor
@@ -180,7 +180,7 @@ class GenerateMavenDependenciesListTest {
)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
GenerateMavenDependenciesList(
mockLicenseFetcher,
commandExecutor
@@ -204,7 +204,7 @@ class GenerateMavenDependenciesListTest {
val coordsList = listOf(DEP_WITH_DIRECT_LINK_ONLY_LICENSE)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
GenerateMavenDependenciesList(
mockLicenseFetcher,
commandExecutor
@@ -246,7 +246,7 @@ class GenerateMavenDependenciesListTest {
val coordsList = listOf(DEP_WITH_SCRAPABLE_AND_EXTRACTED_COPY_LICENSES)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
GenerateMavenDependenciesList(
mockLicenseFetcher,
commandExecutor
@@ -313,7 +313,7 @@ class GenerateMavenDependenciesListTest {
val coordsList = listOf(DEP_WITH_INVALID_LINKS)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
GenerateMavenDependenciesList(
mockLicenseFetcher,
commandExecutor
@@ -355,7 +355,7 @@ class GenerateMavenDependenciesListTest {
val coordsList = listOf(DEP_WITH_NO_LICENSE)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
GenerateMavenDependenciesList(
mockLicenseFetcher,
commandExecutor
@@ -614,7 +614,7 @@ class GenerateMavenDependenciesListTest {
)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
GenerateMavenDependenciesList(
mockLicenseFetcher,
commandExecutor
@@ -790,7 +790,7 @@ class GenerateMavenDependenciesListTest {
)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
GenerateMavenDependenciesList(
mockLicenseFetcher,
commandExecutor
@@ -915,7 +915,7 @@ class GenerateMavenDependenciesListTest {
)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
GenerateMavenDependenciesList(
mockLicenseFetcher,
commandExecutor
@@ -1028,7 +1028,7 @@ class GenerateMavenDependenciesListTest {
)
setUpBazelEnvironment(coordsList)
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
GenerateMavenDependenciesList(
mockLicenseFetcher,
commandExecutor
diff --git a/scripts/src/javatests/org/oppia/android/scripts/maven/RetrieveLicenseTextsTest.kt b/scripts/src/javatests/org/oppia/android/scripts/maven/RetrieveLicenseTextsTest.kt
index 6be3f9c0d71..d889d6ede2b 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/maven/RetrieveLicenseTextsTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/maven/RetrieveLicenseTextsTest.kt
@@ -63,7 +63,7 @@ class RetrieveLicenseTextsTest {
@Test
fun testScript_oneArgument_printsUsageStringAndThrowsException() {
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
RetrieveLicenseTexts(mockLicenseFetcher).main(arrayOf())
}
@@ -73,7 +73,7 @@ class RetrieveLicenseTextsTest {
@Test
fun testScript_oneArguments_printsUsageStringAndThrowsException() {
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
RetrieveLicenseTexts(mockLicenseFetcher).main(
arrayOf(
"${tempFolder.root}/values"
@@ -92,7 +92,7 @@ class RetrieveLicenseTextsTest {
val pbFile = tempFolder.newFile("scripts/assets/maven_dependencies.pb")
pbFile.outputStream().use { mavenDependencyList.writeTo(it) }
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
RetrieveLicenseTexts(mockLicenseFetcher).main(
arrayOf(
"${tempFolder.root}/values",
@@ -111,7 +111,7 @@ class RetrieveLicenseTextsTest {
val pbFile = tempFolder.newFile("scripts/assets/maven_dependencies.pb")
pbFile.outputStream().use { mavenDependencyList.writeTo(it) }
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
RetrieveLicenseTexts(mockLicenseFetcher).main(
arrayOf(
"${tempFolder.root}/values",
@@ -141,7 +141,7 @@ class RetrieveLicenseTextsTest {
val pbFile = tempFolder.newFile("scripts/assets/maven_dependencies.pb")
pbFile.outputStream().use { mavenDependencyList.writeTo(it) }
- val exception = assertThrows(Exception::class) {
+ val exception = assertThrows() {
RetrieveLicenseTexts(mockLicenseFetcher).main(
arrayOf(
"${tempFolder.root}/values",
diff --git a/scripts/src/javatests/org/oppia/android/scripts/regex/RegexPatternValidationCheckTest.kt b/scripts/src/javatests/org/oppia/android/scripts/regex/RegexPatternValidationCheckTest.kt
index 20fd219f857..a3eb9c825d9 100644
--- a/scripts/src/javatests/org/oppia/android/scripts/regex/RegexPatternValidationCheckTest.kt
+++ b/scripts/src/javatests/org/oppia/android/scripts/regex/RegexPatternValidationCheckTest.kt
@@ -211,6 +211,13 @@ class RegexPatternValidationCheckTest {
" should immediately follow the at-clause without any additional linking with brackets."
private val badSingleLineKdocShouldEndWithPunctuation =
"Badly formatted KDoc. Single-line KDocs should end with punctuation."
+ private val activityTestRuleShouldNotBeUsed =
+ "ActivityTestRule is deprecated since it operates test activities in sometimes unsafe" +
+ " situations. Use ActivityScenario, instead."
+ private val activityScenarioRuleShouldNotBeUsed =
+ "ActivityScenarioRule can result in order dependence when static state leaks across tests" +
+ " (such as static module variables), and can make staging much more difficult for platform" +
+ " parameters. Use ActivityScenario directly, instead."
private val wikiReferenceNote =
"Refer to https://github.com/oppia/oppia-android/wiki/Static-Analysis-Checks" +
"#regexpatternvalidation-check for more details on how to fix this."
@@ -259,9 +266,7 @@ class RegexPatternValidationCheckTest {
val tempFile = tempFolder.newFile("testfiles/data/src/main/TestActivity.kt")
tempFile.writeText(requiredContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(REGEX_CHECK_FAILED_OUTPUT_INDICATOR)
assertThat(outContent.toString().trim()).isEqualTo(
@@ -289,9 +294,7 @@ class RegexPatternValidationCheckTest {
tempFolder.newFolder("testfiles", "app", "src", "main", "res", "values", "subdir")
tempFolder.newFile("testfiles/app/src/main/res/values/subdir/strings.xml")
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(REGEX_CHECK_FAILED_OUTPUT_INDICATOR)
assertThat(outContent.toString().trim()).isEqualTo(
@@ -309,16 +312,14 @@ class RegexPatternValidationCheckTest {
tempFolder.newFolder("testfiles", "domain", "src", "main", "res", "drawable", "subdir")
tempFolder.newFile("testfiles/domain/src/main/res/drawable/subdir/example.png")
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows() { runScript() }
assertThat(exception).hasMessageThat().contains(REGEX_CHECK_FAILED_OUTPUT_INDICATOR)
assertThat(outContent.toString().trim()).isEqualTo(
"""
File name/path violation: $nestedResourceSubdirectoryErrorMessage
- domain/src/main/res/drawable/subdir/example.png
-
+
$wikiReferenceNote
""".trimIndent()
)
@@ -339,9 +340,7 @@ class RegexPatternValidationCheckTest {
val fileContainsSupportLibraryImport = tempFolder.newFile("testfiles/TestFile.kt")
fileContainsSupportLibraryImport.writeText(prohibitedContent)
- val exception = assertThrows(Exception::class) {
- runScript()
- }
+ val exception = assertThrows