mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +00:00
Added more Junit Test cases covering most cases , Added logic for Conjure Items, Refactored GildedRose class
This commit is contained in:
parent
33373d6fd5
commit
f75116eb6f
@ -1,62 +1,82 @@
|
|||||||
package com.gildedrose;
|
package com.gildedrose;
|
||||||
|
|
||||||
class GildedRose {
|
class GildedRose {
|
||||||
Item[] items;
|
Item[] items;
|
||||||
|
|
||||||
public GildedRose(Item[] items) {
|
public GildedRose(Item[] items) {
|
||||||
this.items = items;
|
this.items = items;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateQuality() {
|
private static final String AGED_BRIE_STRING = "Aged Brie";
|
||||||
for (int i = 0; i < items.length; i++) {
|
private static final String BACKSTAGE_PASS = "Backstage passes to a TAFKAL80ETC concert";
|
||||||
if (!items[i].name.equals("Aged Brie")
|
private static final String SULFRAS = "Sulfuras, Hand of Ragnaros";
|
||||||
&& !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
private static final String CONJURED_ITEM = "Conjured Mana Cake";
|
||||||
if (items[i].quality > 0) {
|
private static final int UPPER_LIMIT_QUALITY = 50;
|
||||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
|
||||||
items[i].quality = items[i].quality - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (items[i].quality < 50) {
|
|
||||||
items[i].quality = items[i].quality + 1;
|
|
||||||
|
|
||||||
if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
/**
|
||||||
if (items[i].sellIn < 11) {
|
* TODO :: 1.Idea is to replace if else with separate logic depending on the
|
||||||
if (items[i].quality < 50) {
|
* type of Item we receive we can have specific methods(We can use Factory
|
||||||
items[i].quality = items[i].quality + 1;
|
* design Template for this) to handle each scenario like below methods
|
||||||
}
|
* backStagePassProcess , ConjuredItemProcess,MiscItemProcess etc.
|
||||||
}
|
*
|
||||||
|
* 2. Can make this update class as static util class but rather go with factory
|
||||||
|
* pattern to update. Also make ENUMS for Strings.
|
||||||
|
*/
|
||||||
|
public void updateQuality() {
|
||||||
|
for (int i = 0; i < items.length; i++) {
|
||||||
|
if (!items[i].name.equalsIgnoreCase(AGED_BRIE_STRING) && !items[i].name.equalsIgnoreCase(BACKSTAGE_PASS)) {
|
||||||
|
if (items[i].quality > 0) {
|
||||||
|
if (!items[i].name.equalsIgnoreCase(SULFRAS)) {
|
||||||
|
items[i].quality = items[i].quality - 1;
|
||||||
|
if (items[i].name.equalsIgnoreCase(CONJURED_ITEM))
|
||||||
|
items[i].quality = items[i].quality - 1;
|
||||||
|
|
||||||
if (items[i].sellIn < 6) {
|
}
|
||||||
if (items[i].quality < 50) {
|
}
|
||||||
items[i].quality = items[i].quality + 1;
|
} else {
|
||||||
}
|
if (items[i].quality < UPPER_LIMIT_QUALITY) {
|
||||||
}
|
items[i].quality = items[i].quality + 1;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
if (items[i].name.equalsIgnoreCase(BACKSTAGE_PASS)) {
|
||||||
items[i].sellIn = items[i].sellIn - 1;
|
if (items[i].sellIn < 11) {
|
||||||
}
|
if (items[i].quality < UPPER_LIMIT_QUALITY) {
|
||||||
|
items[i].quality = items[i].quality + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (items[i].sellIn < 0) {
|
if (items[i].sellIn < 6) {
|
||||||
if (!items[i].name.equals("Aged Brie")) {
|
if (items[i].quality < UPPER_LIMIT_QUALITY) {
|
||||||
if (!items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
items[i].quality = items[i].quality + 1;
|
||||||
if (items[i].quality > 0) {
|
}
|
||||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
}
|
||||||
items[i].quality = items[i].quality - 1;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
items[i].quality = items[i].quality - items[i].quality;
|
if (!items[i].name.equalsIgnoreCase(SULFRAS)) {
|
||||||
}
|
|
||||||
} else {
|
items[i].sellIn = items[i].sellIn - 1;
|
||||||
if (items[i].quality < 50) {
|
}
|
||||||
items[i].quality = items[i].quality + 1;
|
|
||||||
}
|
if (items[i].sellIn < 0) {
|
||||||
}
|
if (!items[i].name.equalsIgnoreCase(AGED_BRIE_STRING)) {
|
||||||
}
|
if (!items[i].name.equalsIgnoreCase(BACKSTAGE_PASS)) {
|
||||||
}
|
if (items[i].quality > 0) {
|
||||||
}
|
if (!items[i].name.equalsIgnoreCase(SULFRAS)) {
|
||||||
|
items[i].quality = items[i].quality - 1;
|
||||||
|
if (items[i].name.equalsIgnoreCase(CONJURED_ITEM))
|
||||||
|
items[i].quality = items[i].quality - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
items[i].quality = items[i].quality - items[i].quality;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (items[i].quality < 50) {
|
||||||
|
items[i].quality = items[i].quality + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -6,12 +6,151 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
|||||||
|
|
||||||
class GildedRoseTest {
|
class GildedRoseTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void foo() {
|
void foo() {
|
||||||
Item[] items = new Item[] { new Item("foo", 0, 0) };
|
Item[] items = new Item[] { new Item("foo", 0, 0) };
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
assertEquals("fixme", app.items[0].name);
|
assertEquals("foo", app.items[0].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldLowerBothValues() {
|
||||||
|
Item[] items = new Item[] { new Item("foobar", 1, 1) };
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(0, app.items[0].quality);
|
||||||
|
assertEquals(0, app.items[0].sellIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldDowngradeTwiceAsFastAfterSellDate() {
|
||||||
|
Item[] items = new Item[] { new Item("foobar", 1, 5) };
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
|
||||||
|
// day 1, drop by 1
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(4, app.items[0].quality);
|
||||||
|
assertEquals(0, app.items[0].sellIn);
|
||||||
|
|
||||||
|
// day 2, drop by 2
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(2, app.items[0].quality);
|
||||||
|
assertEquals(-1, app.items[0].sellIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldNeverHaveANegativeQuality() {
|
||||||
|
Item[] items = new Item[] { new Item("foobar", 0, 0) };
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
|
||||||
|
// day 1, drop by 1
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(0, app.items[0].quality);
|
||||||
|
|
||||||
|
// day 2, drop by 1 => quality is still 0
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(0, app.items[0].quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldSeeAgedBrieIncreasedQualityDayByDay() {
|
||||||
|
Item[] items = new Item[] { new Item("Aged Brie", 0, 0) };
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
|
||||||
|
// day 1, add 2
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(2, app.items[0].quality);
|
||||||
|
|
||||||
|
// day 2, add 2
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(4, app.items[0].quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldNeverHaveQualityHigherThan50() {
|
||||||
|
Item[] items = new Item[] { new Item("Aged Brie", 0, 49) };
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
|
||||||
|
// day 1, add 2
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(50, app.items[0].quality);
|
||||||
|
|
||||||
|
// day 2, add 2
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(50, app.items[0].quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldSulfrasNotChangeQty() {
|
||||||
|
Item[] items = new Item[] { new Item("Sulfuras, Hand of Ragnaros", 0, 10) };
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
|
||||||
|
// day 1, don't impact quality
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(10, app.items[0].quality);
|
||||||
|
assertEquals(0, app.items[0].sellIn);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void checkForBackStagePasses() {
|
||||||
|
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 5, 10) };
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
|
||||||
|
// day 1, increase by 3 the quality
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(13, app.items[0].quality);
|
||||||
|
assertEquals(4, app.items[0].sellIn);
|
||||||
|
|
||||||
|
// day 1, increase by 3 the quality
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(16, app.items[0].quality);
|
||||||
|
assertEquals(3, app.items[0].sellIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldIncreaseQualityBasedOnSellIn() {
|
||||||
|
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 10, 10),
|
||||||
|
new Item("Backstage passes to a TAFKAL80ETC concert", 5, 10) };
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(12, app.items[0].quality);
|
||||||
|
assertEquals(9, app.items[0].sellIn);
|
||||||
|
|
||||||
|
assertEquals(13, app.items[1].quality);
|
||||||
|
assertEquals(4, app.items[1].sellIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void shouldSulfurasNeverAltersForSulfuras() {
|
||||||
|
Item[] items = new Item[] { new Item("Sulfuras, Hand of Ragnaros", 10, 80) };
|
||||||
|
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(80, app.items[0].quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldHaveQualityDroppingToZeroAfterConcert() {
|
||||||
|
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 0, 10) };
|
||||||
|
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(0, app.items[0].quality);
|
||||||
|
assertEquals(-1, app.items[0].sellIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldDegradeConjureItemsTwiceAsNormal() {
|
||||||
|
Item[] items = new Item[] { new Item("Conjured Mana Cake", 10, 10), new Item("Conjured Mana Cake", 0, 10) };
|
||||||
|
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
|
||||||
|
app.updateQuality();
|
||||||
|
assertEquals(8, app.items[0].quality);
|
||||||
|
assertEquals(6, app.items[1].quality);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user