package dodatkowe;

import org.junit.Ignore;
import org.junit.Test;

import static org.assertj.core.api.Assertions.*;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class PrzykladoweTesty {
	
	@Test
	public void testString1() {
		String napis = "Ala ma kota a Ola ma psa.";
		
		assertThat(napis).isEqualTo(napis);
		
		assertThat(napis)
			.startsWith("Ala")
			.contains("ma")
			.endsWith("psa.");
		
		assertThat(napis).doesNotContain("chomika");
		assertThat(napis).matches(".la ma.*");
	}
	
	@Test
	public void testLista1() {
		List<Integer> lista = IntStream.range(0, 100)
			.map(x -> 2*x + 1)
			.boxed()
			.collect(Collectors.toList());
		
		assertThat(lista)
			.isNotNull()
			.hasSize(100)
			.contains(3)
			.doesNotContain(2);
		
		assertThat(lista)
			.allMatch(x -> x % 2 == 1);
	}

	@Test @Ignore
	public void testLista2() {
		// celowo zepsuta implementacja, żeby asercje to wykryły
		List<Integer> lista = IntStream.range(0, 10)
			.map(x -> 2*x)
			.boxed()
			.collect(Collectors.toList());
		
		assertThat(lista)
			.hasSize(10)
			.contains(3)
			.doesNotContain(2);
	}

	@Test @Ignore
	public void testLista3() {
		// celowo zepsuta implementacja, żeby asercje to wykryły
		List<Integer> listaNieprzystych = IntStream.range(0, 10)
			.map(x -> 2*x)
			.boxed()
			.collect(Collectors.toList());
		
		// możemy zmienić komunikat o błędzie - robimy to przed asercją
		assertThat(listaNieprzystych)
			.hasSize(10)
			.withFailMessage("Lista nie zawiera liczby nieparzystej 3")
			.contains(3)
			.withFailMessage("Lista zawiera liczbę parzystą 2")
			.doesNotContain(2);
	}
	
	@Test
	public void testData() {
		LocalDate dzisiaj = LocalDate.now();
		assertThat(dzisiaj).isAfter("2019-02-01");
		
		assertThat(dzisiaj.getDayOfWeek()).isEqualTo(DayOfWeek.THURSDAY);
	}

	
}
