From e56ad58eb4343e0e0217a23451871369c8736762 Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Sat, 11 Mar 2023 05:03:29 -0500 Subject: [PATCH 01/14] gradlew executable --- Java-Spock/gradlew | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 Java-Spock/gradlew diff --git a/Java-Spock/gradlew b/Java-Spock/gradlew old mode 100644 new mode 100755 From 9d46b5dc6fd0c79824bd8be55f8472b224ef9855 Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Sat, 11 Mar 2023 05:06:34 -0500 Subject: [PATCH 02/14] Fix test --- Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index 04276c036a..4548aa329d 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -19,7 +19,7 @@ class GildedRoseSpec extends Specification { app.updateQuality(); then: "the quality is correct" - app.items[0].name == "fixme" + app.items[0].name == "foo" } } From 94eaad7f9993a1d9e2ddbe4f8d4e59a60af40931 Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Sat, 11 Mar 2023 05:18:41 -0500 Subject: [PATCH 03/14] Add requirements to spec --- .../groovy/com/gildedrose/GildedRoseSpec.groovy | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index 4548aa329d..a4cb515362 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -8,7 +8,6 @@ import spock.lang.Specification class GildedRoseSpec extends Specification { def "should update quality correctly"() { - given: "some items" Item[] items = [new Item("foo", 0, 0)]; @@ -22,4 +21,20 @@ class GildedRoseSpec extends Specification { app.items[0].name == "foo" } +//- All items have a SellIn value which denotes the number of days we have to sell the item +//- All items have a Quality value which denotes how valuable the item is +//- At the end of each day, our system lowers both values for every item +//- Once the sell by date has passed, quality degrades twice as fast +//- The quality of an item is never negative +//- "Aged Brie" actually increases in Quality the older it gets +//- The quality of an item is never more than 50 +// - except Sulfuras +//- "Sulfuras", being a legendary item, never has to be sold or decreases in Quality +// - has a quality of 80 +// - quality never alters +//- "Backstage passes" +// - like aged brie, increases in Quality as its SellIn value approaches +// - Quality increases by 2 when there are 10 days or less +// - increases by 3 when there are 5 days or less +// - drops to 0 after the concert } From b1e534d97bf5a5f1b8006b8e682dec66b193f50e Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Sat, 11 Mar 2023 05:23:20 -0500 Subject: [PATCH 04/14] Update spec --- .../src/test/groovy/com/gildedrose/GildedRoseSpec.groovy | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index a4cb515362..4419c2661f 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -7,7 +7,9 @@ import spock.lang.Specification */ class GildedRoseSpec extends Specification { - def "should update quality correctly"() { + /* STANDARD ITEMS */ + + def "should preserve item name"() { given: "some items" Item[] items = [new Item("foo", 0, 0)]; From 7bd43a268a787425882264cf56be4d24020c1336 Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Sat, 11 Mar 2023 05:24:02 -0500 Subject: [PATCH 05/14] cleanup spec --- .../src/test/groovy/com/gildedrose/GildedRoseSpec.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index 4419c2661f..af1a2aae2b 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -10,7 +10,7 @@ class GildedRoseSpec extends Specification { /* STANDARD ITEMS */ def "should preserve item name"() { - given: "some items" + given: "an item" Item[] items = [new Item("foo", 0, 0)]; and: "the application with these items" @@ -19,7 +19,7 @@ class GildedRoseSpec extends Specification { when: "updating quality" app.updateQuality(); - then: "the quality is correct" + then: "the name is correct" app.items[0].name == "foo" } From 31c51b37ce2c775c763fb6131e05be74bd5155fe Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Sat, 11 Mar 2023 05:31:09 -0500 Subject: [PATCH 06/14] standard item quality reduces by 1 --- .../groovy/com/gildedrose/GildedRoseSpec.groovy | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index af1a2aae2b..48834b07d0 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -23,6 +23,20 @@ class GildedRoseSpec extends Specification { app.items[0].name == "foo" } + def "decrease item quality by 1 up to sell-by date for standard items"() { + given: "a standard item in inventory" + Item standardItem = new Item("nothing special", 100, 20) + GildedRose app = new GildedRose([ + standardItem + ] as Item[]) + + when: "updating quality" + app.updateQuality() + + then: "quality reduced by 1" + standardItem.quality == 19 + } + //- All items have a SellIn value which denotes the number of days we have to sell the item //- All items have a Quality value which denotes how valuable the item is //- At the end of each day, our system lowers both values for every item From 76873ca8a1777f4ca0ae208ba8c2b11321b6724e Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Sat, 11 Mar 2023 05:44:29 -0500 Subject: [PATCH 07/14] Add zero quality test --- .../groovy/com/gildedrose/GildedRoseSpec.groovy | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index 48834b07d0..432cf89c8d 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -37,6 +37,20 @@ class GildedRoseSpec extends Specification { standardItem.quality == 19 } + def "item quality never decreases past zero"() { + given: "a zero-quality item" + Item zeroQuality = new Item("nothing special", 100, 0) + GildedRose app = new GildedRose([ + zeroQuality + ] as Item[]) + + when: "updating quality" + app.updateQuality() + + then: "quality reduced by 1" + zeroQuality.quality == 0 + } + //- All items have a SellIn value which denotes the number of days we have to sell the item //- All items have a Quality value which denotes how valuable the item is //- At the end of each day, our system lowers both values for every item From faf36db3810122cab4b63abc4904bfdeaf62f8bc Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Sat, 11 Mar 2023 05:59:07 -0500 Subject: [PATCH 08/14] Refactor tests --- .../com/gildedrose/GildedRoseSpec.groovy | 40 ++++++++++++------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index 432cf89c8d..2f43bed894 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -10,39 +10,34 @@ class GildedRoseSpec extends Specification { /* STANDARD ITEMS */ def "should preserve item name"() { - given: "an item" - Item[] items = [new Item("foo", 0, 0)]; - - and: "the application with these items" - GildedRose app = new GildedRose(items); + given: "the application any item" + GildedRose app = inventory( + anItem(name: 'something', quality: 100, sellIn: 20) + ) when: "updating quality" app.updateQuality(); then: "the name is correct" - app.items[0].name == "foo" + app.items[0].name == 'something' } def "decrease item quality by 1 up to sell-by date for standard items"() { given: "a standard item in inventory" - Item standardItem = new Item("nothing special", 100, 20) - GildedRose app = new GildedRose([ - standardItem - ] as Item[]) + Item standardItem = anItem(quality: 100, sellIn: 20) + GildedRose app = inventory(standardItem) when: "updating quality" app.updateQuality() then: "quality reduced by 1" - standardItem.quality == 19 + standardItem.quality == 99 } def "item quality never decreases past zero"() { given: "a zero-quality item" - Item zeroQuality = new Item("nothing special", 100, 0) - GildedRose app = new GildedRose([ - zeroQuality - ] as Item[]) + Item zeroQuality = anItem(quality: 0, sellIn: 20) + GildedRose app = inventory(zeroQuality) when: "updating quality" app.updateQuality() @@ -51,6 +46,21 @@ class GildedRoseSpec extends Specification { zeroQuality.quality == 0 } + static GildedRose inventory(Item... items) { + new GildedRose(items) + } + + static Item anItem(Map args) { + String name = args.get('name', 'nothing special') + int quality = args.get('quality') + int sellIn = args.get('sellIn') + + assert quality != null : "missing quality for item" + assert sellIn != null : "missing sellIn for item" + + new Item(name, sellIn, quality) + } + //- All items have a SellIn value which denotes the number of days we have to sell the item //- All items have a Quality value which denotes how valuable the item is //- At the end of each day, our system lowers both values for every item From 9003e24d74c39403b3c3cebbc4d969e49e56e2ab Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Sat, 11 Mar 2023 06:05:25 -0500 Subject: [PATCH 09/14] refactor tests --- .../com/gildedrose/GildedRoseSpec.groovy | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index 2f43bed894..429d0b50f3 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -19,10 +19,10 @@ class GildedRoseSpec extends Specification { app.updateQuality(); then: "the name is correct" - app.items[0].name == 'something' + onlyItemIn(app).name == 'something' } - def "decrease item quality by 1 up to sell-by date for standard items"() { + def "decrease item quality and sellIn by 1 up to sell-by date for standard items"() { given: "a standard item in inventory" Item standardItem = anItem(quality: 100, sellIn: 20) GildedRose app = inventory(standardItem) @@ -32,6 +32,7 @@ class GildedRoseSpec extends Specification { then: "quality reduced by 1" standardItem.quality == 99 + standardItem.sellIn == 19 } def "item quality never decreases past zero"() { @@ -46,6 +47,18 @@ class GildedRoseSpec extends Specification { zeroQuality.quality == 0 } + def "item sellIn can go negative"() { + given: "an item that expires tomorrow" + Item expiredItem = anItem(quality: 100, sellIn: 0) + GildedRose app = inventory(expiredItem) + + when: "updating quality" + app.updateQuality() + + then: "sellIn reduced to -1" + expiredItem.sellIn == -1 + } + static GildedRose inventory(Item... items) { new GildedRose(items) } @@ -61,6 +74,12 @@ class GildedRoseSpec extends Specification { new Item(name, sellIn, quality) } + static Item onlyItemIn(GildedRose inventory) { + assert inventory.items.size() == 1 + + inventory.items[0] + } + //- All items have a SellIn value which denotes the number of days we have to sell the item //- All items have a Quality value which denotes how valuable the item is //- At the end of each day, our system lowers both values for every item From 17a2b6343beb58d18d7c3b2e549a250bfae124d8 Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Fri, 24 Mar 2023 14:24:05 -0400 Subject: [PATCH 10/14] Add pending tests --- .../test/groovy/com/gildedrose/GildedRoseSpec.groovy | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index 429d0b50f3..422b77dc69 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -1,6 +1,7 @@ package com.gildedrose import spock.lang.Specification +import spock.lang.PendingFeature /** * Spock unit tests. @@ -35,7 +36,7 @@ class GildedRoseSpec extends Specification { standardItem.sellIn == 19 } - def "item quality never decreases past zero"() { + def "item quality never goes negative"() { given: "a zero-quality item" Item zeroQuality = anItem(quality: 0, sellIn: 20) GildedRose app = inventory(zeroQuality) @@ -59,6 +60,13 @@ class GildedRoseSpec extends Specification { expiredItem.sellIn == -1 } + @PendingFeature + def "expired items degrade in quality twice as fast"() { + } + + @PendingFeature + def + static GildedRose inventory(Item... items) { new GildedRose(items) } From 802233906ae82a31240831cf4f5026c3e2730800 Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Fri, 24 Mar 2023 14:25:48 -0400 Subject: [PATCH 11/14] Add pending tests --- .../groovy/com/gildedrose/GildedRoseSpec.groovy | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index 422b77dc69..3f44db994c 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -65,7 +65,20 @@ class GildedRoseSpec extends Specification { } @PendingFeature - def + def "aged brie increases in quality as it gets older"() { + } + + @PendingFeature + def "item quality never exceeds 50"() { + } + + @PendingFeature + def "legendary items never decrease in quality"() { + } + + @PendingFeature + def "legendary items never need to be sold"() { + } static GildedRose inventory(Item... items) { new GildedRose(items) From b27a21fad50f41fdff283491267eb5a357ebc067 Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Fri, 24 Mar 2023 14:32:44 -0400 Subject: [PATCH 12/14] Add more tests --- .../com/gildedrose/GildedRoseSpec.groovy | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index 3f44db994c..8b497ecba6 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -61,11 +61,15 @@ class GildedRoseSpec extends Specification { } @PendingFeature - def "expired items degrade in quality twice as fast"() { + def "expired standard items degrade in quality twice as fast"() { } @PendingFeature - def "aged brie increases in quality as it gets older"() { + def "non-legendary items has a maximum quality of 50"() { + } + + @PendingFeature + def "aged items increase in quality as they gets older"() { } @PendingFeature @@ -76,10 +80,34 @@ class GildedRoseSpec extends Specification { def "legendary items never decrease in quality"() { } + @PendingFeature + def "legendary items has a quality of 80"() { + } + @PendingFeature def "legendary items never need to be sold"() { } + @PendingFeature + def "event items increase in quality up to 11 days out"() { + } + + @PendingFeature + def "event items increase in quality twice as fast between 6 and 10 days out"() { + } + + @PendingFeature + def "event items increase in quality three-times as fast 5 days out through event day"() { + } + + @PendingFeature + def "event items have a quality of 0 after the event"() { + } + + @PendingFeature + def "conjured items degrade in quality twice as fast"() { + } + static GildedRose inventory(Item... items) { new GildedRose(items) } From cd92833c2f9d6d53273843f52f1b5898fcbcea24 Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Fri, 24 Mar 2023 14:41:06 -0400 Subject: [PATCH 13/14] expired items degrade 2x fast --- .../test/groovy/com/gildedrose/GildedRoseSpec.groovy | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index 8b497ecba6..229b206ead 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -60,8 +60,16 @@ class GildedRoseSpec extends Specification { expiredItem.sellIn == -1 } - @PendingFeature def "expired standard items degrade in quality twice as fast"() { + given: "an item that expires tomorrow" + Item expiredItem = anItem(quality: 50, sellIn: -1) + GildedRose app = inventory(expiredItem) + + when: "updating quality" + app.updateQuality() + + then: "quality reduces twice as fast" + expiredItem.quality == 48 } @PendingFeature From e80b68a88357587915c41bba408cc4324521861c Mon Sep 17 00:00:00 2001 From: Chris Kent Date: Fri, 24 Mar 2023 14:49:48 -0400 Subject: [PATCH 14/14] aged items increase in quality --- .../com/gildedrose/GildedRoseSpec.groovy | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy index 229b206ead..516753047d 100644 --- a/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy +++ b/Java-Spock/src/test/groovy/com/gildedrose/GildedRoseSpec.groovy @@ -72,12 +72,26 @@ class GildedRoseSpec extends Specification { expiredItem.quality == 48 } - @PendingFeature - def "non-legendary items has a maximum quality of 50"() { + def "aged items increase in quality as they get older"(int sellIn, int expectedQualityIncrease) { + given: "an aged item" + int initialQuality = 20 + Item expiredItem = anItem(name: "Aged Brie", quality: initialQuality, sellIn: sellIn) + GildedRose app = inventory(expiredItem) + + when: "updating quality" + app.updateQuality() + + then: "quality reduces twice as fast" + expiredItem.quality == initialQuality + expectedQualityIncrease + + where: + sellIn || expectedQualityIncrease + 20 || 1 + -1 || 2 } @PendingFeature - def "aged items increase in quality as they gets older"() { + def "non-legendary items has a maximum quality of 50"() { } @PendingFeature