import org.junit.*;
import static org.junit.Assert.*;
import java.time.LocalDateTime;

/**
 * {@code PointDeVenteTest} est une classe de test de {@code PointDeVente}.
 */

public class PointDeVenteTest {

	protected PointDeVente pdv;

	@Before public void setUp() {
		this.pdv = new PointDeVenteBuilder()
			.setIdentifiant(31075001)
			.setLatitude(4363166.59585)
			.setLongitude(148256.404804)
			.setAdresse("92 Chemin de Gabardie")
			.setVille("Toulouse")
			.setCodePostal("31200")
			.addService("Automate CB")
			.addService("Station de gonflage")
			.addService("GPL")
			.addPrix(Carburant.GAZOLE, LocalDateTime.parse("2017-01-02T09:02:33"), 1235)
			.addPrix(Carburant.GAZOLE, LocalDateTime.parse("2017-01-17T08:23:09"), 1239)
			.build();
	}

	@Test public void testerAttributs() {
		assertEquals(31075001, pdv.getIdentifiant());
		assertEquals(4363166.59585, pdv.getLatitude(), 10e-6);
		assertEquals(148256.404804, pdv.getLongitude(), 10e-6);
		assertEquals("92 Chemin de Gabardie", pdv.getAdresse());
		assertEquals("TOULOUSE", pdv.getVille());
		assertEquals("31200", pdv.getCodePostal());
	}

	@Test public void testerServices() {
		assertEquals(3, pdv.getServices().size());
		assertTrue(pdv.getServices().contains("GPL"));
		assertTrue(pdv.getServices().contains("Station de gonflage"));
		assertTrue(pdv.getServices().contains("Automate CB"));
		assertFalse(pdv.getServices().contains("Toilettes publiques"));
	}

	@Test public void testerPrix() {
		assertEquals("Nominal", 1235, pdv.getPrix(Carburant.GAZOLE,
					LocalDateTime.parse("2017-01-10T09:00:00")));
		assertEquals("Nominal", 1239, pdv.getPrix(Carburant.GAZOLE,
					LocalDateTime.parse("2017-01-21T09:00:00")));

		assertEquals("Limite", 1235, pdv.getPrix(Carburant.GAZOLE,
					LocalDateTime.parse("2017-01-17T08:23:08")));
		assertEquals("Limite", 1239, pdv.getPrix(Carburant.GAZOLE,
					LocalDateTime.parse("2017-01-17T08:23:09")));

		assertEquals("Date avant le premier changement de prix",
				0, pdv.getPrix(Carburant.GAZOLE,
					LocalDateTime.parse("2017-01-01T10:00:00")));

		assertEquals("Pas de prix pour ce carburant",
				0, pdv.getPrix(Carburant.GPLc,
					LocalDateTime.parse("2017-01-15T10:00:00")));
	}




	

}
