Cajero automático

    Iteración 1

    Reglas del negocio

    El objetivo es construir un cajero automático y nuestra primera tarea es crear el software que desglosará qué billetes y monedas debe recibir el cliente cuando intente hacer un retiro.

    El contenido del cajero es:

    | Valor | Tipo    |
    |-------|---------|
    | 500 | billete |
    | 200 | billete |
    | 100 | billete |
    | 50 | billete |
    | 20 | billete |
    | 10 | billete |
    | 5 | billete |
    | 2 | modena |
    | 1 | moneda |

    Ejemplo

    Entrada:

    Como usuario
    Quiero retirar 1725€

    Salida:

    2 billetes de 200
    1 billete de 20
    1 billete de 10
    2 monedas de 2

    API posible para el cajero automático

    Obsesión primitiva y pareja ajustada a la presentación

    public interface ATM {
    public String withdraw(int quantity);

    }

    Devuelve una lista de DTO u Objetos de Valor
    public interface ATM {
    public List<Money> withdraw(int quantity);
    }

    Outside-in

    public interface ATM {
    public void withdraw(int quantity);
    }

    Iteración 2

    Reglas del negocio

    El cajero automático tiene la siguiente distribución de dinero.

    • Cuando el cajero automático no disponga de dinero, debe devolver un error que indique: "El cajero automático no dispone de dinero suficiente, por favor acuda al cajero automático más cercano".
    • Si el cajero automático no tiene más billetes o monedas debe intentar utilizar otras cantidades para que el usuario pueda retirar el importe.

     

    El estado inicial de cualquier cajero automático

    | Valor | Tipo    | Número de unidades|
    |-------|---------|-------------------|
    | 500 | billete | 2 |
    | 200 | billete | 3 |
    | 100 | billete | 5 |
    | 50 | billete | 12 |
    | 20 | billete | 20 |
    | 10 | billete | 50 |
    | 5 | billete | 100 |
    | 2 | moneda | 250 |
    | 1 | moneda | 500 |

    Ejemplos:

     

    Estado inicial del cajero automático:

     
    | Valor | Tipo    | Número de unidades|
    |-------|---------|-------------------|
    | 500 | billete | 2 |
    | 200 | billete | 3 |
    | 100 | billete | 5 |
    | 50 | billete | 12 |
    | 20 | billete | 20 |
    | 10 | billete | 50 |
    | 5 | billete | 100 |
    | 2 | moneda | 250 |
    | 1 | moneda | 500 |

    Entrada

    Como usuario
    Quiero retirar 1725€

    Salida

    2 billetes de 500
    3 billetes de 200
    1 billetes de 100
    1 billetes de 20
    1 billete de 5

     

    Estado del cajero automático después de la salida

    | Valor | Tipo    | Número de unidades  |
    |-------|---------|---------------------|
    | 500 | billete | 0 |
    | 200 | billete | 0 |
    | 100 | billete | 4 |
    | 50 | billete | 12 |
    | 20 | billete | 19 |
    | 10 | billete | 50 |
    | 5 | billete | 99 |
    | 2 | moneda | 250 |
    | 1 | moneda | 500 |

     

    Entrada

    Como usuario
    He retirado 1825€

    Salida

    4 billetes de 100
    12 billetes de 50
    19 billetes de 20
    44 billetes de 10
    1 billetes de 5

     

    Estado del cajero automático después de la salida

    | Valor | Tipo    | Número de unidades|
    |-------|---------|-------------------|
    | 500 | billete | 0 |
    | 200 | billete | 0 |
    | 100 | billete | 0 |
    | 50 | billete | 0 |
    | 20 | billete | 0 |
    | 10 | billete | 6 |
    | 5 | billete | 98 |
    | 2 | moneda | 250 |
    | 1 | moneda | 500 |

     

    Aviso

    Los ejemplos gráficos que ves son una referencia de cómo funciona la kata, no tienes que aplicarlos si no quieres.