diff --git a/LojaVirtual/src/controle/Loja.java b/LojaVirtual/src/controle/Loja.java index ebac573..1ffeb29 100644 --- a/LojaVirtual/src/controle/Loja.java +++ b/LojaVirtual/src/controle/Loja.java @@ -1,5 +1,7 @@ package controle; +import exception.EstoqueInsuficienteException; +import exception.ItemInexisteNoCatalogoException; import modelo.Usuario; import modelo.produto.Produto; import util.Transportador; @@ -103,29 +105,33 @@ private Usuario obterUsuario(long cpf) { * @param quantidadeDesejada a quantidade * * @return um controle.Recibo indicando a venda feita, se o vendavel existia (em quantidade suficiente) - * no vendavels da loja; null, caso o usuário ou o vendavel sejam desconhecidos, - * ou não haja quantidade suficiente do vendavel desejado + * no vendavels da loja; null, caso o usuário seja desconhecido + * + * @throws EstoqueInsuficienteException se não houver o iteem quantidade suficiente para a venda + * @throws ItemInexisteNoCatalogoException se a loja sequer trabalhar com esse item */ public Recibo efetuarVenda( - T vendavel, int quantidadeDesejada, Usuario usuario) { + T vendavel, int quantidadeDesejada, Usuario usuario) throws EstoqueInsuficienteException, + ItemInexisteNoCatalogoException { // a quantidade desejada é positiva? if (quantidadeDesejada < 1) { - return null; + throw new RuntimeException("Argumento inválido! Quantidade desejada precisa ser positiva!"); + // situação onde há claramente um bug no chamador!!!!!!!! } // conheço o usuário? if (obterUsuario(usuario) == null) { // não conheço! - return null; // não efetua a venda + return null; // não efetua a venda e retorna null (não é legal!!!!) } // existe o vendavel? InfoVendavel infoVendavel = obterInfoVendavel(vendavel); if (infoVendavel == null) { - return null; // não efetua a venda + throw new ItemInexisteNoCatalogoException(); // não efetua a venda } if (infoVendavel.quantidade < quantidadeDesejada) { - return null; // não efetua a venda + throw new EstoqueInsuficienteException(); } // vamos efetuar a venda diff --git a/LojaVirtual/src/exception/EstoqueInsuficienteException.java b/LojaVirtual/src/exception/EstoqueInsuficienteException.java new file mode 100644 index 0000000..bad10d9 --- /dev/null +++ b/LojaVirtual/src/exception/EstoqueInsuficienteException.java @@ -0,0 +1,6 @@ +package exception; + +public class EstoqueInsuficienteException extends VendaException { // checked exception + + +} diff --git a/LojaVirtual/src/exception/ItemEsgotadoException.java b/LojaVirtual/src/exception/ItemEsgotadoException.java deleted file mode 100644 index 652c8cc..0000000 --- a/LojaVirtual/src/exception/ItemEsgotadoException.java +++ /dev/null @@ -1,4 +0,0 @@ -package exception; - -public class ItemEsgotadoException extends Exception { -} diff --git a/LojaVirtual/src/exception/ItemInexisteNoCatalogoException.java b/LojaVirtual/src/exception/ItemInexisteNoCatalogoException.java new file mode 100644 index 0000000..450a02f --- /dev/null +++ b/LojaVirtual/src/exception/ItemInexisteNoCatalogoException.java @@ -0,0 +1,4 @@ +package exception; + +public class ItemInexisteNoCatalogoException extends VendaException { +} diff --git a/LojaVirtual/src/exception/VendaException.java b/LojaVirtual/src/exception/VendaException.java new file mode 100644 index 0000000..c85be68 --- /dev/null +++ b/LojaVirtual/src/exception/VendaException.java @@ -0,0 +1,4 @@ +package exception; + +public class VendaException extends Exception { +} diff --git a/LojaVirtual/src/test/LojaTest.java b/LojaVirtual/src/test/LojaTest.java index 56d587c..291e438 100644 --- a/LojaVirtual/src/test/LojaTest.java +++ b/LojaVirtual/src/test/LojaTest.java @@ -2,6 +2,9 @@ import controle.Loja; import controle.Recibo; +import exception.EstoqueInsuficienteException; +import exception.ItemInexisteNoCatalogoException; +import exception.VendaException; import modelo.Usuario; import modelo.produto.Brinquedo; import modelo.produto.Livro; @@ -93,12 +96,24 @@ public void testarConsultaDeVendavelUsandoOutroObjeto() { public void testarVendaParaUsuarioNaoCadastrado() { loja1.incluirVendavel(guinessBook, 100); Usuario compradorDesconhecido = new Usuario("Fantasma", 222, "Blah"); - assertNull("Apenas usuários cadastrados na loja1 podem comprar nela", - loja1.efetuarVenda(guinessBook, 5, compradorDesconhecido)); + + try { + Recibo recibo = loja1.efetuarVenda(guinessBook, 5, compradorDesconhecido); + + assertNull("Apenas usuários cadastrados na loja1 podem comprar nela", + recibo); + + } catch (VendaException e) { + fail("Deu ruim! A venda não foi realizada!!!!!!!!"); + } + + // continua daqui } @Test - public void testarVendaBemSucedida() { + public void testarVendaBemSucedida() + throws EstoqueInsuficienteException, ItemInexisteNoCatalogoException { + loja1.incluirVendavel(guinessBook, 100); loja1.atribuirPreco(guinessBook, 50); @@ -117,7 +132,9 @@ public void testarVendaBemSucedida() { } private void verificarVendaBemSucedida(Loja loja, Vendavel vendavel, int quantidadeComprada, - float valorEsperadoDaCompra, int quantidadeEsperadaNoEstoquePosVenda) { + float valorEsperadoDaCompra, int quantidadeEsperadaNoEstoquePosVenda) + throws EstoqueInsuficienteException, ItemInexisteNoCatalogoException { + Recibo recibo = loja.efetuarVenda(vendavel, quantidadeComprada, comprador); assertNotNull(recibo); assertEquals(comprador, recibo.getUsuario()); @@ -131,26 +148,54 @@ private void verificarVendaBemSucedida(Loja loja, Vendavel vendavel, int quantid } @Test - public void testarVendaComQuantidadeInformadaNegativa() { + public void testarVendaComQuantidadeInformadaNegativa() + throws EstoqueInsuficienteException, ItemInexisteNoCatalogoException { + loja1.incluirVendavel(guinessBook, 100); - Recibo recibo = loja1.efetuarVenda(guinessBook, -1, comprador); - assertNull(recibo); + try { + loja1.efetuarVenda(guinessBook, -1, comprador); + + fail("Uma RuntimeException deve ser lançada se a quantidade desejada for negativa"); + + } catch (RuntimeException e) { + // nada a se fazer; foi a exceção que esperávamos mesmo! + } + assertEquals("O estoque não deve ser alterado após venda inválida", 100, loja1.informarQuantidadeEmEstoque(guinessBook)); + } @Test - public void testarVendaParaVendavelEmQuantidadeInsuficiente() { + public void testarVendaParaVendavelEmQuantidadeInsuficiente() throws ItemInexisteNoCatalogoException { loja1.incluirVendavel(guinessBook, 100); - assertNull("A venda não deve ser efetuada se não houver quantidade suficiente", - loja1.efetuarVenda(guinessBook, 101, comprador)); + + + final Recibo recibo; + + try { + recibo = loja1.efetuarVenda(guinessBook, 101, comprador); + + fail("Uma EstoqueInsuficienteException deve ser lançada quando a " + + "quantidade desejada for maior do que a quantidade em estoque"); + + } catch (EstoqueInsuficienteException e) { + // passe o teste por vacuidade, ou seja, chegando ao fim naturalmente + } } @Test - public void testarVendaParaVendavelQueNaoEhVendidoPelaLoja() { - assertNull("A venda não deve ser efetuada se a loja1 não trabalhar com aquele vendavel", - loja1.efetuarVenda(cuboMagico, 1, comprador)); + public void testarVendaParaVendavelQueNaoEhVendidoPelaLoja() + throws EstoqueInsuficienteException { + + try { + loja1.efetuarVenda(cuboMagico, 1, comprador); + fail("A venda não deve ser efetuada se a loja não trabalhar com aquele vendavel"); + + } catch (ItemInexisteNoCatalogoException e) { + // pass + } } @Test diff --git a/Siguinha/src/DreDesconhecidoException.java b/Siguinha/src/DreDesconhecidoException.java new file mode 100644 index 0000000..b309a93 --- /dev/null +++ b/Siguinha/src/DreDesconhecidoException.java @@ -0,0 +1,12 @@ +public class DreDesconhecidoException extends Exception { + + private long dreDesconhecido; + + public DreDesconhecidoException(long dreDesconhecido) { + this.dreDesconhecido = dreDesconhecido; + } + + public long getDreDesconhecido() { + return this.dreDesconhecido; + } +} diff --git a/Siguinha/src/Siguinha.java b/Siguinha/src/Siguinha.java index fef20b9..57f0c41 100644 --- a/Siguinha/src/Siguinha.java +++ b/Siguinha/src/Siguinha.java @@ -76,11 +76,12 @@ public void abrirTurma(Disciplina disciplina, Professor professor) { // ToDo adicionar a nova turma numa coleção de turmas } - public void inscreverAlunoEmTurma(long dre, Turma turma) { + public void inscreverAlunoEmTurma(long dre, Turma turma) + throws DreDesconhecidoException { + Aluno aluno = this.alunoByDre.get(dre); if (aluno == null) { - // ToDo lançaria exceção! - return; + throw new DreDesconhecidoException(dre); } turma.inscreverAluno(aluno); } diff --git a/Siguinha/src/SiguinhaTest.java b/Siguinha/src/SiguinhaTest.java new file mode 100644 index 0000000..9d12383 --- /dev/null +++ b/Siguinha/src/SiguinhaTest.java @@ -0,0 +1,32 @@ +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class SiguinhaTest { + + private Siguinha siguinha; + + @Before + public void setUp() { + this.siguinha = new Siguinha("UFRJ"); + } + + @Test + public void testarInscricaoDeAlunoEmDisciplina() { + + } + + @Test + public void testarInscricaoDeAlunoComDreInvalido() { + Disciplina calculo1 = new Disciplina("Cálculo 1", 5, "blah"); + Turma turma = new Turma(calculo1, new Periodo(2020, 1)); + try { + siguinha.inscreverAlunoEmTurma(36523564, turma); + fail("Dres inválidos precisam ser notificados!"); + + } catch (DreDesconhecidoException e) { + assertEquals(36523564, e.getDreDesconhecido()); + } + } +} \ No newline at end of file