From 2141835ebd23df86afaa953c9267059b9f627ddc Mon Sep 17 00:00:00 2001 From: khoovis Date: Wed, 11 Sep 2019 20:03:00 +0100 Subject: [PATCH 1/2] swift version of the kata --- swift/.DS_Store | Bin 0 -> 6148 bytes .../project.pbxproj | 479 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 30800 bytes .../xcschemes/xcschememanagement.plist | 14 + .../Info.plist | 24 + .../Invoice.swift | 8 + .../Performance.swift | 8 + .../Play.swift | 7 + .../StatementPrinter.swift | 56 ++ .../Theatrical_Players_Refactoring_Kata.h | 19 + .../Info.plist | 22 + .../StatementPrinterTests.swift | 54 ++ 14 files changed, 706 insertions(+) create mode 100644 swift/.DS_Store create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/project.pbxproj create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/project.xcworkspace/xcuserdata/khoovis.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/xcuserdata/khoovis.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Info.plist create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Invoice.swift create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Performance.swift create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Play.swift create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/StatementPrinter.swift create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Theatrical_Players_Refactoring_Kata.h create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-KataTests/Info.plist create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-KataTests/StatementPrinterTests.swift diff --git a/swift/.DS_Store b/swift/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 + + + + diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/project.xcworkspace/xcuserdata/khoovis.xcuserdatad/UserInterfaceState.xcuserstate b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/project.xcworkspace/xcuserdata/khoovis.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..05dc5841be8895dd2358ca6c57c1ae4afdd2cc35 GIT binary patch literal 30800 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

