/*
 * Copyright 2016-2016 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package br.edu.ifrn.biblioteka.dominio;

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

import org.junit.Test;

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

/**
 * Teste da classe Categoria.
 *
 * @author Pedro Paulo Figueiredo.
 */
public class CategoriaTests {
	private static final String CATEGORIA1 = "Suspense";
	private static final String CATEGORIA2 = "Romanse";
	private static final String CATEGORIA3 = "Aventura";

	private static final String ISBN1 = "9788439711111";
	private static final String ISBN2 = "9788439722222";
	private static final String ISBN3 = "9788439733333";


	@Test
	public void mesmoCategoriaNomesIguais() {
		assertThat(Categoria.builder().nome(CATEGORIA1).build())
				.isEqualTo(Categoria.builder().nome(CATEGORIA1).build());
	}

	@Test
	public void categoriaDiferenteNomesDiferentes() {
		assertThat(Categoria.builder().nome(CATEGORIA1).build())
				.isNotEqualTo(Categoria.builder().nome(CATEGORIA2).build());
	}

	@Test
	public void mesmoNomeLivrosIguais() {
		// Criar primeiro set de livros.
		Livro l1 = Livro.builder().isbn(ISBN1).build();
		Livro l2 = Livro.builder().isbn(ISBN2).build();

		Set<Livro> livros1 = new HashSet<>();
		livros1.add(l1);
		livros1.add(l2);

		// Criar segundo set de livros.
		Set<Livro> livros2 = new HashSet<>();
		livros2.add(l1);
		livros2.add(l2);

		// Cria objetos com mesmo nome e mesmo set de livros.
		Categoria a1 = Categoria.builder().nome(CATEGORIA1).build();
		a1.setLivros(livros1);

		Categoria a2 = Categoria.builder().nome(CATEGORIA1).build();
		a2.setLivros(livros2);

		assertThat(a1).isEqualTo(a2);
	}

	@Test
	public void mesmoNomeLivrosDiferentes() {
		// Criar primeiro set de livros.
		Livro l1 = Livro.builder().isbn(ISBN1).build();
		Livro l2 = Livro.builder().isbn(ISBN2).build();

		Set<Livro> livros1 = new HashSet<>();
		livros1.add(l1);
		livros1.add(l2);

		// Criar segundo set de livros.
		Livro l3 = Livro.builder().isbn(ISBN3).build();
		Set<Livro> livros2 = new HashSet<>();
		livros2.add(l3);

		// Cria objetos com mesmo nome, porém, com set de livros diferentes.
		Categoria a1 = Categoria.builder().nome(CATEGORIA1).build();
		a1.setLivros(livros1);

		Categoria a2 = Categoria.builder().nome(CATEGORIA1).build();
		a2.setLivros(livros2);

		assertThat(a1).isNotEqualTo(a2);
	}

	@Test
	public void compareTo() {
		Set<Categoria> categorias = new TreeSet<>();

		Categoria romanse = Categoria.builder().nome(CATEGORIA2).build();
		Categoria aventura = Categoria.builder().nome(CATEGORIA3).build();

		categorias.add(romanse);
		categorias.add(aventura);

		assertThat(categorias.iterator().next()).isEqualTo(aventura);
	}
}

@@ -1245,17 +1245,16 @@
 3333%22;%0A%0A
-%0A
 %09@Test%0A%09
@@ -1658,54 +1658,60 @@
 %7B%0A%09%09
-// Criar primeiro set de livros.%0A%09%09L
+Set%3CLivro%3E livros1 = new HashSet%3C%3E();%0A%09%09l
 ivro
- l1 = 
+s1.add(
 Livr
@@ -1737,39 +1737,41 @@
 BN1).build()
+)
 ;%0A%09%09
-L
+l
 ivro
- l2 = 
+s1.add(
 Livro.builde
@@ -1797,86 +1797,8 @@
 ld()
-;%0A%0A%09%09Set%3CLivro%3E livros1 = new HashSet%3C%3E();%0A%09%09livros1.add(l1);%0A%09%09livros1.add(l2
 );%0A%0A
@@ -1889,29 +1889,95 @@
 add(
-l1);%0A%09%09livros2.add(l2
+Livro.builder().isbn(ISBN1).build());%0A%09%09livros2.add(Livro.builder().isbn(ISBN2).build()
 );%0A%0A
@@ -2307,16 +2307,18 @@
 / Criar 
+o 
 primeiro
@@ -2339,19 +2339,60 @@
 .%0A%09%09
+Set%3C
 Livro
+%3E
  l
-1 = 
+ivros1 = new HashSet%3C%3E();%0A%09%09livros1.add(
 Livr
@@ -2426,23 +2426,25 @@
 ld()
+)
 ;%0A%09%09
-L
+l
 ivro
- l2 = 
+s1.add(
 Livr
@@ -2478,173 +2478,45 @@
 ld()
-;%0A%0A%09%09Set%3CLivro%3E livros1 = new HashSet%3C%3E();%0A%09%09livros1.add(l1);%0A%09%09livros1.add(l2);%0A%0A%09%09// Criar segundo set de livros.%0A%09%09Livro l3 = Livro.builder().isbn(ISBN3).build();
+);%0A%0A%09%09// Criar segundo set de livros.
 %0A%09%09S
@@ -2570,10 +2570,43 @@
 add(
-l3
+Livro.builder().isbn(ISBN3).build()
 );%0A%0A

Remove duplicate code