Subversion Repositories eFlore/Applications.del

Rev

Rev 644 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.del.test.composants.votes;

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVotePresenteur;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.Protocole;

import com.google.gwt.user.client.ui.HasWidgets;

public class MoyenneVotePresenteurTest {

        MoyenneVotePresenteur mvp;
        HasWidgets container;
        List<Protocole> tousLesProtocoles = new ArrayList<Protocole>();
        MoyenneVotePresenteur.Vue vue;
        Image imageCourante;
        
        @Before
        public void setUp() {
                
                CacheClient.getInstance().getUtilisateur().setId(0+"");
                
                Protocole protocol1 = new Protocole();
                protocol1.setNom("esthétique");
                protocol1.setId(0);

                Protocole protocol2 = new Protocole();
                protocol2.setNom("capitalisation de scan de feuilles");
                protocol2.setId(1);

                tousLesProtocoles.add(protocol1);
                tousLesProtocoles.add(protocol2);
                
                imageCourante = new Image();
                Protocole protocole = tousLesProtocoles.get(0);
                vue = Mockito.mock(MoyenneVotePresenteur.Vue.class,Mockito.RETURNS_DEEP_STUBS);
                mvp = new MoyenneVotePresenteur(imageCourante, protocole, vue);
                container = Mockito.mock(HasWidgets.class, Mockito.RETURNS_DEEP_STUBS);
                mvp.go(container);
        }
        
        @Test 
        public void testerVoteMemeUtilisateur() {
                // Un même utilisateur vote deux fois sur la même image, même protocole, en faisant des votes différents
                assertEquals(1, imageCourante.getListeVotesProtocoles().size());
                mvp.setValeurVoteUtilisateur(3);
                mvp.enregistrerVote();
                
                // la valeur du vote change mais le nombre de vote ne change pas, son vote est remplacé
                mvp.setValeurVoteUtilisateur(1);
                mvp.enregistrerVote();
                assertEquals(1, imageCourante.getVotesProtocoles(0).size());
                assertEquals(1, mvp.getValeurVoteTotal());
        }
        
        @Test
        public void testerTroisVotesUtilisateursDifferents() {  
                
                // Trois utilisateur différents votent pour la même image et le même protocole
                CacheClient.getInstance().getUtilisateur().setId(0+"");
                assertEquals(1, imageCourante.getListeVotesProtocoles().size());
                mvp.setValeurVoteUtilisateur(3);
                mvp.enregistrerVote();
                
                CacheClient.getInstance().getUtilisateur().setId(1+"");
                mvp.setValeurVoteUtilisateur(1);
                mvp.enregistrerVote();
                assertEquals(2, imageCourante.getVotesProtocoles(0).size());
                assertEquals(2, mvp.getValeurVoteTotal());
                
                CacheClient.getInstance().getUtilisateur().setId(2+"");
                mvp.setValeurVoteUtilisateur(5);
                mvp.enregistrerVote();
                assertEquals(3, imageCourante.getVotesProtocoles(0).size());
                assertEquals(3, mvp.getValeurVoteTotal());
                
                // Le premier utilisateur change d'avis et modifie son vote
                CacheClient.getInstance().getUtilisateur().setId(0+"");
                assertEquals(1, imageCourante.getListeVotesProtocoles().size());
                mvp.setValeurVoteUtilisateur(5);
                mvp.enregistrerVote();
                // La moyenne des vote change mais le nombre de vote ne doit pas changer
                assertEquals(3, imageCourante.getVotesProtocoles(0).size());
                assertEquals(4, mvp.getValeurVoteTotal());
        }
        
        @Test
        public void testerDeuxVotesMemeUtilisateursProtocolesDifferents() {     
                // Trois utilisateur différents votent pour la même image et le même protocole
                CacheClient.getInstance().getUtilisateur().setId(0+"");
                assertEquals(1, imageCourante.getListeVotesProtocoles().size());
                mvp.setValeurVoteUtilisateur(3);
                mvp.enregistrerVote();
        }
}