mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +00:00
Solution Java v1
This commit is contained in:
parent
263a07d58d
commit
1b1fba57f4
@ -15,7 +15,7 @@ dependencies {
|
||||
|
||||
group = 'com.gildedrose'
|
||||
version = '0.0.1-SNAPSHOT'
|
||||
sourceCompatibility = '1.8'
|
||||
sourceCompatibility = '14'
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
|
||||
@ -1,5 +1,9 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import com.gildedrose.policies.ItemUpdater;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
class GildedRose {
|
||||
Item[] items;
|
||||
|
||||
@ -8,55 +12,6 @@ class GildedRose {
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Arrays.stream(items).forEach(ItemUpdater::updateItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
package com.gildedrose.policies;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
class AgedBrieUpdatePolicy extends UpdatePolicy {
|
||||
AgedBrieUpdatePolicy(Item item) {
|
||||
super(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateItem() {
|
||||
decreaseSellIn();
|
||||
increaseQuality();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
package com.gildedrose.policies;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
class BackstagePassesUpdatePolicy extends UpdatePolicy {
|
||||
BackstagePassesUpdatePolicy(Item item) {
|
||||
super(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateItem() {
|
||||
decreaseSellIn();
|
||||
|
||||
var sellIn = item.sellIn;
|
||||
|
||||
if (sellIn < 0) {
|
||||
item.quality = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
increaseQuality();
|
||||
|
||||
if (sellIn < 10) {
|
||||
increaseQuality();
|
||||
}
|
||||
|
||||
if (sellIn < 5) {
|
||||
increaseQuality();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package com.gildedrose.policies;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
class ConjuredUpdatePolicy extends UpdatePolicy {
|
||||
ConjuredUpdatePolicy(Item item) {
|
||||
super(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateItem() {
|
||||
super.updateItem();
|
||||
decreaseQuality();
|
||||
}
|
||||
}
|
||||
10
Java/src/main/java/com/gildedrose/policies/ItemUpdater.java
Normal file
10
Java/src/main/java/com/gildedrose/policies/ItemUpdater.java
Normal file
@ -0,0 +1,10 @@
|
||||
package com.gildedrose.policies;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
public class ItemUpdater {
|
||||
|
||||
public static void updateItem(Item item){
|
||||
UpdatePolicesFactory.getUpdatePolicy(item).updateItem();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package com.gildedrose.policies;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
class SulfurasUpdatePolicy extends UpdatePolicy{
|
||||
SulfurasUpdatePolicy(Item item) {
|
||||
super(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateItem() {
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package com.gildedrose.policies;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
class UpdatePolicesFactory {
|
||||
|
||||
static UpdatePolicy getUpdatePolicy(Item item) {
|
||||
return switch (item.name) {
|
||||
case "Aged Brie" -> new AgedBrieUpdatePolicy(item);
|
||||
case "Backstage passes to a TAFKAL80ETC concert" -> new BackstagePassesUpdatePolicy(item);
|
||||
case "Sulfuras, Hand of Ragnaros" -> new SulfurasUpdatePolicy(item);
|
||||
case "Conjured" -> new ConjuredUpdatePolicy(item);
|
||||
default -> new UpdatePolicy(item);
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
36
Java/src/main/java/com/gildedrose/policies/UpdatePolicy.java
Normal file
36
Java/src/main/java/com/gildedrose/policies/UpdatePolicy.java
Normal file
@ -0,0 +1,36 @@
|
||||
package com.gildedrose.policies;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
class UpdatePolicy {
|
||||
|
||||
private final int MAX_QUALITY = 50;
|
||||
private final int MIN_QUALITY = 0;
|
||||
|
||||
protected Item item;
|
||||
|
||||
UpdatePolicy(Item item) {
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
void updateItem() {
|
||||
decreaseSellIn();
|
||||
decreaseQuality();
|
||||
}
|
||||
|
||||
void decreaseSellIn() {
|
||||
item.sellIn -= 1;
|
||||
}
|
||||
|
||||
void decreaseQuality() {
|
||||
item.quality = item.quality <= MIN_QUALITY ? MIN_QUALITY : isExpired() ? item.quality - 2 : item.quality - 1;
|
||||
}
|
||||
|
||||
void increaseQuality() {
|
||||
item.quality = item.quality >= MAX_QUALITY ? MAX_QUALITY : isExpired() ? item.quality + 2 : item.quality + 1;
|
||||
}
|
||||
|
||||
private boolean isExpired() {
|
||||
return item.sellIn < 0;
|
||||
}
|
||||
}
|
||||
56
Java/src/test/java/com/gildedrose/AgedBrieItemTest.java
Normal file
56
Java/src/test/java/com/gildedrose/AgedBrieItemTest.java
Normal file
@ -0,0 +1,56 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class AgedBrieItemTest extends ItemTest {
|
||||
|
||||
@Override
|
||||
@Test
|
||||
void sellInDecreaseTest() {
|
||||
Item[] items = new Item[] { new Item("Aged Brie", 2, 2) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(3, app.items[0].quality);
|
||||
assertEquals(1, app.items[0].sellIn);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(4, app.items[0].quality);
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Test
|
||||
void afterSellInQualityChangeTest() {
|
||||
Item[] items = new Item[] { new Item("Aged Brie", 1, 2) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(3, app.items[0].quality);
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(5, app.items[0].quality);
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
}
|
||||
|
||||
@Test
|
||||
void qualityNotAbove50Test() {
|
||||
Item[] items = new Item[] { new Item("Aged Brie", 2, 49) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(50, app.items[0].quality);
|
||||
assertEquals(1, app.items[0].sellIn);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(50, app.items[0].quality);
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,61 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class BackstagePassesItemTest extends ItemTest{
|
||||
|
||||
@Override
|
||||
@Test
|
||||
void sellInDecreaseTest() {
|
||||
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 11, 0),
|
||||
new Item("Backstage passes to a TAFKAL80ETC concert", 6, 10) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(1, app.items[0].quality);
|
||||
assertEquals(10, app.items[0].sellIn);
|
||||
assertEquals(12, app.items[1].quality);
|
||||
assertEquals(5, app.items[1].sellIn);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(3, app.items[0].quality);
|
||||
assertEquals(9, app.items[0].sellIn);
|
||||
assertEquals(15, app.items[1].quality);
|
||||
assertEquals(4, app.items[1].sellIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Test
|
||||
void afterSellInQualityChangeTest() {
|
||||
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 1, 20) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(23, app.items[0].quality);
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(0, app.items[0].quality);
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
}
|
||||
|
||||
@Test
|
||||
void qualityNotAbove50Test() {
|
||||
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 2, 49) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(50, app.items[0].quality);
|
||||
assertEquals(1, app.items[0].sellIn);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(50, app.items[0].quality);
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
}
|
||||
}
|
||||
41
Java/src/test/java/com/gildedrose/ConjuredItemTest.java
Normal file
41
Java/src/test/java/com/gildedrose/ConjuredItemTest.java
Normal file
@ -0,0 +1,41 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class ConjuredItemTest extends ItemTest{
|
||||
|
||||
@Override
|
||||
@Test
|
||||
void sellInDecreaseTest() {
|
||||
Item[] items = new Item[] { new Item("Conjured", 2, 10) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(8, app.items[0].quality);
|
||||
assertEquals(1, app.items[0].sellIn);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(6, app.items[0].quality);
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Test
|
||||
void afterSellInQualityChangeTest() {
|
||||
Item[] items = new Item[] { new Item("Conjured", 1, 20) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(18, app.items[0].quality);
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(14, app.items[0].quality);
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
}
|
||||
}
|
||||
@ -1,17 +0,0 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class GildedRoseTest {
|
||||
|
||||
@Test
|
||||
void foo() {
|
||||
Item[] items = new Item[] { new Item("foo", 0, 0) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals("fixme", app.items[0].name);
|
||||
}
|
||||
|
||||
}
|
||||
50
Java/src/test/java/com/gildedrose/ItemTest.java
Normal file
50
Java/src/test/java/com/gildedrose/ItemTest.java
Normal file
@ -0,0 +1,50 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class ItemTest {
|
||||
|
||||
@Test
|
||||
void sellInDecreaseTest() {
|
||||
Item[] items = new Item[] { new Item("foo", 2, 2) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(1, app.items[0].quality);
|
||||
assertEquals(1, app.items[0].sellIn);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(0, app.items[0].quality);
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
}
|
||||
|
||||
@Test
|
||||
void notNegativeQualityTest() {
|
||||
Item[] items = new Item[] { new Item("foo", 0, 0) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(0, app.items[0].quality);
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
}
|
||||
|
||||
@Test
|
||||
void afterSellInQualityChangeTest() {
|
||||
Item[] items = new Item[] { new Item("foo", 1, 20) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(19, app.items[0].quality);
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(17, app.items[0].quality);
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
}
|
||||
}
|
||||
19
Java/src/test/java/com/gildedrose/SulfurasItemTest.java
Normal file
19
Java/src/test/java/com/gildedrose/SulfurasItemTest.java
Normal file
@ -0,0 +1,19 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class SulfurasItemTest {
|
||||
|
||||
@Test
|
||||
void standardChangeTest() {
|
||||
Item[] items = new Item[] { new Item("Sulfuras, Hand of Ragnaros", 5, 80) };
|
||||
GildedRose app = new GildedRose(items);
|
||||
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(80, app.items[0].quality);
|
||||
assertEquals(5, app.items[0].sellIn);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user