• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
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 
17 package com.android.tv.dvr;
18 
19 import static org.mockito.Matchers.anyObject;
20 import static org.mockito.Matchers.eq;
21 import static org.mockito.Mockito.never;
22 import static org.mockito.Mockito.verify;
23 import static org.mockito.Mockito.when;
24 
25 import android.os.Build;
26 import android.support.test.filters.SdkSuppress;
27 import android.support.test.filters.SmallTest;
28 import android.test.AndroidTestCase;
29 
30 import com.android.tv.data.ChannelDataManager;
31 import com.android.tv.data.Program;
32 
33 import org.mockito.Mock;
34 import org.mockito.MockitoAnnotations;
35 
36 /**
37  * Tests for {@link DvrScheduleManager}
38  */
39 @SmallTest
40 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
41 public class DvrDbSyncTest extends AndroidTestCase {
42     private static final String INPUT_ID = "input_id";
43     private static final long BASE_PROGRAM_ID = 1;
44     private static final long BASE_START_TIME_MS = 0;
45     private static final long BASE_END_TIME_MS = 1;
46     private static final String BASE_SEASON_NUMBER = "2";
47     private static final String BASE_EPISODE_NUMBER = "3";
48     private static final Program BASE_PROGRAM = new Program.Builder().setId(BASE_PROGRAM_ID)
49             .setStartTimeUtcMillis(BASE_START_TIME_MS).setEndTimeUtcMillis(BASE_END_TIME_MS)
50             .setSeasonNumber(BASE_SEASON_NUMBER).setEpisodeNumber(BASE_EPISODE_NUMBER).build();
51     private static final ScheduledRecording BASE_SCHEDULE =
52             ScheduledRecording.builder(INPUT_ID, BASE_PROGRAM).build();
53 
54     private DvrDbSync mDbSync;
55     @Mock private DvrDataManagerImpl mDataManager;
56     @Mock private ChannelDataManager mChannelDataManager;
57 
58     @Override
setUp()59     protected void setUp() throws Exception {
60         super.setUp();
61         MockitoAnnotations.initMocks(this);
62         when(mChannelDataManager.isDbLoadFinished()).thenReturn(true);
63         mDbSync = new DvrDbSync(getContext(), mDataManager, mChannelDataManager);
64     }
65 
testHandleUpdateProgram_null()66     public void testHandleUpdateProgram_null() {
67         addSchedule(BASE_PROGRAM_ID, BASE_SCHEDULE);
68         mDbSync.handleUpdateProgram(null, BASE_PROGRAM_ID);
69         verify(mDataManager).removeScheduledRecording(BASE_SCHEDULE);
70     }
71 
testHandleUpdateProgram_changeTimeNotStarted()72     public void testHandleUpdateProgram_changeTimeNotStarted() {
73         addSchedule(BASE_PROGRAM_ID, BASE_SCHEDULE);
74         long startTimeMs = BASE_START_TIME_MS + 1;
75         long endTimeMs = BASE_END_TIME_MS + 1;
76         Program program = new Program.Builder(BASE_PROGRAM).setStartTimeUtcMillis(startTimeMs)
77                 .setEndTimeUtcMillis(endTimeMs).build();
78         mDbSync.handleUpdateProgram(program, BASE_PROGRAM_ID);
79         assertUpdateScheduleCalled(program);
80     }
81 
testHandleUpdateProgram_changeTimeInProgressNotCalled()82     public void testHandleUpdateProgram_changeTimeInProgressNotCalled() {
83         addSchedule(BASE_PROGRAM_ID, ScheduledRecording.buildFrom(BASE_SCHEDULE)
84                 .setState(ScheduledRecording.STATE_RECORDING_IN_PROGRESS).build());
85         long startTimeMs = BASE_START_TIME_MS + 1;
86         Program program = new Program.Builder(BASE_PROGRAM).setStartTimeUtcMillis(startTimeMs)
87                 .build();
88         mDbSync.handleUpdateProgram(program, BASE_PROGRAM_ID);
89         verify(mDataManager, never()).updateScheduledRecording(anyObject());
90     }
91 
testHandleUpdateProgram_changeSeason()92     public void testHandleUpdateProgram_changeSeason() {
93         addSchedule(BASE_PROGRAM_ID, BASE_SCHEDULE);
94         String seasonNumber = BASE_SEASON_NUMBER + "1";
95         String episodeNumber = BASE_EPISODE_NUMBER + "1";
96         Program program = new Program.Builder(BASE_PROGRAM).setSeasonNumber(seasonNumber)
97                 .setEpisodeNumber(episodeNumber).build();
98         mDbSync.handleUpdateProgram(program, BASE_PROGRAM_ID);
99         assertUpdateScheduleCalled(program);
100     }
101 
testHandleUpdateProgram_finished()102     public void testHandleUpdateProgram_finished() {
103         addSchedule(BASE_PROGRAM_ID, ScheduledRecording.buildFrom(BASE_SCHEDULE)
104                 .setState(ScheduledRecording.STATE_RECORDING_FINISHED).build());
105         String seasonNumber = BASE_SEASON_NUMBER + "1";
106         String episodeNumber = BASE_EPISODE_NUMBER + "1";
107         Program program = new Program.Builder(BASE_PROGRAM).setSeasonNumber(seasonNumber)
108                 .setEpisodeNumber(episodeNumber).build();
109         mDbSync.handleUpdateProgram(program, BASE_PROGRAM_ID);
110         verify(mDataManager, never()).updateScheduledRecording(anyObject());
111     }
112 
addSchedule(long programId, ScheduledRecording schedule)113     private void addSchedule(long programId, ScheduledRecording schedule) {
114         when(mDataManager.getScheduledRecordingForProgramId(programId)).thenReturn(schedule);
115     }
116 
assertUpdateScheduleCalled(Program program)117     private void assertUpdateScheduleCalled(Program program) {
118         verify(mDataManager).updateScheduledRecording(
119                 eq(ScheduledRecording.builder(INPUT_ID, program).build()));
120     }
121 }
122