@@ -3,9 +3,11 @@ package org.simple.clinic.user
33import android.support.test.runner.AndroidJUnit4
44import com.google.common.truth.Truth.assertThat
55import org.junit.Before
6+ import org.junit.Rule
67import org.junit.Test
78import org.junit.runner.RunWith
89import org.simple.clinic.AppDatabase
10+ import org.simple.clinic.AuthenticationRule
911import org.simple.clinic.TestClinicApp
1012import org.simple.clinic.TestData
1113import org.simple.clinic.facility.FacilityRepository
@@ -39,16 +41,22 @@ class UserSessionAndroidTest {
3941 @Inject
4042 lateinit var facilityApi: FacilitySyncApiV1
4143
44+ @get:Rule
45+ val authenticationRule = AuthenticationRule ()
46+
4247 @Before
4348 fun setUp () {
4449 TestClinicApp .appComponent().inject(this )
45- userSession.logout().blockingAwait()
4650 }
4751
4852 @Test
4953 fun when_correct_login_params_are_given_then_login_should_happen_and_session_data_should_be_persisted () {
54+ val ongoingLoginEntry = userSession.requireLoggedInUser()
55+ .map { OngoingLoginEntry (userId = it.uuid, phoneNumber = it.phoneNumber, pin = testData.qaUserPin()) }
56+ .blockingFirst()
57+
5058 val lawgon = userSession
51- .saveOngoingLoginEntry(testData.qaOngoingLoginEntry() )
59+ .saveOngoingLoginEntry(ongoingLoginEntry )
5260 .andThen(userSession.loginWithOtp(testData.qaUserOtp()))
5361 .blockingGet()
5462
@@ -60,17 +68,14 @@ class UserSessionAndroidTest {
6068 assertThat(userSession.isUserLoggedIn()).isTrue()
6169 assertThat(loggedInUser!! .status).isEqualTo(UserStatus .APPROVED_FOR_SYNCING )
6270 assertThat(loggedInUser.loggedInStatus).isEqualTo(LOGGED_IN )
63-
64- val currentFacility = facilityRepository
65- .currentFacility(userSession)
66- .blockingFirst()
67- assertThat(currentFacility.uuid).isEqualTo(UUID .fromString(" 43dad34c-139e-4e5f-976e-a3ef1d9ac977" ))
6871 }
6972
7073 @Test
7174 fun when_incorrect_login_params_are_given_then_login_should_fail () {
75+ userSession.logout().blockingAwait()
76+
7277 val lawgon = userSession
73- .saveOngoingLoginEntry(OngoingLoginEntry (testData.qaUserUuid (), " 9919299" , " 0102" ))
78+ .saveOngoingLoginEntry(OngoingLoginEntry (UUID .randomUUID (), " 9919299" , " 0102" ))
7479 .andThen(userSession.loginWithOtp(testData.qaUserOtp()))
7580 .blockingGet()
7681
@@ -83,14 +88,16 @@ class UserSessionAndroidTest {
8388
8489 @Test
8590 fun when_logging_in_from_registration_entry_user_should_be_logged_in_locally () {
91+ userSession.logout().blockingAwait()
92+
8693 val facilities = facilityApi.pull(10 )
8794 .map { it.facilities }
8895 .map { facilities -> facilities.map { it.toDatabaseModel(SyncStatus .DONE ) } }
8996 .blockingGet()
9097 appDatabase.facilityDao().save(facilities)
9198
9299 val selectedFacilities = facilities.subList(0 , 2 )
93- val ongoingRegistrationEntry = testData.ongoingRegistrationEntry(selectedFacilities)
100+ val ongoingRegistrationEntry = testData.ongoingRegistrationEntry(facilities = selectedFacilities)
94101 userSession.saveOngoingRegistrationEntry(ongoingRegistrationEntry)
95102 .andThen(userSession.loginFromOngoingRegistrationEntry())
96103 .blockingAwait()
@@ -110,8 +117,12 @@ class UserSessionAndroidTest {
110117
111118 @Test
112119 fun when_user_is_logged_out_then_all_app_data_should_get_cleared () {
120+ val ongoingLoginEntry = userSession.requireLoggedInUser()
121+ .map { OngoingLoginEntry (userId = it.uuid, phoneNumber = it.phoneNumber, pin = testData.qaUserPin()) }
122+ .blockingFirst()
123+
113124 userSession
114- .saveOngoingLoginEntry(testData.qaOngoingLoginEntry() )
125+ .saveOngoingLoginEntry(ongoingLoginEntry )
115126 .andThen(userSession.loginWithOtp(testData.qaUserOtp()))
116127 .toCompletable()
117128 .andThen(userSession.logout())
@@ -124,14 +135,16 @@ class UserSessionAndroidTest {
124135
125136 @Test
126137 fun when_registering_a_user_is_registered_then_the_logged_in_user_should_be_sent_to_the_server () {
138+ userSession.logout().blockingAwait()
139+
127140 val facilities = facilityApi.pull(10 )
128141 .map { it.facilities }
129142 .map { facilities -> facilities.map { it.toDatabaseModel(SyncStatus .DONE ) } }
130143 .blockingGet()
131144 appDatabase.facilityDao().save(facilities)
132145
133146 val selectedFacilities = facilities.subList(0 , 2 )
134- val ongoingRegistrationEntry = testData.ongoingRegistrationEntry(selectedFacilities)
147+ val ongoingRegistrationEntry = testData.ongoingRegistrationEntry(facilities = selectedFacilities)
135148
136149 val registrationResult = userSession
137150 .saveOngoingRegistrationEntry(ongoingRegistrationEntry)
@@ -146,7 +159,11 @@ class UserSessionAndroidTest {
146159
147160 @Test
148161 fun when_saving_a_user_locally_it_should_save_the_user_locally_with_a_status_of_not_signed_in () {
149- val findUserResult = userSession.findExistingUser(testData.qaOngoingLoginEntry().phoneNumber).blockingGet()
162+ val ongoingLoginEntry = userSession.requireLoggedInUser()
163+ .map { OngoingLoginEntry (userId = it.uuid, phoneNumber = it.phoneNumber, pin = testData.qaUserPin()) }
164+ .blockingFirst()
165+
166+ val findUserResult = userSession.findExistingUser(ongoingLoginEntry.phoneNumber).blockingGet()
150167 assertThat(findUserResult).isInstanceOf(FindUserResult .Found ::class .java)
151168
152169 val foundUserPayload = (findUserResult as FindUserResult .Found ).user
@@ -165,8 +182,12 @@ class UserSessionAndroidTest {
165182
166183 @Test
167184 fun when_logged_in_user_is_cleared_the_local_saved_user_must_be_removed_from_database () {
185+ val ongoingLoginEntry = userSession.requireLoggedInUser()
186+ .map { OngoingLoginEntry (userId = it.uuid, phoneNumber = it.phoneNumber, pin = testData.qaUserPin()) }
187+ .blockingFirst()
188+
168189 val lawgon = userSession
169- .saveOngoingLoginEntry(testData.qaOngoingLoginEntry() )
190+ .saveOngoingLoginEntry(ongoingLoginEntry )
170191 .andThen(userSession.loginWithOtp(testData.qaUserOtp()))
171192 .blockingGet()
172193
@@ -183,7 +204,11 @@ class UserSessionAndroidTest {
183204
184205 @Test
185206 fun when_login_otp_is_requested_successfully_it_must_update_the_logged_in_status_of_the_user () {
186- val findUserResult = userSession.findExistingUser(testData.qaOngoingLoginEntry().phoneNumber).blockingGet()
207+ val ongoingLoginEntry = userSession.requireLoggedInUser()
208+ .map { OngoingLoginEntry (userId = it.uuid, phoneNumber = it.phoneNumber, pin = testData.qaUserPin()) }
209+ .blockingFirst()
210+
211+ val findUserResult = userSession.findExistingUser(ongoingLoginEntry.phoneNumber).blockingGet()
187212 assertThat(findUserResult).isInstanceOf(FindUserResult .Found ::class .java)
188213
189214 val foundUser = (findUserResult as FindUserResult .Found ).user
@@ -194,7 +219,7 @@ class UserSessionAndroidTest {
194219 assertThat(userSession.loggedInUserImmediate()!! .loggedInStatus).isEqualTo(NOT_LOGGED_IN )
195220
196221 val requestOtpResult = userSession
197- .saveOngoingLoginEntry(testData.qaOngoingLoginEntry() )
222+ .saveOngoingLoginEntry(ongoingLoginEntry )
198223 .andThen(userSession.requestLoginOtp())
199224 .blockingGet()
200225
0 commit comments