From c3424f9ff3e674001f5a6aaad9e43a97cd9a3bf2 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Fri, 31 Mar 2017 09:40:56 +1100 Subject: [PATCH] Update AppDetailsAdapterTest for apps that don't have screenshots. While here, also added a couple of new test cases to better ensure the adapter plays nicely with its items when receiving an app with specific states. --- .../views/AppDetailsRecyclerViewAdapter.java | 2 +- .../fdroid/fdroid/data/AppProviderTest.java | 2 +- .../fdroid/fdroid/data/RepoProviderTest.java | 11 +++-- .../fdroid/views/AppDetailsAdapterTest.java | 46 +++++++++++++++++-- 4 files changed, 52 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java index 05fb567a1..a85b05672 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java @@ -136,7 +136,7 @@ public class AppDetailsRecyclerViewAdapter notifyDataSetChanged(); } - private void setShowVersions(boolean showVersions) { + void setShowVersions(boolean showVersions) { this.showVersions = showVersions; boolean itemsWereRemoved = items.removeAll(versions); int startIndex = items.indexOf(VIEWTYPE_VERSIONS) + 1; diff --git a/app/src/test/java/org/fdroid/fdroid/data/AppProviderTest.java b/app/src/test/java/org/fdroid/fdroid/data/AppProviderTest.java index 1abe19618..7e6697d19 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/AppProviderTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/AppProviderTest.java @@ -304,6 +304,6 @@ public class AppProviderTest extends FDroidProviderTest { AppProvider.Helper.recalculatePreferredMetadata(context); - return AppProvider.Helper.findSpecificApp(context.getContentResolver(), id, 1, Cols.ALL); + return AppProvider.Helper.findSpecificApp(context.getContentResolver(), id, repoId, Cols.ALL); } } diff --git a/app/src/test/java/org/fdroid/fdroid/data/RepoProviderTest.java b/app/src/test/java/org/fdroid/fdroid/data/RepoProviderTest.java index 85c3b641f..ae6495920 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/RepoProviderTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/RepoProviderTest.java @@ -23,6 +23,7 @@ package org.fdroid.fdroid.data; import android.app.Application; import android.content.ContentValues; +import android.content.Context; import android.net.Uri; import android.support.annotation.Nullable; @@ -125,6 +126,7 @@ public class RepoProviderTest extends FDroidProviderTest { assertEquals(4, RepoProvider.Helper.all(context).size()); Repo mock1 = insertRepo( + context, "https://mock-repo-1.example.com/fdroid/repo", "Just a made up repo", "ABCDEF1234567890", @@ -132,6 +134,7 @@ public class RepoProviderTest extends FDroidProviderTest { ); Repo mock2 = insertRepo( + context, "http://mock-repo-2.example.com/fdroid/repo", "Mock repo without a name", "0123456789ABCDEF" @@ -167,6 +170,7 @@ public class RepoProviderTest extends FDroidProviderTest { @Test public void canDeleteRepo() { Repo mock1 = insertRepo( + context, "https://mock-repo-1.example.com/fdroid/repo", "Just a made up repo", "ABCDEF1234567890", @@ -174,6 +178,7 @@ public class RepoProviderTest extends FDroidProviderTest { ); Repo mock2 = insertRepo( + context, "http://mock-repo-2.example.com/fdroid/repo", "Mock repo without a name", "0123456789ABCDEF" @@ -191,11 +196,11 @@ public class RepoProviderTest extends FDroidProviderTest { assertEquals(mock2.id, afterDelete.get(4).id); } - protected Repo insertRepo(String address, String description, String fingerprint) { - return insertRepo(address, description, fingerprint, null); + public Repo insertRepo(Context context, String address, String description, String fingerprint) { + return insertRepo(context, address, description, fingerprint, null); } - protected Repo insertRepo(String address, String description, String fingerprint, @Nullable String name) { + public static Repo insertRepo(Context context, String address, String description, String fingerprint, @Nullable String name) { ContentValues values = new ContentValues(); values.put(RepoTable.Cols.ADDRESS, address); values.put(RepoTable.Cols.DESCRIPTION, description); diff --git a/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java b/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java index a075e8783..1cb95465f 100644 --- a/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java +++ b/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java @@ -1,6 +1,7 @@ package org.fdroid.fdroid.views; import android.app.Application; +import android.content.ContentValues; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.ViewGroup; @@ -8,12 +9,17 @@ import android.view.ViewGroup; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; +import org.fdroid.fdroid.Assert; import org.fdroid.fdroid.BuildConfig; +import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.R; import org.fdroid.fdroid.data.Apk; import org.fdroid.fdroid.data.App; +import org.fdroid.fdroid.data.AppProviderTest; import org.fdroid.fdroid.data.FDroidProvider; import org.fdroid.fdroid.data.FDroidProviderTest; +import org.fdroid.fdroid.data.Repo; +import org.fdroid.fdroid.data.RepoProviderTest; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -27,22 +33,35 @@ import static org.junit.Assert.assertEquals; @RunWith(RobolectricTestRunner.class) public class AppDetailsAdapterTest extends FDroidProviderTest { + private App app; + @Before public void setup() { ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context)); + Preferences.setup(context); + + Repo repo = RepoProviderTest.insertRepo(context, "http://www.example.com/fdroid/repo", "", "", "Test Repo"); + app = AppProviderTest.insertApp(contentResolver, context, "com.example.app", "Test App", new ContentValues(), repo.getId()); } @After public void teardown() { ImageLoader.getInstance().destroy(); FDroidProvider.clearDbHelperSingleton(); + Preferences.clearSingletonForTesting(); } @Test - public void appWithNoVersions() { - App app = new App(); - app.name = "Test App"; - app.description = "Test App Description"; + public void appWithNoVersionsOrScreenshots() { + AppDetailsRecyclerViewAdapter adapter = new AppDetailsRecyclerViewAdapter(context, app, dummyCallbacks); + populateViewHolders(adapter); + + assertEquals(3, adapter.getItemCount()); + } + + @Test + public void appWithScreenshots() { + app.phoneScreenshots = new String[] {"screenshot1.png", "screenshot2.png"}; AppDetailsRecyclerViewAdapter adapter = new AppDetailsRecyclerViewAdapter(context, app, dummyCallbacks); populateViewHolders(adapter); @@ -51,6 +70,25 @@ public class AppDetailsAdapterTest extends FDroidProviderTest { } + @Test + public void appWithVersions() { + Assert.insertApk(context, app, 1); + Assert.insertApk(context, app, 2); + Assert.insertApk(context, app, 3); + + AppDetailsRecyclerViewAdapter adapter = new AppDetailsRecyclerViewAdapter(context, app, dummyCallbacks); + populateViewHolders(adapter); + + // Starts collapsed, now showing versions at all. + assertEquals(3, adapter.getItemCount()); + + adapter.setShowVersions(true); + assertEquals(6, adapter.getItemCount()); + + adapter.setShowVersions(false); + assertEquals(3, adapter.getItemCount()); + } + /** * Ensures that every single item in the adapter gets its view holder created and bound. * Doesn't care about what type of holder it should be, the adapter is able to figure all that