/*
* DESEÑO DOS CASOS DE PROBA:
* --> Funcionalidades a probar:
* - Construcción do Obxecto Conta Corrente
* - Reintegro
* - Ingreso
* Non se proba a funcionalidade de devolver o saldo, cliente ou o número de conta por ser triviales
* e non propensos a erro.
*
* TEST DO CONSTRUCTOR
* Necesitamos verificar simplemente que cando creamos un obxecto ContaCorrente o saldo é 0 e ten
* asignado un número de conta, tal como indica a especificación no enunciado. Da igual que cliente
* utilicemos para a creación da conta corrente, de modo que eleximos un cliente calqueira.
* o constructor do Cliente necesita dni, nome, direccion, telefono e e-mail, todos String
*
* --> Creamos unha conta para o cliente con dni 36074389H, Federico Gonzalez, Rúa A súa casa, 986887766,
* federico@domain.org, o saldo da conta debe ser 0, e debe ter un número de conta distinto de 0
*
* TEST DE INGRESO
* Un ingreso consiste en sumar a cantidade ingresada ao saldo existente. Os requisitos da aplicación
* establecen que si se ingresa unha cantidade negativa, se realiza un reintegro e que o saldo máximo
* está limitado a 2000.000.000. O reintegro so será posible si se dispón de saldo suficiente.
*
* Neste caso, empregaremos particións de equivalencias:
* --> Ingresos "normais", positivos e que non o saldo resultante non sobrepase o límite.
Dada a sencillez do proceso (unha simple suma) da igual o valor de saldo inicial elexido
--> Ingreso "excesivo", ingreso positivo no que o saldo resultante sobrepase o límite.
Neste caso, sendo un valor límite probaremos por debaixo pero cerca do límite, igual ao límite
e por encima do límite, xa que poden darse erros en esos puntos. Calqueira test a maiores
non aportará nada.
--> Ingreso negativo. Debe tratarse como un reintegro. Neste caso temos que tratar tamén
valores límite. Que o saldo resultante sexa negativo, que o saldo resultante sexa 0 e que o
saldo resultante sexa positivo.
Eleximos os valores:
--> Conta con saldo 100, ingresamos 150. O saldo resultante debe ser 250
--> Conta con saldo 1999.999.900 ingresamos 100. O saldo resultante debe ser 2000.000.000
--> Conta con saldo 1999.999.900 ingresamos 99. O saldo resultante debe ser 1999.999.999
--> Conta con saldo 1999.999.900 ingresamod 101. Se debe lanzar unha excepción de saldo excesivo
O saldo non cambia.
--> Conta con saldo 100, ingresamos -99. O saldo resultante debe ser 1.
--> Conta con saldo 100, ingresamos -100. O saldo resultante debe ser 0.
--> Conta con saldo 100, ingresamos -101. Se debe lanzar unha excepción de saldo insuficiente,
O saldo non cambia.
*
* TEST DE REINTEGRO
* De modo similar ao ingreso, se trata dunha simple resta. Temos únicamente dous grupos de equivalencias (nos que as entradas se
deben comportar do mesmo modo). Reintegros positivos e reintegros negativos. No caso dos reintegros negativos
se debe lanzar unha excepción en todos os casos, de modo que cun caso de proba calquera de este grupo
vale. No caso dos reintegros positivos debemos tratar os seguintes casos límite:
- O reintegro execede o saldo
- O reintegro é igual que o saldo
- O reintegro é menor que o saldo, pero moi próximo
- O reintegro é menor que o saldo
Eleximos os valores:
--> Conta con saldo 100, retiramos -1. Se debe lanzar un erro indicando que non se poden realizar
reintegros negativos.
--> Conta con saldo 100, retiramos 101. Se debe lanzar un erro con saldo insuficiente e o saldo non cambia
--> Conta con saldo 100, retiramos 100. O saldo resultante debe ser 0
--> Conta con saaldo 100, returamos 99. O saldo resultante debe ser 1
--> Conta con saldo 100, retiramos 20. O saldo resultante debe ser 80
*/
package caixeiroautomatico;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.Before;
/**
*
* @author xavi
*/
public class ContaCorrenteTest {
public Client cliente;
@Before
public void setUpTest() {
cliente=new Client("36074389H","Federico González","Rúa A súa casa","986887766","federico@domain.org");
}
/**
* A nova conta debe ter saldo 0 e debe ter un número de conta
*/
@Test
public void constructorTest() {
ContaCorrente account=new ContaCorrente(cliente);
assertEquals("O saldo debe ser 0",0,account.getSaldo());
assertTrue("Debe ter un número de conta",account.getNumConta()!=0);
}
/**
* --> Conta con saldo 100, ingresamos 150. O saldo resultante debe ser 250
--> Conta con saldo 1999.999.900 ingresamos 100. O saldo resultante debe ser 2000.000.000
--> Conta con saldo 1999.999.900 ingresamos 99. O saldo resultante debe ser 1999.999.999
--> Conta con saldo 1999.999.900 ingresamod 101. Se debe lanzar unha excepción de saldo excesivo
O saldo non cambia.
--> Conta con saldo 100, ingresamos -99. O saldo resultante debe ser 1.
--> Conta con saldo 100, ingresamos -101. Se debe lanzar unha excepción de saldo insuficiente,
O saldo non cambia.
*/
@Test
public void ingresoTest() {
ContaCorrente account=new ContaCorrente(cliente);
account.saldo=100; // Poñemos o saldo a 100
account.ingreso(150);
assertEquals("O saldo debe ser 250",250,account.getSaldo());
account.saldo=1999999900;
account.ingreso(100);
assertEquals("O saldo debe ser 2000000000",2000000000,account.getSaldo());
account.saldo=1999999900;
account.ingreso(99);
assertEquals("O saldo debe ser 1999999999",1999999999,account.getSaldo());
account.saldo=100;
account.ingreso(-1);
assertEquals("O saldo debe ser 99",99,account.getSaldo());
account.saldo=100;
account.ingreso(-99);
assertEquals("O saldo debe ser 1",1,account.getSaldo());
}
@Test
public void ingresoErroneoTest() {
ContaCorrente account=new ContaCorrente(cliente);
account.saldo=1999999900;
try {
account.ingreso(101);
fail("Se excedeu o saldo máximo, debería terse lanzado unha excepción");
} catch(Exception e) {
if (!e.getMessage().equals("Non se pode ingresar")) fail("O erro debe ter a mensaxe 'Non se pode ingresar'");
assertEquals("O saldo non debe cambiar",1999999900,account.getSaldo());
}
account.saldo=100;
try {
account.ingreso(-101);
fail("Se retiraron máis cartos dos dispoñibles, debería terse lanzado unha excepción");
} catch(Exception e) {
if (!e.getMessage().equals("Non se pode ingresar")) fail("O erro debe ter a mensaxe 'Non se pode ingresar'");
assertEquals("O saldo non debe cambiar",100,account.getSaldo());
}
}
/**
--> Conta con saldo 100, retiramos -1. Se debe lanzar un erro indicando que non se poden realizar
reintegros negativos.
--> Conta con saldo 100, retiramos 101. Se debe lanzar un erro con saldo insuficiente e o saldo non cambia
--> Conta con saldo 100, retiramos 100. O saldo resultante debe ser 0
--> Conta con saaldo 100, returamos 99. O saldo resultante debe ser 1
--> Conta con saldo 100, retiramos 20. O saldo resultante debe ser 80
*/
@Test
public void reintegroTest() {
ContaCorrente account=new ContaCorrente(cliente);
account.saldo=100;
account.reintegro(100);
assertEquals("O saldo debe ser 0",0,account.getSaldo());
account.saldo=100;
account.reintegro(99);
assertEquals("O saldo debe ser 1",1,account.getSaldo());
account.saldo=100;
account.reintegro(20);
assertEquals("O saldo debe ser 80",80,account.getSaldo());
}
@Test
public void reintegroErroneoTest() {
ContaCorrente account=new ContaCorrente(cliente);
account.saldo=100;
try {
account.reintegro(-1);
fail("Intentouse retirar unha cantidade negativa, debería terse lanzado unha excepción");
} catch(Exception e) {
assertEquals("O saldo non debe cambiar",100,account.getSaldo());
}
account.saldo=100;
try {
account.reintegro(101);
} catch(Exception e) {
if (!e.getMessage().equals("Saldo Insuficiente")) fail("O erro debe ter a mensaxe 'Saldo Insuficiente'");
assertEquals("O saldo non debe cambiar",100,account.getSaldo());
}
}
}