From 2141835ebd23df86afaa953c9267059b9f627ddc Mon Sep 17 00:00:00 2001 From: khoovis Date: Wed, 11 Sep 2019 20:03:00 +0100 Subject: [PATCH] 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)) + } +} +