package tv.dyndns.kishibe.qmaclone.client.setting;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import tv.dyndns.kishibe.qmaclone.client.ServiceAsync;
import tv.dyndns.kishibe.qmaclone.client.UserData;
import com.google.gwt.core.client.Scheduler;
@RunWith(MockitoJUnitRunner.class)
public class PanelSettingThemeQueryTest {
private static final int FAKE_USER_CODE = 111;
private static final int FAKE_NUMBER_OF_THEME_QUERIES = 222;
private static final String FAKE_THEME_1 = "fake THEME 1";
private static final String FAKE_THEME_2 = "fake THEME 2";
private static final String FAKE_QUERY_1 = "fake query 1";
private static final String FAKE_QUERY_2 = "fake query 2";
private static final String FAKE_NOTE = "fake note";
private static final int FAKE_START = 333;
private static final int FAKE_LENGTH = 444;
@Mock
private PanelSettingThemeQuery.View mockView;
@Mock
private ServiceAsync mockService;
@Mock
private Scheduler mockScheduler;
private PanelSettingThemeQuery panel;
@Before
public void setUp() throws Exception {
UserData.get().setUserCode(FAKE_USER_CODE);
panel = new PanelSettingThemeQuery(mockView, mockService, mockScheduler);
}
@After
public void tearDown() throws Exception {
verify(mockService).isThemeModeEditor(FAKE_USER_CODE, panel.callbackIsThemeModeEditor);
}
@Test
public void commandUpdateFormShouldUpdateForm() {
when(mockView.getTheme()).thenReturn("");
when(mockView.isAttached()).thenReturn(true);
assertTrue(panel.commandUpdateForm.execute());
verify(mockView).enableForm(false);
}
@Test
public void callbackIsThemeModeEditorShouldCallGetNumberOfThemeQueriesIfAccepted() {
panel.callbackIsThemeModeEditor.onSuccess(true);
verify(mockService).getNumberofThemeQueries(panel.callbackGetNumberofThemeQueries);
}
@Test
public void callbackIsThemeModeEditorShouldShowHaveRightAndCheckApplying() {
UserData.get().setPlayCount(1000);
UserData.get().setUserCode(FAKE_USER_CODE);
panel.callbackIsThemeModeEditor.onSuccess(false);
verify(mockView).showHaveRight();
verify(mockService).isApplyingThemeModeEditor(FAKE_USER_CODE,
panel.callbackIsApplyingThemeModeEditor);
}
@Test
public void callbackIsThemeModeEditorShouldShowNoRight() {
UserData.get().setPlayCount(0);
panel.callbackIsThemeModeEditor.onSuccess(false);
verify(mockView).showNoRight();
}
@Test
public void callbackIsApplyingThemeModeEditorShouldShowApplying() {
panel.callbackIsApplyingThemeModeEditor.onSuccess(true);
verify(mockView).showApplyingRight();
}
@Test
public void callbackIsApplyingThemeModeEditorShouldShowApplyRightForm() {
panel.callbackIsApplyingThemeModeEditor.onSuccess(false);
verify(mockView).showApplyRightForm();
}
@Test
public void callbackGetNumberofThemeQueriesShouldShowEditForm() {
panel.callbackGetNumberofThemeQueries.onSuccess(FAKE_NUMBER_OF_THEME_QUERIES);
verify(mockView).showEditForm(FAKE_NUMBER_OF_THEME_QUERIES);
}
@Test
public void onAddButtonClickedShouldAddThemeModeQuery() {
UserData.get().setUserCode(FAKE_USER_CODE);
when(mockView.getTheme()).thenReturn(FAKE_THEME_1);
when(mockView.getQuery()).thenReturn(FAKE_QUERY_1);
panel.onAddButtonClicked();
verify(mockService).addThemeModeQuery(FAKE_THEME_1, FAKE_QUERY_1, FAKE_USER_CODE,
panel.callbackUpdateThemeModeQuery);
}
@Test
public void onRemoveButtonClickedShouldRemoveThemeModeQuery() {
UserData.get().setUserCode(FAKE_USER_CODE);
when(mockView.getTheme()).thenReturn(FAKE_THEME_1);
when(mockView.getQuery()).thenReturn(FAKE_QUERY_1);
panel.onRemoveButtonClicked();
verify(mockService).removeThemeModeQuery(FAKE_THEME_1, FAKE_QUERY_1, FAKE_USER_CODE,
panel.callbackUpdateThemeModeQuery);
}
@Test
public void onApplyButtonClickedShouldDoNothingIfNotConfirmed() {
when(mockView.confirmToApply()).thenReturn(false);
panel.onApplyButtonClicked();
verify(mockView, never()).notifyApplying();
}
@Test
public void onApplyButtonClickedShouldApplyThemeModeEditor() {
UserData.get().setUserCode(FAKE_USER_CODE);
when(mockView.confirmToApply()).thenReturn(true);
when(mockView.getNote()).thenReturn(FAKE_NOTE);
panel.onApplyButtonClicked();
verify(mockService).applyThemeModeEditor(FAKE_USER_CODE, FAKE_NOTE,
panel.callbackApplyThemeModeEditor);
verify(mockView).notifyApplying();
}
@Test
public void callbackApplyThemeModeEditorShouldDoNothing() {
panel.callbackApplyThemeModeEditor.onSuccess(null);
}
@Test
public void onViewLoadedShouldShouldScheduleCommandUpdateForm() {
panel.onViewLoaded();
verify(mockScheduler).scheduleFixedDelay(panel.commandUpdateForm,
PanelSettingThemeQuery.UPDATE_PERIOD);
}
@Test
public void onThemeAndQueryCopiedShouldSetThemeAndQuery() {
panel.onThemeQuerySelected(FAKE_THEME_1, FAKE_QUERY_1);
verify(mockView).setTheme(FAKE_THEME_1);
verify(mockView).setQuery(FAKE_QUERY_1);
}
}