pdwHe7!?>DI3zGOa718sU`}9OU~yn+pe9fo zSQBUuz&(M*W1wB)Vm_YBcwx!G$b&jXGpJ*kPuZ!R7iA4zmWbR149ZzrhtX);gAy{?}vO4 zaysPWkgFlrLavA04EZ+XyO8fg?uPsx@<*t9sCTF&)Hk$4Xs6IFq1{3wLZd_bf=%tf z(BYvYL)D?Vq4}YOp}J5*s427}bW~_%=*-YG?!)G$8msjz3l z8p7TUyA|#k?ib!6yi<6W@Sfqaa7DN(JSsdoykB_#@Z|8c@Dbse;W^=X;RWGEVAoq2 zUKc(s{OR!N;m?N83SSWZV))|lrQyrL-gjU4l?WyxC?X<45uu8RiWn4;6frC!B_b_i zL_}u9$Ov^rd4w^-9AN>Q;F<_qgd^gqh-V_^M=XzcDPmus*F=6D3g@Klm*HnWr?y(S+3M64N8-;LODw5P)=1Y zQEpQnRbEowRe7lVRUK4=R0*m?m0DGlniR=*BDY8psx5%E6y&^-vwmKp*H}a{-ZIOE--;BH#`9tJyk@qA2 zjQl&wCCV+zBg!kvJE}uer>GuL5m8Z5(NX=P`bWh^#YZKAE%xxJw5TyrQ=*=Unh`ZK zYIfB8sD)9BqLxH0i&`DEDeCp8{i(^R!&675YEn(9RjCtFXQa+dot^qz>fF>9QWvDI zN^MA8le#W-L+Yl~EvZ{m&!+yG7MPZvmXVg9rb(+v82Ic=Oh1+WVfvX7<3~I*V#bJ>BW7oWW%SGFpD{3Fa3-7So9UP7 zpV=vMPv+a1$1;y+p3It_wIHh@Yi-tstj$?lvtG;Ek+nPPovhPod$4WFY^k5!LXPgGA)^XjM6!AH>!85PpL1dzt8c_>6OzzCpAZtQFE!JhymF@%rLT z#jg~-NCm+UQhr{sf@GbQIsE|z>!@>R+8l5a|Gm3&`vx8(Oy-_mYi zvEQe3aA|C5LTPeoN@;d!PHA3gL1|HGN$G^r#ijd7&z4>(y;}Np>CMtxrMJtdGS4ze zS-Ud-vW{iJWf5hHvdFUNvO#4-%i_us%aY4-%Cu#UvdLxB%NCR^D|@MIRoUvYO=Yi? zZ7bVewxjHgvSVfE%04Rlxa_mC&&$3jyQiTvw1&~RXxeG~HJvnFH9a%|nrO`sO@by_ zlcGt}6lgRWoyMrC&{#D#jYBg|Q>S@KGe@&jvr4mCvre;7^Qz``%}&i8%|6XZ&3Vn2 znr}6?HFq^XX?`h3<#f4AxqG=+xp%p$JhNP1{#5zA@|EQcs)m1I!~QSH$<1D8?H;!W$1Es1-fEgnXX)?)y>c?)GgL6)4ilyrEAb_({0!7)a}vj z*B#WI(7mtwPW}G<>o4dp=|9zf zuK!a1mHrQdyTQxQ*5GSsZ|Go98HO872D@RF;W@)R!ve!1!&1Wv!%9PgVXa|=LT@mCWzxtQ9S{7s!qT}?eq0j4BVhAGoD(o|;Bn@lE)soGRyvY8yFIi{_q{iZie zhfPOK$4tjfXH1t&pPD{5eQEm2bl3E&>AvYNGd8=KJG{>8h%)`xT z=4^AWIp17lE-{ZX+s&MLhIy9xIrBX8V)HWd3iC>Hy?KZEp!tOPee;Lrv*z>WkIeVX fe^rK7hF1=*jIShq>+p}F#J}v1;$P?Q%GCb_rT$p0 literal 0 HcmV?d00001 diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/xcuserdata/khoovis.xcuserdatad/xcschemes/xcschememanagement.plist b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/xcuserdata/khoovis.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..9f679f8 --- /dev/null +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/xcuserdata/khoovis.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + Theatrical-Players-Refactoring-Kata.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Info.plist b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Info.plist new file mode 100644 index 0000000..1e1ee91 --- /dev/null +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSHumanReadableCopyright + Copyright © 2019 kata. All rights reserved. + + diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Invoice.swift b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Invoice.swift new file mode 100644 index 0000000..06ed6a5 --- /dev/null +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Invoice.swift @@ -0,0 +1,8 @@ +struct Invoice { + let customer: String + let performances: [Performance] + init(_ customer: String, _ performances: Array) { + self.customer = customer + self.performances = performances + } +} diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Performance.swift b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Performance.swift new file mode 100644 index 0000000..690118c --- /dev/null +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Performance.swift @@ -0,0 +1,8 @@ +struct Performance { + let playID: String + let audience: Int + init(_ playID: String, _ audience: Int) { + self.playID = playID + self.audience = audience + } +} diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Play.swift b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Play.swift new file mode 100644 index 0000000..1069c21 --- /dev/null +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Play.swift @@ -0,0 +1,7 @@ +struct Play { + let name, type: String + init(_ name: String, _ type: String) { + self.name = name + self.type = type + } +} diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/StatementPrinter.swift b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/StatementPrinter.swift new file mode 100644 index 0000000..6b204cb --- /dev/null +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/StatementPrinter.swift @@ -0,0 +1,56 @@ +class StatementPrinter { + func print(_ invoice: Invoice, _ plays: Dictionary) throws -> String { + var totalAmount = 0 + var volumeCredits = 0 + var result = "Statement for \(invoice.customer)\n" + + let frmt = NumberFormatter() + frmt.numberStyle = .currency + frmt.locale = Locale(identifier: "en_US") + + for performance in invoice.performances { + var thisAmount = 0 + guard let play = plays[performance.playID] else { + throw UnknownTypeError.unknownTypeError("unknown play") + } + + switch (play.type) { + case "tragedy" : + thisAmount = 40000 + if (performance.audience > 30) { + thisAmount += 1000 * (performance.audience - 30) + } + + case "comedy" : + thisAmount = 30000 + if (performance.audience > 20) { + thisAmount += 10000 + 500 * (performance.audience - 20) + } + thisAmount += 300 * performance.audience + + default : throw UnknownTypeError.unknownTypeError("unknown type: \(play.type)") + } + + // add volume credits + volumeCredits += max(performance.audience - 30, 0) + // add extra credit for every ten comedy attendees + if ("comedy" == play.type) { + volumeCredits += Int(round(Double(performance.audience / 5))) + } + + // print line for this order + result += " \(play.name): \(frmt.string(for: NSNumber(value: Double((thisAmount / 100))))!) (\(performance.audience) seats)\n" + + totalAmount += thisAmount + } + result += "Amount owed is \(frmt.string(for: NSNumber(value: Double(totalAmount / 100)))!)\n" + result += "You earned \(volumeCredits) credits\n" + return result + } +} + +enum UnknownTypeError: Error { + case unknownTypeError(String) +} + +// TODO: get test to pass and coverage, destructure performance object in for loop diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Theatrical_Players_Refactoring_Kata.h b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Theatrical_Players_Refactoring_Kata.h new file mode 100644 index 0000000..ed024b5 --- /dev/null +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Theatrical_Players_Refactoring_Kata.h @@ -0,0 +1,19 @@ +// +// Theatrical_Players_Refactoring_Kata.h +// Theatrical-Players-Refactoring-Kata +// +// Created by Khoovi Seewoonauth on 10/09/2019. +// Copyright © 2019 kata. All rights reserved. +// + +#import + +//! Project version number for Theatrical_Players_Refactoring_Kata. +FOUNDATION_EXPORT double Theatrical_Players_Refactoring_KataVersionNumber; + +//! Project version string for Theatrical_Players_Refactoring_Kata. +FOUNDATION_EXPORT const unsigned char Theatrical_Players_Refactoring_KataVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-KataTests/Info.plist b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-KataTests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-KataTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-KataTests/StatementPrinterTests.swift b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-KataTests/StatementPrinterTests.swift new file mode 100644 index 0000000..1fb37bd --- /dev/null +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-KataTests/StatementPrinterTests.swift @@ -0,0 +1,54 @@ + +import XCTest +@testable import Theatrical_Players_Refactoring_Kata + +class StatementPrinterTests: XCTestCase { + func test_exampleStatement() throws { + + let expected = """ + Statement for BigCo + Hamlet: $650.00 (55 seats) + As You Like It: $580.00 (35 seats) + Othello: $500.00 (40 seats) + Amount owed is $1,730.00 + You earned 47 credits + """ + + let plays = [ + "hamlet": Play("Hamlet", "tragedy"), + "as-like": Play("As You Like It", "comedy"), + "othello": Play("Othello", "tragedy") + ] + + let invoice = Invoice( + "BigCo", [ + Performance("hamlet", 55), + Performance("as-like", 35), + Performance("othello", 40) + ] + ) + + let statementPrinter = StatementPrinter() + let result = try statementPrinter.print(invoice, plays) + + XCTAssertEqual(expected, result) + } + + func test_statementWithNewPlayTypes() { + let plays = [ + "henry-v": Play("Henry V", "history"), + "as-like": Play("As You Like It", "pastoral") + ] + + let invoice = Invoice( + "BigCo", [ + Performance("henry-v", 53), + Performance("as-like", 55) + ] + ) + + let statementPrinter = StatementPrinter() + XCTAssertThrowsError(try statementPrinter.print(invoice, plays)) + } +} + From b1707bc029872594011a579894e66aee49e488da Mon Sep 17 00:00:00 2001 From: khoovis Date: Thu, 12 Sep 2019 20:21:08 +0100 Subject: [PATCH 2/2] converted kata to swift --- .../UserInterfaceState.xcuserstate | Bin 30800 -> 34281 bytes ...eatrical-Players-Refactoring-Kata.xcscheme | 100 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 13 +++ .../Invoice.swift | 4 - .../Performance.swift | 4 - .../Play.swift | 4 - .../StatementPrinter.swift | 2 - .../StatementPrinterTests.swift | 33 +++--- 8 files changed, 130 insertions(+), 30 deletions(-) create mode 100644 swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/xcshareddata/xcschemes/Theatrical-Players-Refactoring-Kata.xcscheme diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/project.xcworkspace/xcuserdata/khoovis.xcuserdatad/UserInterfaceState.xcuserstate b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/project.xcworkspace/xcuserdata/khoovis.xcuserdatad/UserInterfaceState.xcuserstate index 05dc5841be8895dd2358ca6c57c1ae4afdd2cc35..5295f3db473a7eedc59695a55480a92fb2bde656 100644 GIT binary patch delta 14267 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 L&7t + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/xcuserdata/khoovis.xcuserdatad/xcschemes/xcschememanagement.plist b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/xcuserdata/khoovis.xcuserdatad/xcschemes/xcschememanagement.plist index 9f679f8..e4fa6d0 100644 --- a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/xcuserdata/khoovis.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata.xcodeproj/xcuserdata/khoovis.xcuserdatad/xcschemes/xcschememanagement.plist @@ -10,5 +10,18 @@ 0 + SuppressBuildableAutocreation + + 104F7D7323282F2900665957 + + primary + + + 104F7D7C23282F2900665957 + + primary + + + diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Invoice.swift b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Invoice.swift index 06ed6a5..807e0bf 100644 --- a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Invoice.swift +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Invoice.swift @@ -1,8 +1,4 @@ struct Invoice { let customer: String let performances: [Performance] - init(_ customer: String, _ performances: Array) { - self.customer = customer - self.performances = performances - } } diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Performance.swift b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Performance.swift index 690118c..2cc88ae 100644 --- a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Performance.swift +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Performance.swift @@ -1,8 +1,4 @@ struct Performance { let playID: String let audience: Int - init(_ playID: String, _ audience: Int) { - self.playID = playID - self.audience = audience - } } diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Play.swift b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Play.swift index 1069c21..977e865 100644 --- a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Play.swift +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/Play.swift @@ -1,7 +1,3 @@ struct Play { let name, type: String - init(_ name: String, _ type: String) { - self.name = name - self.type = type - } } diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/StatementPrinter.swift b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/StatementPrinter.swift index 6b204cb..c5781ec 100644 --- a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/StatementPrinter.swift +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-Kata/StatementPrinter.swift @@ -52,5 +52,3 @@ class StatementPrinter { enum UnknownTypeError: Error { case unknownTypeError(String) } - -// TODO: get test to pass and coverage, destructure performance object in for loop diff --git a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-KataTests/StatementPrinterTests.swift b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-KataTests/StatementPrinterTests.swift index 1fb37bd..b80d78c 100644 --- a/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-KataTests/StatementPrinterTests.swift +++ b/swift/Theatrical-Players-Refactoring-Kata/Theatrical-Players-Refactoring-KataTests/StatementPrinterTests.swift @@ -7,43 +7,44 @@ class StatementPrinterTests: XCTestCase { let expected = """ Statement for BigCo - Hamlet: $650.00 (55 seats) - As You Like It: $580.00 (35 seats) - Othello: $500.00 (40 seats) + Hamlet: $650.00 (55 seats) + As You Like It: $580.00 (35 seats) + Othello: $500.00 (40 seats) Amount owed is $1,730.00 You earned 47 credits + """ let plays = [ - "hamlet": Play("Hamlet", "tragedy"), - "as-like": Play("As You Like It", "comedy"), - "othello": Play("Othello", "tragedy") + "hamlet": Play(name: "Hamlet", type: "tragedy"), + "as-like": Play(name: "As You Like It", type: "comedy"), + "othello": Play(name: "Othello", type: "tragedy") ] let invoice = Invoice( - "BigCo", [ - Performance("hamlet", 55), - Performance("as-like", 35), - Performance("othello", 40) + customer: "BigCo", performances: [ + Performance(playID: "hamlet", audience: 55), + Performance(playID: "as-like", audience: 35), + Performance(playID: "othello", audience: 40) ] ) let statementPrinter = StatementPrinter() let result = try statementPrinter.print(invoice, plays) - XCTAssertEqual(expected, result) + XCTAssertEqual(result, expected) } func test_statementWithNewPlayTypes() { let plays = [ - "henry-v": Play("Henry V", "history"), - "as-like": Play("As You Like It", "pastoral") + "henry-v": Play(name: "Henry V", type: "history"), + "as-like": Play(name: "As You Like It", type: "pastoral") ] let invoice = Invoice( - "BigCo", [ - Performance("henry-v", 53), - Performance("as-like", 55) + customer: "BigCo", performances: [ + Performance(playID: "henry-v", audience: 53), + Performance(playID: "as-like", audience: 55) ] )