package base;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import models.InternshipFamiliar;
import models.Profile;
import models.Profile.ProfileType;
import models.Residence;
import models.Subscriber;
import models.User;
import models.UserProfile;
import org.junit.Before;
import play.Play;
import play.modules.siena.SienaFixtures;
import play.mvc.Http.Cookie;
import play.test.FunctionalTest;
import play.vfs.VirtualFile;
import com.google.appengine.api.NamespaceManager;
public abstract class BaseTest extends FunctionalTest {
protected Map<String, Cookie> cookies = new HashMap<String, Cookie>();
@Before
public void setup() {
SienaFixtures.deleteAllModels();
SienaFixtures.loadModels("subscribers.yml");
for(Subscriber subscriber : Subscriber.findAll()) {
System.out.println("Subscriber: " + subscriber.name);
}
loadResidenceA();
loadResidenceB();
}
private void loadResidenceB() {
String old = NamespaceManager.get();
try {
Subscriber subscriber = Subscriber.findByName("B");
assertTrue(subscriber.name.equals("B"));
NamespaceManager.set(String.valueOf(subscriber.name));
SienaFixtures.deleteAllModels();
SienaFixtures.loadModels("subscriber_B.yml");
assertTrue("En total tiene que haber 1 residencia ", Residence.count()==1);
assertTrue("La residencia kirikiño tiene registrados 6 usuarios. ",
User.findAll().size()==6);
Residence residence = Residence.findByName("kirikiño");
assertTrue(residence.name.equals("kirikiño"));
assertTrue(Profile.findAll().size()==3);
/*Configuracion del administrador*/
addProfileToUser("laura.garcia", Profile.ProfileType.ADMIN);
assertTrue("Debe existir un administrador para la residencia Kirikiño",
User.getAdmins().size()==1);
assertTrue("El usuario laura.garcia debe ser administrador",
User.findByUsername("laura.garcia").isAdmin());
/*Configuracion de la Familia 1*/
addProfileToUser("eva.perez", Profile.ProfileType.INTERNSHIP);
assertTrue("La residencia tiene registrado a eva.perez",
UserProfile.findByProfile(Profile.findByType(ProfileType.INTERNSHIP)).size()==1);
User eva = User.findByUsername("eva.perez");
assertTrue("El username de la interna es eva.perez", eva.username.equals("eva.perez"));
assertTrue("El username de la interna (" + eva.id + ") es eva.perez", User.findById(eva.id).username.equals("eva.perez"));
addProfileToUser("juan.gomez", Profile.ProfileType.FAMILIAR);
addProfileToUser("abel.martin", Profile.ProfileType.FAMILIAR);
assertTrue("La residencia tiene registrados dos familiares (juan.gomez y abel.martin)",
UserProfile.findByProfile(Profile.findByType(ProfileType.FAMILIAR)).size()==2);
createFamiliarRelation(User.findByUsername("eva.perez"), User.findByUsername("juan.gomez"));
createFamiliarRelation(User.findByUsername("eva.perez"), User.findByUsername("abel.martin"));
int familiars = 2;
assertTrue("eva.perez tiene " + familiars + " familiares",
InternshipFamiliar.getByInternship(User.findByUsername("eva.perez")).size()==familiars);
/*Configuración de la Familia 2*/
addProfileToUser("judith.agirre", Profile.ProfileType.INTERNSHIP);
User judith = User.findByUsername("judith.agirre");
assertTrue("El username de la interna es judith.agirre", judith.username.equals("judith.agirre"));
assertTrue("El username de la interna (" + judith.id + ") es judith.agirrez",
User.findById(judith.id).username.equals("judith.agirre"));
addProfileToUser("tomas.cuenca", Profile.ProfileType.FAMILIAR);
assertTrue("La residencia tiene registrados 3 familiares (juan.gomez, abel.martin y tomas.cuenca)",
UserProfile.findByProfile(Profile.findByType(ProfileType.FAMILIAR)).size()==3);
createFamiliarRelation(User.findByUsername("judith.agirre"), User.findByUsername("tomas.cuenca"));
familiars = 1;
assertTrue("judith.agirre tiene " + familiars + " familiares",
InternshipFamiliar.getByInternship(User.findByUsername("judith.agirre")).size()==familiars);
} finally {
NamespaceManager.set(old);
}
}
private void loadResidenceA() {
String old = NamespaceManager.get();
try {
Subscriber subscriber = Subscriber.findByName("A");
assertTrue(subscriber.name.equals("A"));
NamespaceManager.set(String.valueOf(subscriber.name));
SienaFixtures.deleteAllModels();
SienaFixtures.loadModels("subscriber_A.yml");
Residence residence = Residence.findByName("egaña");
assertTrue(residence.name.equals("egaña"));
assertTrue(Profile.findAll().size()==3);
assertTrue("El número de usuarios debe ser 7", User.findAll().size()==7);
//Eduardo Perrino (eduardo.perrino) es administrador de la residencia A
addProfileToUser("eduardo.perrino", Profile.ProfileType.ADMIN);
assertTrue("Debe existir un administrador para la residencia Egaña",
User.getAdmins().size()==1);
assertTrue("El usuario eduardo.perrino debe ser administrador",
User.findByUsername("eduardo.perrino").isAdmin());
// Juan Lopez (juan.lopez) es familiar del interno Aitor Luengo (aitor.luengo)
addProfileToUser("aitor.luengo", Profile.ProfileType.INTERNSHIP);
assertTrue("No se ha añadido el interno aitor.luengo",
UserProfile.findByProfile(Profile.findByType(ProfileType.INTERNSHIP)).size()==1);
addProfileToUser("juan.lopez", Profile.ProfileType.FAMILIAR);
assertTrue("No se ha añadido el familiar juan.lopez",
UserProfile.findByProfile(Profile.findByType(ProfileType.FAMILIAR)).size()==1);
createFamiliarRelation(User.findByUsername("aitor.luengo"), User.findByUsername("juan.lopez"));
assertTrue(InternshipFamiliar.getAll().size()==1);
System.out.println(InternshipFamiliar.getByFamiliar(User.findByUsername("juan.lopez")).get(0).username);
assertEquals("Objetos diferentes",
InternshipFamiliar.getByFamiliar(User.findByUsername("juan.lopez")).get(0).username,
User.findByUsername("aitor.luengo").username);
assertEquals("Objetos diferentes",
InternshipFamiliar.getByInternship(User.findByUsername("aitor.luengo")).get(0).username,
User.findByUsername("juan.lopez").username);
// Maria lekua (maria.lekua) es familiar de la interna Arantxa Martín (arantxa.martin)
addProfileToUser("arantxa.martin", Profile.ProfileType.INTERNSHIP);
assertTrue(UserProfile.findByProfile(Profile.findByType(ProfileType.INTERNSHIP)).size()==2);
addProfileToUser("maria.lekua", Profile.ProfileType.FAMILIAR);
assertTrue(UserProfile.findByProfile(Profile.findByType(ProfileType.FAMILIAR)).size()==2);
createFamiliarRelation(User.findByUsername("arantxa.martin"), User.findByUsername("maria.lekua"));
assertEquals("Objetos diferentes",
InternshipFamiliar.getByFamiliar(User.findByUsername("maria.lekua")).get(0).username,
User.findByUsername("arantxa.martin").username);
assertEquals("Objetos diferentes",
InternshipFamiliar.getByInternship(User.findByUsername("arantxa.martin")).get(0).username,
User.findByUsername("maria.lekua").username);
NamespaceManager.set(old);
} finally {
NamespaceManager.set(old);
}
}
private void addProfileToUser(String username, ProfileType profile) {
UserProfile user_profile = new UserProfile(User.findByUsername(username),
Profile.findByType(profile));
user_profile.insert();
}
private void createFamiliarRelation(User internship, User familiar) {
InternshipFamiliar internshipFamiliar = new InternshipFamiliar(internship, familiar);
internshipFamiliar.insert();
}
protected static File locateFile(String filename) {
VirtualFile vfFile;
for (VirtualFile vf : Play.javaPath) {
vfFile = vf.child(filename);
if(vfFile!=null && vfFile.exists()) {
return vfFile.getRealFile();
}
}
return null;
}
}