mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-18 07:51:29 +00:00
Java refactor
This commit is contained in:
parent
9d878b7641
commit
bb2257fced
7
Java/chris-readme.txt
Normal file
7
Java/chris-readme.txt
Normal file
@ -0,0 +1,7 @@
|
||||
ItemHolder is an abstract class that implements the update template (first update quality then sellIn).
|
||||
Concrete classes implement algorithm for each item type.
|
||||
ItemHolder object creation is put into its own factory class as it will change with new item types.
|
||||
|
||||
Improvements:
|
||||
Test code is highly duplicated. I assume Junit has paramaterized tests, just didn't bother looking it up.
|
||||
ItemHolders do checks for max and min values. Maybe those belong in setSellIn/setQuality methods?
|
||||
24
Java/src/main/java/com/gildedrose/BackstagePassesHolder.java
Normal file
24
Java/src/main/java/com/gildedrose/BackstagePassesHolder.java
Normal file
@ -0,0 +1,24 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public class BackstagePassesHolder extends ItemHolder {
|
||||
|
||||
public BackstagePassesHolder(Item item) {
|
||||
super(item);
|
||||
}
|
||||
public void updateQuality() {
|
||||
if (this.item.sellIn > 10) {
|
||||
this.item.quality += 1;
|
||||
} else if (this.item.sellIn > 5) {
|
||||
this.item.quality += 2;
|
||||
} else if (this.item.sellIn > 0) {
|
||||
this.item.quality += 3;
|
||||
} else if (this.item.sellIn <= 0) {
|
||||
this.item.quality = 0;
|
||||
}
|
||||
this.item.quality = Math.min(this.item.quality, 50);
|
||||
}
|
||||
|
||||
public void updateSellIn() {
|
||||
this.item.sellIn -= 1;
|
||||
}
|
||||
}
|
||||
17
Java/src/main/java/com/gildedrose/BrieHolder.java
Normal file
17
Java/src/main/java/com/gildedrose/BrieHolder.java
Normal file
@ -0,0 +1,17 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public class BrieHolder extends ItemHolder {
|
||||
|
||||
public BrieHolder(Item item) {
|
||||
super(item);
|
||||
}
|
||||
public void updateQuality() {
|
||||
if (this.item.quality < 50) {
|
||||
this.item.quality += 1;
|
||||
}
|
||||
}
|
||||
|
||||
public void updateSellIn() {
|
||||
this.item.sellIn -= 1;
|
||||
}
|
||||
}
|
||||
20
Java/src/main/java/com/gildedrose/GenericItemHolder.java
Normal file
20
Java/src/main/java/com/gildedrose/GenericItemHolder.java
Normal file
@ -0,0 +1,20 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public class GenericItemHolder extends ItemHolder {
|
||||
|
||||
public GenericItemHolder(Item item) {
|
||||
super(item);
|
||||
}
|
||||
public void updateQuality() {
|
||||
if (this.item.sellIn > 0) {
|
||||
this.item.quality -= 1;
|
||||
} else {
|
||||
this.item.quality -= 2;
|
||||
}
|
||||
this.item.quality = Math.max(this.item.quality, 0);
|
||||
}
|
||||
|
||||
public void updateSellIn() {
|
||||
this.item.sellIn -= 1;
|
||||
}
|
||||
}
|
||||
@ -2,61 +2,19 @@ package com.gildedrose;
|
||||
|
||||
class GildedRose {
|
||||
Item[] items;
|
||||
ItemHolder[] itemHolders;
|
||||
|
||||
public GildedRose(Item[] items) {
|
||||
this.items = items;
|
||||
this.itemHolders = new ItemHolder[items.length];
|
||||
for (int i=0; i<items.length; i++) {
|
||||
itemHolders[i] = ItemHolderFactory.createItemHolder(this.items[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateQuality() {
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
if (!items[i].name.equals("Aged Brie")
|
||||
&& !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (items[i].quality > 0) {
|
||||
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) {
|
||||
if (items[i].quality < 50) {
|
||||
items[i].quality = items[i].quality + 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (items[i].sellIn < 6) {
|
||||
if (items[i].quality < 50) {
|
||||
items[i].quality = items[i].quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||
items[i].sellIn = items[i].sellIn - 1;
|
||||
}
|
||||
|
||||
if (items[i].sellIn < 0) {
|
||||
if (!items[i].name.equals("Aged Brie")) {
|
||||
if (!items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
||||
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;
|
||||
}
|
||||
} else {
|
||||
if (items[i].quality < 50) {
|
||||
items[i].quality = items[i].quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
itemHolders[i].update();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
17
Java/src/main/java/com/gildedrose/ItemHolder.java
Normal file
17
Java/src/main/java/com/gildedrose/ItemHolder.java
Normal file
@ -0,0 +1,17 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public abstract class ItemHolder {
|
||||
Item item;
|
||||
|
||||
public ItemHolder(Item item){
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
public void update() {
|
||||
this.updateQuality();
|
||||
this.updateSellIn();
|
||||
}
|
||||
abstract void updateQuality();
|
||||
|
||||
abstract void updateSellIn();
|
||||
}
|
||||
15
Java/src/main/java/com/gildedrose/ItemHolderFactory.java
Normal file
15
Java/src/main/java/com/gildedrose/ItemHolderFactory.java
Normal file
@ -0,0 +1,15 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public class ItemHolderFactory {
|
||||
public static ItemHolder createItemHolder(Item item){
|
||||
if (item.name == "Aged Brie") {
|
||||
return new BrieHolder(item);
|
||||
} else if (item.name == "Sulfuras, Hand of Ragnaros") {
|
||||
return new SulfurasHolder(item);
|
||||
} else if (item.name == "Backstage passes to a TAFKAL80ETC concert") {
|
||||
return new BackstagePassesHolder(item);
|
||||
} else {
|
||||
return new GenericItemHolder(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Java/src/main/java/com/gildedrose/SulfurasHolder.java
Normal file
11
Java/src/main/java/com/gildedrose/SulfurasHolder.java
Normal file
@ -0,0 +1,11 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public class SulfurasHolder extends ItemHolder {
|
||||
|
||||
public SulfurasHolder(Item item) {
|
||||
super(item);
|
||||
}
|
||||
public void updateQuality() {}
|
||||
|
||||
public void updateSellIn() {}
|
||||
}
|
||||
@ -7,11 +7,129 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
class GildedRoseTest {
|
||||
|
||||
@Test
|
||||
void foo() {
|
||||
void add_item() {
|
||||
Item[] items = new Item[] { new Item("foo", 0, 0) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
assertEquals("foo", app.items[0].name);
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
assertEquals(0, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void quality_decrease() {
|
||||
Item[] items = new Item[] { new Item("foo", 1, 40) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals("fixme", app.items[0].name);
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
assertEquals(39, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void fast_quality_decrease() {
|
||||
Item[] items = new Item[] { new Item("foo", 0, 40) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
assertEquals(38, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void never_negative_quality() {
|
||||
Item[] items = new Item[] { new Item("foo", -1, 1) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(-2, app.items[0].sellIn);
|
||||
assertEquals(0, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void aged_brie_quality_increase() {
|
||||
Item[] items = new Item[] { new Item("Aged Brie", 5, 20) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(4, app.items[0].sellIn);
|
||||
assertEquals(21, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void aged_brie_max_quality_increase() {
|
||||
Item[] items = new Item[] { new Item("Aged Brie", 5, 50) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(4, app.items[0].sellIn);
|
||||
assertEquals(50, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void sulfuras() {
|
||||
Item[] items = new Item[] { new Item("Sulfuras, Hand of Ragnaros", 5, 80) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(5, app.items[0].sellIn);
|
||||
assertEquals(80, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void sulfuras_expired() {
|
||||
Item[] items = new Item[] { new Item("Sulfuras, Hand of Ragnaros", -2, 80) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(-2, app.items[0].sellIn);
|
||||
assertEquals(80, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backstage_passes_quality_increase() {
|
||||
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(14, app.items[0].sellIn);
|
||||
assertEquals(21, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backstage_passes_max_quality() {
|
||||
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 2, 50) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(1, app.items[0].sellIn);
|
||||
assertEquals(50, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backstage_passes_day_ten() {
|
||||
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 10, 20) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(9, app.items[0].sellIn);
|
||||
assertEquals(22, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backstage_passes_day_five() {
|
||||
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 5, 20) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(4, app.items[0].sellIn);
|
||||
assertEquals(23, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backstage_passes_day_zero() {
|
||||
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 1, 20) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
assertEquals(23, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backstage_passes_expired() {
|
||||
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 0, 20) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
assertEquals(0, app.items[0].quality);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
120
Java/src/test/java/com/gildedrose/ItemHolderFactoryTest.java
Normal file
120
Java/src/test/java/com/gildedrose/ItemHolderFactoryTest.java
Normal file
@ -0,0 +1,120 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class ItemHolderFactoryTest {
|
||||
|
||||
@Test
|
||||
void create_generic_item() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("foo", 0, 0));
|
||||
assertEquals("foo", itemHolder.item.name);
|
||||
assertEquals(0, itemHolder.item.sellIn);
|
||||
assertEquals(0, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void quality_decrease() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("foo", 1, 40));
|
||||
itemHolder.update();
|
||||
assertEquals(0, itemHolder.item.sellIn);
|
||||
assertEquals(39, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void fast_quality_decrease() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("foo", 0, 40));
|
||||
itemHolder.update();
|
||||
assertEquals(-1, itemHolder.item.sellIn);
|
||||
assertEquals(38, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void never_negative_quality() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("foo", -1, 1));
|
||||
itemHolder.update();
|
||||
assertEquals(-2, itemHolder.item.sellIn);
|
||||
assertEquals(0, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void aged_brie_quality_increase() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("Aged Brie", 5, 20));
|
||||
itemHolder.update();
|
||||
assertEquals(4, itemHolder.item.sellIn);
|
||||
assertEquals(21, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void aged_brie_max_quality_increase() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("Aged Brie", 5, 50));
|
||||
itemHolder.update();
|
||||
assertEquals(4, itemHolder.item.sellIn);
|
||||
assertEquals(50, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void sulfuras() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("Sulfuras, Hand of Ragnaros", 5, 80));
|
||||
itemHolder.update();
|
||||
assertEquals(5, itemHolder.item.sellIn);
|
||||
assertEquals(80, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void sulfuras_expired() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("Sulfuras, Hand of Ragnaros", -2, 80));
|
||||
itemHolder.update();
|
||||
assertEquals(-2, itemHolder.item.sellIn);
|
||||
assertEquals(80, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backstage_passes_quality_increase() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20));
|
||||
itemHolder.update();
|
||||
assertEquals(14, itemHolder.item.sellIn);
|
||||
assertEquals(21, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backstage_passes_max_quality() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("Backstage passes to a TAFKAL80ETC concert", 2, 50));
|
||||
itemHolder.update();
|
||||
assertEquals(1, itemHolder.item.sellIn);
|
||||
assertEquals(50, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backstage_passes_day_ten() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("Backstage passes to a TAFKAL80ETC concert", 10, 20));
|
||||
itemHolder.update();
|
||||
assertEquals(9, itemHolder.item.sellIn);
|
||||
assertEquals(22, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backstage_passes_day_five() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("Backstage passes to a TAFKAL80ETC concert", 5, 20));
|
||||
itemHolder.update();
|
||||
assertEquals(4, itemHolder.item.sellIn);
|
||||
assertEquals(23, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backstage_passes_day_zero() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("Backstage passes to a TAFKAL80ETC concert", 1, 20));
|
||||
itemHolder.update();
|
||||
assertEquals(0, itemHolder.item.sellIn);
|
||||
assertEquals(23, itemHolder.item.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backstage_passes_expired() {
|
||||
ItemHolder itemHolder = ItemHolderFactory.createItemHolder(new Item("Backstage passes to a TAFKAL80ETC concert", 0, 20));
|
||||
itemHolder.update();
|
||||
assertEquals(-1, itemHolder.item.sellIn);
|
||||
assertEquals(0, itemHolder.item.quality);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user