19be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishipackage com.android.settings.applications;
29be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
39be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport static com.google.common.truth.Truth.assertThat;
49be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
59be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport static org.mockito.Matchers.nullable;
69be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport static org.mockito.Mockito.verify;
79be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport static org.mockito.Mockito.when;
89be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
99be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.app.Fragment;
109be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.content.Context;
119be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.content.Intent;
129be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.os.UserHandle;
139be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.os.storage.VolumeInfo;
149be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.view.LayoutInflater;
159be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
169be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport com.android.settings.TestConfig;
179be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport com.android.settings.testutils.SettingsRobolectricTestRunner;
189be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport com.android.settingslib.applications.StorageStatsSource;
199be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport com.android.settingslib.deviceinfo.StorageVolumeProvider;
209be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
219be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.junit.Before;
229be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.junit.Test;
239be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.junit.runner.RunWith;
249be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.mockito.Answers;
259be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.mockito.ArgumentCaptor;
269be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.mockito.Mock;
279be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.mockito.MockitoAnnotations;
289be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.robolectric.RuntimeEnvironment;
299be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.robolectric.annotation.Config;
309be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
319be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi@RunWith(SettingsRobolectricTestRunner.class)
329be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
339be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishipublic class PhotosViewHolderControllerTest {
349be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
359be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    private Fragment mFragment;
369be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
379be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    @Mock private StorageVolumeProvider mSvp;
389be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    @Mock private StorageStatsSource mSource;
399be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
409be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    private Context mContext;
419be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    private PhotosViewHolderController mController;
429be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    private VolumeInfo mVolume;
439be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    private AppViewHolder mHolder;
449be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
459be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    @Before
469be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    public void setUp() throws Exception {
479be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        MockitoAnnotations.initMocks(this);
489be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        mContext = RuntimeEnvironment.application;
499be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        mVolume = new VolumeInfo("id", 0, null, "id");
509be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        mController =
519be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi                new PhotosViewHolderController(
529be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi                        mContext, mSource, mVolume.fsUuid, new UserHandle(0));
539be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
549be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        LayoutInflater inflater = LayoutInflater.from(mContext);
559be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        mHolder = AppViewHolder.createOrRecycle(inflater, null);
569be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    }
579be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
589be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    @Test
599be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    public void storageShouldBeZeroBytesIfQueriedBeforeStorageQueryFinishes() {
609be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        mController.setupView(mHolder);
619be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
629be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        assertThat(mHolder.summary.getText().toString()).isEqualTo("0.00B");
639be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    }
649be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
659be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    @Test
669be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    public void storageShouldRepresentStorageStatsQuery() throws Exception {
679be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        when(mSource.getExternalStorageStats(nullable(String.class), nullable(UserHandle.class)))
689be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi                .thenReturn(new StorageStatsSource.ExternalStorageStats(1, 0, 1, 10, 0));
699be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
709be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        mController.queryStats();
719be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        mController.setupView(mHolder);
729be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
739be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        assertThat(mHolder.summary.getText().toString()).isEqualTo("11.00B");
749be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    }
759be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
769be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    @Test
779be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    public void clickingShouldIntentIntoFilesApp() {
789be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        mController.onClick(mFragment);
799be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
809be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class);
819be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        verify(mFragment).startActivity(argumentCaptor.capture());
829be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        Intent intent = argumentCaptor.getValue();
839be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi
849be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        assertThat(intent.getType()).isEqualTo("image/*");
859be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        assertThat(intent.getAction()).isEqualTo(android.content.Intent.ACTION_VIEW);
869be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi        assertThat(intent.getBooleanExtra(Intent.EXTRA_FROM_STORAGE, false)).isTrue();
879be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi    }
889be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi}
89