package me.corriekay.pokegoutil.data.models; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import me.corriekay.pokegoutil.data.enums.LoginType; /** * Test for LoginData model. */ @RunWith(value = Parameterized.class) public class LoginDataTest { private static final String TOKEN = "Token"; private static final String EMPTY = ""; private static final String PASS = "Pass"; private static final String USER = "User"; private final LoginData loginData; private final LoginType expectedLoginType; private final boolean expectedPtcIsValid; private final boolean expectedGoogleIsValid; /** * Parameterized test case data. * * @return list of test data */ @Parameters(name = "{index}: {0}") public static Collection<Object[]> data() { // LoginData, Expected LoginType, Expected PTC isValid,Expected Google isValid final List<Object[]> list = new ArrayList<Object[]>(); list.add(new Object[] {new LoginData(USER, PASS), LoginType.PTC, true, false}); list.add(new Object[] {new LoginData(USER, EMPTY), LoginType.PTC, false, false}); list.add(new Object[] {new LoginData(EMPTY, PASS), LoginType.PTC, false, false}); list.add(new Object[] {new LoginData(EMPTY, EMPTY), LoginType.PTC, false, false}); list.add(new Object[] {new LoginData(USER, null), LoginType.PTC, false, false}); list.add(new Object[] {new LoginData(null, PASS), LoginType.PTC, false, false}); list.add(new Object[] {new LoginData(null, null), LoginType.PTC, false, false}); list.add(new Object[] {new LoginData(TOKEN), LoginType.GOOGLE_AUTH, false, true}); list.add(new Object[] {new LoginData(null), LoginType.GOOGLE_AUTH, false, false}); list.add(new Object[] {new LoginData(EMPTY), LoginType.GOOGLE_AUTH, false, false}); list.add(new Object[] {new LoginData(USER, PASS, TOKEN), LoginType.ALL, true, true}); list.add(new Object[] {new LoginData(EMPTY, EMPTY, EMPTY), LoginType.ALL, false, false}); list.add(new Object[] {new LoginData(null, null, null), LoginType.ALL, false, false}); list.add(new Object[] {new LoginData(USER, PASS, EMPTY), LoginType.ALL, true, false}); list.add(new Object[] {new LoginData(USER, PASS, null), LoginType.ALL, true, false}); list.add(new Object[] {new LoginData(EMPTY, EMPTY, TOKEN), LoginType.ALL, false, true}); list.add(new Object[] {new LoginData(null, null, TOKEN), LoginType.ALL, false, true}); return list; } /** * Instantiate a LoginDataTest using the parameters from data(). * * @param loginData login data to test * @param expectedLoginType login type expected * @param expectedPtcIsValid expected ptc is valid * @param expectedGoogleIsValid expected google is valid */ public LoginDataTest(final LoginData loginData, final LoginType expectedLoginType, final boolean expectedPtcIsValid, final boolean expectedGoogleIsValid) { this.loginData = loginData; this.expectedLoginType = expectedLoginType; this.expectedPtcIsValid = expectedPtcIsValid; this.expectedGoogleIsValid = expectedGoogleIsValid; } /** * Test google token validation. */ @Test public void testGoogleIsValid() { assertThat("Validate google login", loginData.isValidGoogleLogin(), is(expectedGoogleIsValid)); } /** * Test correct loginType detected. */ @Test public void testLoginType() { assertThat("Correct login type", loginData.getLoginType(), is(expectedLoginType)); } /** * Test ptc validation. */ @Test public void testPtcIsValid() { assertThat("Valid ptc login", loginData.isValidPtcLogin(), is(expectedPtcIsValid)); } }