• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2022 Google LLC
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.google.android.libraries.mobiledatadownload.populator;
17 
18 import static com.google.common.labs.truth.FutureSubject.assertThat;
19 import static org.mockito.ArgumentMatchers.any;
20 import static org.mockito.Mockito.verify;
21 import static org.mockito.Mockito.verifyNoInteractions;
22 import static org.mockito.Mockito.when;
23 
24 import com.google.android.libraries.mobiledatadownload.FileGroupPopulator;
25 import com.google.android.libraries.mobiledatadownload.MobileDataDownload;
26 import com.google.common.util.concurrent.Futures;
27 import org.junit.Before;
28 import org.junit.Rule;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 import org.mockito.Mock;
32 import org.mockito.junit.MockitoJUnit;
33 import org.mockito.junit.MockitoRule;
34 import org.robolectric.RobolectricTestRunner;
35 
36 /** Tests for {@link MigrationProxyPopulator}. */
37 @RunWith(RobolectricTestRunner.class)
38 public class MigrationProxyPopulatorTest {
39 
40   @Rule public final MockitoRule mocks = MockitoJUnit.rule();
41 
42   private static final Void VOID = null;
43 
44   @Mock private FileGroupPopulator controlPopulator;
45   @Mock private FileGroupPopulator experimentPopulator;
46   @Mock private MobileDataDownload mobileDataDownload;
47 
48   @Before
setUp()49   public void setUp() {
50     when(controlPopulator.refreshFileGroups(any())).thenReturn(Futures.immediateFuture(VOID));
51     when(experimentPopulator.refreshFileGroups(any())).thenReturn(Futures.immediateFuture(VOID));
52   }
53 
54   @Test
refreshFileGroups_whenFlagReturnsFalse_usesControlPopulator()55   public void refreshFileGroups_whenFlagReturnsFalse_usesControlPopulator() {
56     MigrationProxyPopulator migrationProxyPopulator =
57         new MigrationProxyPopulator(controlPopulator, experimentPopulator, () -> false);
58     assertThat(migrationProxyPopulator.refreshFileGroups(mobileDataDownload))
59         .whenDone()
60         .isSuccessful();
61     verify(controlPopulator).refreshFileGroups(any());
62     verifyNoInteractions(experimentPopulator);
63   }
64 
65   @Test
refreshFileGroups_whenFlagReturnsTrue_usesExperimentPopulator()66   public void refreshFileGroups_whenFlagReturnsTrue_usesExperimentPopulator() {
67     MigrationProxyPopulator migrationProxyPopulator =
68         new MigrationProxyPopulator(controlPopulator, experimentPopulator, () -> true);
69     assertThat(migrationProxyPopulator.refreshFileGroups(mobileDataDownload))
70         .whenDone()
71         .isSuccessful();
72     verifyNoInteractions(controlPopulator);
73     verify(experimentPopulator).refreshFileGroups(any());
74   }
75 }
76