package org.wikipedia.login; import android.support.v4.util.ArraySet; import com.google.gson.reflect.TypeToken; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.wikipedia.json.GsonMarshaller; import org.wikipedia.json.GsonUnmarshaller; import org.wikipedia.test.TestRunner; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; @RunWith(TestRunner.class) public class UserTest { private static final Set<String> GROUPS = Collections.unmodifiableSet(new ArraySet<>(Arrays.asList("*", "user", "autoconfirmed"))); private TypeToken<Map<String, Integer>> type = new TypeToken<Map<String, Integer>>(){}; @Before @SuppressWarnings("checkstyle:magicnumber") public void setUp() { User.disableStorage(); User user = new User("name", "pwd", new HashMap<String, Integer>(), GROUPS); User.setUser(user); user.putIdForLanguage("en", 333); user.putIdForLanguage("es", 444); user.putIdForLanguage("de", 555); } @Test public void testUserLogin() { User user = User.getUser(); //noinspection ConstantConditions assertThat(user.getUsername(), is("name")); assertThat(user.getPassword(), is("pwd")); assertThat(user.getIdMap(), is(GsonUnmarshaller.unmarshal(type, "{\"en\":333,\"es\":444,\"de\":555}"))); assertThat(user.getGroupMemberships(), is(GROUPS)); } @Test @SuppressWarnings("checkstyle:magicnumber") public void testGetIdsByLanguage() { User user = User.getUser(); //noinspection ConstantConditions assertThat(user.getIdForLanguage("en"), is(333)); assertThat(user.getIdForLanguage("es"), is(444)); assertThat(user.getIdForLanguage("de"), is(555)); } @Test @SuppressWarnings("checkstyle:magicnumber") public void testMarshalAndUnmarshalIds() { User user = User.getUser(); //noinspection ConstantConditions String json = GsonMarshaller.marshal(user.getIdMap()); Map<String, Integer> ids = GsonUnmarshaller.unmarshal(type, json); assertThat(ids.size(), is(3)); assertThat(ids.get("en"), is(333)); assertThat(ids.get("es"), is(444)); assertThat(ids.get("de"), is(555)); } @Test public void testClear() { User.clearUser(); assertThat(User.getUser(), is(nullValue())); } }