diff --git a/app/build.gradle b/app/build.gradle index dd60cdf4..81322ef9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -71,6 +71,7 @@ dependencies { } implementation "com.github.bumptech.glide:okhttp-integration:4.11.0" + implementation 'androidx.legacy:legacy-support-v4:1.0.0' testImplementation "com.github.tomakehurst:wiremock-jre8:2.26.3" testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0" testImplementation 'junit:junit:4.13' diff --git a/app/src/androidTest/java/com/h/pixeldroid/BottomMenuTest.kt b/app/src/androidTest/java/com/h/pixeldroid/BottomMenuTest.kt new file mode 100644 index 00000000..09122308 --- /dev/null +++ b/app/src/androidTest/java/com/h/pixeldroid/BottomMenuTest.kt @@ -0,0 +1,25 @@ +package com.h.pixeldroid + +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.ext.junit.rules.ActivityScenarioRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class BottomMenuTest { + @get:Rule + var activityRule: ActivityScenarioRule + = ActivityScenarioRule(MainActivity::class.java) + + @Test + fun testFollowersTextView() { + onView(withId(R.id.activity_main_account_btn)).perform(click()) + onView(withId(R.id.profile_main_container)).check(matches(isDisplayed())) + } +} diff --git a/app/src/androidTest/java/com/h/pixeldroid/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/h/pixeldroid/ExampleInstrumentedTest.kt index 4f6ac769..9f8c3197 100644 --- a/app/src/androidTest/java/com/h/pixeldroid/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/h/pixeldroid/ExampleInstrumentedTest.kt @@ -2,12 +2,10 @@ package com.h.pixeldroid import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 - +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - /** * Instrumented test, which will execute on an Android device. * diff --git a/app/src/androidTest/java/com/h/pixeldroid/LoginInstrumentedTest.kt b/app/src/androidTest/java/com/h/pixeldroid/LoginInstrumentedTest.kt index 44868f7f..114e0bbc 100644 --- a/app/src/androidTest/java/com/h/pixeldroid/LoginInstrumentedTest.kt +++ b/app/src/androidTest/java/com/h/pixeldroid/LoginInstrumentedTest.kt @@ -12,11 +12,15 @@ import androidx.test.espresso.intent.Intents.intended import androidx.test.espresso.intent.matcher.IntentMatchers.hasAction import androidx.test.espresso.intent.matcher.IntentMatchers.hasDataString import androidx.test.espresso.intent.rule.IntentsTestRule -import androidx.test.espresso.matcher.ViewMatchers.* +import androidx.test.espresso.matcher.ViewMatchers.hasErrorText +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.rule.ActivityTestRule -import org.hamcrest.CoreMatchers.* +import org.hamcrest.CoreMatchers.allOf +import org.hamcrest.CoreMatchers.anyOf +import org.hamcrest.CoreMatchers.containsString import org.hamcrest.Matcher import org.junit.Before import org.junit.Rule @@ -39,26 +43,27 @@ class LoginInstrumentedTest { fun clickConnect() { onView(withId(R.id.connect_instance_button)).check(matches(withText("Connect"))) } + @Test fun invalidURL() { onView(withId(R.id.editText)).perform(ViewActions.replaceText("/jdi"), ViewActions.closeSoftKeyboard()) onView(withId(R.id.connect_instance_button)).perform(click()) onView(withId(R.id.editText)).check(matches(hasErrorText("Invalid domain"))) } + @Test fun notPixelfedInstance() { onView(withId(R.id.editText)).perform(ViewActions.replaceText("localhost"), ViewActions.closeSoftKeyboard()) onView(withId(R.id.connect_instance_button)).perform(click()) onView(withId(R.id.editText)).check(matches(hasErrorText("Could not register the application with this server"))) } - - } @RunWith(AndroidJUnit4::class) class LoginCheckIntent { @get:Rule val intentsTestRule = IntentsTestRule(LoginActivity::class.java) + @Test fun launchesIntent() { val expectedIntent: Matcher = allOf( @@ -75,6 +80,7 @@ class LoginCheckIntent { } } + @RunWith(AndroidJUnit4::class) class AfterIntent { @@ -87,6 +93,7 @@ class AfterIntent { val intent = Intent(ACTION_VIEW, Uri.parse("oauth2redirect://com.h.pixeldroid?code=sdfdqsf")) launchedActivity = rule.launchActivity(intent) } + @Test fun usesIntent() { diff --git a/app/src/androidTest/java/com/h/pixeldroid/ProfileTest.kt b/app/src/androidTest/java/com/h/pixeldroid/ProfileTest.kt index fbf2e11c..7b57d6f4 100644 --- a/app/src/androidTest/java/com/h/pixeldroid/ProfileTest.kt +++ b/app/src/androidTest/java/com/h/pixeldroid/ProfileTest.kt @@ -3,15 +3,16 @@ package com.h.pixeldroid import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches -import androidx.test.espresso.matcher.ViewMatchers.* +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 org.hamcrest.Matchers.not - +import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith -import java.lang.Thread.sleep + @RunWith(AndroidJUnit4::class) class ProfileTest { @@ -19,10 +20,14 @@ class ProfileTest { var activityRule: ActivityScenarioRule = ActivityScenarioRule(MainActivity::class.java) - @Test - fun testFollowersTextView() { - onView(withId(R.id.button)).perform(click()) - onView(withId(R.id.followers)).check(matches(withText("Followers"))) + @Before + fun openProfileFragment() { + onView(withId(R.id.activity_main_account_btn)).perform(click()) } -} + @Test + fun randomUsernameCorrectlyLoadedTest() { + Thread.sleep(5000) // wait for the username to load (to modify once we know how) + onView(withId(R.id.accountName)).check(matches(not(withText(R.string.no_username)))) + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/h/pixeldroid/SettingsTest.kt b/app/src/androidTest/java/com/h/pixeldroid/SettingsTest.kt index 8a1fc3f9..17d23a03 100644 --- a/app/src/androidTest/java/com/h/pixeldroid/SettingsTest.kt +++ b/app/src/androidTest/java/com/h/pixeldroid/SettingsTest.kt @@ -1,16 +1,14 @@ package com.h.pixeldroid -import android.view.Gravity import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.Espresso.pressBack -import androidx.test.espresso.action.ViewActions import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.contrib.DrawerActions -import androidx.test.espresso.contrib.DrawerMatchers.isClosed import androidx.test.espresso.contrib.NavigationViewActions -import androidx.test.espresso.matcher.ViewMatchers.* +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -22,47 +20,25 @@ class SettingsTest { var activityRule: ActivityScenarioRule = ActivityScenarioRule(MainActivity::class.java) - @Test - fun testDrawerSettingsButton() { - // Open Drawer to click on navigation. - onView(withId(R.id.drawer_layout)) - .check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed. - .perform(DrawerActions.open()); // Open Drawer - - // Start the screen of the activity. - onView(withId(R.id.nav_view)).perform(NavigationViewActions.navigateTo(R.id.nav_settings)) - - // Check that settings activity was opened. - onView(withText(R.string.signature_title)).check(matches(isDisplayed())) + @Before + fun openDrawer() { + onView(withId(R.id.drawer_layout)).perform(DrawerActions.open()) } @Test - fun testDrawerProfileButton() { - // Open Drawer to click on navigation. - onView(withId(R.id.drawer_layout)) - .check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed. - .perform(DrawerActions.open()); // Open Drawer - - // Start the screen of the activity. + fun myProfileButtonTest() { onView(withId(R.id.nav_view)).perform(NavigationViewActions.navigateTo(R.id.nav_account)) - - // Check that profile activity was opened. - onView(withId(R.id.posts)).check(matches(withText("Posts"))) + onView(withId(R.id.profile_main_container)).check(matches(isDisplayed())) } @Test - fun testOnBackPressed() { - // Open Drawer to click on navigation. - onView(withId(R.id.drawer_layout)) - .check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed. - .perform(DrawerActions.open()); // Open Drawer - - // Start the screen of your activity. + fun settingsButtonTest() { onView(withId(R.id.nav_view)).perform(NavigationViewActions.navigateTo(R.id.nav_settings)) + onView(withId(R.id.settings)).check(matches(isDisplayed())) + } - onView(withId(R.id.settings)).perform(ViewActions.pressBack()) - - // Check that profile activity was opened. - onView(withId(R.id.button_start_login)).check(matches(withText("start login"))) + @Test + fun accessibilityButtonTest() { + // TODO if some accessibility view is added } } \ No newline at end of file diff --git a/app/src/androidTest/java/com/h/pixeldroid/SwipeTest.kt b/app/src/androidTest/java/com/h/pixeldroid/SwipeTest.kt new file mode 100644 index 00000000..18123c9a --- /dev/null +++ b/app/src/androidTest/java/com/h/pixeldroid/SwipeTest.kt @@ -0,0 +1,33 @@ +package com.h.pixeldroid + +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.swipeLeft +import androidx.test.espresso.action.ViewActions.swipeRight +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.ext.junit.rules.ActivityScenarioRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class SwipeTest { + @get:Rule + var activityRule: ActivityScenarioRule + = ActivityScenarioRule(MainActivity::class.java) + + @Test + fun swipingRightOnHomepageShowsSettings() { + onView(withId(R.id.main_linear_layout)).perform(swipeRight()) + onView(withId(R.id.nav_view)).check(matches(isDisplayed())) + } + + @Test + fun swipeLeftOnHomePageShowsProfile() { + // to modify when we add more tabs + onView(withId(R.id.main_linear_layout)).perform(swipeLeft()) + onView(withId(R.id.profile_main_container)).check(matches(isDisplayed())) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e05fabde..17a36621 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -41,11 +41,6 @@ android:scheme="@string/auth_scheme" /> - - - diff --git a/app/src/main/java/com/h/pixeldroid/LoginActivity.kt b/app/src/main/java/com/h/pixeldroid/LoginActivity.kt index feff3b80..3d6bca07 100644 --- a/app/src/main/java/com/h/pixeldroid/LoginActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/LoginActivity.kt @@ -6,7 +6,6 @@ import android.content.Intent import android.content.SharedPreferences import android.net.Uri import android.os.Bundle -import android.util.Log import androidx.appcompat.app.AppCompatActivity import androidx.browser.customtabs.CustomTabsIntent import com.h.pixeldroid.api.PixelfedAPI diff --git a/app/src/main/java/com/h/pixeldroid/MainActivity.kt b/app/src/main/java/com/h/pixeldroid/MainActivity.kt index 334d51d0..5a13ee92 100644 --- a/app/src/main/java/com/h/pixeldroid/MainActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/MainActivity.kt @@ -3,13 +3,18 @@ package com.h.pixeldroid import android.content.Intent import android.os.Bundle import android.view.MenuItem -import android.view.View import android.widget.Button +import android.widget.ImageButton +import android.widget.LinearLayout import androidx.annotation.NonNull import androidx.appcompat.app.AppCompatActivity import androidx.core.view.GravityCompat import androidx.drawerlayout.widget.DrawerLayout +import androidx.fragment.app.Fragment import com.google.android.material.navigation.NavigationView +import com.h.pixeldroid.fragments.HomeFragment +import com.h.pixeldroid.fragments.ProfileFragment +import com.h.pixeldroid.motions.OnSwipeListener class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { @@ -19,20 +24,49 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + val mainLinearLayout : LinearLayout = findViewById(R.id.main_linear_layout) + val homepageButton : ImageButton = findViewById(R.id.activity_main_home_btn) + val accountButton : ImageButton = findViewById(R.id.activity_main_account_btn) + + homepageButton.setOnClickListener { + launchFragment(HomeFragment()) + } + accountButton.setOnClickListener { + launchFragment(ProfileFragment()) + } + // Setup the drawer drawerLayout = findViewById(R.id.drawer_layout) val navigationView: NavigationView = findViewById(R.id.nav_view) navigationView.setNavigationItemSelectedListener(this) - val buttonLogin = findViewById