diff options
author | 2025-02-19 16:30:26 +0000 | |
---|---|---|
committer | 2025-03-03 15:23:43 +0000 | |
commit | 2beadd8779269f33ec0826aaea279ef97e879e12 (patch) | |
tree | 6af8caff62210914abf4defa32e280e1f5333daa /tests | |
parent | 618c4babf98b8879d8ecedec5eb91ee466ed209a (diff) |
Clear media sets cache and media sets content cache for a given
categoryId and its authority
The current implementation erases the complete cache for both media sets
and media set content. It is fine for the MVP since we only have one
category at the moment but in case we add more in the future, this
should not be the behaviour.
Test: verified manually, fixed corresponding tests
Bug: 394050877
Flag: com.android.providers.media.flags.enable_photopicker_search
Change-Id: Idd8980c0e573376df8100b44102dcc01b5e8e992
Diffstat (limited to 'tests')
4 files changed, 102 insertions, 5 deletions
diff --git a/tests/src/com/android/providers/media/photopicker/sync/MediaSetsResetWorkerTest.java b/tests/src/com/android/providers/media/photopicker/sync/MediaSetsResetWorkerTest.java index 3f7b2d262..c318151d5 100644 --- a/tests/src/com/android/providers/media/photopicker/sync/MediaSetsResetWorkerTest.java +++ b/tests/src/com/android/providers/media/photopicker/sync/MediaSetsResetWorkerTest.java @@ -17,6 +17,10 @@ package com.android.providers.media.photopicker.sync; import static com.android.providers.media.photopicker.PickerSyncController.LOCAL_PICKER_PROVIDER_AUTHORITY; +import static com.android.providers.media.photopicker.sync.PickerSyncManager.SYNC_CLOUD_ONLY; +import static com.android.providers.media.photopicker.sync.PickerSyncManager.SYNC_WORKER_INPUT_AUTHORITY; +import static com.android.providers.media.photopicker.sync.PickerSyncManager.SYNC_WORKER_INPUT_CATEGORY_ID; +import static com.android.providers.media.photopicker.sync.PickerSyncManager.SYNC_WORKER_INPUT_SYNC_SOURCE; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.initializeTestWorkManager; import static com.android.providers.media.photopicker.util.PickerDbTestUtils.CLOUD_ID_1; import static com.android.providers.media.photopicker.util.PickerDbTestUtils.CLOUD_ID_2; @@ -43,6 +47,7 @@ import android.database.sqlite.SQLiteDatabase; import android.provider.CloudMediaProviderContract; import androidx.test.platform.app.InstrumentationRegistry; +import androidx.work.Data; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkInfo; import androidx.work.WorkManager; @@ -65,6 +70,7 @@ import org.mockito.Mock; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.concurrent.ExecutionException; public class MediaSetsResetWorkerTest { @@ -147,6 +153,10 @@ public class MediaSetsResetWorkerTest { // Setup final OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(MediaSetsResetWorker.class) + .setInputData(new Data(Map.of( + SYNC_WORKER_INPUT_SYNC_SOURCE, SYNC_CLOUD_ONLY, + SYNC_WORKER_INPUT_CATEGORY_ID, mCategoryId, + SYNC_WORKER_INPUT_AUTHORITY, mAuthority))) .build(); final WorkManager workManager = WorkManager.getInstance(mContext); diff --git a/tests/src/com/android/providers/media/photopicker/sync/PickerSyncManagerTest.java b/tests/src/com/android/providers/media/photopicker/sync/PickerSyncManagerTest.java index 60e43e934..59473d7e1 100644 --- a/tests/src/com/android/providers/media/photopicker/sync/PickerSyncManagerTest.java +++ b/tests/src/com/android/providers/media/photopicker/sync/PickerSyncManagerTest.java @@ -800,6 +800,15 @@ public class PickerSyncManagerTest { assertThat(resetRequest.getWorkSpec().isPeriodic()).isFalse(); assertThat(resetRequest.getWorkSpec().id).isNotNull(); assertThat(resetRequest.getWorkSpec().constraints.requiresBatteryNotLow()).isFalse(); + assertThat(resetRequest.getWorkSpec().input + .getInt(SYNC_WORKER_INPUT_SYNC_SOURCE, -1)) + .isEqualTo(SYNC_LOCAL_ONLY); + assertThat(resetRequest.getWorkSpec().input + .getString(SYNC_WORKER_INPUT_CATEGORY_ID)) + .isEqualTo(categoryId); + assertThat(resetRequest.getWorkSpec().input + .getString(SYNC_WORKER_INPUT_AUTHORITY)) + .isEqualTo(SearchProvider.AUTHORITY); WorkRequest syncRequest = workRequestList.get(1).get(0); assertThat(syncRequest.getWorkSpec().workerClassName) @@ -860,6 +869,15 @@ public class PickerSyncManagerTest { assertThat(resetRequest.getWorkSpec().isPeriodic()).isFalse(); assertThat(resetRequest.getWorkSpec().id).isNotNull(); assertThat(resetRequest.getWorkSpec().constraints.requiresBatteryNotLow()).isFalse(); + assertThat(resetRequest.getWorkSpec().input + .getInt(SYNC_WORKER_INPUT_SYNC_SOURCE, -1)) + .isEqualTo(SYNC_CLOUD_ONLY); + assertThat(resetRequest.getWorkSpec().input + .getString(SYNC_WORKER_INPUT_CATEGORY_ID)) + .isEqualTo(categoryId); + assertThat(resetRequest.getWorkSpec().input + .getString(SYNC_WORKER_INPUT_AUTHORITY)) + .isEqualTo(SearchProvider.AUTHORITY); WorkRequest syncRequest = workRequestList.get(1).get(0); assertThat(syncRequest.getWorkSpec().workerClassName) diff --git a/tests/src/com/android/providers/media/photopicker/v2/sqlite/MediaInMediaSetsDatabaseUtilTest.java b/tests/src/com/android/providers/media/photopicker/v2/sqlite/MediaInMediaSetsDatabaseUtilTest.java index cbf7baa36..bdb7944d3 100644 --- a/tests/src/com/android/providers/media/photopicker/v2/sqlite/MediaInMediaSetsDatabaseUtilTest.java +++ b/tests/src/com/android/providers/media/photopicker/v2/sqlite/MediaInMediaSetsDatabaseUtilTest.java @@ -620,6 +620,7 @@ public class MediaInMediaSetsDatabaseUtilTest { assertAddMediaOperation(mFacade, CLOUD_PROVIDER, cursor3, 1); Long mediaSetPickerId = 1L; + Long secondMediaSetPickerId = 2L; final long cloudRowsInsertedCount = MediaInMediaSetsDatabaseUtil.cacheMediaOfMediaSet( mDatabase, List.of( @@ -632,10 +633,22 @@ public class MediaInMediaSetsDatabaseUtilTest { .that(cloudRowsInsertedCount) .isEqualTo(3); + final long secondCloudRowsInsertedCount = MediaInMediaSetsDatabaseUtil.cacheMediaOfMediaSet( + mDatabase, List.of( + getContentValues(null, CLOUD_ID_3, secondMediaSetPickerId), + getContentValues(LOCAL_ID_2, CLOUD_ID_2, secondMediaSetPickerId), + getContentValues(LOCAL_ID_1, CLOUD_ID_1, secondMediaSetPickerId) + ), CLOUD_PROVIDER); + + assertWithMessage("Unexpected number of rows inserted in the search results table") + .that(secondCloudRowsInsertedCount) + .isEqualTo(3); + // Clear the data - MediaInMediaSetsDatabaseUtil.clearMediaInMediaSetsCache(mDatabase); + MediaInMediaSetsDatabaseUtil.clearMediaInMediaSetsCache( + mDatabase, List.of(mediaSetPickerId.toString())); - // Retrieved cursor should be empty + // Retrieved cursor for mediaSetPickerId should be empty Bundle extras = new Bundle(); extras.putInt("page_size", 100); extras.putStringArrayList("providers", @@ -648,6 +661,19 @@ public class MediaInMediaSetsDatabaseUtilTest { assertNotNull(mediaCursor); assertEquals(/*expected*/0, /*actual*/ mediaCursor.getCount()); + // Retrieved cursor for secondmediaSetPickerId should be non-empty + Bundle secondExtras = new Bundle(); + secondExtras.putInt("page_size", 100); + secondExtras.putStringArrayList("providers", + new ArrayList<>(Arrays.asList(LOCAL_PROVIDER, CLOUD_PROVIDER))); + secondExtras.putString("intent_action", MediaStore.ACTION_PICK_IMAGES); + MediaInMediaSetsQuery secondMediaInMediaSetQuery = new MediaInMediaSetsQuery( + secondExtras, secondMediaSetPickerId); + Cursor secondMediaCursor = MediaInMediaSetsDatabaseUtil.queryMediaInMediaSet( + mMockSyncController, secondMediaInMediaSetQuery, LOCAL_PROVIDER, CLOUD_PROVIDER); + assertNotNull(secondMediaCursor); + assertEquals(/*expected*/3, /*actual*/ secondMediaCursor.getCount()); + } private ContentValues getContentValues( diff --git a/tests/src/com/android/providers/media/photopicker/v2/sqlite/MediaSetsDatabaseUtilsTest.java b/tests/src/com/android/providers/media/photopicker/v2/sqlite/MediaSetsDatabaseUtilsTest.java index 336bccc4a..432f76a32 100644 --- a/tests/src/com/android/providers/media/photopicker/v2/sqlite/MediaSetsDatabaseUtilsTest.java +++ b/tests/src/com/android/providers/media/photopicker/v2/sqlite/MediaSetsDatabaseUtilsTest.java @@ -238,7 +238,26 @@ public class MediaSetsDatabaseUtilsTest { } @Test - public void testClearMediaSetsCache() throws RequestObsoleteException { + public void testGetMediaSetPickerIdsForCategoryId() { + Cursor c = getCursorForMediaSetInsertionTest(); + List<String> mimeTypes = new ArrayList<>(); + mimeTypes.add(mMimeType); + + long mediaSetsInserted = MediaSetsDatabaseUtil.cacheMediaSets( + mDatabase, c, mCategoryId, mAuthority, mimeTypes); + // Assert successful insertion + assertEquals("Count of inserted media sets should be equal to the cursor size", + /*expected*/ c.getCount(), /*actual*/ mediaSetsInserted); + + List<String> mediaSetPickerIds = MediaSetsDatabaseUtil + .getMediaSetPickerIdsForGivenCategoryId(mDatabase, mCategoryId, mAuthority); + // Assert that the list has some sqlite generated ids + assertNotNull(mediaSetPickerIds); + assertTrue(!mediaSetPickerIds.isEmpty()); + } + + @Test + public void testClearMediaSetsCache() { // Insert metadata into the table Cursor c = getCursorForMediaSetInsertionTest(); List<String> mimeTypes = new ArrayList<>(); @@ -249,10 +268,17 @@ public class MediaSetsDatabaseUtilsTest { assertEquals("Count of inserted media sets should be equal to the cursor size", /*expected*/ c.getCount(), /*actual*/ mediaSetsInserted); + String secondCategoryId = "secCategoryId"; + int mediaSetsInserted2 = MediaSetsDatabaseUtil.cacheMediaSets( + mDatabase, c, secondCategoryId, mAuthority, mimeTypes); + assertEquals("Count of inserted media sets should be equal to the cursor size", + /*expected*/ c.getCount(), /*actual*/ mediaSetsInserted2); + + // Delete the inserted items - MediaSetsDatabaseUtil.clearMediaSetsCache(mDatabase); + MediaSetsDatabaseUtil.clearMediaSetsCache(mDatabase, mCategoryId, mAuthority); - // Retrieved cursor should be empty + // Retrieved cursor should be empty for mCategoryId Bundle extras = new Bundle(); extras.putString(MediaSetsSyncRequestParams.KEY_PARENT_CATEGORY_AUTHORITY, mAuthority); extras.putString(MediaSetsSyncRequestParams.KEY_PARENT_CATEGORY_ID, mCategoryId); @@ -265,6 +291,23 @@ public class MediaSetsDatabaseUtilsTest { mDatabase, requestParams); assertNotNull(mediaSetCursor); assertEquals(/*expected*/ 0, /*actual*/ mediaSetCursor.getCount()); + + // Retrieved cursor should not be empty for secondCategoryId since only the media sets for + // mCategoryId have been deleted in the previous call + Bundle secondExtras = new Bundle(); + secondExtras.putString( + MediaSetsSyncRequestParams.KEY_PARENT_CATEGORY_AUTHORITY, mAuthority); + secondExtras.putString(MediaSetsSyncRequestParams.KEY_PARENT_CATEGORY_ID, secondCategoryId); + secondExtras.putStringArrayList( + MediaSetsSyncRequestParams.KEY_MIME_TYPES, + new ArrayList<String>(mimeTypes)); + MediaSetsSyncRequestParams secondRequestParams = + new MediaSetsSyncRequestParams(secondExtras); + + Cursor secondMediaSetCursor = MediaSetsDatabaseUtil.getMediaSetsForCategory( + mDatabase, secondRequestParams); + assertNotNull(secondMediaSetCursor); + assertEquals(/*expected*/ 1, /*actual*/ secondMediaSetCursor.getCount()); } private Cursor getCursorForMediaSetInsertionTest() { |