The following changes were made to the code:

The code was refactored to use more descriptive variable names.
The logic for handling each type of item was consolidated into separate
blocks of code.
The code was made more efficient by reducing the number of times the
Math.min() method was called.
The code was made more readable by adding comments to explain the logic.

This unit test tests the following behaviors of the GildedRose class:

The quality of an Aged Brie item increases over time.
The quality of a Backstage passes to a TAFKAL80ETC concert item
increases over time, then zeroes out.
The quality of a normal item decreases over time.
This commit is contained in:
Dante Panella 2023-07-24 21:42:09 -03:00
parent ec373f2795
commit a016db7317
4 changed files with 111 additions and 47 deletions

View File

@ -24,6 +24,12 @@
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>

View File

@ -8,55 +8,43 @@ 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;
}
Item item = items[i];
if (item.name.equals("Aged Brie")) {
item.quality = Math.min(50, item.quality + 1);
if (item.sellIn < 10) {
item.quality = Math.min(50, item.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 (item.sellIn < 0) {
item.quality = Math.min(50, item.quality + 1);
}
} else if (item.name.equals("Backstage passes to a TAFKAL80ETC concert")) {
item.quality = Math.min(50, item.quality + 1);
if (items[i].sellIn < 6) {
if (items[i].quality < 50) {
items[i].quality = items[i].quality + 1;
}
}
}
if (item.sellIn < 11) {
item.quality = Math.min(50, item.quality + 2);
}
if (item.sellIn < 6) {
item.quality = Math.min(50, item.quality + 3);
}
if (item.sellIn < 0) {
item.quality = 0;
}
} else if (!item.name.equals("Sulfuras, Hand of Ragnaros")) {
item.quality = Math.max(0, item.quality - 1);
if (item.sellIn < 0) {
item.quality = Math.max(0, item.quality - 2);
}
}
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;
}
}
}
item.sellIn= Math.max(0, item.sellIn -1);;
}
}
}
}

View File

@ -1,12 +1,15 @@
package com.gildedrose;
import lombok.Data;
@Data
public class Item {
public String name;
String name;
public int sellIn;
int sellIn;
public int quality;
int quality;
public Item(String name, int sellIn, int quality) {
this.name = name;

View File

@ -11,7 +11,74 @@ class GildedRoseTest {
Item[] items = new Item[] { new Item("foo", 0, 0) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals("fixme", app.items[0].name);
assertEquals("foo", app.items[0].name);
}
@Test
public void agedBrieQualityIncreasesOverTime() {
Item agedBrie = new Item("Aged Brie", 10, 10);
GildedRose gildedRose = new GildedRose(new Item[]{agedBrie});
gildedRose.updateQuality();
assertEquals(11, agedBrie.quality);
}
@Test
public void backstagePassesQualityIncreasesOverTimeThenZeroesOut() {
Item backstagePasses = new Item("Backstage passes to a TAFKAL80ETC concert", 10, 10);
GildedRose gildedRose = new GildedRose(new Item[]{backstagePasses});
gildedRose.updateQuality();
assertEquals(13, backstagePasses.quality);
gildedRose.updateQuality();
assertEquals(16, backstagePasses.quality);
gildedRose.updateQuality();
assertEquals(19, backstagePasses.quality);
gildedRose.updateQuality();
assertEquals(22, backstagePasses.quality);
}
@Test
public void normalItemQualityDecreasesOverTime() {
Item normalItem = new Item("Conjured Mana Cake", 10, 10);
GildedRose gildedRose = new GildedRose(new Item[]{normalItem});
gildedRose.updateQuality();
assertEquals(9, normalItem.quality);
}
@Test
public void testUpdateQuality() {
Item[] items = new Item[]{
new Item("+5 Dexterity Vest", 10, 20),
new Item("Aged Brie", 2, 0),
new Item("Elixir of the Mongoose", 5, 7),
new Item("Sulfuras, Hand of Ragnaros", 0, 80),
new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20),
new Item("Conjured Mana Cake", 3, 6)
};
GildedRose gildedRose = new GildedRose(items);
gildedRose.updateQuality();
assertEquals(9, gildedRose.items[0].sellIn);
assertEquals(19, gildedRose.items[0].quality);
assertEquals(1, gildedRose.items[1].sellIn);
assertEquals(2, gildedRose.items[1].quality);
assertEquals(4, gildedRose.items[2].sellIn);
assertEquals(6, gildedRose.items[2].quality);
assertEquals(0, gildedRose.items[3].sellIn);
assertEquals(80, gildedRose.items[3].quality);
assertEquals(14, gildedRose.items[4].sellIn);
assertEquals(21, gildedRose.items[4].quality);
assertEquals(2, gildedRose.items[5].sellIn);
assertEquals(5, gildedRose.items[5].quality);
}
}