From 870a39a24f0d6f422a7983ed6714fd21346b4040 Mon Sep 17 00:00:00 2001 From: JMaio Date: Fri, 21 Dec 2018 10:15:55 +0000 Subject: [PATCH 1/3] change firebase creds to always be present --- .../io/github/jmaio/coinz/MainActivity.kt | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/io/github/jmaio/coinz/MainActivity.kt b/app/src/main/java/io/github/jmaio/coinz/MainActivity.kt index bb63b5e..b275264 100644 --- a/app/src/main/java/io/github/jmaio/coinz/MainActivity.kt +++ b/app/src/main/java/io/github/jmaio/coinz/MainActivity.kt @@ -49,9 +49,15 @@ class MainActivity : AppCompatActivity(), AnkoLogger, LocationEngineListener { private var penySource: GeoJsonSource? = null private var geoJsonSources = mutableMapOf() - private lateinit var auth: FirebaseAuth - private lateinit var db: FirebaseFirestore - private lateinit var user: FirebaseUser + // Initialize Firebase Auth + private var auth = FirebaseAuth.getInstance() + private var db = FirebaseFirestore.getInstance().apply { + firestoreSettings = FirebaseFirestoreSettings.Builder() + .setTimestampsInSnapshotsEnabled(true) + .build() + } + val user = auth.currentUser + private var wallet = Wallet() private var walletStore = WalletStore() private var userDisplay = "defaultUser" @@ -73,13 +79,7 @@ class MainActivity : AppCompatActivity(), AnkoLogger, LocationEngineListener { @SuppressLint("MissingPermission") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - // Initialize Firebase Auth - auth = FirebaseAuth.getInstance() - db = FirebaseFirestore.getInstance().apply { - firestoreSettings = FirebaseFirestoreSettings.Builder() - .setTimestampsInSnapshotsEnabled(true) - .build() - } + // Mapbox access token is configured here. This needs to be called either in your application // object or in the same activity which contains the mapview. Mapbox.getInstance(this, getString(R.string.mapbox_access_token)) @@ -175,12 +175,11 @@ class MainActivity : AppCompatActivity(), AnkoLogger, LocationEngineListener { super.onStart() // set currently signed-in user and display it auth.currentUser.let { u -> - if (u != null) - user = u u?.email.let { e -> - if (e != null) + if (e != null) { userDisplay = e - user_id_chip.text = e + } + user_id_chip.text = userDisplay } } @@ -264,6 +263,7 @@ class MainActivity : AppCompatActivity(), AnkoLogger, LocationEngineListener { } // get this user's wallet as a basis for populating the map + if (user != null) walletStore.getWallet(user) { w -> wallet = w if (!sameDate) { @@ -347,6 +347,7 @@ class MainActivity : AppCompatActivity(), AnkoLogger, LocationEngineListener { private fun createOnClickListeners() { fab.setOnClickListener { + if (user != null) walletStore.getWallet(user) { w -> wallet = w startActivity(Intent(this, WalletActivity::class.java) @@ -357,6 +358,7 @@ class MainActivity : AppCompatActivity(), AnkoLogger, LocationEngineListener { } bottom_app_bar.setNavigationOnClickListener { + if (user != null) walletStore.getWallet(user) { w -> wallet = w startActivity(Intent(this, BankActivity::class.java) From 19ee037c3f10cc0752c808b22acae03f60d5536e Mon Sep 17 00:00:00 2001 From: JMaio Date: Fri, 21 Dec 2018 10:16:04 +0000 Subject: [PATCH 2/3] update tests --- .../jmaio/coinz/ExampleInstrumentedTest.kt | 24 ---- .../github/jmaio/coinz/LoginActivityTest.kt | 104 ++++++++---------- .../java/io/github/jmaio/coinz/LogoutTest.kt | 50 +++++++++ .../io/github/jmaio/coinz/MainActivityTest.kt | 64 +++++++++++ 4 files changed, 161 insertions(+), 81 deletions(-) delete mode 100644 app/src/androidTest/java/io/github/jmaio/coinz/ExampleInstrumentedTest.kt create mode 100644 app/src/androidTest/java/io/github/jmaio/coinz/LogoutTest.kt create mode 100644 app/src/androidTest/java/io/github/jmaio/coinz/MainActivityTest.kt diff --git a/app/src/androidTest/java/io/github/jmaio/coinz/ExampleInstrumentedTest.kt b/app/src/androidTest/java/io/github/jmaio/coinz/ExampleInstrumentedTest.kt deleted file mode 100644 index 58d672a..0000000 --- a/app/src/androidTest/java/io/github/jmaio/coinz/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package io.github.jmaio.coinz - -import androidx.test.InstrumentationRegistry -import androidx.test.runner.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getTargetContext() - assertEquals("io.github.jmaio.coinz", appContext.packageName) - } -} diff --git a/app/src/androidTest/java/io/github/jmaio/coinz/LoginActivityTest.kt b/app/src/androidTest/java/io/github/jmaio/coinz/LoginActivityTest.kt index ce3d1ec..2b4ebd2 100644 --- a/app/src/androidTest/java/io/github/jmaio/coinz/LoginActivityTest.kt +++ b/app/src/androidTest/java/io/github/jmaio/coinz/LoginActivityTest.kt @@ -4,11 +4,12 @@ package io.github.jmaio.coinz import android.view.View import android.view.ViewGroup import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.Espresso.pressBack import androidx.test.espresso.action.ViewActions.* -import androidx.test.espresso.matcher.ViewMatchers.* +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.filters.LargeTest import androidx.test.rule.ActivityTestRule +import androidx.test.rule.GrantPermissionRule import androidx.test.runner.AndroidJUnit4 import org.hamcrest.Description import org.hamcrest.Matcher @@ -26,63 +27,51 @@ class LoginActivityTest { @JvmField var mActivityTestRule = ActivityTestRule(LoginActivity::class.java) + @Rule + @JvmField + var mGrantPermissionRule = + GrantPermissionRule.grant( + "android.permission.ACCESS_FINE_LOCATION") + @Test fun loginActivityTest() { - // Added a sleep statement to match the app's execution delay. - // The recommended way to handle such scenarios is to use Espresso idling resources: - // https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html - Thread.sleep(3000) - - val appCompatAutoCompleteTextView = onView( - allOf(withId(R.id.email), - childAtPosition( - childAtPosition( - withId(R.id.email_input_field), - 0), - 0), - isDisplayed())) - appCompatAutoCompleteTextView.perform(click()) - Thread.sleep(1000) - - val appCompatAutoCompleteTextView2 = onView( - allOf(withId(R.id.email), - childAtPosition( - childAtPosition( - withId(R.id.email_input_field), - 0), - 0), - isDisplayed())) - appCompatAutoCompleteTextView2.perform(replaceText("user"), closeSoftKeyboard()) - - // Added a sleep statement to match the app's execution delay. - // The recommended way to handle such scenarios is to use Espresso idling resources: - // https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html - Thread.sleep(1000) - - val appCompatEditText = onView( - allOf(withId(R.id.login_password), - childAtPosition( - childAtPosition( - withId(R.id.password_input_field), - 0), - 0), - isDisplayed())) - Thread.sleep(1000) - appCompatEditText.perform(replaceText("hello"), closeSoftKeyboard()) - -// pressBack() - Thread.sleep(1000) - - val materialButton = onView( - allOf(withId(R.id.email_sign_in_button), withText("Sign in"), - childAtPosition( - allOf(withId(R.id.login_form), - childAtPosition( - withId(android.R.id.content), - 0)), - 4), - isDisplayed())) - materialButton.perform(click()) + if (mActivityTestRule.activity.user == null) { + Thread.sleep(4000) + + val appCompatAutoCompleteTextView = onView( + allOf(withId(R.id.email_input), + childAtPosition( + childAtPosition( + withId(R.id.email_input_field), + 0), + 0))) + appCompatAutoCompleteTextView.perform(scrollTo(), replaceText("user@email.com"), closeSoftKeyboard()) + + Thread.sleep(500) + + val appCompatEditText = onView( + allOf(withId(R.id.password_input), + childAtPosition( + childAtPosition( + withId(R.id.password_input_field), + 0), + 0))) + appCompatEditText.perform(scrollTo(), replaceText("123456"), closeSoftKeyboard()) + + Thread.sleep(500) + + val materialButton = onView( + allOf(withId(R.id.sign_in_button), withText("Sign in"), + childAtPosition( + childAtPosition( + withId(R.id.login_form), + 4), + 1))) + materialButton.perform(scrollTo(), click()) + + Thread.sleep(500) + } + } private fun childAtPosition( @@ -101,4 +90,5 @@ class LoginActivityTest { } } } + } diff --git a/app/src/androidTest/java/io/github/jmaio/coinz/LogoutTest.kt b/app/src/androidTest/java/io/github/jmaio/coinz/LogoutTest.kt new file mode 100644 index 0000000..0ba2458 --- /dev/null +++ b/app/src/androidTest/java/io/github/jmaio/coinz/LogoutTest.kt @@ -0,0 +1,50 @@ +package io.github.jmaio.coinz + + +import android.view.View +import android.view.ViewGroup +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.Espresso.pressBack +import androidx.test.espresso.action.ViewActions.* +import androidx.test.espresso.matcher.ViewMatchers.* +import androidx.test.filters.LargeTest +import androidx.test.rule.ActivityTestRule +import androidx.test.rule.GrantPermissionRule +import androidx.test.runner.AndroidJUnit4 +import com.google.android.material.internal.NavigationMenu +import com.google.android.material.internal.NavigationMenuItemView +import com.google.android.material.navigation.NavigationView +import org.hamcrest.Description +import org.hamcrest.Matcher +import org.hamcrest.Matchers.allOf +import org.hamcrest.TypeSafeMatcher +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@LargeTest +@RunWith(AndroidJUnit4::class) +class LogoutTest { + + @Rule + @JvmField + var mActivityTestRule = ActivityTestRule(MainActivity::class.java) + + @Rule + @JvmField + var mGrantPermissionRule = + GrantPermissionRule.grant( + "android.permission.ACCESS_FINE_LOCATION") + + @Test + fun logoutTest() { + Thread.sleep(3000) + onView(withId(R.id.user_id_chip)).perform(click()) + + Thread.sleep(2000) + onView(withText("OK")).perform(click()) + + Thread.sleep(2000) + } + +} diff --git a/app/src/androidTest/java/io/github/jmaio/coinz/MainActivityTest.kt b/app/src/androidTest/java/io/github/jmaio/coinz/MainActivityTest.kt new file mode 100644 index 0000000..220b4ad --- /dev/null +++ b/app/src/androidTest/java/io/github/jmaio/coinz/MainActivityTest.kt @@ -0,0 +1,64 @@ +package io.github.jmaio.coinz + + +import android.view.View +import android.view.ViewGroup +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.Espresso.pressBack +import androidx.test.espresso.action.ViewActions.* +import androidx.test.espresso.matcher.ViewMatchers.* +import androidx.test.filters.LargeTest +import androidx.test.rule.ActivityTestRule +import androidx.test.rule.GrantPermissionRule +import androidx.test.runner.AndroidJUnit4 +import com.google.android.material.internal.NavigationMenu +import com.google.android.material.internal.NavigationMenuItemView +import com.google.android.material.navigation.NavigationView +import org.hamcrest.Description +import org.hamcrest.Matcher +import org.hamcrest.Matchers.allOf +import org.hamcrest.TypeSafeMatcher +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@LargeTest +@RunWith(AndroidJUnit4::class) +class MainActivityTest { + + @Rule + @JvmField + var mActivityTestRule = ActivityTestRule(MainActivity::class.java) + + @Rule + @JvmField + var mGrantPermissionRule = + GrantPermissionRule.grant( + "android.permission.ACCESS_FINE_LOCATION") + + @Test + fun mainActivityTest() { + if (mActivityTestRule.activity.user != null) { + + Thread.sleep(3000) + onView(withId(R.id.fab)).perform(click()) + + Thread.sleep(2000) + pressBack() + + Thread.sleep(2000) + onView(withId(R.id.app_bar_leaderboard)).perform(click()) + + Thread.sleep(2000) + pressBack() + + Thread.sleep(2000) + onView(withContentDescription("Navigate up")).perform(click()) + + Thread.sleep(2000) + pressBack() + + Thread.sleep(2000) + } + } +} From 4c289948f2d3465e2783cc21541d7fd4612de1a2 Mon Sep 17 00:00:00 2001 From: Joao Maio <10330349+JMaio@users.noreply.github.com> Date: Fri, 21 Dec 2018 10:19:23 +0000 Subject: [PATCH 3/3] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index b7cb235..77d0f31 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,8 @@ The coin collection game around The University of Edinburgh ## Author: Joao Maio\ s1621503 + +## Testing environment +The app was tested using API 26 (Oreo 8.0) on an emulated Pixel 2 XL device + +multiDex was enabled since it solved some compilation errors that would otherwise prevent building