From 01a23ee0bdf32bc161e4195266f1728f068f59e4 Mon Sep 17 00:00:00 2001 From: Gergely Hegedus Date: Tue, 4 Jan 2022 15:11:59 +0200 Subject: [PATCH] issue#6 Add GIVEN-WHEN-THEN as documentation and simplify testNames in sharedTests of app module --- .../test/showcase/ui/home/MainActivityTest.kt | 30 +++++++++++------ .../showcase/ui/login/AuthActivityTest.kt | 15 ++++++--- .../showcase/ui/splash/SplashActivityTest.kt | 6 ++-- .../test/showcase/ui/home/MainActivityTest.kt | 33 ++++++++++++------- .../showcase/ui/login/AuthActivityTest.kt | 15 ++++++--- .../showcase/ui/splash/SplashActivityTest.kt | 6 ++-- 6 files changed, 70 insertions(+), 35 deletions(-) diff --git a/app/src/sharedTestHilt/java/org/fnives/test/showcase/ui/home/MainActivityTest.kt b/app/src/sharedTestHilt/java/org/fnives/test/showcase/ui/home/MainActivityTest.kt index 6266263..a63bbb7 100644 --- a/app/src/sharedTestHilt/java/org/fnives/test/showcase/ui/home/MainActivityTest.kt +++ b/app/src/sharedTestHilt/java/org/fnives/test/showcase/ui/home/MainActivityTest.kt @@ -82,8 +82,9 @@ class MainActivityTest { disposable.dispose() } + /** GIVEN initialized MainActivity WHEN signout is clicked THEN user is signed out */ @Test - fun GIVEN_initialized_MainActivity_WHEN_signout_is_clicked_THEN_user_is_signed_out() { + fun signOutClickedResultsInNavigation() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Error(false)) activityScenario = ActivityScenario.launch(HiltMainActivity::class.java) @@ -96,8 +97,9 @@ class MainActivityTest { Assert.assertEquals(false, setupLoggedInState.isLoggedIn()) } + /** GIVEN success response WHEN data is returned THEN it is shown on the ui */ @Test - fun GIVEN_success_response_WHEN_data_is_returned_THEN_it_is_shown_on_the_ui() { + fun successfulDataLoadingShowsTheElementsOnTheUI() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Success(false)) activityScenario = ActivityScenario.launch(HiltMainActivity::class.java) @@ -109,8 +111,9 @@ class MainActivityTest { homeRobot.assertDidNotNavigateToAuth() } + /** GIVEN success response WHEN item is clicked THEN ui is updated */ @Test - fun GIVEN_success_response_WHEN_item_is_clicked_THEN_ui_is_updated() { + fun clickingOnListElementUpdatesTheElementsFavouriteState() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Success(false)) activityScenario = ActivityScenario.launch(HiltMainActivity::class.java) @@ -124,8 +127,9 @@ class MainActivityTest { .assertDidNotNavigateToAuth() } + /** GIVEN success response WHEN item is clicked THEN ui is updated even if activity is recreated */ @Test - fun GIVEN_success_response_WHEN_item_is_clicked_THEN_ui_is_updated_even_if_activity_is_recreated() { + fun elementFavouritedIsKeptEvenIfActivityIsRecreated() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Success(false)) activityScenario = ActivityScenario.launch(HiltMainActivity::class.java) @@ -144,8 +148,9 @@ class MainActivityTest { .assertDidNotNavigateToAuth() } + /** GIVEN success response WHEN item is clicked then clicked again THEN ui is updated */ @Test - fun GIVEN_success_response_WHEN_item_is_clicked_then_clicked_again_THEN_ui_is_updated() { + fun clickingAnElementMultipleTimesProperlyUpdatesIt() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Success(false)) activityScenario = ActivityScenario.launch(HiltMainActivity::class.java) @@ -161,8 +166,9 @@ class MainActivityTest { .assertDidNotNavigateToAuth() } + /** GIVEN error response WHEN loaded THEN error is Shown */ @Test - fun GIVEN_error_response_WHEN_loaded_THEN_error_is_Shown() { + fun networkErrorResultsInUIErrorStateShown() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Error(false)) activityScenario = ActivityScenario.launch(HiltMainActivity::class.java) @@ -173,8 +179,9 @@ class MainActivityTest { .assertDidNotNavigateToAuth() } + /** GIVEN error response then success WHEN retried THEN success is shown */ @Test - fun GIVEN_error_response_then_success_WHEN_retried_THEN_success_is_shown() { + fun retryingFromErrorStateAndSucceedingShowsTheData() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario( ContentScenario.Error(false) @@ -193,8 +200,9 @@ class MainActivityTest { homeRobot.assertDidNotNavigateToAuth() } + /** GIVEN success then error WHEN retried THEN error is shown */ @Test - fun GIVEN_success_then_error_WHEN_retried_THEN_error_is_shown() { + fun errorIsShownIfTheDataIsFetchedAndErrorIsReceived() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario( ContentScenario.Success(false) @@ -215,8 +223,9 @@ class MainActivityTest { .assertDidNotNavigateToAuth() } + /** GIVEN unauthenticated then success WHEN loaded THEN success is shown */ @Test - fun GIVEN_unauthenticated_then_success_WHEN_loaded_THEN_success_is_shown() { + fun authenticationIsHandledWithASingleLoading() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario( ContentScenario.Unauthorized(false) @@ -233,8 +242,9 @@ class MainActivityTest { homeRobot.assertDidNotNavigateToAuth() } + /** GIVEN unauthenticated then error WHEN loaded THEN navigated to auth */ @Test - fun GIVEN_unauthenticated_then_error_WHEN_loaded_THEN_navigated_to_auth() { + fun sessionExpirationResultsInNavigation() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Unauthorized(false)) .setScenario(RefreshTokenScenario.Error) diff --git a/app/src/sharedTestHilt/java/org/fnives/test/showcase/ui/login/AuthActivityTest.kt b/app/src/sharedTestHilt/java/org/fnives/test/showcase/ui/login/AuthActivityTest.kt index 3183967..b1ec4e2 100644 --- a/app/src/sharedTestHilt/java/org/fnives/test/showcase/ui/login/AuthActivityTest.kt +++ b/app/src/sharedTestHilt/java/org/fnives/test/showcase/ui/login/AuthActivityTest.kt @@ -72,8 +72,9 @@ class AuthActivityTest { disposable.dispose() } + /** GIVEN non empty password and username and successful response WHEN signIn THEN no error is shown and navigating to home */ @Test - fun GIVEN_non_empty_password_and_username_and_successful_response_WHEN_signIn_THEN_no_error_is_shown_and_navigating_to_home() { + fun properLoginResultsInNavigationToHome() { mockServerScenarioSetupTestRule.mockServerScenarioSetup.setScenario( AuthScenario.Success( password = "alma", @@ -93,8 +94,9 @@ class AuthActivityTest { loginRobot.assertNavigatedToHome() } + /** GIVEN empty password and username WHEN signIn THEN error password is shown */ @Test - fun GIVEN_empty_password_and_username_WHEN_signIn_THEN_error_password_is_shown() { + fun emptyPasswordShowsProperErrorMessage() { activityScenario = ActivityScenario.launch(HiltAuthActivity::class.java) loginRobot .setUsername("banan") @@ -108,8 +110,9 @@ class AuthActivityTest { .assertNotLoading() } + /** GIVEN password and empty username WHEN signIn THEN error username is shown */ @Test - fun GIVEN_password_and_empty_username_WHEN_signIn_THEN_error_username_is_shown() { + fun emptyUserNameShowsProperErrorMessage() { activityScenario = ActivityScenario.launch(HiltAuthActivity::class.java) loginRobot .setPassword("banan") @@ -123,8 +126,9 @@ class AuthActivityTest { .assertNotLoading() } + /** GIVEN password and username and invalid credentials response WHEN signIn THEN error invalid credentials is shown */ @Test - fun GIVEN_password_and_username_and_invalid_credentials_response_WHEN_signIn_THEN_error_invalid_credentials_is_shown() { + fun invalidCredentialsGivenShowsProperErrorMessage() { mockServerScenarioSetupTestRule.mockServerScenarioSetup.setScenario( AuthScenario.InvalidCredentials(username = "alma", password = "banan") ) @@ -143,8 +147,9 @@ class AuthActivityTest { .assertNotLoading() } + /** GIVEN password and username and error response WHEN signIn THEN error invalid credentials is shown */ @Test - fun GIVEN_password_and_username_and_error_response_WHEN_signIn_THEN_error_invalid_credentials_is_shown() { + fun networkErrorShowsProperErrorMessage() { mockServerScenarioSetupTestRule.mockServerScenarioSetup.setScenario( AuthScenario.GenericError(username = "alma", password = "banan") ) diff --git a/app/src/sharedTestHilt/java/org/fnives/test/showcase/ui/splash/SplashActivityTest.kt b/app/src/sharedTestHilt/java/org/fnives/test/showcase/ui/splash/SplashActivityTest.kt index 788e0a2..1caf222 100644 --- a/app/src/sharedTestHilt/java/org/fnives/test/showcase/ui/splash/SplashActivityTest.kt +++ b/app/src/sharedTestHilt/java/org/fnives/test/showcase/ui/splash/SplashActivityTest.kt @@ -71,8 +71,9 @@ class SplashActivityTest : KoinTest { disposable?.dispose() } + /** GIVEN loggedInState WHEN opened THEN MainActivity is started */ @Test - fun GIVEN_loggedInState_WHEN_opened_THEN_MainActivity_is_started() { + fun loggedInStateNavigatesToHome() { setupLoggedInState.setupLogin(mockServerScenarioSetupTestRule.mockServerScenarioSetup) activityScenario = ActivityScenario.launch(HiltSplashActivity::class.java) @@ -85,8 +86,9 @@ class SplashActivityTest : KoinTest { setupLoggedInState.setupLogout() } + /** GIVEN loggedOffState WHEN opened THEN AuthActivity is started */ @Test - fun GIVEN_loggedOffState_WHEN_opened_THEN_AuthActivity_is_started() { + fun loggedOutStatesNavigatesToAuthentication() { setupLoggedInState.setupLogout() activityScenario = ActivityScenario.launch(HiltSplashActivity::class.java) diff --git a/app/src/sharedTestKoin/java/org/fnives/test/showcase/ui/home/MainActivityTest.kt b/app/src/sharedTestKoin/java/org/fnives/test/showcase/ui/home/MainActivityTest.kt index b2c9572..a26e2f6 100644 --- a/app/src/sharedTestKoin/java/org/fnives/test/showcase/ui/home/MainActivityTest.kt +++ b/app/src/sharedTestKoin/java/org/fnives/test/showcase/ui/home/MainActivityTest.kt @@ -37,7 +37,8 @@ class MainActivityTest : KoinTest { @Rule @JvmField - val snackbarVerificationTestRule = SpecificTestConfigurationsFactory.createSnackbarVerification() + val snackbarVerificationTestRule = + SpecificTestConfigurationsFactory.createSnackbarVerification() @Rule @JvmField @@ -73,8 +74,9 @@ class MainActivityTest : KoinTest { disposable.dispose() } + /** GIVEN initialized MainActivity WHEN signout is clicked THEN user is signed out */ @Test - fun GIVEN_initialized_MainActivity_WHEN_signout_is_clicked_THEN_user_is_signed_out() { + fun signOutClickedResultsInNavigation() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Error(false)) activityScenario = ActivityScenario.launch(MainActivity::class.java) @@ -87,8 +89,9 @@ class MainActivityTest : KoinTest { Assert.assertEquals(false, SetupLoggedInState.isLoggedIn()) } + /** GIVEN success response WHEN data is returned THEN it is shown on the ui */ @Test - fun GIVEN_success_response_WHEN_data_is_returned_THEN_it_is_shown_on_the_ui() { + fun successfulDataLoadingShowsTheElementsOnTheUI() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Success(false)) activityScenario = ActivityScenario.launch(MainActivity::class.java) @@ -100,8 +103,9 @@ class MainActivityTest : KoinTest { homeRobot.assertDidNotNavigateToAuth() } + /** GIVEN success response WHEN item is clicked THEN ui is updated */ @Test - fun GIVEN_success_response_WHEN_item_is_clicked_THEN_ui_is_updated() { + fun clickingOnListElementUpdatesTheElementsFavouriteState() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Success(false)) activityScenario = ActivityScenario.launch(MainActivity::class.java) @@ -115,8 +119,9 @@ class MainActivityTest : KoinTest { .assertDidNotNavigateToAuth() } + /** GIVEN success response WHEN item is clicked THEN ui is updated even if activity is recreated */ @Test - fun GIVEN_success_response_WHEN_item_is_clicked_THEN_ui_is_updated_even_if_activity_is_recreated() { + fun elementFavouritedIsKeptEvenIfActivityIsRecreated() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Success(false)) activityScenario = ActivityScenario.launch(MainActivity::class.java) @@ -135,8 +140,9 @@ class MainActivityTest : KoinTest { .assertDidNotNavigateToAuth() } + /** GIVEN success response WHEN item is clicked then clicked again THEN ui is updated */ @Test - fun GIVEN_success_response_WHEN_item_is_clicked_then_clicked_again_THEN_ui_is_updated() { + fun clickingAnElementMultipleTimesProperlyUpdatesIt() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Success(false)) activityScenario = ActivityScenario.launch(MainActivity::class.java) @@ -152,8 +158,9 @@ class MainActivityTest : KoinTest { .assertDidNotNavigateToAuth() } + /** GIVEN error response WHEN loaded THEN error is Shown */ @Test - fun GIVEN_error_response_WHEN_loaded_THEN_error_is_Shown() { + fun networkErrorResultsInUIErrorStateShown() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Error(false)) activityScenario = ActivityScenario.launch(MainActivity::class.java) @@ -164,8 +171,9 @@ class MainActivityTest : KoinTest { .assertDidNotNavigateToAuth() } + /** GIVEN error response then success WHEN retried THEN success is shown */ @Test - fun GIVEN_error_response_then_success_WHEN_retried_THEN_success_is_shown() { + fun retryingFromErrorStateAndSucceedingShowsTheData() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario( ContentScenario.Error(false) @@ -184,8 +192,9 @@ class MainActivityTest : KoinTest { homeRobot.assertDidNotNavigateToAuth() } + /** GIVEN success then error WHEN retried THEN error is shown */ @Test - fun GIVEN_success_then_error_WHEN_retried_THEN_error_is_shown() { + fun errorIsShownIfTheDataIsFetchedAndErrorIsReceived() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario( ContentScenario.Success(false) @@ -206,8 +215,9 @@ class MainActivityTest : KoinTest { .assertDidNotNavigateToAuth() } + /** GIVEN unauthenticated then success WHEN loaded THEN success is shown */ @Test - fun GIVEN_unauthenticated_then_success_WHEN_loaded_THEN_success_is_shown() { + fun authenticationIsHandledWithASingleLoading() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario( ContentScenario.Unauthorized(false) @@ -224,8 +234,9 @@ class MainActivityTest : KoinTest { homeRobot.assertDidNotNavigateToAuth() } + /** GIVEN unauthenticated then error WHEN loaded THEN navigated to auth */ @Test - fun GIVEN_unauthenticated_then_error_WHEN_loaded_THEN_navigated_to_auth() { + fun sessionExpirationResultsInNavigation() { mockServerScenarioSetupTestRule.mockServerScenarioSetup .setScenario(ContentScenario.Unauthorized(false)) .setScenario(RefreshTokenScenario.Error) diff --git a/app/src/sharedTestKoin/java/org/fnives/test/showcase/ui/login/AuthActivityTest.kt b/app/src/sharedTestKoin/java/org/fnives/test/showcase/ui/login/AuthActivityTest.kt index e971de2..643be01 100644 --- a/app/src/sharedTestKoin/java/org/fnives/test/showcase/ui/login/AuthActivityTest.kt +++ b/app/src/sharedTestKoin/java/org/fnives/test/showcase/ui/login/AuthActivityTest.kt @@ -66,8 +66,9 @@ class AuthActivityTest : KoinTest { disposable.dispose() } + /** GIVEN non empty password and username and successful response WHEN signIn THEN no error is shown and navigating to home */ @Test - fun GIVEN_non_empty_password_and_username_and_successful_response_WHEN_signIn_THEN_no_error_is_shown_and_navigating_to_home() { + fun properLoginResultsInNavigationToHome() { mockServerScenarioSetupTestRule.mockServerScenarioSetup.setScenario( AuthScenario.Success( password = "alma", @@ -87,8 +88,9 @@ class AuthActivityTest : KoinTest { loginRobot.assertNavigatedToHome() } + /** GIVEN empty password and username WHEN signIn THEN error password is shown */ @Test - fun GIVEN_empty_password_and_username_WHEN_signIn_THEN_error_password_is_shown() { + fun emptyPasswordShowsProperErrorMessage() { activityScenario = ActivityScenario.launch(AuthActivity::class.java) loginRobot .setUsername("banan") @@ -102,8 +104,9 @@ class AuthActivityTest : KoinTest { .assertNotLoading() } + /** GIVEN password and empty username WHEN signIn THEN error username is shown */ @Test - fun GIVEN_password_and_empty_username_WHEN_signIn_THEN_error_username_is_shown() { + fun emptyUserNameShowsProperErrorMessage() { activityScenario = ActivityScenario.launch(AuthActivity::class.java) loginRobot .setPassword("banan") @@ -117,8 +120,9 @@ class AuthActivityTest : KoinTest { .assertNotLoading() } + /** GIVEN password and username and invalid credentials response WHEN signIn THEN error invalid credentials is shown */ @Test - fun GIVEN_password_and_username_and_invalid_credentials_response_WHEN_signIn_THEN_error_invalid_credentials_is_shown() { + fun invalidCredentialsGivenShowsProperErrorMessage() { mockServerScenarioSetupTestRule.mockServerScenarioSetup.setScenario( AuthScenario.InvalidCredentials(username = "alma", password = "banan") ) @@ -137,8 +141,9 @@ class AuthActivityTest : KoinTest { .assertNotLoading() } + /** GIVEN password and username and error response WHEN signIn THEN error invalid credentials is shown */ @Test - fun GIVEN_password_and_username_and_error_response_WHEN_signIn_THEN_error_invalid_credentials_is_shown() { + fun networkErrorShowsProperErrorMessage() { mockServerScenarioSetupTestRule.mockServerScenarioSetup.setScenario( AuthScenario.GenericError(username = "alma", password = "banan") ) diff --git a/app/src/sharedTestKoin/java/org/fnives/test/showcase/ui/splash/SplashActivityTest.kt b/app/src/sharedTestKoin/java/org/fnives/test/showcase/ui/splash/SplashActivityTest.kt index ea8c92b..c7b1a1a 100644 --- a/app/src/sharedTestKoin/java/org/fnives/test/showcase/ui/splash/SplashActivityTest.kt +++ b/app/src/sharedTestKoin/java/org/fnives/test/showcase/ui/splash/SplashActivityTest.kt @@ -61,8 +61,9 @@ class SplashActivityTest : KoinTest { disposable.dispose() } + /** GIVEN loggedInState WHEN opened THEN MainActivity is started */ @Test - fun GIVEN_loggedInState_WHEN_opened_THEN_MainActivity_is_started() { + fun loggedInStateNavigatesToHome() { SetupLoggedInState.setupLogin(mockServerScenarioSetupTestRule.mockServerScenarioSetup) activityScenario = ActivityScenario.launch(SplashActivity::class.java) @@ -75,8 +76,9 @@ class SplashActivityTest : KoinTest { SetupLoggedInState.setupLogout() } + /** GIVEN loggedOffState WHEN opened THEN AuthActivity is started */ @Test - fun GIVEN_loggedOffState_WHEN_opened_THEN_AuthActivity_is_started() { + fun loggedOutStatesNavigatesToAuthentication() { SetupLoggedInState.setupLogout() activityScenario = ActivityScenario.launch(SplashActivity::class.java)