Created
November 27, 2023 18:41
-
-
Save franreyes/ea49f4d4027982fe492e1b40cb613ff5 to your computer and use it in GitHub Desktop.
GildedRoseTest.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace tests; | |
use Codesai\TDD\GildedRose\GildedRose; | |
use Codesai\TDD\GildedRose\Item; | |
use PHPUnit\Framework\TestCase; | |
class GildedRoseTest extends TestCase | |
{ | |
const MIN_QUALITY = 0; | |
const MAX_QUALITY = 50; | |
/** @test */ | |
public function regular_items_quality_decreases_every_day() { | |
$item = $this->createRegularItem(1, 3); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(2, $item->quality); | |
$this->assertEquals(0, $item->sell_in); | |
} | |
/** @test */ | |
public function expired_regular_items_quality_decreases_twice_as_fast_once_sellIn_has_passed() { | |
$item = $this->createRegularItem(0, 3); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(1, $item->quality); | |
$this->assertEquals(-1, $item->sell_in); | |
} | |
/** @test */ | |
public function regular_items_quality_never_decreases_below_the_minimum_quality() { | |
$item = $this->createRegularItem(5, self::MIN_QUALITY); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(self::MIN_QUALITY, $item->quality); | |
$this->assertEquals(4, $item->sell_in); | |
} | |
/** @test */ | |
public function expired_regular_items_quality_never_decreases_below_the_minimum_quality() { | |
$item = $this->createRegularItem(0, 1); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(self::MIN_QUALITY, $item->quality); | |
$this->assertEquals(-1, $item->sell_in); | |
} | |
/** @test */ | |
public function aged_brie_increases_quality_by_1() { | |
$item = $this->createAgeBrie(5, 8); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(9, $item->quality); | |
$this->assertEquals(4, $item->sell_in); | |
} | |
/** @test */ | |
public function aged_brie_quality_never_increases_over_the_maximun_quality() { | |
$item = $this->createAgeBrie(5, self::MAX_QUALITY); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(self::MAX_QUALITY, $item->quality); | |
$this->assertEquals(4, $item->sell_in); | |
} | |
/** @test */ | |
public function expired_aged_brie_quality_never_increases_over_the_maximun_quality() { | |
$item = $this->createAgeBrie(0, self::MAX_QUALITY - 1); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(self::MAX_QUALITY, $item->quality); | |
$this->assertEquals(-1, $item->sell_in); | |
} | |
/** @test */ | |
public function expired_aged_brie_increases_quality_by_2() { | |
$item = $this->createAgeBrie(0, 8); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(10, $item->quality); | |
$this->assertEquals(-1, $item->sell_in); | |
} | |
/** @test */ | |
public function sulfuras_never_changes() { | |
$item = $this->createSulfuras(1, 80); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(80, $item->quality); | |
$this->assertEquals(1, $item->sell_in); | |
} | |
/** @test */ | |
public function expired_sulfuras_never_changes() { | |
$item = $this->createSulfuras(-1, 80); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(80, $item->quality); | |
$this->assertEquals(-1, $item->sell_in); | |
} | |
/** @test */ | |
public function backstage_increase_quality_by_1_when_sellIn_is_greater_than_10() { | |
$item = $this->createBackstagePasses(11, 6); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(7, $item->quality); | |
$this->assertEquals(10, $item->sell_in); | |
} | |
/** @test */ | |
public function backstage_increase_quality_by_2_when_sellIn_is_between_10_and_6() { | |
$item1 = $this->createBackstagePasses(10, 6); | |
$item2 = $this->createBackstagePasses(6, 20); | |
$gildedRose = new GildedRose([$item1, $item2]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(8, $item1->quality); | |
$this->assertEquals(9, $item1->sell_in); | |
$this->assertEquals(22, $item2->quality); | |
$this->assertEquals(5, $item2->sell_in); | |
} | |
/** @test */ | |
public function backstage_increase_quality_by_3_when_sellIn_is_between_5_and_1() { | |
$item1 = $this->createBackstagePasses(5, 6); | |
$item2 = $this->createBackstagePasses(1, 20); | |
$gildedRose = new GildedRose([$item1, $item2]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(9, $item1->quality); | |
$this->assertEquals(4, $item1->sell_in); | |
$this->assertEquals(23, $item2->quality); | |
$this->assertEquals(0, $item2->sell_in); | |
} | |
/** @test */ | |
public function backstage_quality_drops_to_0_after_the_concert() { | |
$item = $this->createBackstagePasses(0, 6); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(self::MIN_QUALITY, $item->quality); | |
$this->assertEquals(-1, $item->sell_in); | |
} | |
/** @test */ | |
public function backstage_quality_never_increases_over_the_maximun_quality_when_increasing_by_1() { | |
$item = $this->createBackstagePasses(11, self::MAX_QUALITY); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(self::MAX_QUALITY, $item->quality); | |
$this->assertEquals(10, $item->sell_in); | |
} | |
/** @test */ | |
public function backstage_quality_never_increases_over_the_maximun_quality_when_increasing_by_2() { | |
$item = $this->createBackstagePasses(8, self::MAX_QUALITY -1); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(self::MAX_QUALITY, $item->quality); | |
$this->assertEquals(7, $item->sell_in); | |
} | |
/** @test */ | |
public function backstage_quality_never_increases_over_the_maximun_quality_when_increasing_by_3() { | |
$item = $this->createBackstagePasses(4, self::MAX_QUALITY -2); | |
$gildedRose = new GildedRose([$item]); | |
$gildedRose->updateQuality(); | |
$this->assertEquals(self::MAX_QUALITY, $item->quality); | |
$this->assertEquals(3, $item->sell_in); | |
} | |
private function createRegularItem($sell_in, $quality): Item | |
{ | |
return new Item('foo', $sell_in, $quality); | |
} | |
private function createAgeBrie(int $sell_in, int $quality) | |
{ | |
return new Item('Aged Brie', $sell_in, $quality); | |
} | |
private function createSulfuras(int $sell_in, int $quality) | |
{ | |
return new Item('Sulfuras, Hand of Ragnaros', $sell_in, $quality); | |
} | |
private function createBackstagePasses(int $sell_in, int $quality) | |
{ | |
return new Item('Backstage passes to a TAFKAL80ETC concert', $sell_in, $quality); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment