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