US2007 - ArthurSchiavom/gestao-informacao-chao-de-fabrica--projeto-academico GitHub Wiki
Como Gestor de Produção, eu pretendo exportar, para um ficheiro XML, toda a infomação subjacente ao chão de fábrica (e.g. produtos,...)
Para mais informação sobre os padrões, estão documentados exatamente quando são utilizados no documento SD.
Strategy - Para o caso de no futuro ser necessário exportar para formatos diferentes, ou utilizar uma forma diferente de exportar XML.
Service - Para que haja uma classe dedicada a guardar a lógica de exportar ficheiros
Factory - Para que haja uma classe com uma simples responsabilidade, de fabricar o strategy correto para a exportação
PureFabrication - Para o UI
Teste 1: Verificar que o exportador não pode exportar um objeto nulo
@Test
public void garantirQueNaoSePodeExportarUmChaoDeVazioNulo() {
assertFalse(exportador.export("teste", null));
}Teste 2: Verificar que o ficheiro XML exportado segue o ficheiro XSD
@Test
public void garantirQueExportacaoTemSucesso() {
List<LinhaProducao> listaLinhaProd = new ArrayList<>();
LinhaProducao linhaProd = new LinhaProducao("LINHAPROD_1");
listaLinhaProd.add(new LinhaProducao("LINHAPROD_1"));
List<Deposito> listaDepositos = new ArrayList<>();
listaDepositos.add(new Deposito("COD1", "Deposito Teste"));
List<Categoria> listaCategoria = new ArrayList<>();
Categoria cat = new Categoria(new CodigoAlfanumericoCategoria("CAT1"), "Categoria Teste");
listaCategoria.add(cat);
List<Produto> listaProdutos = new ArrayList<>();
ProdutoBuilder prodBuilder = new ProdutoBuilder();
ProdutoRepository prodRepo = Mockito.mock(ProdutoRepository.class);
Produto prod = null;
try {
prodBuilder.setCategoriaDeProduto("CAT1");
prodBuilder.setDescricaoBreve("Descricao Teste Breve");
prodBuilder.setDescricaoCompleta("Descricao Teste Completa");
prodBuilder.setUnidadeDeMedida("kilogramas");
prodBuilder.setCodigoUnico("COD1", prodRepo);
prodBuilder.setCodigoComercial("CODCOM1", prodRepo);
prod = prodBuilder.build();
} catch (IllegalDomainValueException e) {
e.printStackTrace();
}
assert (prod != null);
listaProdutos.add(prod);
List<Material> listaMateriais = new ArrayList<>();
try {
Material material = new Material("Descricao Material Teste",
new CodigoInternoMaterial("COD_INT"), cat.codigoAlfanumericoCategoria,
UnidadeDeMedida.KILOGRAMA, new FichaTecnicaPDF(".", "PDF",
"Conteudo teste"));
listaMateriais.add(material);
} catch (IOException e) {
e.printStackTrace();
}
List<QuantidadeDeMateriaPrima> listaQuantidadeMateriaPrima = new ArrayList<>();
try {
QuantidadeDeMateriaPrima quantidadeMateriaPrima = QuantidadeDeMateriaPrima.valueOf(QuantidadePositiva.valueOf(2), MateriaPrima.valueOf(TipoDeMateriaPrima.MATERIAL, "2"));
listaQuantidadeMateriaPrima.add(quantidadeMateriaPrima);
} catch (IllegalDomainValueException e) {
e.printStackTrace();
}
List<FichaDeProducao> listaFichasProducao = new ArrayList<>();
try {
listaFichasProducao.add(FichaDeProducao.valueOf(listaQuantidadeMateriaPrima));
} catch (IllegalDomainValueException e) {
e.printStackTrace();
}
try {
NumeroSerie.definirRegrasNumeroSerie("10", "1");
} catch (IOException e) {
e.printStackTrace();
}
List<Maquina> listaMaquinas = new ArrayList<>();
listaMaquinas.add(new Maquina(new NumeroSerie("123"), new CodigoInternoMaquina("CODINT_1"),
new OrdemLinhaProducao(1), new IdentificadorProtocoloComunicacao(1),
"Maquina teste", "Rage Against The Computer", "XPTO", linhaProd));
Date dateEmissao = null;
Date datePrevEx = null;
try {
dateEmissao = new SimpleDateFormat("dd-MM-yyyy").parse("15-10-2013");
datePrevEx = new SimpleDateFormat("dd-MM-yyyy").parse("15-10-2015");
} catch (ParseException e) {
e.printStackTrace();
}
assert dateEmissao != null;
assert datePrevEx != null;
List<IdentificadorEncomenda> listaIdentificadoresEncomenda = new ArrayList<>();
listaIdentificadoresEncomenda.add(new IdentificadorEncomenda("ENCOMENDA1"));
List<OrdemProducao> listaOrdensProducao = new ArrayList<>();
try {
listaOrdensProducao.add(new OrdemProducao(new Identificador("ORDEM1"), new QuantidadeAProduzir(1550),
listaIdentificadoresEncomenda, dateEmissao, datePrevEx, Estado.CONCLUIDA, CodigoUnico.valueOf("COD1", produtoRepositoryIsNotPresent)));
} catch (IllegalDomainValueException e) {
e.printStackTrace();
}
File ficheiro = null;
try {
ficheiro = folder.newFile();
} catch (IOException e) {
e.printStackTrace();
}
assert ficheiro != null;
LinhaProducaoRepository lProdRepo = Mockito.mock(LinhaProducaoRepository.class);
MensagemRepository msgRepo = Mockito.mock(MensagemRepository.class);
Mockito.when(lProdRepo.containsOfIdentity(new IdentificadorLinhaProducao("LINHAPROD_1"))).thenReturn(true);
Mockito.when(msgRepo.containsOfIdentity(2L)).thenReturn(true);
List<NotificacaoErro> listaNotificacoesErro = new ArrayList<>();
NotificacaoErro notifErro = new NotificacaoErro(new IdentificadorLinhaProducao("LINHAPROD_1"),
TipoErroNotificacao.DADOS_INVALIDOS, 2L, lProdRepo, msgRepo);
listaNotificacoesErro.add(notifErro);
ChaoDeFabrica chaoDeFabrica = new ChaoDeFabrica(false, listaLinhaProd, listaDepositos,
listaCategoria, listaProdutos, listaMateriais, listaFichasProducao, listaMaquinas, listaOrdensProducao, listaNotificacoesErro);
assertTrue(exportador.export(ficheiro, chaoDeFabrica));
exportador.export(new File("ola"), chaoDeFabrica);
JAXBContext jaxbContext;
try
{
//Get JAXBContext
jaxbContext = JAXBContext.newInstance(ChaoDeFabrica.class);
//Create Unmarshaller
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
//Setup schema validator
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema employeeSchema = sf.newSchema(new File("../../XSD/chaoDeFabrica.xsd"));
jaxbUnmarshaller.setSchema(employeeSchema);
//Unmarshal xml file
ChaoDeFabrica chaoDeFabrica1 = (ChaoDeFabrica) jaxbUnmarshaller.unmarshal(ficheiro);
assertNotNull(chaoDeFabrica1);
}
catch (JAXBException | SAXException e)
{
e.printStackTrace();
fail("XSD FALHOU");
}
}Teste 3: Verificar que o ficheiro XML exportado não está vazio
@Test
public void garantirQueNaoSePodeExportarBaseDeDadosVazia() {
ChaoDeFabrica chaoDeFabrica = new ChaoDeFabrica();
//De notar que nenhum dado foi carregado com a função loadAll()
assertFalse(exportador.export("teste", chaoDeFabrica));
}Para a implementação da exportação do ficheiro XML foi utilizado uma libraria de Java chamada JABX.
n/a