<commit_before>package br.edu.faculdadedelta.modelo.test;

import static org.junit.Assert.*;

import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.Subqueries;
import org.hibernate.sql.JoinType;
import org.hibernate.transform.Transformers;
import org.junit.Test;

import br.edu.faculdadedelta.base.test.BaseTest;
import br.edu.faculdadedelta.modelo.Cliente;
import br.edu.faculdadedelta.modelo.Produto;
import br.edu.faculdadedelta.modelo.Venda;

public class RelatorioTest extends BaseTest {

	private static final String CPF_PADRAO = "010.188.991-10";
	
	@Test
	@SuppressWarnings("unchecked")
	public void deveConsultarTodosClientes() {
		salvarClientes(3);
		
		Criteria criteria = createCriteria(Cliente.class, "c");
		
		List<Cliente> clientes = criteria
				.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
				.list();
		
		assertTrue("verifica se a quantidade de clientes é pelo menos 3", clientes.size() >= 3);
		
		clientes.forEach(cliente -> assertFalse(cliente.isTransient()));
	}
	
	@Test
	public void deveConsultarQuantidadeVendasPorCliente() {
		salvarVendas(3);
		
		Criteria criteria = createCriteria(Venda.class, "v")
				// JOIN
				.createAlias("v.cliente", "c")
				// WHERE =
				.add(Restrictions.eq("c.cpf", CPF_PADRAO))
				// COUNT(*)
				.setProjection(Projections.rowCount());
		
		Long qtdRegistros = (Long) criteria
				.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
				.uniqueResult();
		
		assertTrue("verifica se a quantidade de vendas é pelo menos 3", qtdRegistros >= 3);
	}
	
	@Test
	public void deveConsultarMaiorIdCliente() {
		salvarClientes(3);
		
		Criteria criteria = createCriteria(Cliente.class, "c")
				.setProjection(Projections.max("c.id"));
		
		Long maiorId = (Long) criteria
				.setResultTransformer(Criteria.PROJECTION)
				.uniqueResult();
		
		assertTrue("verifica se o ID é maior que 2 (salvou 3 clientes)", maiorId > 3);
	}
	
	@Test
	public void deveConsultarVendasDaUltimaSemana() {
		salvarVendas(3);
		
		Calendar ultimaSemana = Calendar.getInstance();
		ultimaSemana.add(Calendar.WEEK_OF_YEAR, -1);
		
		Criteria criteria = createCriteria(Venda.class, "v");
		// WHERE BETWEEN
		criteria.add(Restrictions.between("v.dataHora", ultimaSemana.getTime(), new Date()));
		// COUNT(*)
		criteria.setProjection(Projections.rowCount());
		
		Long qtdRegistros = (Long) criteria
				.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
				.uniqueResult();
		
		assertTrue("verifica se a quantidade de vendas é pelo menos 3", qtdRegistros >= 3);
	}

	@Test
	@SuppressWarnings("unchecked")
	public void deveConsultarNotebooks() {
		salvarProdutos(3);
		
		Criteria criteria = createCriteria(Produto.class, "p");
		// WHERE IN
		criteria.add(Restrictions.in("p.nome", "Notebook", "Netbook", "Macbook"));
		// ORDER BY
		criteria.addOrder(Order.asc("p.fabricante"));
		
		List<Produto> notebooks = criteria
				.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
				.list();
		
		assertTrue("verifica se a quantidade de notebooks é pelo menos 3", notebooks.size() >= 3);
		
		notebooks.forEach(notebook -> assertFalse(notebook.isTransient()));
	}
	
	@Test
	@SuppressWarnings("unchecked")
	public void deveConsultarDezPrimeirosProdutos() {
		salvarProdutos(20);
		
		Criteria criteria = createCriteria(Produto.class, "p")
				// OFFSET
				.setFirstResult(1)
				// LIMIT
				.setMaxResults(10);
		
		List<Produto> notebooks = criteria
				.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
				.list();
		
		assertTrue("verifica se a quantidade de notebooks é 10", notebooks.size() == 10);
		
		notebooks.forEach(notebook -> assertFalse(notebook.isTransient()));
	}
	<commit_msg>adicionando comentários explicativos no código<commit_after>package br.edu.faculdadedelta.modelo.test;

import static org.junit.Assert.*;

import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.Subqueries;
import org.hibernate.sql.JoinType;
import org.hibernate.transform.Transformers;
import org.junit.Test;

import br.edu.faculdadedelta.base.test.BaseTest;
import br.edu.faculdadedelta.modelo.Cliente;
import br.edu.faculdadedelta.modelo.Produto;
import br.edu.faculdadedelta.modelo.Venda;

public class RelatorioTest extends BaseTest {

