package org.bookdash.android.presentation.settings;
import org.bookdash.android.R;
import org.bookdash.android.data.settings.SettingsRepository;
import org.bookdash.android.data.tracking.Analytics;
import org.bookdash.android.data.tutorial.TutorialsRepository;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.ArrayList;
import java.util.Locale;
import rx.Single;
import za.co.riggaroo.materialhelptutorial.TutorialItem;
import static junit.framework.Assert.assertEquals;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* Created by michel.onwordi on 14/03/2017.
*/
@RunWith(MockitoJUnitRunner.class)
public class SettingsPresenterTest {
public static final String TUTORIAL_TEST_ITEM_FORMAT = "%s_%d";
@Captor
ArgumentCaptor<ArrayList<TutorialItem>> argumentCaptor;
@Mock
private TutorialsRepository mockTutorialsRepository;
@Mock
private SettingsContract.View mockSettingsView;
private SettingsPresenter presenter;
@Mock
private Analytics mockAnalytics;
@Mock
private SettingsRepository mockSettings;
@Before
public void setup() {
presenter = new SettingsPresenter(mockTutorialsRepository, mockAnalytics, mockSettings);
presenter.attachView(mockSettingsView);
}
@Test
public void openTutorialScreen() throws Exception {
ArrayList<TutorialItem> testData = generateTestData(3);
when(mockTutorialsRepository.getTutorialItems()).thenReturn(testData);
presenter.openTutorialScreen();
verify(mockSettingsView).showTutorialScreen(argumentCaptor.capture());
verify(mockAnalytics).trackViewHelpTutorialAgain();
assertEquals(testData, argumentCaptor.getValue());
}
private ArrayList<TutorialItem> generateTestData(int count) {
ArrayList<TutorialItem> testTutorialItems = new ArrayList<>();
for (int i = 0; i < count; i++) {
testTutorialItems.add(new TutorialItem(
String.format(Locale.getDefault(), TUTORIAL_TEST_ITEM_FORMAT, "tutorial_item_test", count),
String.format(Locale.getDefault(), TUTORIAL_TEST_ITEM_FORMAT, "tutorial_item_test_subtitle_text",
count), R.color.slide_3, R.drawable.tut_page_3_foreground,
R.drawable.tut_page_3_background));
}
return testTutorialItems;
}
@Test
public void setNewBookNotificationStatus_Subscribed_TurnsOff() {
when(mockSettings.isSubscribedToNewBookNotification()).thenReturn(Single.just(true));
when(mockSettings.setNewBookNotificationStatus(anyBoolean())).thenReturn(Single.just(true));
presenter.setNewBookNotificationSubscriptionStatus(false);
verify(mockSettings).setNewBookNotificationStatus(false);
verify(mockAnalytics).trackUserToggleNewBookNotifications(false);
}
@Test
public void setNewBookNotificationStatus_Unsubscribed_TurnsOn() {
when(mockSettings.isSubscribedToNewBookNotification()).thenReturn(Single.just(false));
when(mockSettings.setNewBookNotificationStatus(anyBoolean())).thenReturn(Single.just(true));
presenter.setNewBookNotificationSubscriptionStatus(true);
verify(mockSettings).setNewBookNotificationStatus(true);
verify(mockAnalytics).trackUserToggleNewBookNotifications(true);
}
}