US2009 - ArthurSchiavom/gestao-informacao-chao-de-fabrica--projeto-academico GitHub Wiki
=======================================
Como Gestor de Produção, eu pretendo importar ordens de produção através de um ficheiro CSV.

- O identificador da ordem de produção é único
- Quantidade a produzir é maior que 0.
- A data de emissão têm que ser anterior a data prevista de execução
- As datas não podem estar no futuro
Classe do domínio: OrdemProducao Controlador: ImportarOrdemProducaoController Repositório: OrdemProducaoRepository


- Command - Para implementar a ação de registar novas categorias
- Repository Pattern - Para abstrair o sistema de persistência de objetos, facilitando a implementação com diferentes tecnologias
- Controller - Para separar o layer da interface do layer de domínio, introduzindo então um layer de aplicação encarregue do processamento, mas não responsável por caracterizar o negócio ou interagir com o utilizador.
- Polymorphism & Template method - Usado na implementação do repositório específico de cada entidade.
- Liskov Substitution principle & Dependency inversion - Em todas as implementações de interfaces e extensões de classes.
- Pure fabrication - Controller e UI.
- Information expert & HC/LC - Sempre presente: cada classe tem uma responsabilidade bem definida, visando a sua independência de outras classes.
- Singleton - Utilizado na RepositoryFactory
- Strategy - Caso haja ficheiros diferentes, pode ser aplicado a strategy necessária durante runtime
Testes: São explicitos pelo nome dos métodos
package eapli.base.gestaoproducao.ordemProducao.domain;
import eapli.base.gestaoproducao.ordemProducao.application.OrdemProducaoDTO; import org.junit.Test;
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List;
import static org.junit.Assert.*;
public class OrdemProducaoTest {
OrdemProducao op = new OrdemProducao(new Identificador("dak"), new QuantidadeAProduzir(123), new ArrayList<>(),
new Date(),
new Date(), Estado.EM_EXECUCAO);
OrdemProducao op1 = new OrdemProducao(new Identificador("dak"), new QuantidadeAProduzir(1234), new ArrayList<>(),
new Date(),
new Date(), Estado.EM_EXECUCAO);
OrdemProducao op2 = new OrdemProducao(new Identificador("dake"), new QuantidadeAProduzir(123), new ArrayList<>(),
new Date(),
new Date(), Estado.EM_EXECUCAO);
@Test(expected = IllegalArgumentException.class)
public void testConstructorDataNoFuturo() {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
String s = "12-12-2030";
Date data;
try {
data = sdf.parse(s);
OrdemProducao op5 = new OrdemProducao(new Identificador("dake"), new QuantidadeAProduzir(123), new ArrayList<>(),
data,
new Date(), Estado.EM_EXECUCAO);
} catch (ParseException e) {
}
}
@Test(expected = IllegalArgumentException.class)
public void testConstructorQuantidadeNegativa() {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
String s = "12-12-2030";
Date data;
try {
data = sdf.parse(s);
OrdemProducao op5 = new OrdemProducao(new Identificador("dake"), new QuantidadeAProduzir(-1), new ArrayList<>(),
new Date(),
new Date(), Estado.EM_EXECUCAO);
} catch (ParseException e) {
}
}
@Test
public void testConstructorDataCorreta() {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
String s = "12-12-2030";
Date data;
try {
data = sdf.parse(s);
OrdemProducao op5 = new OrdemProducao(new Identificador("dake"), new QuantidadeAProduzir(123), new ArrayList<>(),
new Date(),
data, Estado.EM_EXECUCAO);
} catch (ParseException e) {
}
}
@Test
public void identityAttributeName() {
assertEquals("identificador", OrdemProducao.identityAttributeName());
}
@Test
public void identity() {
assertEquals(op1.identity(), new Identificador("dak"));
}
@Test
public void gerarOrdensProducaoDTO() {
assertTrue(OrdemProducao.gerarOrdensProducaoDTO(op).information.equals(new OrdemProducaoDTO(op).information));
}
@Test
public void testGerarOrdensProducaoDTO() {
List<OrdemProducao> ordens = new ArrayList<>();
ordens.add(op);
ordens.add(op1);
ordens.add(op2);
List<OrdemProducaoDTO> opDTO = OrdemProducao.gerarOrdensProducaoDTO(ordens);
List<OrdemProducaoDTO> ordensDTO = new ArrayList<>();
ordensDTO.add(OrdemProducao.gerarOrdensProducaoDTO(op));
ordensDTO.add(OrdemProducao.gerarOrdensProducaoDTO(op1));
ordensDTO.add(OrdemProducao.gerarOrdensProducaoDTO(op2));
int i = 0;
for (OrdemProducaoDTO o : ordensDTO) {
assertEquals(ordensDTO.get(i).information, opDTO.get(i).information);
i++;
}
}
@Test(expected = IllegalArgumentException.class)
public void testConstructor(){
QuantidadeAProduzir qap = new QuantidadeAProduzir(-1);
}
@Test
public void testConstructor2(){
QuantidadeAProduzir qap = new QuantidadeAProduzir(0);
QuantidadeAProduzir qap1 = new QuantidadeAProduzir(1);
QuantidadeAProduzir qap2 = new QuantidadeAProduzir(1000);
}
@Test
public void testEquals() {
QuantidadeAProduzir qap = new QuantidadeAProduzir(0);
QuantidadeAProduzir qap2 = new QuantidadeAProduzir(0);
QuantidadeAProduzir qap1 = new QuantidadeAProduzir(1);
assertFalse(qap.equals(qap1));
assertTrue(qap.equals(qap2));
}
@Test
public void compareTo() {
QuantidadeAProduzir qap = new QuantidadeAProduzir(0);
QuantidadeAProduzir qap2 = new QuantidadeAProduzir(0);
QuantidadeAProduzir qap1 = new QuantidadeAProduzir(1);
assertTrue(qap.compareTo(qap2)==0);
assertTrue(qap.compareTo(qap1)<0);
}
}