Ejercicio I02 - Control de aduana
Consigna
- Crear un proyecto de pruebas unitarias y agregar las clases y métodos de prueba del siguiente diagrama:
- Crear un proyecto de tipo biblioteca de clases y agregar los elementos del siguiente diagrama:
Paquete
- Es una clase abstracta.
- Su atributo
costoEnvio
es protegido. - La propiedad
TienePrioridad
es abstracta. - El método
ObtenerInformacionDePaquete
retorna todos los datos del paquete (incluyendo si tiene prioridad) como una cadena de texto.
PaqueteFragil
- Hereda de
Paquete
. - Implementa la propiedad
TienePrioridad
retornandotrue
ya que los paquetes frágiles tienen prioridad.- Implementar la prueba unitaria
TienePrioridad_DeberiaRetornarTrue
de la clasePaqueteFragilTest
. Deberá verificar que la propiedadTienePrioridad
retornetrue
para las instancias dePaqueteFragil
.
- Implementar la prueba unitaria
PaquetePesado
- Hereda de
Paquete
. - Implementa la propiedad
TienePrioridad
retornandofalse
ya que los paquetes pesados NO tienen prioridad.- Implementar la prueba unitaria
TienePrioridad_DeberiaRetornarFalse
de la clasePaquetePesadoTest
. Deberá verificar que la propiedadTienePrioridad
retornefalse
para las instancias dePaquetePesado
.
- Implementar la prueba unitaria
Implementar la interfaz
IAduana
enPaquete
de forma implícita.- Implementar la prueba unitaria
Impuestos_DeberiaRetornarValorImpuestoDel35PorcientoSobreCostoEnvio
de la clasePaqueteFragilTest
. Deberá verificar que la propiedadImpuestos
, cuando se invoca de forma implícita desde una instancia dePaqueteFragil
, retorne el 35% del costo de envío. - Implementar la prueba unitaria
Impuestos_DeberiaRetornarValorImpuestoDel35PorcientoSobreCostoEnvio_CuandoEsImplementacionImplicita
de la clasePaquetePesadoTest
. Deberá verificar que la propiedadImpuestos
, cuando se invoca de forma implícita desde una instancia dePaquetePesado
, retorne el 35% del costo de envío. - Realizar los cambios necesarios en
Paquete
para que las pruebas de los puntos anteriores pasen. - El método
AplicarImpuestos
deberá ser virtual. - Implementar la prueba unitaria
AplicarImpuestos_DeberiaRetornarCostoDeEnvioMasImpuestoAduana
de la clasePaqueteFragilTest
. Deberá verificar que el métodoAplicarImpuestos
, cuando se invoca de forma implícita desde una instancia dePaqueteFragil
, retorne el costo del envío con el impuesto de aduana aplicado. - Realizar los cambios necesarios en
Paquete
para que el test anterior pase. Reutilizar código.
- Implementar la prueba unitaria
Implementar la interfaz
IAfip
enPaquetePesado
.- La propiedad
Impuestos
deberá ser implementada de forma explícita. - Implementar la prueba unitaria
Impuestos_DeberiaRetornarValorImpuestoDel25PorcientoSobreCostoEnvio_CuandoEsImplementacionExplicitaIAfip
de la clasePaquetePesadoTest
. Deberá verificar que la propiedadImpuestos
, cuando se invoca de forma explícita desde una referencia de tipoIAfip
, retorne el 25% del costo de envío. - Realizar los cambios necesarios en
PaquetePesado
para que el test pase. - Implementar la prueba unitaria
AplicarImpuestos_DeberiaRetornarCostoDeEnvioMasImpuestosAfipYAduana
de la clasePaquetePesadoTest
. Deberá verificar que el métodoAplicarImpuestos
, cuando se invoca de forma implícita desde una instancia dePaquetePesado
, retorne el costo de envío con ambos impuestos de AFIP y aduana aplicados. - Sobrescribir el método
AplicarImpuestos
enPaquetePesado
y realizar lo necesario para que el test anterior pase. Reutilizar código.
- La propiedad
- Agregar la clase
GestionImpuestos
a la biblioteca de clases. Seguir el siguiente diagrama:
- Las listas se instanciarán en el constructor.
- La sobrecarga del método
RegistrarImpuestos
que recibe un paquete deberá agregar dicho paquete a la listaimpuestosAduana
. Además, si el paquete implementaIAfip
deberá ser incorporado a la listaimpuestosAfip
. - La sobrecarga del método
RegistrarImpuestos
que recibe una lista de paquetes deberá agregar todos los paquetes a la listaimpuestosAduana
. Además, los paquetes que implementenIAfip
deberán ser incorporados a la listaimpuestosAfip
. Reutilizar código.
Implementar la prueba unitaria
CalcularTotalImpuestosAduana_DeberiaRetornarLaSumaDeLosImpuestosDeAduana
de la claseGestionImpuestosTest
. Deberá verificar que el métodoCalcularTotalImpuestosAduana
retorne la suma de los impuestos de aduana. Realizar la prueba con al menos un paquete de cada tipo.- Realizar los cambios necesarios en
GestionImpuestos
para que el test anterior pase.
- Realizar los cambios necesarios en
Implementar la prueba unitaria
CalcularTotalImpuestosAfip_DeberiaRetornarLaSumaDeLosImpuestosDeAfip
de la claseGestionImpuestosTest
. Deberá verificar que el métodoCalcularTotalImpuestosAfip
retorne la suma de los impuestos de AFIP. Realizar la prueba con al menos un paquete de cada tipo.- Realizar los cambios necesarios en
GestionImpuestos
para que el test anterior pase.
- Realizar los cambios necesarios en
Crear un proyecto de consola e incoporar el siguiente código en el método
Main
:
List<Paquete> paquetes = new List<Paquete>();
paquetes.Add(new PaqueteFragil("F01", 190.00M, "Buenos aires", "La rioja", 1.75));
paquetes.Add(new PaquetePesado("P01", 2598.63M, "Misiones", "San luis", 56.32));
paquetes.Add(new PaqueteFragil("F02", 1599.99M, "Córdoba", "Mendoza", 44.12));
paquetes.Add(new PaquetePesado("P02", 639.60M, "Jujuy", "Tierra del fuego", 5.05));
paquetes.Add(new PaqueteFragil("F03", 458.95M, "Santa cruz", "San Juan", 10.00));
paquetes.Add(new PaquetePesado("P03", 120.40M, "Río negro", "Neuquén", 35.00));
GestionImpuestos gestionImpuestos = new GestionImpuestos();
gestionImpuestos.RegistrarImpuestos(paquetes);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine($"Total impuestos aduana: ${gestionImpuestos.CalcularTotalImpuestosAduana():#.00}");
stringBuilder.AppendLine($"Total impuestos AFIP: ${gestionImpuestos.CalcularTotalImpuestosAfip():#.00}");
stringBuilder.AppendLine();
stringBuilder.AppendLine($"Paquetes:");
for (int i = 0; i < paquetes.Count; i++)
{
stringBuilder.AppendLine("---------------------------------------");
stringBuilder.AppendLine($"PAQUETE {i + 1:00}");
stringBuilder.AppendLine(paquetes[i].ObtenerInformacionDePaquete());
if (paquetes[i] is IAfip paqueteAfip)
{
stringBuilder.AppendLine($"Impuesto AFIP: ${paqueteAfip.Impuestos:#.00}");
}
if (paquetes[i] is IAduana paqueteAduana)
{
stringBuilder.AppendLine($"Impuesto aduana: ${paqueteAduana.Impuestos:#.00}");
}
stringBuilder.AppendLine($"Costo de envío con impuestos: ${paquetes[i].AplicarImpuestos():#.00}");
}
stringBuilder.AppendLine("---------------------------------------");
Console.WriteLine(stringBuilder);
- Verificar que la salida por consola coincida con la siguiente:
Total impuestos aduana: $1962,65
Total impuestos AFIP: $839,66
Paquetes:
---------------------------------------
PAQUETE 01
Código de seguimiento: F01
Costo de envío: $190,00
Origen: La rioja
Destino: Buenos aires
Peso: 1,75 kg
Tiene prioridad.
Impuesto aduana: $66,50
Costo de envío con impuestos: $256,50
---------------------------------------
PAQUETE 02
Código de seguimiento: P01
Costo de envío: $2598,63
Origen: San luis
Destino: Misiones
Peso: 56,32 kg
No tiene prioridad.
Impuesto AFIP: $649,66
Impuesto aduana: $909,52
Costo de envío con impuestos: $4157,81
---------------------------------------
PAQUETE 03
Código de seguimiento: F02
Costo de envío: $1599,99
Origen: Mendoza
Destino: Córdoba
Peso: 44,12 kg
Tiene prioridad.
Impuesto aduana: $560,00
Costo de envío con impuestos: $2159,99
---------------------------------------
PAQUETE 04
Código de seguimiento: P02
Costo de envío: $639,60
Origen: Tierra del fuego
Destino: Jujuy
Peso: 5,05 kg
No tiene prioridad.
Impuesto AFIP: $159,90
Impuesto aduana: $223,86
Costo de envío con impuestos: $1023,36
---------------------------------------
PAQUETE 05
Código de seguimiento: F03
Costo de envío: $458,95
Origen: San Juan
Destino: Santa cruz
Peso: 10,00 kg
Tiene prioridad.
Impuesto aduana: $160,63
Costo de envío con impuestos: $619,58
---------------------------------------
PAQUETE 06
Código de seguimiento: P03
Costo de envío: $120,40
Origen: Neuquén
Destino: Río negro
Peso: 35,00 kg
No tiene prioridad.
Impuesto AFIP: $30,10
Impuesto aduana: $42,14
Costo de envío con impuestos: $192,64
---------------------------------------
Resolución
Video | Código |
---|