package server.backend;

import static org.junit.Assert.*;

import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.TreeMap;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import commons.IdPosizione;
import commons.Posizione;
import commons.Utente;

public class GestoreDatiPersistentiAddJUnitTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		
	}

	@Before
	public void setUp() throws Exception {
	}

	@After
	public void tearDown() throws Exception {
		
	}

	@Test
	public void test() {
		GestoreDatiPersistenti g = GestoreDatiPersistenti.getInstance();

		SessionFactory sessionFactory = g.getFactory();
		//Svuotamento delle tabelle del DB
		Session session = sessionFactory.openSession();
		Transaction tx = session.beginTransaction();
		session.createNativeQuery("delete from posizioni").executeUpdate();
		session.createNativeQuery("delete from utenti").executeUpdate();
		tx.commit();
		session.close();
		
		
		//DB senza Utenti
		TreeMap<String, Utente> utenti = g.getUtenti();
		assertTrue("La lista di utenti ottenuta deve essere vuota!", utenti.isEmpty());	
		
		//DB aggiunta utente non esistente
		Utente u=new Utente("pas","pas","pas@gmail.com","Pasquale","Forgione");
		assertTrue("La lista di utenti deve contenere solo l'utente aggiunto!", g.addUtente(u) && g.getUtenti().containsKey(u.getUsername()));	

		//DB aggiunta utente esistente
		assertTrue("L'utente gia' esistente e' stato aggiunto erroneamente!",	!g.addUtente(u));
	
		

		
		
		
		//DB senza Posizioni
		TreeMap<IdPosizione, Posizione> posizioni = g.getPosizioni();
		assertTrue("La lista delle posizioni ottenuta deve essere vuota!", posizioni.isEmpty());	


		//DB aggiunta posizione non esistente a utente non esistente
		LocalDateTime localDateTime = LocalDateTime.of(2016, 02, 10, 00, 00, 00);
		IdPosizione idPos = new IdPosizione(Timestamp.valueOf(localDateTime), 14.4111111,  14.4111111);
		Utente u1=new Utente("lor","lor","lor@gmail.com","Lorenzo","Goglia");
		Posizione p=new Posizione(idPos,u1, 20);
		assertTrue("La posizione e' stata aggiunta ad un utente non esistente!", !g.addPosizione(p));	
		
		posizioni=g.getPosizioni();
		assertTrue("La lista delle posizioni ottenuta deve essere vuota!", posizioni.isEmpty());	


		//DB aggiunta posizione non esistente a utente esistente
		p=new Posizione(idPos,u, 20);
		assertTrue("La posizione pur non essendo presente nel database, non e' stata aggiunta ad un utente esistente!", g.addPosizione(p) && g.getPosizioni().containsKey(idPos));	
		
		//DB con Posizioni
		posizioni=g.getPosizioni();
		assertTrue("La lista di posizioni deve contenere solo la posizione aggiunta!", posizioni.containsKey(idPos));
		
		//DB aggiunta posizione gia' esistente
		assertTrue("La posizione gia' esistente e' stata aggiunta di nuovo!", !g.addPosizione(p));
		
		//DB aggiunta posizione gia' esistente ad un utente
		assertTrue("Aggiunta consentita di una posizione gia' esistente ad un utente!", !g.addPosizione(p) && g.getPosizioni().containsKey(idPos));

		
		
		
		sessionFactory = g.getFactory();
		//Svuotamento delle tabelle del DB
		session = sessionFactory.openSession();
		tx = session.beginTransaction();
		session.createNativeQuery("delete from posizioni").executeUpdate();
		session.createNativeQuery("delete from utenti").executeUpdate();
		tx.commit();
		session.close();
	}

}

@@ -1424,16 +1424,18 @@
 tente%0A%09%09
+//
 Utente u
@@ -1496,24 +1496,26 @@
 rgione%22);%0A%09%09
+//
 assertTrue(%22
@@ -1666,32 +1666,34 @@
 nte esistente%0A%09%09
+//
 assertTrue(%22L'ut
@@ -2025,16 +2025,18 @@
 tente%0A%09%09
+//
 LocalDat
@@ -2103,16 +2103,18 @@
  00);%0A%09%09
+//
 IdPosizi
@@ -2203,16 +2203,18 @@
 111);%0A%09%09
+//
 Utente u
@@ -2277,16 +2277,18 @@
 ia%22);%0A%09%09
+//
 Posizion
@@ -2314,32 +2314,34 @@
 dPos,u1, 20);%0A%09%09
+//
 assertTrue(%22La p
@@ -2424,16 +2424,18 @@
 ;%09%0A%09%09%0A%09%09
+//
 posizion
@@ -2448,32 +2448,34 @@
 tPosizioni();%0A%09%09
+//
 assertTrue(%22La l
@@ -2611,16 +2611,18 @@
 tente%0A%09%09
+//
 p=new Po
@@ -2641,24 +2641,26 @@
 s,u, 20);%0A%09%09
+//
 assertTrue(%22
@@ -2845,16 +2845,18 @@
 zioni%0A%09%09
+//
 posizion
@@ -2869,32 +2869,34 @@
 tPosizioni();%0A%09%09
+//
 assertTrue(%22La l
@@ -3027,32 +3027,34 @@
 ia' esistente%0A%09%09
+//
 assertTrue(%22La p
@@ -3187,16 +3187,18 @@
 tente%0A%09%09
+//
 assertTr

Modifica classe GestoreDatiPersistentiAddJUnitTest per effettuare una prova relativa al funzionamento di JUnit.