Gilded Rose Refactoring Kata

gilded-rose-refactoring-kata

Bienvenido al equipo de Gilded Rose. Como quizá sabes, somos una pequeña posada ubicada estratégicamente en una prestigiosa ciudad, atendida por la amable Allison. También compramos y vendemos mercadería de alta calidad. Por desgracia, nuestra mercadería va bajando de calidad a medida que se aproxima la fecha de venta.

Tenemos un sistema instalado que actualiza automáticamente el inventario. Este sistema fue desarrollado por un muchacho con poco sentido común llamado Leeroy, que ahora se dedica a nuevas aventuras. Tu tarea es agregar una nueva característica al sistema para que podamos comenzar a vender una nueva categoría de items.

Descripción preliminar

Pero primero, vamos a introducir el sistema:

  • Todos los artículos (Item) tienen una propiedad sellIn que denota el número de días que tenemos para venderlo
  • Todos los artículos tienen una propiedad quality que denota cúan valioso es el artículo
  • Al final de cada día, nuestro sistema decrementa ambos valores para cada artículo mediante el método updateQuality

Bastante simple, ¿no? Bueno, ahora es donde se pone interesante:

  • Una vez que ha pasado la fecha recomendada de venta, la calidad se degrada al doble de velocidad
  • La calidad de un artículo nunca es negativa
  • El "Queso Brie envejecido" (Aged brie) incrementa su calidad a medida que se pone viejo
    • Su calidad aumenta en 1 unidad cada día
    • luego de la fecha de venta su calidad aumenta 2 unidades por día
  • La calidad de un artículo nunca es mayor a 50
  • El artículo "Sulfuras" (Sulfuras), siendo un artículo legendario, no modifica su fecha de venta ni se degrada en calidad
  • Una "Entrada al Backstage", como el queso brie, incrementa su calidad a medida que la fecha de venta se aproxima
    • si faltan 10 días o menos para el concierto, la calidad se incrementa en 2 unidades
    • si faltan 5 días o menos, la calidad se incrementa en 3 unidades
    • luego de la fecha de venta la calidad cae a 0

El requerimiento

Hace poco contratamos a un proveedor de artículos conjurados mágicamente. Esto requiere una actualización del sistema:

  • Los artículos conjurados degradan su calidad al doble de velocidad que los normales

Siéntete libre de realizar cualquier cambio al mensaje updateQuality y agregar el código que sea necesario, mientras que todo siga funcionando correctamente. Sin embargo, no alteres el objeto Item ni sus propiedades ya que pertenecen al goblin que está en ese rincón, que en un ataque de ira te va a liquidar de un golpe porque no cree en la cultura de código compartido.

Notas finales

Para aclarar: un artículo nunca puede tener una calidad superior a 50, sin embargo las Sulfuras siendo un artículo legendario posee una calidad inmutable de 80.

  • TypeScript

    Solución con TypeScript v1