	private static final String CPF_PADRAO = "010.188.991-10";
	
	@Test
	@SuppressWarnings("unchecked")
	public void deveConsultarTodosClientes() {
		salvarClientes(3);
		
		Criteria criteria = createCriteria(Cliente.class, "c");
		
		List<Cliente> clientes = criteria
				// SELECT DISTINCT
				.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
				.list();
		
		assertTrue("verifica se a quantidade de clientes é pelo menos 3", clientes.size() >= 3);
		
		clientes.forEach(cliente -> assertFalse(cliente.isTransient()));
	}
	
	@Test
	public void deveConsultarQuantidadeVendasPorCliente() {
		salvarVendas(3);
		
		Criteria criteria = createCriteria(Venda.class, "v")
				// JOIN
				.createAlias("v.cliente", "c")
				// WHERE =
				.add(Restrictions.eq("c.cpf", CPF_PADRAO))
				// COUNT(*)
				.setProjection(Projections.rowCount());
		
		Long qtdRegistros = (Long) criteria
				.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
				.uniqueResult();
		
		assertTrue("verifica se a quantidade de vendas é pelo menos 3", qtdRegistros >= 3);
	}
	
	@Test
	public void deveConsultarMaiorIdCliente() {
		salvarClientes(3);
		
		Criteria criteria = createCriteria(Cliente.class, "c")
				// SELECT MAX
				.setProjection(Projections.max("c.id"));
		
		Long maiorId = (Long) criteria
				.setResultTransformer(Criteria.PROJECTION)
				.uniqueResult();
		
		assertTrue("verifica se o ID é maior que 2 (salvou 3 clientes)", maiorId > 3);
	}
	
	@Test
	public void deveConsultarVendasDaUltimaSemana() {
		salvarVendas(3);
		
		Calendar ultimaSemana = Calendar.getInstance();
		ultimaSemana.add(Calendar.WEEK_OF_YEAR, -1);
		
		Criteria criteria = createCriteria(Venda.class, "v")
				// WHERE BETWEEN
				.add(Restrictions.between("v.dataHora", ultimaSemana.getTime(), new Date()))
				// COUNT(*)
				.setProjection(Projections.rowCount());
		
		Long qtdRegistros = (Long) criteria
				.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
				.uniqueResult();
		
		assertTrue("verifica se a quantidade de vendas é pelo menos 3", qtdRegistros >= 3);
	}

	@Test
	@SuppressWarnings("unchecked")
	public void deveConsultarNotebooks() {
		salvarProdutos(3);
		
		Criteria criteria = createCriteria(Produto.class, "p")
				// WHERE IN
				.add(Restrictions.in("p.nome", "Notebook", "Netbook", "Macbook"))
				// ORDER BY
				.addOrder(Order.asc("p.fabricante"));
		
		List<Produto> notebooks = criteria
				.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
				.list();
		
		assertTrue("verifica se a quantidade de notebooks é pelo menos 3", notebooks.size() >= 3);
		
		notebooks.forEach(notebook -> assertFalse(notebook.isTransient()));
	}
	
	@Test
	@SuppressWarnings("unchecked")
	public void deveConsultarDezPrimeirosProdutos() {
		salvarProdutos(20);
		
		Criteria criteria = createCriteria(Produto.class, "p")
				// OFFSET
				.setFirstResult(1)
				// LIMIT
				.setMaxResults(10);
		
		List<Produto> notebooks = criteria
				.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
				.list();
		
		assertTrue("verifica se a quantidade de notebooks é 10", notebooks.size() == 10);
		
		notebooks.forEach(notebook -> assertFalse(notebook.isTransient()));
	}
	
{'fraction_non_alphanumeric': 0.12233779098563645, 'fraction_numerical': 0.009162951956414067, 'mean_word_length': 4.446392447741065, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3872615', 'n_tokens_mistral': 3176, 'n_tokens_neox': 2671, 'n_words': 520}