package com.tutosandroidfrance.unittest;
import android.content.Context;
import android.content.SharedPreferences;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
/**
* Created by florentchampigny on 03/07/15.
*/
public class StorageTest {
@Mock Context context;
@Mock SharedPreferences sharedPreferences;
@Mock SharedPreferences.Editor editor;
//l'objet à tester
Storage storage;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this); //créé tous les @Mock
//on remplace le context.getSharedPreferences(String,int) afin qu'il retourne notre mock sharedPreferences
doReturn(sharedPreferences).when(context).getSharedPreferences(anyString(), anyInt());
//on remplace le sharedPreferences.edit() afin qu'il retourne notre mock edit
doReturn(editor).when(sharedPreferences).edit();
//on remplace la fonction edit.putString(String, String) afin qu'elle retourne edit,
//afin d'éviter le crash au edit.putString(S,S).apply
doReturn(editor).when(editor).putString(anyString(), anyString());
//puis on constrit notre storage avec notre mock context
storage = new Storage(context);
}
@Test
public void testTransformToString() throws Exception {
List<Integer> integers = Arrays.asList(1, 2, 3);
String string = storage.transformToString(integers);
assertEquals("1,2,3",string);
}
@Test
public void testTransformFromString() throws Exception {
String string = "1,2,3";
List<Integer> integers = storage.transformFromString(string);
assertEquals(Arrays.asList(1, 2, 3),integers);
}
@Test
public void testLoad() throws Exception {
doReturn("1,2,3").when(sharedPreferences).getString(anyString(),isNull(String.class));
List<Integer> integers = storage.load();
verify(sharedPreferences, atLeastOnce()).getString(anyString(),isNull(String.class));
assertEquals(Arrays.asList(1, 2, 3), integers);
}
@Test
public void testLoadNull() throws Exception {
doReturn(null).when(sharedPreferences).getString(anyString(),isNull(String.class));
List<Integer> integers = storage.load();
verify(sharedPreferences, atLeastOnce()).getString(anyString(),isNull(String.class));
assertTrue(integers.isEmpty());
}
@Test
public void testSave() throws Exception {
List<Integer> integers = Arrays.asList(1, 2, 3);
storage.save(integers);
verify(editor, atLeastOnce()).putString(anyString(),eq("1,2,3"));
verify(editor, atLeastOnce()).apply();
}
}