Skip to content

Commit

Permalink
exceptions
Browse files Browse the repository at this point in the history
  • Loading branch information
vigusmao committed May 27, 2021
1 parent 4c5f899 commit f0c9bff
Show file tree
Hide file tree
Showing 9 changed files with 133 additions and 27 deletions.
20 changes: 13 additions & 7 deletions 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;
Expand Down Expand Up @@ -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
Expand Down
6 changes: 6 additions & 0 deletions LojaVirtual/src/exception/EstoqueInsuficienteException.java
@@ -0,0 +1,6 @@
package exception;

public class EstoqueInsuficienteException extends VendaException { // checked exception


}
4 changes: 0 additions & 4 deletions LojaVirtual/src/exception/ItemEsgotadoException.java

This file was deleted.

@@ -0,0 +1,4 @@
package exception;

public class ItemInexisteNoCatalogoException extends VendaException {
}
4 changes: 4 additions & 0 deletions LojaVirtual/src/exception/VendaException.java
@@ -0,0 +1,4 @@
package exception;

public class VendaException extends Exception {
}
71 changes: 58 additions & 13 deletions LojaVirtual/src/test/LojaTest.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand All @@ -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());
Expand All @@ -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
Expand Down
12 changes: 12 additions & 0 deletions 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;
}
}
7 changes: 4 additions & 3 deletions Siguinha/src/Siguinha.java
Expand Up @@ -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);
}
Expand Down
32 changes: 32 additions & 0 deletions 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());
}
}
}

0 comments on commit f0c9bff

Please sign in to comment.