package org.solovyev.android.calculator.wizard;
import android.os.Build;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.solovyev.android.calculator.BuildConfig;
import org.solovyev.android.wizard.Wizard;
import org.solovyev.android.wizard.WizardFlow;
import org.solovyev.android.wizard.Wizards;
import javax.annotation.Nonnull;
import static org.junit.Assert.*;
import static org.solovyev.android.calculator.wizard.CalculatorWizardStep.*;
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP)
@RunWith(value = RobolectricGradleTestRunner.class)
public class CalculatorWizardTest {
@Nonnull
private Wizards wizards;
@Nonnull
private Wizard wizard;
@Nonnull
private Wizard defaultWizard;
@Before
public void setUp() throws Exception {
wizards = new CalculatorWizards(RuntimeEnvironment.application);
wizard = wizards.getWizard(null);
defaultWizard = wizards.getWizard(CalculatorWizards.DEFAULT_WIZARD_FLOW);
}
@Test
public void testDefaultFlowShouldNotContainWelcomeAndLastSteps() throws Exception {
final WizardFlow flow = defaultWizard.getFlow();
assertNull(flow.getStepByName(welcome.getName()));
assertNull(flow.getStepByName(last.getName()));
}
@Test
public void testFirstTimeFlowShouldContainWelcomeAndLastSteps() throws Exception {
final WizardFlow flow = wizard.getFlow();
assertNotNull(flow.getStepByName(welcome.getName()));
assertNotNull(flow.getStepByName(last.getName()));
}
@Test
public void testShouldThrowExceptionIfUnknownWizard() throws Exception {
try {
wizards.getWizard("testtesttesttesttest");
fail();
} catch (IllegalArgumentException e) {
// ok
}
}
@Test
public void testShouldReturnWizard() throws Exception {
assertNotNull(wizards.getWizard(CalculatorWizards.FIRST_TIME_WIZARD));
assertNotNull(wizards.getWizard(CalculatorWizards.DEFAULT_WIZARD_FLOW));
}
@Test
public void testShouldSaveWizardIsFinishedWhenNotLastStepAndForce() throws Exception {
assertFalse(wizard.isFinished());
wizard.saveFinished(CalculatorWizardStep.drag_button, true);
assertTrue(wizard.isFinished());
}
@Test
public void testShouldNotSaveWizardIsFinishedWhenNotLastStepAndNotForce() throws Exception {
assertFalse(wizard.isFinished());
wizard.saveFinished(CalculatorWizardStep.drag_button, false);
assertFalse(wizard.isFinished());
}
@Test
public void testShouldSaveWizardIsFinishedWhenLastStep() throws Exception {
assertFalse(wizard.isFinished());
wizard.saveFinished(CalculatorWizardStep.last, false);
assertTrue(wizard.isFinished());
}
@Test
public void testShouldSaveLastWizardStep() throws Exception {
assertFalse(wizard.isStarted());
assertNull(wizard.getLastSavedStepName());
wizard.saveLastStep(choose_mode);
assertTrue(wizard.isStarted());
assertEquals(choose_mode.name(), wizard.getLastSavedStepName());
}
}