Adding test coverage for "AppProvider.Helper.findIgnored()"

Also added tests for canAndWantToUpdate() while I was at it.
This commit is contained in:
Peter Serwylo 2014-03-06 15:59:20 +11:00
parent 81fcd44b66
commit 9fd8da42a1
3 changed files with 111 additions and 10 deletions

View File

@ -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";

View File

@ -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<AppProvider> {
};
}
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<AppProvider> {
}
}
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<App> 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<App> actualApps, String[] expectedIds) {
List<String> actualIds = new ArrayList<String>(actualApps.size());
for (App app : actualApps) {
actualIds.add(app.id);
}
TestUtils.assertContainsOnly(actualIds, expectedIds);
}
public void testInstalled() {
Utils.clearInstalledApksCache();

View File

@ -24,7 +24,7 @@ public class TestUtils {
if (i > 0) {
string += ", ";
}
string += list.get(i);
string += "'" + list.get(i) + "'";
}
string += "]";
return string;