GildedRose-Refactoring-Kata/GildedRoseRequirements.md
2014-09-24 10:59:46 +03:00

43 lines
2.2 KiB
Markdown

Gilded Rose Requirements Specification
======================================
Hi and welcome to the *Gilded Rose* Inn.
As you know, we are a small inn with a prime location in a prominent city ran by a friendly innkeeper named Allison.
We buy and sell only the finest goods.
Unfortunately, our goods are constantly degrading in quality as they approach their sell by date. We have a system in place that updates our inventory for us. It was developed by a no-nonsense type named Leeroy, who has moved on to new adventures.
Your task is to add the new feature to our system so that we can begin selling a new category of items.
First an introduction to our system:
- All items have a `SellIn` value which denotes the number of days we have to sell the item
- All items have a `Quality` value which denotes how valuable the item is
- At the end of each day our system lowers both values for every item
Pretty simple, right? Well this is where it gets interesting:
- Once the sell by date has passed, `Quality` degrades twice as fast
- The `Quality` of an item is never negative
- **Aged Brie** actually increases in `Quality` the older it gets
- The `Quality` of an item is never more than `50`
- **Sulfuras** is a legendary item, and as such, never has to be sold or decreases in `Quality`
- beign legendary, its `Quality` is `80`.
- **Backstage passes**, like aged brie, increase in `Quality` as their `SellIn` value approaches.
- `Quality` increases by `2` when there are `10` days or less
- `Quality` increases by `3` when there are `5` days or less
- `Quality` drops to `0` after the concert
We have recently signed a supplier of *conjured items*. This requires an update to our system:
- **Conjured items** degrade in Quality twice as fast as normal items
Feel free to make any changes to the `UpdateQuality` method and add any new code as long as everything still works correctly.
However, do *not* alter the `Item` class or `Items` property as those belong to the goblin in the corner who will insta-rage and one-shot you as he doesn't believe in shared code ownership.
You can make the `UpdateQuality` method and `Items` property static if you like, we'll cover for you.