diff --git a/swift/Tests/GildedRoseTests/GildedRoseBackstageTests.swift b/swift/Tests/GildedRoseTests/GildedRoseBackstageTests.swift new file mode 100644 index 00000000..39fbcd7c --- /dev/null +++ b/swift/Tests/GildedRoseTests/GildedRoseBackstageTests.swift @@ -0,0 +1,48 @@ +// +// GildedRoseBackstageTests.swift +// +// +// Created by Murat Bataray on 09/02/2023. +// + +@testable import GildedRose +import XCTest + +class GildedRoseBackstageTests: XCTestCase { + func test_updateQuality_backstagePassQuality_shouldIncreaseOnceInQualityWhenMoreThan10DaysRemaining() throws { + let items = [Item(name: "Backstage passes to a TAFKAL80ETC concert", sellIn: 15, quality: 1)] + let app = GildedRose(items: items) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 2) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 3) + } + + func test_updateQuality_backstagePassQuality_shouldIncreaseByTwoInQualityWhenLessThan10DaysRemaining() throws { + let items = [Item(name: "Backstage passes to a TAFKAL80ETC concert", sellIn: 9, quality: 1)] + let app = GildedRose(items: items) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 3) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 5) + } + + func test_updateQuality_backstagePassQuality_shouldIncreaseByThreeInQualityWhenLessThan5DaysRemaining() throws { + let items = [Item(name: "Backstage passes to a TAFKAL80ETC concert", sellIn: 5, quality: 1)] + let app = GildedRose(items: items) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 4) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 7) + } + + func test_updateQuality_backstagePassQuality_shouldBeZeroWhenSellByDateHasPassed() throws { + let items = [Item(name: "Backstage passes to a TAFKAL80ETC concert", sellIn: 0, quality: 1)] + let app = GildedRose(items: items) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 0) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 0) + } +} + diff --git a/swift/Tests/GildedRoseTests/GildedRoseBrieTests.swift b/swift/Tests/GildedRoseTests/GildedRoseBrieTests.swift new file mode 100644 index 00000000..0fdc0c4a --- /dev/null +++ b/swift/Tests/GildedRoseTests/GildedRoseBrieTests.swift @@ -0,0 +1,21 @@ +// +// GildedRoseBrieTests.swift +// +// +// Created by Murat Bataray on 09/02/2023. +// + +@testable import GildedRose +import XCTest + +class GildedRoseBrieTests: XCTestCase { + func test_updateQuality_agedBrieQuality_increasesInAgeAfterSellByDate() throws { + let items = [Item(name: "Aged Brie", sellIn: 1, quality: 4)] + let app = GildedRose(items: items) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 5) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 7) + } +} + diff --git a/swift/Tests/GildedRoseTests/GildedRoseConjuredTests.swift b/swift/Tests/GildedRoseTests/GildedRoseConjuredTests.swift new file mode 100644 index 00000000..7408d8e1 --- /dev/null +++ b/swift/Tests/GildedRoseTests/GildedRoseConjuredTests.swift @@ -0,0 +1,22 @@ +// +// GildedRoseConjuredTests.swift +// +// +// Created by Murat Bataray on 09/02/2023. +// + +@testable import GildedRose +import XCTest + +class GildedRoseConjuredTests: XCTestCase { + func test_updateQuality_conjuredItemQuality_shouldDegradeTwiceAsFastAfterSellByDate() throws { + let items = [Item(name: "Conjured item", sellIn: 1, quality: 15)] + let app = GildedRose(items: items) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 13) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 9) + } +} + + diff --git a/swift/Tests/GildedRoseTests/GildedRoseSulfurasTests.swift b/swift/Tests/GildedRoseTests/GildedRoseSulfurasTests.swift new file mode 100644 index 00000000..a65feb7c --- /dev/null +++ b/swift/Tests/GildedRoseTests/GildedRoseSulfurasTests.swift @@ -0,0 +1,30 @@ +// +// GildedRoseSulfurasTests.swift +// +// +// Created by Murat Bataray on 09/02/2023. +// + +@testable import GildedRose +import XCTest + +class GildedRoseSulfurasTests: XCTestCase { + func test_updateQuality_sulfurasQuality_shouldntHaveSellDate() throws { + let items = [Item(name: "Sulfuras, Hand of Ragnaros", sellIn: 0, quality: 1)] + let app = GildedRose(items: items) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 1) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 1) + } + + func test_updateQuality_sulfurasQuality_shouldntDecreaseInQuality() throws { + let items = [Item(name: "Sulfuras, Hand of Ragnaros", sellIn: 1, quality: 1)] + let app = GildedRose(items: items) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 1) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 1) + } + +} diff --git a/swift/Tests/GildedRoseTests/GildedRoseTests.swift b/swift/Tests/GildedRoseTests/GildedRoseTests.swift index 62bde8f1..a19daa2d 100644 --- a/swift/Tests/GildedRoseTests/GildedRoseTests.swift +++ b/swift/Tests/GildedRoseTests/GildedRoseTests.swift @@ -2,10 +2,39 @@ import XCTest class GildedRoseTests: XCTestCase { - func testFoo() throws { - let items = [Item(name: "foo", sellIn: 0, quality: 0)] + func test_updateQuality_itemSellIn_shouldDecreaseAfterCallingFunction() throws { + let items = [Item(name: "foo", sellIn: 5, quality: 5)] let app = GildedRose(items: items) app.updateQuality() - XCTAssertEqual(app.items[0].name, "foo") + XCTAssertEqual(app.items[0].quality, 4) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 3) + } + + func test_updateQuality_itemQuality_shouldDegradeTwiceAsFastAfterPassingSellByDate() throws { + let items = [Item(name: "foo", sellIn: 0, quality: 5)] + let app = GildedRose(items: items) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 3) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 1) + } + + func test_updateQuality_itemQuality_shouldntBecomeNegativeAfterPassingSellByDate() throws { + let items = [Item(name: "foo", sellIn: 0, quality: 1)] + let app = GildedRose(items: items) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 0) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 0) + } + + func test_updateQuality_itemQuality_shouldntGoAbove50() throws { + let items = [Item(name: "Aged Brie", sellIn: 1, quality: 49)] + let app = GildedRose(items: items) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 50) + app.updateQuality() + XCTAssertEqual(app.items[0].quality, 50) } }