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.
This commit is contained in:
Peter Serwylo 2017-03-31 09:40:56 +11:00 committed by Hans-Christoph Steiner
parent e34f289246
commit c3424f9ff3
4 changed files with 52 additions and 9 deletions

View File

@ -136,7 +136,7 @@ public class AppDetailsRecyclerViewAdapter
notifyDataSetChanged(); notifyDataSetChanged();
} }
private void setShowVersions(boolean showVersions) { void setShowVersions(boolean showVersions) {
this.showVersions = showVersions; this.showVersions = showVersions;
boolean itemsWereRemoved = items.removeAll(versions); boolean itemsWereRemoved = items.removeAll(versions);
int startIndex = items.indexOf(VIEWTYPE_VERSIONS) + 1; int startIndex = items.indexOf(VIEWTYPE_VERSIONS) + 1;

View File

@ -304,6 +304,6 @@ public class AppProviderTest extends FDroidProviderTest {
AppProvider.Helper.recalculatePreferredMetadata(context); AppProvider.Helper.recalculatePreferredMetadata(context);
return AppProvider.Helper.findSpecificApp(context.getContentResolver(), id, 1, Cols.ALL); return AppProvider.Helper.findSpecificApp(context.getContentResolver(), id, repoId, Cols.ALL);
} }
} }

View File

@ -23,6 +23,7 @@ package org.fdroid.fdroid.data;
import android.app.Application; import android.app.Application;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
@ -125,6 +126,7 @@ public class RepoProviderTest extends FDroidProviderTest {
assertEquals(4, RepoProvider.Helper.all(context).size()); assertEquals(4, RepoProvider.Helper.all(context).size());
Repo mock1 = insertRepo( Repo mock1 = insertRepo(
context,
"https://mock-repo-1.example.com/fdroid/repo", "https://mock-repo-1.example.com/fdroid/repo",
"Just a made up repo", "Just a made up repo",
"ABCDEF1234567890", "ABCDEF1234567890",
@ -132,6 +134,7 @@ public class RepoProviderTest extends FDroidProviderTest {
); );
Repo mock2 = insertRepo( Repo mock2 = insertRepo(
context,
"http://mock-repo-2.example.com/fdroid/repo", "http://mock-repo-2.example.com/fdroid/repo",
"Mock repo without a name", "Mock repo without a name",
"0123456789ABCDEF" "0123456789ABCDEF"
@ -167,6 +170,7 @@ public class RepoProviderTest extends FDroidProviderTest {
@Test @Test
public void canDeleteRepo() { public void canDeleteRepo() {
Repo mock1 = insertRepo( Repo mock1 = insertRepo(
context,
"https://mock-repo-1.example.com/fdroid/repo", "https://mock-repo-1.example.com/fdroid/repo",
"Just a made up repo", "Just a made up repo",
"ABCDEF1234567890", "ABCDEF1234567890",
@ -174,6 +178,7 @@ public class RepoProviderTest extends FDroidProviderTest {
); );
Repo mock2 = insertRepo( Repo mock2 = insertRepo(
context,
"http://mock-repo-2.example.com/fdroid/repo", "http://mock-repo-2.example.com/fdroid/repo",
"Mock repo without a name", "Mock repo without a name",
"0123456789ABCDEF" "0123456789ABCDEF"
@ -191,11 +196,11 @@ public class RepoProviderTest extends FDroidProviderTest {
assertEquals(mock2.id, afterDelete.get(4).id); assertEquals(mock2.id, afterDelete.get(4).id);
} }
protected Repo insertRepo(String address, String description, String fingerprint) { public Repo insertRepo(Context context, String address, String description, String fingerprint) {
return insertRepo(address, description, fingerprint, null); 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(); ContentValues values = new ContentValues();
values.put(RepoTable.Cols.ADDRESS, address); values.put(RepoTable.Cols.ADDRESS, address);
values.put(RepoTable.Cols.DESCRIPTION, description); values.put(RepoTable.Cols.DESCRIPTION, description);

View File

@ -1,6 +1,7 @@
package org.fdroid.fdroid.views; package org.fdroid.fdroid.views;
import android.app.Application; import android.app.Application;
import android.content.ContentValues;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -8,12 +9,17 @@ import android.view.ViewGroup;
import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import org.fdroid.fdroid.Assert;
import org.fdroid.fdroid.BuildConfig; import org.fdroid.fdroid.BuildConfig;
import org.fdroid.fdroid.Preferences;
import org.fdroid.fdroid.R; import org.fdroid.fdroid.R;
import org.fdroid.fdroid.data.Apk; import org.fdroid.fdroid.data.Apk;
import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.data.App;
import org.fdroid.fdroid.data.AppProviderTest;
import org.fdroid.fdroid.data.FDroidProvider; import org.fdroid.fdroid.data.FDroidProvider;
import org.fdroid.fdroid.data.FDroidProviderTest; 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.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -27,22 +33,35 @@ import static org.junit.Assert.assertEquals;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class AppDetailsAdapterTest extends FDroidProviderTest { public class AppDetailsAdapterTest extends FDroidProviderTest {
private App app;
@Before @Before
public void setup() { public void setup() {
ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context)); 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 @After
public void teardown() { public void teardown() {
ImageLoader.getInstance().destroy(); ImageLoader.getInstance().destroy();
FDroidProvider.clearDbHelperSingleton(); FDroidProvider.clearDbHelperSingleton();
Preferences.clearSingletonForTesting();
} }
@Test @Test
public void appWithNoVersions() { public void appWithNoVersionsOrScreenshots() {
App app = new App(); AppDetailsRecyclerViewAdapter adapter = new AppDetailsRecyclerViewAdapter(context, app, dummyCallbacks);
app.name = "Test App"; populateViewHolders(adapter);
app.description = "Test App <b>Description</b>";
assertEquals(3, adapter.getItemCount());
}
@Test
public void appWithScreenshots() {
app.phoneScreenshots = new String[] {"screenshot1.png", "screenshot2.png"};
AppDetailsRecyclerViewAdapter adapter = new AppDetailsRecyclerViewAdapter(context, app, dummyCallbacks); AppDetailsRecyclerViewAdapter adapter = new AppDetailsRecyclerViewAdapter(context, app, dummyCallbacks);
populateViewHolders(adapter); 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. * 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 * Doesn't care about what type of holder it should be, the adapter is able to figure all that