mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-17 15:31:27 +00:00
119 lines
5.5 KiB
Elm
119 lines
5.5 KiB
Elm
module GildedRoseTest exposing (suite)
|
|
|
|
import Expect exposing (Expectation)
|
|
import Fuzz exposing (Fuzzer, int, list, string)
|
|
import GildedRose exposing (Days(..), Quality(..), endOfDay, newItem)
|
|
import Test exposing (..)
|
|
|
|
|
|
suite : Test
|
|
suite =
|
|
describe "GildedRose"
|
|
[ describe "At the end of each day"
|
|
[ test "our system lowers both values for every item" <|
|
|
\_ ->
|
|
let
|
|
givenItems =
|
|
[ newItem (Days 10) (Quality 10) "Thing" ]
|
|
|
|
expectedItems =
|
|
[ newItem (Days 9) (Quality 9) "Thing" ]
|
|
in
|
|
Expect.equal expectedItems (endOfDay givenItems)
|
|
, test "Once the sell by date has passed, Quality degrades twice as fast" <|
|
|
\_ ->
|
|
let
|
|
givenItems =
|
|
[ newItem (Days 0) (Quality 10) "Thing" ]
|
|
|
|
expectedItems =
|
|
[ newItem (Days -1) (Quality 8) "Thing" ]
|
|
in
|
|
Expect.equal expectedItems (endOfDay givenItems)
|
|
, test "The Quality of an item is never negative" <|
|
|
\_ ->
|
|
let
|
|
givenItems =
|
|
[ newItem (Days 10) (Quality 0) "Thing" ]
|
|
|
|
expectedItems =
|
|
[ newItem (Days 9) (Quality 0) "Thing" ]
|
|
in
|
|
Expect.equal expectedItems (endOfDay givenItems)
|
|
, test "'Aged Brie' actually increases in Quality the older it gets" <|
|
|
\_ ->
|
|
let
|
|
givenItems =
|
|
[ newItem (Days 10) (Quality 0) "Aged Brie" ]
|
|
|
|
expectedItems =
|
|
[ newItem (Days 9) (Quality 1) "Aged Brie" ]
|
|
in
|
|
Expect.equal expectedItems (endOfDay givenItems)
|
|
, test "The Quality of an item is never more than 50" <|
|
|
\_ ->
|
|
let
|
|
givenItems =
|
|
[ newItem (Days 10) (Quality 50) "Aged Brie"
|
|
, newItem (Days 10) (Quality 100) "Thing"
|
|
]
|
|
|
|
expectedItems =
|
|
[ newItem (Days 9) (Quality 50) "Aged Brie"
|
|
, newItem (Days 9) (Quality 50) "Thing"
|
|
]
|
|
in
|
|
Expect.equal expectedItems (endOfDay givenItems)
|
|
, test "\"Sulfuras\", being a legendary item, never has to be sold or decreases in Quality" <|
|
|
\_ ->
|
|
let
|
|
givenItems =
|
|
[ newItem (Days 10) (Quality 80) "Sulfuras" ]
|
|
|
|
expectedItems =
|
|
[ newItem (Days 10) (Quality 80) "Sulfuras" ]
|
|
in
|
|
Expect.equal expectedItems (endOfDay givenItems)
|
|
, describe "Backstage passes"
|
|
[ test "like aged brie, increases in Quality as its SellIn value approaches" <|
|
|
\_ ->
|
|
let
|
|
givenItems =
|
|
[ newItem (Days 20) (Quality 0) "Backstage passes" ]
|
|
|
|
expectedItems =
|
|
[ newItem (Days 19) (Quality 1) "Backstage passes" ]
|
|
in
|
|
Expect.equal expectedItems (endOfDay givenItems)
|
|
, test "Quality increases by 2 when there are 10 days or less; by 3 when there are 5 days or less; drops to 0 after the concert" <|
|
|
\_ ->
|
|
let
|
|
givenItems =
|
|
[ newItem (Days 11) (Quality 0) "Backstage passes"
|
|
, newItem (Days 10) (Quality 0) "Backstage passes"
|
|
, newItem (Days 9) (Quality 0) "Backstage passes"
|
|
, newItem (Days 6) (Quality 0) "Backstage passes"
|
|
, newItem (Days 5) (Quality 0) "Backstage passes"
|
|
, newItem (Days 4) (Quality 0) "Backstage passes"
|
|
, newItem (Days 1) (Quality 10) "Backstage passes"
|
|
, newItem (Days 0) (Quality 10) "Backstage passes"
|
|
, newItem (Days -1) (Quality 10) "Backstage passes"
|
|
]
|
|
|
|
expectedItems =
|
|
[ newItem (Days 10) (Quality 1) "Backstage passes"
|
|
, newItem (Days 9) (Quality 2) "Backstage passes"
|
|
, newItem (Days 8) (Quality 2) "Backstage passes"
|
|
, newItem (Days 5) (Quality 2) "Backstage passes"
|
|
, newItem (Days 4) (Quality 3) "Backstage passes"
|
|
, newItem (Days 3) (Quality 3) "Backstage passes"
|
|
, newItem (Days 0) (Quality 13) "Backstage passes"
|
|
, newItem (Days -1) (Quality 0) "Backstage passes"
|
|
, newItem (Days -2) (Quality 0) "Backstage passes"
|
|
]
|
|
in
|
|
Expect.equal expectedItems (endOfDay givenItems)
|
|
]
|
|
]
|
|
]
|