Package br.com.objectos.comuns.relational

Source Code of br.com.objectos.comuns.relational.TesteDeRegistros$BancoDeDadosFalso

/*
* Copyright 2011 Objectos, Fábrica de Software LTDA.
*
* 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.com.objectos.comuns.relational;

import static br.com.objectos.comuns.base.Dates.newLocalDate;
import static com.google.common.collect.Lists.newArrayList;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;

import java.util.List;

import org.joda.time.LocalDate;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import br.com.objectos.comuns.relational.BancoDeDados;
import br.com.objectos.comuns.relational.Registro;
import br.com.objectos.comuns.relational.Registros;
import br.com.objectos.comuns.relational.RegistrosGuice;

import com.google.common.collect.ImmutableList;

/**
* @author marcio.endo@objectos.com.br (Marcio Endo)
*/
@Test
public class TesteDeRegistros {

  private Registros registros;

  private Asserts asserts;

  @BeforeClass
  public void prepararRegistros() {
    BancoDeDados bancoDeDados = new BancoDeDadosFalso();

    registros = new RegistrosGuice(bancoDeDados);
  }

  @BeforeMethod
  public void reiniciar() {
    asserts = new Asserts();
  }

  public void adicionarCasoInicial() {
    List<Registro> existentes = ImmutableList.of();
    Registro novoRegisto = novoRegistro(2010, 2011, "true");

    registros.adicionar(existentes, novoRegisto);

    assertEquals(asserts.atualizados.size(), 1);
    assertEquals(asserts.excluidos.size(), 0);

    assertEquals(asserts.atualizados.get(0), novoRegisto);
  }

  public void adicionarVerifiqueRemocaoDeDatasRepetidas() {
    Registro r0 = novoRegistro(2010, 1999, "true");
    Registro r1 = novoRegistro(2011, 1999, "false");
    Registro r2 = novoRegistro(2012, 1999, "true");
    List<Registro> existentes = ImmutableList.of(r0, r1, r2);

    Registro rn = novoRegistro(2011, 2000, "false");

    List<Registro> resultado;
    resultado = registros.adicionar(existentes, rn);

    assertEquals(asserts.atualizados.size(), 3);
    assertEquals(resultado.size(), 3);

    assertTrue(resultado.contains(r0));
    assertTrue(resultado.contains(rn));
    assertTrue(resultado.contains(r2));

    assertEquals(asserts.excluidos.size(), 1);
    assertTrue(asserts.excluidos.contains(r1));
  }

  public void adicioanrVerifiqueRemocaoDeRepetidas() {
    Registro r0 = novoRegistro(2010, 1999, "true");
    Registro r1 = novoRegistro(2011, 1999, "false");
    Registro r2 = novoRegistro(2013, 1999, "true");
    List<Registro> existentes = ImmutableList.of(r0, r1, r2);

    Registro rn = novoRegistro(2012, 2000, "false");

    List<Registro> resultado;
    resultado = registros.adicionar(existentes, rn);

    assertEquals(asserts.atualizados.size(), 3);
    assertEquals(resultado.size(), 3);

    assertTrue(resultado.contains(r0));
    assertTrue(resultado.contains(rn));
    assertTrue(resultado.contains(r2));

    assertEquals(asserts.excluidos.size(), 1);
    assertTrue(asserts.excluidos.contains(r1));
  }

  public void removerCasoTrivialDeUmUnicoRegistro() {
    Registro registro = novoRegistro(2010, 2011, "true");

    List<Registro> existentes = ImmutableList.of(registro);

    registros.remover(existentes, registro);

    assertEquals(asserts.atualizados.size(), 0);
    assertEquals(asserts.excluidos.size(), 1);

    assertEquals(asserts.excluidos.get(0), registro);
  }

  public void remocaoDoRegistroFinalDeveAtualizarDataFinalDoPenultimo() {
    Registro r0 = novoRegistro(2010, 1999, "true");
    Registro r1 = novoRegistro(2011, 1999, "false");
    Registro r2 = novoRegistro(2013, 1999, "true");
    List<Registro> existentes = ImmutableList.of(r0, r1, r2);

    List<Registro> resultado;
    resultado = registros.remover(existentes, r2);

    assertEquals(asserts.atualizados.size(), 2);
    assertEquals(resultado.size(), 2);

    assertTrue(resultado.contains(r0));
    assertTrue(resultado.contains(r1));

    assertEquals(asserts.excluidos.size(), 1);
    assertTrue(asserts.excluidos.contains(r2));
  }

  private Registro novoRegistro(int ano, int anoCriacao, String propriedade) {
    LocalDate dataInicial = newLocalDate(ano, 12, 1);
    LocalDate dataDeCriacao = newLocalDate(anoCriacao, 12, 1);

    return new ConstrutorDeRegistroQualquerFalso().dataInicial(dataInicial)
        .dataDeCriacao(dataDeCriacao).propriedade(propriedade).novaInstancia();
  }

  private class Asserts {
    List<Registro> atualizados = newArrayList();
    List<Registro> excluidos = newArrayList();
  }

  private class BancoDeDadosFalso extends BancoDeDadosVazio {
    @Override
    public <E> E atualizar(E entidade) {
      asserts.atualizados.add((Registro) entidade);
      return entidade;
    }

    @Override
    public void remover(Object entidade) {
      asserts.excluidos.add((Registro) entidade);
    }
  }

}
TOP

Related Classes of br.com.objectos.comuns.relational.TesteDeRegistros$BancoDeDadosFalso

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.