From 9fd8da42a1f17695cd17058f71d2a0800f8e43e2 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Thu, 6 Mar 2014 15:59:20 +1100 Subject: [PATCH] Adding test coverage for "AppProvider.Helper.findIgnored()" Also added tests for canAndWantToUpdate() while I was at it. --- src/org/fdroid/fdroid/data/AppProvider.java | 9 -- .../org/fdroid/fdroid/AppProviderTest.java | 110 ++++++++++++++++++ test/src/org/fdroid/fdroid/TestUtils.java | 2 +- 3 files changed, 111 insertions(+), 10 deletions(-) diff --git a/src/org/fdroid/fdroid/data/AppProvider.java b/src/org/fdroid/fdroid/data/AppProvider.java index 76d0121fb..463b57317 100644 --- a/src/org/fdroid/fdroid/data/AppProvider.java +++ b/src/org/fdroid/fdroid/data/AppProvider.java @@ -137,23 +137,14 @@ public class AppProvider extends FDroidProvider { public static final String SUGGESTED_VERSION_CODE = "suggestedVercode"; public static final String UPSTREAM_VERSION = "upstreamVersion"; public static final String UPSTREAM_VERSION_CODE = "upstreamVercode"; - public static final String CURRENT_APK = null; public static final String ADDED = "added"; public static final String LAST_UPDATED = "lastUpdated"; - public static final String INSTALLED_VERSION = null; - public static final String INSTALLED_VERCODE = null; - public static final String USER_INSTALLED = null; public static final String CATEGORIES = "categories"; public static final String ANTI_FEATURES = "antiFeatures"; public static final String REQUIREMENTS = "requirements"; - public static final String FILTERED = null; - public static final String HAS_UPDATES = null; - public static final String TO_UPDATE = null; public static final String IGNORE_ALLUPDATES = "ignoreAllUpdates"; public static final String IGNORE_THISUPDATE = "ignoreThisUpdate"; public static final String ICON_URL = "iconUrl"; - public static final String UPDATED = null; - public static final String APKS = null; public interface SuggestedApk { public static final String VERSION = "suggestedApkVersion"; diff --git a/test/src/org/fdroid/fdroid/AppProviderTest.java b/test/src/org/fdroid/fdroid/AppProviderTest.java index 2768e858b..80e19bd72 100644 --- a/test/src/org/fdroid/fdroid/AppProviderTest.java +++ b/test/src/org/fdroid/fdroid/AppProviderTest.java @@ -1,9 +1,11 @@ package org.fdroid.fdroid; +import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; import mock.MockCategoryResources; +import mock.MockContextSwappableComponents; import mock.MockInstallablePackageManager; import org.fdroid.fdroid.data.ApkProvider; @@ -33,6 +35,10 @@ public class AppProviderTest extends FDroidProviderTest { }; } + public void testCantFindApp() { + assertNull(AppProvider.Helper.findById(getMockContentResolver(), "com.example.doesnt-exist")); + } + public void testUris() { assertInvalidUri(AppProvider.getAuthority()); assertInvalidUri(ApkProvider.getContentUri()); @@ -65,6 +71,110 @@ public class AppProviderTest extends FDroidProviderTest { } } + private void insertAndInstallApp( + MockInstallablePackageManager packageManager, + String id, int installedVercode, int suggestedVercode, + boolean ignoreAll, int ignoreVercode) { + ContentValues values = new ContentValues(3); + values.put(AppProvider.DataColumns.SUGGESTED_VERSION_CODE, suggestedVercode); + values.put(AppProvider.DataColumns.IGNORE_ALLUPDATES, ignoreAll); + values.put(AppProvider.DataColumns.IGNORE_THISUPDATE, ignoreVercode); + insertApp(id, "App: " + id, values); + + packageManager.install(id, installedVercode, "v" + installedVercode); + } + + public void testCanUpdate() { + + MockContextSwappableComponents c = getSwappableContext(); + + MockInstallablePackageManager pm = new MockInstallablePackageManager(); + c.setPackageManager(pm); + + insertApp("not installed", "not installed"); + insertAndInstallApp(pm, "installed, only one version available", 1, 1, false, 0); + insertAndInstallApp(pm, "installed, already latest, no ignore", 10, 10, false, 0); + insertAndInstallApp(pm, "installed, already latest, ignore all", 10, 10, true, 0); + insertAndInstallApp(pm, "installed, already latest, ignore latest", 10, 10, false, 10); + insertAndInstallApp(pm, "installed, already latest, ignore old", 10, 10, false, 5); + insertAndInstallApp(pm, "installed, old version, no ignore", 5, 10, false, 0); + insertAndInstallApp(pm, "installed, old version, ignore all", 5, 10, true, 0); + insertAndInstallApp(pm, "installed, old version, ignore latest", 5, 10, false, 10); + insertAndInstallApp(pm, "installed, old version, ignore newer, but not latest", 5, 10, false, 8); + + ContentResolver r = getMockContentResolver(); + + // Can't "update", although can "install"... + App notInstalled = AppProvider.Helper.findById(r, "not installed"); + assertFalse(notInstalled.canAndWantToUpdate(c)); + + App installedOnlyOneVersionAvailable = AppProvider.Helper.findById(r, "installed, only one version available"); + App installedAlreadyLatestNoIgnore = AppProvider.Helper.findById(r, "installed, already latest, no ignore"); + App installedAlreadyLatestIgnoreAll = AppProvider.Helper.findById(r, "installed, already latest, ignore all"); + App installedAlreadyLatestIgnoreLatest = AppProvider.Helper.findById(r, "installed, already latest, ignore latest"); + App installedAlreadyLatestIgnoreOld = AppProvider.Helper.findById(r, "installed, already latest, ignore old"); + + assertFalse(installedOnlyOneVersionAvailable.canAndWantToUpdate(c)); + assertFalse(installedAlreadyLatestNoIgnore.canAndWantToUpdate(c)); + assertFalse(installedAlreadyLatestIgnoreAll.canAndWantToUpdate(c)); + assertFalse(installedAlreadyLatestIgnoreLatest.canAndWantToUpdate(c)); + assertFalse(installedAlreadyLatestIgnoreOld.canAndWantToUpdate(c)); + + App installedOldNoIgnore = AppProvider.Helper.findById(r, "installed, old version, no ignore"); + App installedOldIgnoreAll = AppProvider.Helper.findById(r, "installed, old version, ignore all"); + App installedOldIgnoreLatest = AppProvider.Helper.findById(r, "installed, old version, ignore latest"); + App installedOldIgnoreNewerNotLatest = AppProvider.Helper.findById(r, "installed, old version, ignore newer, but not latest"); + + assertTrue(installedOldNoIgnore.canAndWantToUpdate(c)); + assertFalse(installedOldIgnoreAll.canAndWantToUpdate(c)); + assertFalse(installedOldIgnoreLatest.canAndWantToUpdate(c)); + assertTrue(installedOldIgnoreNewerNotLatest.canAndWantToUpdate(c)); + } + + public void testIgnored() { + + MockInstallablePackageManager pm = new MockInstallablePackageManager(); + getSwappableContext().setPackageManager(pm); + + insertApp("not installed", "not installed"); + insertAndInstallApp(pm, "installed, only one version available", 1, 1, false, 0); + insertAndInstallApp(pm, "installed, already latest, no ignore", 10, 10, false, 0); + insertAndInstallApp(pm, "installed, already latest, ignore all", 10, 10, true, 0); + insertAndInstallApp(pm, "installed, already latest, ignore latest", 10, 10, false, 10); + insertAndInstallApp(pm, "installed, already latest, ignore old", 10, 10, false, 5); + insertAndInstallApp(pm, "installed, old version, no ignore", 5, 10, false, 0); + insertAndInstallApp(pm, "installed, old version, ignore all", 5, 10, true, 0); + insertAndInstallApp(pm, "installed, old version, ignore latest", 5, 10, false, 10); + insertAndInstallApp(pm, "installed, old version, ignore newer, but not latest", 5, 10, false, 8); + + assertResultCount(10, AppProvider.getContentUri()); + + String[] projection = { AppProvider.DataColumns.APP_ID }; + List ignoredApps = AppProvider.Helper.findIgnored(getMockContext(), projection); + + String[] expectedIgnored = { + "installed, already latest, ignore all", + "installed, already latest, ignore latest", + // NOT "installed, already latest, ignore old" - because it + // is should only ignore if "ignored version" is >= suggested + + "installed, old version, ignore all", + "installed, old version, ignore latest" + // NOT "installed, old version, ignore newer, but not latest" + // for the same reason as above. + }; + + assertContainsOnlyIds(ignoredApps, expectedIgnored); + } + + private void assertContainsOnlyIds(List actualApps, String[] expectedIds) { + List actualIds = new ArrayList(actualApps.size()); + for (App app : actualApps) { + actualIds.add(app.id); + } + TestUtils.assertContainsOnly(actualIds, expectedIds); + } + public void testInstalled() { Utils.clearInstalledApksCache(); diff --git a/test/src/org/fdroid/fdroid/TestUtils.java b/test/src/org/fdroid/fdroid/TestUtils.java index 6d9bbaa2a..1afc0454c 100644 --- a/test/src/org/fdroid/fdroid/TestUtils.java +++ b/test/src/org/fdroid/fdroid/TestUtils.java @@ -24,7 +24,7 @@ public class TestUtils { if (i > 0) { string += ", "; } - string += list.get(i); + string += "'" + list.get(i) + "'"; } string += "]"; return string;