diff --git a/swift/Tests/GildedRoseTests/BaseRules.swift b/swift/Tests/GildedRoseTests/BaseRules.swift new file mode 100644 index 00000000..60f4ad08 --- /dev/null +++ b/swift/Tests/GildedRoseTests/BaseRules.swift @@ -0,0 +1,45 @@ +// +// BaseRules.swift +// GildedRose +// +// Created by Lucas van Dongen on 23/11/2020. +// + +@testable import GildedRose +import XCTest + +class BaseRules: XCTestCase { + private let testItem = Item(name: "Test Item", sellIn: 3, quality: 5) + + //- All items have a SellIn value which denotes the number of days we have to sell the item + func testSellInTest() { + let itemMirror = Mirror(reflecting: testItem) + let hasSellIn = itemMirror.children.contains { (child: (label: String?, _: Any)) -> Bool in + child.label == "sellIn" + } + + XCTAssertTrue(hasSellIn, "`sellIn` was not a member of `Item`") + } + + //- All items have a Quality value which denotes how valuable the item is + func testQualityValue() { + let itemMirror = Mirror(reflecting: testItem) + let hasSellIn = itemMirror.children.contains { (child: (label: String?, _: Any)) -> Bool in + child.label == "quality" + } + + XCTAssertTrue(hasSellIn, "`quality` was not a member of `Item`") + } + + //- At the end of each day our system lowers both values for every item + func testLowerValueEveryItem() { + let initialSellIn = testItem.sellIn + let initialQuality = testItem.quality + + let system = GildedRose(items: [testItem]) + system.updateQuality() + + XCTAssertLessThan(system.items.first!.sellIn, initialSellIn) + XCTAssertLessThan(system.items.first!.quality, initialQuality) + } +}