Added By Shanmugam on Code Cleanup of GildedRose

Mail Id :Shanmugamcse@gmail.com
This commit is contained in:
Shanmugam Thillaigovindarajan 2022-03-28 11:54:36 +05:30
parent 181b48aff7
commit 72aa0fef8f
10 changed files with 199 additions and 53 deletions

View File

@ -0,0 +1,8 @@
package com.gildedrose;
public class Constants {
public static final String AgedBrie = "Aged Brie";
public static final String Backstage = "Backstage passes to a TAFKAL80ETC concert";
public static final String Sulfuras = "Sulfuras, Hand of Ragnaros";
public static final String Conjured = "Conjured";
}

View File

@ -8,55 +8,8 @@ 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;
}
}
}
for (Item item : items) {
ItemFactory.create(item).update();
}
}
}
}

View File

@ -0,0 +1,18 @@
package com.gildedrose;
public class ItemFactory {
public static ItemWrapper create(Item item) {
switch (item.name) {
case Constants.AgedBrie:
return new updateBrie(item);
case Constants.Backstage:
return new updateBackstage(item);
case Constants.Sulfuras:
return new updateLegendary(item);
case Constants.Conjured:
return new updateConjured(item);
default:
return new updateOther(item);
}
}
}

View File

@ -0,0 +1,11 @@
package com.gildedrose;
public abstract class ItemWrapper {
protected final Item item;
public ItemWrapper(Item item) {
this.item = item;
}
public abstract void update();
}

View File

@ -0,0 +1,30 @@
package com.gildedrose;
public class updateBackstage extends ItemWrapper {
public updateBackstage(Item item) {
super(item);
}
@Override
public void update() {
if (item.quality < 50) {
item.quality = item.quality + 1;
if (item.sellIn < 11) {
if (item.quality < 50) {
item.quality = item.quality + 1;
}
}
if (item.sellIn < 6) {
if (item.quality < 50) {
item.quality = item.quality + 1;
}
}
}
item.sellIn = item.sellIn - 1;
if (item.sellIn < 0) {
item.quality = 0;
}
}
}

View File

@ -0,0 +1,20 @@
package com.gildedrose;
public class updateBrie extends ItemWrapper {
public updateBrie(Item item) {
super(item);
}
@Override
public void update() {
if (item.quality < 50) {
item.quality = item.quality + 1;
}
item.sellIn = item.sellIn - 1;
if (item.sellIn < 0 && item.quality < 50) {
item.quality = item.quality + 1;
}
}
}

View File

@ -0,0 +1,18 @@
package com.gildedrose;
public class updateConjured extends ItemWrapper {
public updateConjured(Item item) {
super(item);
}
@Override
public void update() {
if (item.quality > 1) {
item.quality = item.quality - 2;
}
item.sellIn = item.sellIn - 1;
if (item.sellIn < 0 && item.quality > 1) {
item.quality = item.quality - 2;
}
}
}

View File

@ -0,0 +1,12 @@
package com.gildedrose;
public class updateLegendary extends ItemWrapper {
public updateLegendary(Item item) {
super(item);
}
@Override
public void update() {
}
}

View File

@ -0,0 +1,18 @@
package com.gildedrose;
public class updateOther extends ItemWrapper {
public updateOther(Item item) {
super(item);
}
@Override
public void update() {
if (item.quality > 0) {
item.quality = item.quality - 1;
}
item.sellIn = item.sellIn - 1;
if (item.sellIn < 0 && item.quality > 0) {
item.quality = item.quality - 1;
}
}
}

View File

@ -1,5 +1,6 @@
package com.gildedrose;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
@ -7,11 +8,68 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
class GildedRoseTest {
@Test
void foo() {
Item[] items = new Item[] { new Item("foo", 0, 0) };
@DisplayName("Test Aged Brie functionality")
void testAgedBrie() {
Item[] items = new Item[] { new Item("Aged Brie", 10, 80) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals("fixme", app.items[0].name);
assertEquals(Constants.AgedBrie, app.items[0].name);
assertEquals(9, app.items[0].sellIn);
assertEquals(80, app.items[0].quality);
}
@Test
@DisplayName("Test BackStage functionality")
void testBackStageSellIn() {
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 20, 50) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(Constants.Backstage, app.items[0].name);
assertEquals(19, app.items[0].sellIn);
assertEquals(50, app.items[0].quality);
}
@Test
@DisplayName("Test BackStage Quality functionality")
void testBackStageQuality() {
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 10, 45) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(Constants.Backstage, app.items[0].name);
assertEquals(9, app.items[0].sellIn);
assertEquals(47, app.items[0].quality);
}
@Test
@DisplayName("Test BackStage Quality with least functionality")
void testBackStageQualitywithLeast() {
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(Constants.Backstage, app.items[0].name);
assertEquals(4, app.items[0].sellIn);
assertEquals(50, app.items[0].quality);
}
@Test
@DisplayName("Test Other functionality")
void testOther() {
Item[] items = new Item[] { new Item("Shan", 10, 20) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals("Shan", app.items[0].name);
assertEquals(9, app.items[0].sellIn);
assertEquals(19, app.items[0].quality);
}
@Test
@DisplayName("Test Conjured functionality")
void testConjured() {
Item[] items = new Item[] { new Item("Conjured", 10, 10) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(Constants.Conjured, app.items[0].name);
assertEquals(9, app.items[0].sellIn);
assertEquals(8, app.items[0].quality);
}
}