From 90aa4f8ad8fa948f03607c2cd636d4e246c34c49 Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 13:44:35 -0400 Subject: [PATCH 01/15] Update .gitignore --- .gitignore | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 73 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 9a36ce7..4ad3cd0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,78 @@ -Pods/ +# Created by https://www.gitignore.io/api/objective-c -.DS_Store -*.pbxuser +### Objective-C ### +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Build generated build/ +DerivedData + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 xcuserdata + +## Other *.xccheckout -VENCoreIntegrationTests/config.plist +*.moved-aside +*.xcuserstate +*.xcscmblueprint + +## Obj-C/Swift specific +*.hmap +*.ipa + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +Pods/ + +# Carthage +Carthage/Checkouts +Carthage/Build + +### Objective-C Patch ### +*.xcscmblueprint + +# Created by https://www.gitignore.io/api/osx + +### OSX ### +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +*.gcno + VENCore.xcworkspace From 6bf65a4f915b2447a50dc7680da87a2323475566 Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 13:45:54 -0400 Subject: [PATCH 02/15] Update to a framework from a static library This will introduce Carthage compatibility --- Cartfile | 1 + Cartfile.resolved | 2 + Podfile | 10 +- Podfile.lock | 26 +- VENCore.xcodeproj/project.pbxproj | 388 +++++++++------- .../xcshareddata/xcschemes/VENCore.xcscheme | 53 ++- VENCore/Info.plist | 26 ++ .../VENCreateTransactionRequest.m | 3 + VENCore/Models/Transactions/VENTransaction.m | 2 + .../Transactions/VENTransactionTarget.m | 3 + VENCore/Models/Users/VENUser.m | 4 +- VENCore/Networking/VENHTTP.m | 2 +- VENCore/VENCore.h | 20 +- .../VENCoreIntegrationTests-Info.plist | 2 +- .../VENCreateTransactionRequestSpec.m | 219 ++++----- VENCoreUnitTests/Models/Users/VENUserSpec.m | 282 ++++++------ VENCoreUnitTests/Networking/VENHTTPSpec.m | 423 ++++++++++-------- .../Utilities/EXPMatchers+Venmo.h | 4 +- .../Utilities/EXPMatchers+Venmo.m | 2 +- VENCoreUnitTests/VENCoreUnitTests-Info.plist | 2 +- 20 files changed, 814 insertions(+), 660 deletions(-) create mode 100644 Cartfile create mode 100644 Cartfile.resolved create mode 100644 VENCore/Info.plist diff --git a/Cartfile b/Cartfile new file mode 100644 index 0000000..83a859a --- /dev/null +++ b/Cartfile @@ -0,0 +1 @@ +github "calebd/CMDQueryStringSerialization" ~> 0.4 diff --git a/Cartfile.resolved b/Cartfile.resolved new file mode 100644 index 0000000..96d1dfa --- /dev/null +++ b/Cartfile.resolved @@ -0,0 +1,2 @@ +github "soffes/ISO8601" "v0.3.0" +github "calebd/CMDQueryStringSerialization" "v0.4.3" diff --git a/Podfile b/Podfile index 40dbde3..2760eb7 100644 --- a/Podfile +++ b/Podfile @@ -1,15 +1,13 @@ source 'https://github.com/CocoaPods/Specs.git' -inhibit_all_warnings! +platform :ios, '8.0' -target 'VENCore', :exclusive => true do - podspec -end +inhibit_all_warnings! target 'VENCoreUnitTests', :exclusive => true do pod 'Expecta' pod 'Nocilla' - pod 'OCMock' + pod 'OCMock', '~> 2.2' pod 'OCHamcrest' pod 'Specta' end @@ -17,7 +15,7 @@ end target 'VENCoreIntegrationTests', :exclusive => true do pod 'Expecta' pod 'Nocilla' - pod 'OCMock' + pod 'OCMock', '~> 2.2' pod 'OCHamcrest' pod 'Specta' end diff --git a/Podfile.lock b/Podfile.lock index 5fa2d91..5544056 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,28 +1,22 @@ PODS: - - CMDQueryStringSerialization (0.4.0): - - ISO8601 - - Expecta (0.3.0) - - ISO8601 (0.3.0) - - Nocilla (0.9.0) - - OCHamcrest (3.0.1) + - Expecta (1.0.3) + - Nocilla (0.10.0) + - OCHamcrest (4.3.0) - OCMock (2.2.4) - - Specta (0.2.1) + - Specta (1.0.4) DEPENDENCIES: - - CMDQueryStringSerialization (~> 0.4) - Expecta - Nocilla - OCHamcrest - - OCMock + - OCMock (~> 2.2) - Specta SPEC CHECKSUMS: - CMDQueryStringSerialization: 71bb5c0014147c55089964df23fd6e44316bd6f5 - Expecta: 917bda2935b63ca7175741b8cf1b26796db6205f - ISO8601: 8d8a22d5edf0554a1cf75bac028c76c1dc0ffaef - Nocilla: d7d96e8a11e363f0d7c976d48b320c43d61fb471 - OCHamcrest: e19857683e4eefab64b878668eac04c2f4567118 + Expecta: 9d1bff6c8b0eeee73a166a2ee898892478927a15 + Nocilla: ae0a2b05f3087b473624ac2b25903695df51246a + OCHamcrest: cd63d27f48a266d4412c0b295b01b8f0940efa81 OCMock: a6a7dc0e3997fb9f35d99f72528698ebf60d64f2 - Specta: 15a276a6343867b426d5ed135d5aa4d04123a573 + Specta: 69bb134672aae190a1379ff91df07dad8dd1f869 -COCOAPODS: 0.37.2 +COCOAPODS: 0.39.0 diff --git a/VENCore.xcodeproj/project.pbxproj b/VENCore.xcodeproj/project.pbxproj index f4ef2dd..b78dff8 100644 --- a/VENCore.xcodeproj/project.pbxproj +++ b/VENCore.xcodeproj/project.pbxproj @@ -7,19 +7,46 @@ objects = { /* Begin PBXBuildFile section */ - 3AE56FF0190871DF0054B7EF /* VENCreateTransactionRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AE56FEF190871DF0054B7EF /* VENCreateTransactionRequest.m */; }; + 26839E141BE11F82001651E8 /* CMDQueryStringSerialization.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E121BE11F82001651E8 /* CMDQueryStringSerialization.framework */; }; + 26839E151BE11F82001651E8 /* ISO8601.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E131BE11F82001651E8 /* ISO8601.framework */; }; + 26839E161BE12057001651E8 /* NSString+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB8E3C018FDDB6300A22C6B /* NSString+VENCore.m */; }; + 26839E171BE12057001651E8 /* NSDictionary+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EB418B9C18EB0E060003CBF5 /* NSDictionary+VENCore.m */; }; + 26839E181BE12057001651E8 /* NSArray+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B2C2D05196ED75400D1B241 /* NSArray+VENCore.m */; }; + 26839E191BE12057001651E8 /* NSError+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EBF84D2918EA5ADE00C0E077 /* NSError+VENCore.m */; }; + 26839E1A1BE12057001651E8 /* UIDevice+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EBFB2F8F18F7228600612BD8 /* UIDevice+VENCore.m */; }; + 26839E1B1BE12057001651E8 /* VENCreateTransactionRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AE56FEF190871DF0054B7EF /* VENCreateTransactionRequest.m */; }; + 26839E1C1BE12057001651E8 /* VENTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = C24E595418F84C67009670F7 /* VENTransaction.m */; }; + 26839E1D1BE12057001651E8 /* VENTransactionTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB8E3B018FD86AB00A22C6B /* VENTransactionTarget.m */; }; + 26839E1E1BE12057001651E8 /* VENUser.m in Sources */ = {isa = PBXBuildFile; fileRef = C24E595718F84C67009670F7 /* VENUser.m */; }; + 26839E1F1BE12057001651E8 /* VENHTTP.m in Sources */ = {isa = PBXBuildFile; fileRef = EB74B2BE18E9FD7B00838A9D /* VENHTTP.m */; }; + 26839E201BE12057001651E8 /* VENHTTPResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = EBBE7E0718EA017700E47338 /* VENHTTPResponse.m */; }; + 26839E211BE12057001651E8 /* VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EBCB247E18E9FBAF00807472 /* VENCore.m */; }; + 26839E221BE1206D001651E8 /* NSString+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EBB8E3BF18FDDB6300A22C6B /* NSString+VENCore.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 26839E231BE1206D001651E8 /* NSDictionary+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EB418B9B18EB0E060003CBF5 /* NSDictionary+VENCore.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 26839E241BE1206D001651E8 /* NSArray+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B2C2D04196ED75400D1B241 /* NSArray+VENCore.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 26839E251BE1206D001651E8 /* NSError+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF84D2818EA5ADE00C0E077 /* NSError+VENCore.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 26839E261BE1206D001651E8 /* UIDevice+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFB2F8E18F7228600612BD8 /* UIDevice+VENCore.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 26839E271BE1206D001651E8 /* VENCreateTransactionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AE56FEE190871DF0054B7EF /* VENCreateTransactionRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26839E281BE1206D001651E8 /* VENTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = C24E595318F84C67009670F7 /* VENTransaction.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26839E291BE1206D001651E8 /* VENTransactionTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = EBB8E3AF18FD86AB00A22C6B /* VENTransactionTarget.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26839E2A1BE1206D001651E8 /* VENTransactionPayloadKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 47136D3A18FF001F00AD63CD /* VENTransactionPayloadKeys.h */; }; + 26839E2B1BE1206D001651E8 /* VENUser.h in Headers */ = {isa = PBXBuildFile; fileRef = C24E595618F84C67009670F7 /* VENUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26839E2C1BE1206D001651E8 /* VENUserPayloadKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = C24E596018F885D7009670F7 /* VENUserPayloadKeys.h */; }; + 26839E2D1BE1206D001651E8 /* VENHTTP.h in Headers */ = {isa = PBXBuildFile; fileRef = EB74B2BD18E9FD7B00838A9D /* VENHTTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26839E2E1BE1206D001651E8 /* VENHTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = EBBE7E0618EA017700E47338 /* VENHTTPResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26839E2F1BE1206D001651E8 /* VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EBCB247C18E9FBAF00807472 /* VENCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26839E301BE12256001651E8 /* VENCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E0A1BE11E83001651E8 /* VENCore.framework */; }; + 26839E311BE122B3001651E8 /* CMDQueryStringSerialization.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E121BE11F82001651E8 /* CMDQueryStringSerialization.framework */; }; + 26839E321BE122B3001651E8 /* ISO8601.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E131BE11F82001651E8 /* ISO8601.framework */; }; + 26839E331BE12947001651E8 /* VENCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E0A1BE11E83001651E8 /* VENCore.framework */; }; 3AE56FF21908A0610054B7EF /* VENCreateTransactionRequestSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AE56FF11908A0610054B7EF /* VENCreateTransactionRequestSpec.m */; }; - 3DED53F413AA485586839756 /* libPods-VENCore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DC461A27E94407698BE1D38 /* libPods-VENCore.a */; }; 4796A38718FDD4C6005CABA6 /* fetchInvalidUser.json in Resources */ = {isa = PBXBuildFile; fileRef = 4796A38618FDD4C6005CABA6 /* fetchInvalidUser.json */; }; 4796D62118FC4B6D001461B1 /* VENTransactionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 4796D61C18FC4B6D001461B1 /* VENTransactionSpec.m */; }; 4796D62318FC4B6D001461B1 /* VENUserSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 4796D61F18FC4B6D001461B1 /* VENUserSpec.m */; }; 47BD36E018FDBA4500DE4554 /* fetchChrisUser.json in Resources */ = {isa = PBXBuildFile; fileRef = 47BD36DF18FDBA4500DE4554 /* fetchChrisUser.json */; }; 9B2C2CF9196C992000D1B241 /* fetchInvalidFriends.json in Resources */ = {isa = PBXBuildFile; fileRef = 9B2C2CF8196C992000D1B241 /* fetchInvalidFriends.json */; }; - 9B2C2D06196ED75400D1B241 /* NSArray+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B2C2D05196ED75400D1B241 /* NSArray+VENCore.m */; }; 9B2C2D09196EDC3000D1B241 /* NSArray+VENCoreSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B2C2D08196EDC3000D1B241 /* NSArray+VENCoreSpec.m */; }; 9BF60703196C333000F163E5 /* fetchFriends.json in Resources */ = {isa = PBXBuildFile; fileRef = 9BF60702196C333000F163E5 /* fetchFriends.json */; }; - C24E595918F84C67009670F7 /* VENTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = C24E595418F84C67009670F7 /* VENTransaction.m */; }; - C24E595A18F84C67009670F7 /* VENUser.m in Sources */ = {isa = PBXBuildFile; fileRef = C24E595718F84C67009670F7 /* VENUser.m */; }; E84803CCC64F49DB9C88AD75 /* libPods-VENCoreIntegrationTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 25B6CD691E644507A1045E0D /* libPods-VENCoreIntegrationTests.a */; }; EAEAD5D239AE426196E78022 /* libPods-VENCoreUnitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4779F161125042D590B452A8 /* libPods-VENCoreUnitTests.a */; }; EB00DB351906E647001836A8 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCB248518E9FBAF00807472 /* XCTest.framework */; }; @@ -27,76 +54,38 @@ EB00DB371906E647001836A8 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCB248818E9FBAF00807472 /* UIKit.framework */; }; EB00DB3D1906E647001836A8 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EB00DB3B1906E647001836A8 /* InfoPlist.strings */; }; EB00DB3F1906E647001836A8 /* PaymentSandboxSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EB00DB3E1906E647001836A8 /* PaymentSandboxSpec.m */; }; - EB10A52D18F7295B007F2119 /* libVENCore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCB247418E9FBAF00807472 /* libVENCore.a */; }; EB34431319071EA200B7791E /* paymentToUser.json in Resources */ = {isa = PBXBuildFile; fileRef = EB34431219071EA200B7791E /* paymentToUser.json */; }; - EB34AA901906FDD600663ECF /* libVENCore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCB247418E9FBAF00807472 /* libVENCore.a */; }; EB34AA911907006F00663ECF /* VENTestUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = EB427E5718F8451B0070EDD9 /* VENTestUtilities.m */; }; EB403ECC1953A1DA00F23593 /* EXPMatchers+Venmo.m in Sources */ = {isa = PBXBuildFile; fileRef = EB403ECB1953A1DA00F23593 /* EXPMatchers+Venmo.m */; }; EB418B9A18EB0DD20003CBF5 /* NSError+VENCoreSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EB418B9918EB0DD20003CBF5 /* NSError+VENCoreSpec.m */; }; - EB418B9D18EB0E060003CBF5 /* NSDictionary+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EB418B9C18EB0E060003CBF5 /* NSDictionary+VENCore.m */; }; EB418B9F18EB0E1B0003CBF5 /* NSDictionary+VENCoreSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EB418B9E18EB0E1B0003CBF5 /* NSDictionary+VENCoreSpec.m */; }; EB427E5318F844910070EDD9 /* paymentToEmail.json in Resources */ = {isa = PBXBuildFile; fileRef = EB427E5218F844910070EDD9 /* paymentToEmail.json */; }; EB427E5918F8451B0070EDD9 /* VENTestUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = EB427E5718F8451B0070EDD9 /* VENTestUtilities.m */; }; EB6A5ADA1906FC44003C067E /* VENUserIntegrationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EB6A5AD91906FC44003C067E /* VENUserIntegrationSpec.m */; }; - EB74B2BF18E9FD7B00838A9D /* VENHTTP.m in Sources */ = {isa = PBXBuildFile; fileRef = EB74B2BE18E9FD7B00838A9D /* VENHTTP.m */; }; EBA57C5318FC362000D39D0F /* invalidAccessTokenError.json in Resources */ = {isa = PBXBuildFile; fileRef = EBA57C5018FC362000D39D0F /* invalidAccessTokenError.json */; }; EBA57C5418FC362000D39D0F /* invalidAmountError.json in Resources */ = {isa = PBXBuildFile; fileRef = EBA57C5118FC362000D39D0F /* invalidAmountError.json */; }; EBA57C5518FC362000D39D0F /* invalidAudienceError.json in Resources */ = {isa = PBXBuildFile; fileRef = EBA57C5218FC362000D39D0F /* invalidAudienceError.json */; }; - EBB8E3B118FD86AB00A22C6B /* VENTransactionTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB8E3B018FD86AB00A22C6B /* VENTransactionTarget.m */; }; EBB8E3B318FDA4BB00A22C6B /* VENTransactionTargetSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB8E3B218FDA4BB00A22C6B /* VENTransactionTargetSpec.m */; }; EBB8E3BE18FDB05400A22C6B /* NSString+VENCoreSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB8E3BD18FDB05400A22C6B /* NSString+VENCoreSpec.m */; }; - EBB8E3C118FDDB6300A22C6B /* NSString+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB8E3C018FDDB6300A22C6B /* NSString+VENCore.m */; }; - EBBE7E0818EA017700E47338 /* VENHTTPResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = EBBE7E0718EA017700E47338 /* VENHTTPResponse.m */; }; EBBE7E0A18EA020500E47338 /* VENHTTPSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EBBE7E0918EA020500E47338 /* VENHTTPSpec.m */; }; EBBE7E0D18EA022300E47338 /* VENHTTPResponseSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EBBE7E0C18EA022300E47338 /* VENHTTPResponseSpec.m */; }; - EBCB247818E9FBAF00807472 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCB247718E9FBAF00807472 /* Foundation.framework */; }; - EBCB247D18E9FBAF00807472 /* VENCore.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = EBCB247C18E9FBAF00807472 /* VENCore.h */; }; - EBCB247F18E9FBAF00807472 /* VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EBCB247E18E9FBAF00807472 /* VENCore.m */; }; EBCB248618E9FBAF00807472 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCB248518E9FBAF00807472 /* XCTest.framework */; }; EBCB248718E9FBAF00807472 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCB247718E9FBAF00807472 /* Foundation.framework */; }; EBCB248918E9FBAF00807472 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCB248818E9FBAF00807472 /* UIKit.framework */; }; EBCB249218E9FBAF00807472 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EBCB249018E9FBAF00807472 /* InfoPlist.strings */; }; EBCB249418E9FBAF00807472 /* VENCoreSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EBCB249318E9FBAF00807472 /* VENCoreSpec.m */; }; - EBF84D2A18EA5ADE00C0E077 /* NSError+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EBF84D2918EA5ADE00C0E077 /* NSError+VENCore.m */; }; - EBFB2F9018F7228600612BD8 /* UIDevice+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EBFB2F8F18F7228600612BD8 /* UIDevice+VENCore.m */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - EB00DB411906E647001836A8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = EBCB246C18E9FBAF00807472 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EBCB247318E9FBAF00807472; - remoteInfo = VENCore; - }; - EBCB248A18E9FBAF00807472 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = EBCB246C18E9FBAF00807472 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EBCB247318E9FBAF00807472; - remoteInfo = VENCore; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - EBCB247218E9FBAF00807472 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - EBCB247D18E9FBAF00807472 /* VENCore.h in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ 1DC461A27E94407698BE1D38 /* libPods-VENCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VENCore.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 205F497EB245D3BA7F715DC0 /* Pods-VENCoreIntegrationTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCoreIntegrationTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VENCoreIntegrationTests/Pods-VENCoreIntegrationTests.debug.xcconfig"; sourceTree = ""; }; 2217ED26197A5908221D4520 /* Pods-VENCoreUnitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCoreUnitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-VENCoreUnitTests/Pods-VENCoreUnitTests.release.xcconfig"; sourceTree = ""; }; 2222D271DEDBF7804774C8FD /* Pods-VENCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCore.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VENCore/Pods-VENCore.debug.xcconfig"; sourceTree = ""; }; 25B6CD691E644507A1045E0D /* libPods-VENCoreIntegrationTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VENCoreIntegrationTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 26839E0A1BE11E83001651E8 /* VENCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VENCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 26839E0E1BE11E83001651E8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 26839E121BE11F82001651E8 /* CMDQueryStringSerialization.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CMDQueryStringSerialization.framework; path = Carthage/Build/iOS/CMDQueryStringSerialization.framework; sourceTree = ""; }; + 26839E131BE11F82001651E8 /* ISO8601.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ISO8601.framework; path = Carthage/Build/iOS/ISO8601.framework; sourceTree = ""; }; 3AE56FEE190871DF0054B7EF /* VENCreateTransactionRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VENCreateTransactionRequest.h; sourceTree = ""; }; 3AE56FEF190871DF0054B7EF /* VENCreateTransactionRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENCreateTransactionRequest.m; sourceTree = ""; }; 3AE56FF11908A0610054B7EF /* VENCreateTransactionRequestSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENCreateTransactionRequestSpec.m; sourceTree = ""; }; @@ -156,7 +145,6 @@ EBBE7E0918EA020500E47338 /* VENHTTPSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENHTTPSpec.m; path = Networking/VENHTTPSpec.m; sourceTree = ""; }; EBBE7E0C18EA022300E47338 /* VENHTTPResponseSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENHTTPResponseSpec.m; path = Networking/VENHTTPResponseSpec.m; sourceTree = ""; }; EBBE7E1818EA2D7600E47338 /* VENCoreUnitTests-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "VENCoreUnitTests-Prefix.pch"; sourceTree = ""; }; - EBCB247418E9FBAF00807472 /* libVENCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libVENCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; EBCB247718E9FBAF00807472 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; EBCB247B18E9FBAF00807472 /* VENCore-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "VENCore-Prefix.pch"; sourceTree = ""; }; EBCB247C18E9FBAF00807472 /* VENCore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VENCore.h; sourceTree = ""; }; @@ -174,24 +162,24 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - EB00DB311906E647001836A8 /* Frameworks */ = { + 26839E061BE11E83001651E8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EB34AA901906FDD600663ECF /* libVENCore.a in Frameworks */, - EB00DB351906E647001836A8 /* XCTest.framework in Frameworks */, - EB00DB371906E647001836A8 /* UIKit.framework in Frameworks */, - EB00DB361906E647001836A8 /* Foundation.framework in Frameworks */, - E84803CCC64F49DB9C88AD75 /* libPods-VENCoreIntegrationTests.a in Frameworks */, + 26839E141BE11F82001651E8 /* CMDQueryStringSerialization.framework in Frameworks */, + 26839E151BE11F82001651E8 /* ISO8601.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - EBCB247118E9FBAF00807472 /* Frameworks */ = { + EB00DB311906E647001836A8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EBCB247818E9FBAF00807472 /* Foundation.framework in Frameworks */, - 3DED53F413AA485586839756 /* libPods-VENCore.a in Frameworks */, + 26839E331BE12947001651E8 /* VENCore.framework in Frameworks */, + EB00DB351906E647001836A8 /* XCTest.framework in Frameworks */, + EB00DB371906E647001836A8 /* UIKit.framework in Frameworks */, + EB00DB361906E647001836A8 /* Foundation.framework in Frameworks */, + E84803CCC64F49DB9C88AD75 /* libPods-VENCoreIntegrationTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -199,11 +187,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EB10A52D18F7295B007F2119 /* libVENCore.a in Frameworks */, + 26839E301BE12256001651E8 /* VENCore.framework in Frameworks */, EBCB248618E9FBAF00807472 /* XCTest.framework in Frameworks */, EBCB248918E9FBAF00807472 /* UIKit.framework in Frameworks */, EBCB248718E9FBAF00807472 /* Foundation.framework in Frameworks */, EAEAD5D239AE426196E78022 /* libPods-VENCoreUnitTests.a in Frameworks */, + 26839E311BE122B3001651E8 /* CMDQueryStringSerialization.framework in Frameworks */, + 26839E321BE122B3001651E8 /* ISO8601.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -413,9 +403,9 @@ EBCB247518E9FBAF00807472 /* Products */ = { isa = PBXGroup; children = ( - EBCB247418E9FBAF00807472 /* libVENCore.a */, EBCB248418E9FBAF00807472 /* VENCoreUnitTests.xctest */, EB00DB341906E647001836A8 /* VENCoreIntegrationTests.xctest */, + 26839E0A1BE11E83001651E8 /* VENCore.framework */, ); name = Products; sourceTree = ""; @@ -423,6 +413,8 @@ EBCB247618E9FBAF00807472 /* Frameworks */ = { isa = PBXGroup; children = ( + 26839E121BE11F82001651E8 /* CMDQueryStringSerialization.framework */, + 26839E131BE11F82001651E8 /* ISO8601.framework */, EBCB247718E9FBAF00807472 /* Foundation.framework */, EBCB248518E9FBAF00807472 /* XCTest.framework */, EBCB248818E9FBAF00807472 /* UIKit.framework */, @@ -450,6 +442,7 @@ EBCB247A18E9FBAF00807472 /* Supporting Files */ = { isa = PBXGroup; children = ( + 26839E0E1BE11E83001651E8 /* Info.plist */, EBCB247B18E9FBAF00807472 /* VENCore-Prefix.pch */, ); name = "Supporting Files"; @@ -498,7 +491,49 @@ }; /* End PBXGroup section */ +/* Begin PBXHeadersBuildPhase section */ + 26839E071BE11E83001651E8 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 26839E2F1BE1206D001651E8 /* VENCore.h in Headers */, + 26839E2D1BE1206D001651E8 /* VENHTTP.h in Headers */, + 26839E281BE1206D001651E8 /* VENTransaction.h in Headers */, + 26839E291BE1206D001651E8 /* VENTransactionTarget.h in Headers */, + 26839E2B1BE1206D001651E8 /* VENUser.h in Headers */, + 26839E2E1BE1206D001651E8 /* VENHTTPResponse.h in Headers */, + 26839E271BE1206D001651E8 /* VENCreateTransactionRequest.h in Headers */, + 26839E221BE1206D001651E8 /* NSString+VENCore.h in Headers */, + 26839E231BE1206D001651E8 /* NSDictionary+VENCore.h in Headers */, + 26839E241BE1206D001651E8 /* NSArray+VENCore.h in Headers */, + 26839E261BE1206D001651E8 /* UIDevice+VENCore.h in Headers */, + 26839E251BE1206D001651E8 /* NSError+VENCore.h in Headers */, + 26839E2A1BE1206D001651E8 /* VENTransactionPayloadKeys.h in Headers */, + 26839E2C1BE1206D001651E8 /* VENUserPayloadKeys.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + /* Begin PBXNativeTarget section */ + 26839E091BE11E83001651E8 /* VENCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = 26839E0F1BE11E83001651E8 /* Build configuration list for PBXNativeTarget "VENCore" */; + buildPhases = ( + 26839E051BE11E83001651E8 /* Sources */, + 26839E061BE11E83001651E8 /* Frameworks */, + 26839E071BE11E83001651E8 /* Headers */, + 26839E081BE11E83001651E8 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = VENCore; + productName = VENCore; + productReference = 26839E0A1BE11E83001651E8 /* VENCore.framework */; + productType = "com.apple.product-type.framework"; + }; EB00DB331906E647001836A8 /* VENCoreIntegrationTests */ = { isa = PBXNativeTarget; buildConfigurationList = EB00DB451906E647001836A8 /* Build configuration list for PBXNativeTarget "VENCoreIntegrationTests" */; @@ -507,35 +542,17 @@ EB00DB311906E647001836A8 /* Frameworks */, EB00DB321906E647001836A8 /* Resources */, A75C89F4BED9494FA5602BF2 /* Copy Pods Resources */, + 421D01B16B2F3F04B8E23669 /* Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( - EB00DB421906E647001836A8 /* PBXTargetDependency */, ); name = VENCoreIntegrationTests; productName = VENCoreIntegrationTests; productReference = EB00DB341906E647001836A8 /* VENCoreIntegrationTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - EBCB247318E9FBAF00807472 /* VENCore */ = { - isa = PBXNativeTarget; - buildConfigurationList = EBCB249718E9FBAF00807472 /* Build configuration list for PBXNativeTarget "VENCore" */; - buildPhases = ( - EBCB247018E9FBAF00807472 /* Sources */, - EBCB247118E9FBAF00807472 /* Frameworks */, - EBCB247218E9FBAF00807472 /* CopyFiles */, - D9A8CE8A9C45431291938B0F /* Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = VENCore; - productName = VENCore; - productReference = EBCB247418E9FBAF00807472 /* libVENCore.a */; - productType = "com.apple.product-type.library.static"; - }; EBCB248318E9FBAF00807472 /* VENCoreUnitTests */ = { isa = PBXNativeTarget; buildConfigurationList = EBCB249A18E9FBAF00807472 /* Build configuration list for PBXNativeTarget "VENCoreUnitTests" */; @@ -544,11 +561,11 @@ EBCB248118E9FBAF00807472 /* Frameworks */, EBCB248218E9FBAF00807472 /* Resources */, 5817C2AA84924DC496210914 /* Copy Pods Resources */, + D1BADFD3CCE8F8FC6561D55A /* Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( - EBCB248B18E9FBAF00807472 /* PBXTargetDependency */, ); name = VENCoreUnitTests; productName = VENCoreTests; @@ -561,9 +578,12 @@ EBCB246C18E9FBAF00807472 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0510; + LastUpgradeCheck = 0710; ORGANIZATIONNAME = Venmo; TargetAttributes = { + 26839E091BE11E83001651E8 = { + CreatedOnToolsVersion = 7.1; + }; EB00DB331906E647001836A8 = { TestTargetID = EBCB247318E9FBAF00807472; }; @@ -581,7 +601,7 @@ projectDirPath = ""; projectRoot = ""; targets = ( - EBCB247318E9FBAF00807472 /* VENCore */, + 26839E091BE11E83001651E8 /* VENCore */, EBCB248318E9FBAF00807472 /* VENCoreUnitTests */, EB00DB331906E647001836A8 /* VENCoreIntegrationTests */, ); @@ -589,6 +609,13 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 26839E081BE11E83001651E8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; EB00DB321906E647001836A8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -617,6 +644,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 421D01B16B2F3F04B8E23669 /* Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENCoreIntegrationTests/Pods-VENCoreIntegrationTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 5817C2AA84924DC496210914 /* Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -647,50 +689,50 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENCoreIntegrationTests/Pods-VENCoreIntegrationTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - D9A8CE8A9C45431291938B0F /* Copy Pods Resources */ = { + D1BADFD3CCE8F8FC6561D55A /* Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Copy Pods Resources"; + name = "Embed Pods Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENCore/Pods-VENCore-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENCoreUnitTests/Pods-VENCoreUnitTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - EB00DB301906E647001836A8 /* Sources */ = { + 26839E051BE11E83001651E8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - EB34AA911907006F00663ECF /* VENTestUtilities.m in Sources */, - EB6A5ADA1906FC44003C067E /* VENUserIntegrationSpec.m in Sources */, - EB00DB3F1906E647001836A8 /* PaymentSandboxSpec.m in Sources */, + 26839E161BE12057001651E8 /* NSString+VENCore.m in Sources */, + 26839E171BE12057001651E8 /* NSDictionary+VENCore.m in Sources */, + 26839E181BE12057001651E8 /* NSArray+VENCore.m in Sources */, + 26839E191BE12057001651E8 /* NSError+VENCore.m in Sources */, + 26839E1A1BE12057001651E8 /* UIDevice+VENCore.m in Sources */, + 26839E1B1BE12057001651E8 /* VENCreateTransactionRequest.m in Sources */, + 26839E1C1BE12057001651E8 /* VENTransaction.m in Sources */, + 26839E1D1BE12057001651E8 /* VENTransactionTarget.m in Sources */, + 26839E1E1BE12057001651E8 /* VENUser.m in Sources */, + 26839E1F1BE12057001651E8 /* VENHTTP.m in Sources */, + 26839E201BE12057001651E8 /* VENHTTPResponse.m in Sources */, + 26839E211BE12057001651E8 /* VENCore.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - EBCB247018E9FBAF00807472 /* Sources */ = { + EB00DB301906E647001836A8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C24E595A18F84C67009670F7 /* VENUser.m in Sources */, - EBFB2F9018F7228600612BD8 /* UIDevice+VENCore.m in Sources */, - C24E595918F84C67009670F7 /* VENTransaction.m in Sources */, - EBF84D2A18EA5ADE00C0E077 /* NSError+VENCore.m in Sources */, - EBBE7E0818EA017700E47338 /* VENHTTPResponse.m in Sources */, - 9B2C2D06196ED75400D1B241 /* NSArray+VENCore.m in Sources */, - EBCB247F18E9FBAF00807472 /* VENCore.m in Sources */, - EB418B9D18EB0E060003CBF5 /* NSDictionary+VENCore.m in Sources */, - EB74B2BF18E9FD7B00838A9D /* VENHTTP.m in Sources */, - EBB8E3C118FDDB6300A22C6B /* NSString+VENCore.m in Sources */, - 3AE56FF0190871DF0054B7EF /* VENCreateTransactionRequest.m in Sources */, - EBB8E3B118FD86AB00A22C6B /* VENTransactionTarget.m in Sources */, + EB34AA911907006F00663ECF /* VENTestUtilities.m in Sources */, + EB6A5ADA1906FC44003C067E /* VENUserIntegrationSpec.m in Sources */, + EB00DB3F1906E647001836A8 /* PaymentSandboxSpec.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -716,19 +758,6 @@ }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - EB00DB421906E647001836A8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = EBCB247318E9FBAF00807472 /* VENCore */; - targetProxy = EB00DB411906E647001836A8 /* PBXContainerItemProxy */; - }; - EBCB248B18E9FBAF00807472 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = EBCB247318E9FBAF00807472 /* VENCore */; - targetProxy = EBCB248A18E9FBAF00807472 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin PBXVariantGroup section */ EB00DB3B1906E647001836A8 /* InfoPlist.strings */ = { isa = PBXVariantGroup; @@ -749,6 +778,70 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 26839E101BE11E83001651E8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_UNREACHABLE_CODE = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = VENCore/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.venmo.VENCore; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 26839E111BE11E83001651E8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_UNREACHABLE_CODE = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = VENCore/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.venmo.VENCore; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; EB00DB431906E647001836A8 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 205F497EB245D3BA7F715DC0 /* Pods-VENCoreIntegrationTests.debug.xcconfig */; @@ -765,7 +858,9 @@ "$(inherited)", ); INFOPLIST_FILE = "VENCoreIntegrationTests/VENCoreIntegrationTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.venmo.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = xctest; }; @@ -783,7 +878,9 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "VENCoreIntegrationTests/VENCoreIntegrationTests-Prefix.pch"; INFOPLIST_FILE = "VENCoreIntegrationTests/VENCoreIntegrationTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.venmo.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = xctest; }; @@ -806,6 +903,7 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_GENERATE_TEST_COVERAGE_FILES = YES; @@ -826,7 +924,7 @@ "$(inherited)", /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, ); - IPHONEOS_DEPLOYMENT_TARGET = 7.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; @@ -863,52 +961,20 @@ "$(inherited)", /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, ); - IPHONEOS_DEPLOYMENT_TARGET = 7.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; - EBCB249818E9FBAF00807472 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2222D271DEDBF7804774C8FD /* Pods-VENCore.debug.xcconfig */; - buildSettings = { - DSTROOT = /tmp/VENCore.dst; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "VENCore/VENCore-Prefix.pch"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - EBCB249918E9FBAF00807472 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D6B916DA5438FEE030F90BD9 /* Pods-VENCore.release.xcconfig */; - buildSettings = { - DSTROOT = /tmp/VENCore.dst; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "VENCore/VENCore-Prefix.pch"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Release; - }; EBCB249B18E9FBAF00807472 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 96E55B3EDBC65A58DAC8CCD3 /* Pods-VENCoreUnitTests.debug.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "VENCoreUnitTests/VENCoreUnitTests-Prefix.pch"; @@ -917,8 +983,8 @@ "$(inherited)", ); INFOPLIST_FILE = "VENCoreUnitTests/VENCoreUnitTests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.venmo.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = xctest; }; name = Debug; }; @@ -927,44 +993,44 @@ baseConfigurationReference = 2217ED26197A5908221D4520 /* Pods-VENCoreUnitTests.release.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "VENCoreUnitTests/VENCoreUnitTests-Prefix.pch"; INFOPLIST_FILE = "VENCoreUnitTests/VENCoreUnitTests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.venmo.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = xctest; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - EB00DB451906E647001836A8 /* Build configuration list for PBXNativeTarget "VENCoreIntegrationTests" */ = { + 26839E0F1BE11E83001651E8 /* Build configuration list for PBXNativeTarget "VENCore" */ = { isa = XCConfigurationList; buildConfigurations = ( - EB00DB431906E647001836A8 /* Debug */, - EB00DB441906E647001836A8 /* Release */, + 26839E101BE11E83001651E8 /* Debug */, + 26839E111BE11E83001651E8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - EBCB246F18E9FBAF00807472 /* Build configuration list for PBXProject "VENCore" */ = { + EB00DB451906E647001836A8 /* Build configuration list for PBXNativeTarget "VENCoreIntegrationTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - EBCB249518E9FBAF00807472 /* Debug */, - EBCB249618E9FBAF00807472 /* Release */, + EB00DB431906E647001836A8 /* Debug */, + EB00DB441906E647001836A8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - EBCB249718E9FBAF00807472 /* Build configuration list for PBXNativeTarget "VENCore" */ = { + EBCB246F18E9FBAF00807472 /* Build configuration list for PBXProject "VENCore" */ = { isa = XCConfigurationList; buildConfigurations = ( - EBCB249818E9FBAF00807472 /* Debug */, - EBCB249918E9FBAF00807472 /* Release */, + EBCB249518E9FBAF00807472 /* Debug */, + EBCB249618E9FBAF00807472 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/VENCore.xcodeproj/xcshareddata/xcschemes/VENCore.xcscheme b/VENCore.xcodeproj/xcshareddata/xcschemes/VENCore.xcscheme index 2e8e00f..6b9c479 100644 --- a/VENCore.xcodeproj/xcshareddata/xcschemes/VENCore.xcscheme +++ b/VENCore.xcodeproj/xcshareddata/xcschemes/VENCore.xcscheme @@ -1,6 +1,6 @@ + + + + + shouldUseLaunchSchemeArgsEnv = "YES"> @@ -52,41 +66,34 @@ ReferencedContainer = "container:VENCore.xcodeproj"> - - - - + + @@ -95,16 +102,16 @@ diff --git a/VENCore/Info.plist b/VENCore/Info.plist new file mode 100644 index 0000000..d3de8ee --- /dev/null +++ b/VENCore/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/VENCore/Models/Transactions/VENCreateTransactionRequest.m b/VENCore/Models/Transactions/VENCreateTransactionRequest.m index a1d750b..c72d7a9 100644 --- a/VENCore/Models/Transactions/VENCreateTransactionRequest.m +++ b/VENCore/Models/Transactions/VENCreateTransactionRequest.m @@ -1,5 +1,8 @@ #import "VENCreateTransactionRequest.h" #import "VENCore.h" +#import "NSString+VENCore.h" +#import "NSError+VENCore.h" +#import "NSDictionary+VENCore.h" @import CoreGraphics; diff --git a/VENCore/Models/Transactions/VENTransaction.m b/VENCore/Models/Transactions/VENTransaction.m index 77bcc07..9f5fd92 100644 --- a/VENCore/Models/Transactions/VENTransaction.m +++ b/VENCore/Models/Transactions/VENTransaction.m @@ -1,5 +1,7 @@ #import "VENTransaction.h" #import "VENCore.h" +#import "VENTransactionPayloadKeys.h" +#import "NSDictionary+VENCore.h" NSString *const VENErrorDomainTransaction = @"com.venmo.VENCore.ErrorDomain.VENTransaction"; NSString *const VENTransactionTypeStrings[] = {@"unknown", @"pay", @"charge"}; diff --git a/VENCore/Models/Transactions/VENTransactionTarget.m b/VENCore/Models/Transactions/VENTransactionTarget.m index b2e4e7e..9bd0dd0 100644 --- a/VENCore/Models/Transactions/VENTransactionTarget.m +++ b/VENCore/Models/Transactions/VENTransactionTarget.m @@ -1,5 +1,8 @@ #import "VENTransactionTarget.h" #import "VENCore.h" +#import "VENTransactionPayloadKeys.h" +#import "NSString+VENCore.h" +#import "NSDictionary+VENCore.h" @import CoreGraphics; diff --git a/VENCore/Models/Users/VENUser.m b/VENCore/Models/Users/VENUser.m index 08de608..d15d978 100644 --- a/VENCore/Models/Users/VENUser.m +++ b/VENCore/Models/Users/VENUser.m @@ -1,7 +1,7 @@ #import "VENUser.h" #import "VENCore.h" - - +#import "NSDictionary+VENCore.h" +#import "VENUserPayloadKeys.h" @implementation VENUser diff --git a/VENCore/Networking/VENHTTP.m b/VENCore/Networking/VENHTTP.m index 8a28198..95c7b11 100644 --- a/VENCore/Networking/VENHTTP.m +++ b/VENCore/Networking/VENHTTP.m @@ -6,7 +6,7 @@ #import "NSError+VENCore.h" #import "NSDictionary+VENCore.h" #import "NSArray+VENCore.h" -#import +@import CMDQueryStringSerialization; NSString *const VENAPIPathPayments = @"payments"; NSString *const VENAPIPathUsers = @"users"; diff --git a/VENCore/VENCore.h b/VENCore/VENCore.h index 393f587..3007512 100644 --- a/VENCore/VENCore.h +++ b/VENCore/VENCore.h @@ -1,17 +1,11 @@ @import Foundation; -#import "NSDictionary+VENCore.h" -#import "NSError+VENCore.h" -#import "NSString+VENCore.h" -#import "VENCore.h" -#import "VENCreateTransactionRequest.h" -#import "VENHTTP.h" -#import "VENHTTPResponse.h" -#import "VENTransaction.h" -#import "VENTransactionPayloadKeys.h" -#import "VENTransactionTarget.h" -#import "VENUser.h" -#import "VENUserPayloadKeys.h" +#import +#import +#import +#import +#import +#import extern NSString *const VENErrorDomainCore; @@ -20,8 +14,6 @@ typedef NS_ENUM(NSInteger, VENCoreErrorCode) { VENCoreErrorCodeNoAccessToken }; -@class VENTransaction, VENUser; - @interface VENCore : NSObject @property (strong, nonatomic) VENHTTP *httpClient; diff --git a/VENCoreIntegrationTests/VENCoreIntegrationTests-Info.plist b/VENCoreIntegrationTests/VENCoreIntegrationTests-Info.plist index 3c4e571..169b6f7 100644 --- a/VENCoreIntegrationTests/VENCoreIntegrationTests-Info.plist +++ b/VENCoreIntegrationTests/VENCoreIntegrationTests-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.venmo.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType diff --git a/VENCoreUnitTests/Models/Transactions/VENCreateTransactionRequestSpec.m b/VENCoreUnitTests/Models/Transactions/VENCreateTransactionRequestSpec.m index e026675..4b7f9ce 100644 --- a/VENCoreUnitTests/Models/Transactions/VENCreateTransactionRequestSpec.m +++ b/VENCoreUnitTests/Models/Transactions/VENCreateTransactionRequestSpec.m @@ -20,37 +20,37 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; SpecBegin(VENCreateTransactionRequest) describe(@"Sending Payments With Stubbed Responses", ^{ - + __block NSDictionary *emailPaymentObject; __block NSDictionary *userPaymentObject; __block id mockVENHTTP; __block VENCore *core; - + void(^stubSuccessBlockEmail)(NSInvocation *) = ^(NSInvocation *invocation) { void(^successBlock)(VENHTTPResponse *); [invocation getArgument:&successBlock atIndex:4]; - + VENHTTPResponse *response = [[VENHTTPResponse alloc] initWithStatusCode:200 responseObject:@{@"data":@{@"payment":emailPaymentObject}}]; successBlock(response); }; - + void(^stubSuccessBlockPhone)(NSInvocation *) = ^(NSInvocation *invocation) { void(^successBlock)(VENHTTPResponse *); [invocation getArgument:&successBlock atIndex:4]; - + VENHTTPResponse *response = [[VENHTTPResponse alloc] initWithStatusCode:200 responseObject:@{@"data":@{@"payment":userPaymentObject}}]; successBlock(response); }; - + void(^stubFailureBlock)(NSInvocation *) = ^(NSInvocation *invocation) { void(^failureBlock)(VENHTTPResponse *, NSError *); [invocation getArgument:&failureBlock atIndex:5]; - + VENHTTPResponse *response = [[VENHTTPResponse alloc] initWithStatusCode:400 responseObject:nil]; id mockError = [OCMockObject mockForClass:[NSError class]]; failureBlock(response, mockError); }; - + NSDictionary *(^expectedParameters)(VENCreateTransactionRequest *transactionService, VENTransactionTarget *target) = ^(VENCreateTransactionRequest *transactionService, VENTransactionTarget *target) { NSMutableDictionary *expectedParams = [[transactionService dictionaryWithParametersForTarget:target] mutableCopy]; @@ -58,7 +58,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; [expectedParams addEntriesFromDictionary:accessTokenParams]; return expectedParams; }; - + beforeEach(^{ NSDictionary *emailPaymentResponse = [VENTestUtilities objectFromJSONResource:@"paymentToEmail"]; emailPaymentObject = emailPaymentResponse[@"data"][@"payment"]; @@ -69,70 +69,73 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; core.httpClient = mockVENHTTP; [core setAccessToken:@"123"]; [VENCore setDefaultCore:core]; - + }); - + describe(@"sending a transaction with one target", ^{ - it(@"should POST to the payments endpoint and call the success block when the POST succeeds", ^AsyncBlock { + it(@"should POST to the payments endpoint and call the success block when the POST succeeds", ^{ VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; VENTransactionTarget *target = [[VENTransactionTarget alloc] initWithHandle:@"peter@venmo.com" amount:30]; [transactionService addTransactionTarget:target]; transactionService.note = @"hi"; - + NSDictionary *expectedParams = expectedParameters(transactionService, target); [[[mockVENHTTP expect] andDo:stubSuccessBlockEmail] POST:@"payments" parameters:expectedParams success:OCMOCK_ANY failure:OCMOCK_ANY]; - - [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { - expect([sentTransactions count]).to.equal(1); - done(); - } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - VENFail(); - done(); - }]; + + waitUntil(^(DoneCallback done) { + [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { + expect([sentTransactions count]).to.equal(1); + done(); + } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { + VENFail(); + done(); + }]; + }); }); - - it(@"should POST to the payments endpoint and call the failure block when the POST fails", ^AsyncBlock { + + it(@"should POST to the payments endpoint and call the failure block when the POST fails", ^{ VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; VENTransactionTarget *target = [[VENTransactionTarget alloc] initWithHandle:@"peter@venmo.com" amount:30]; [transactionService addTransactionTarget:target]; transactionService.note = @"hi"; - + NSDictionary *expectedParams = expectedParameters(transactionService, target); [[[mockVENHTTP expect] andDo:stubFailureBlock] POST:@"payments" parameters:expectedParams success:OCMOCK_ANY failure:OCMOCK_ANY]; - - [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { - VENFail(); - done(); - } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - expect([sentTransactions count]).to.equal(0); - expect(response).toNot.beNil(); - expect(error).toNot.beNil(); - done(); - }]; - + + waitUntil(^(DoneCallback done) { + [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { + VENFail(); + done(); + } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { + expect([sentTransactions count]).to.equal(0); + expect(response).toNot.beNil(); + expect(error).toNot.beNil(); + done(); + }]; + }); }); }); - + describe(@"sending a transaction with two targets", ^{ - it(@"should POST twice to the payments endpoint and call the success block twice when both transactions succeed", ^AsyncBlock { + it(@"should POST twice to the payments endpoint and call the success block twice when both transactions succeed", ^{ VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; transactionService.note = @"hi"; - + VENTransactionTarget *target1 = [[VENTransactionTarget alloc] initWithHandle:@"peter@venmo.com" amount:30]; [transactionService addTransactionTarget:target1]; - + VENTransactionTarget *target2 = [[VENTransactionTarget alloc] initWithHandle:@"ben@venmo.com" amount:420]; [transactionService addTransactionTarget:target2]; - + NSDictionary *expectedParameters1 = expectedParameters(transactionService, target1); NSDictionary *expectedParameters2 = expectedParameters(transactionService, target2); - + [[[mockVENHTTP expect] andDo:stubSuccessBlockEmail] POST:@"payments" parameters:expectedParameters1 success:OCMOCK_ANY @@ -141,79 +144,85 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; parameters:expectedParameters2 success:OCMOCK_ANY failure:OCMOCK_ANY]; - - [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { - expect([sentTransactions count]).to.equal(2); - done(); - } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - VENFail(); - done(); - }]; + + waitUntil(^(DoneCallback done) { + [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { + expect([sentTransactions count]).to.equal(2); + done(); + } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { + VENFail(); + done(); + }]; + }); }); - - it(@"should call successBlock for successful payment and failureBlock for second payment which fails", ^AsyncBlock { + + it(@"should call successBlock for successful payment and failureBlock for second payment which fails", ^{ VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; transactionService.note = @"hi"; - + VENTransactionTarget *target1 = [[VENTransactionTarget alloc] initWithHandle:@"peter@venmo.com" amount:30]; [transactionService addTransactionTarget:target1]; - + VENTransactionTarget *target2 = [[VENTransactionTarget alloc] initWithHandle:@"ben@venmo.com" amount:420]; [transactionService addTransactionTarget:target2]; - + NSDictionary *expectedParameters1 = expectedParameters(transactionService, target1); NSDictionary *expectedParameters2 = expectedParameters(transactionService, target2); - + [[[mockVENHTTP expect] andDo:stubSuccessBlockEmail] POST:@"payments" parameters:expectedParameters1 success:OCMOCK_ANY failure:OCMOCK_ANY]; - + [[[mockVENHTTP expect] andDo:stubFailureBlock] POST:@"payments" parameters:expectedParameters2 success:OCMOCK_ANY failure:OCMOCK_ANY]; - - [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { - VENFail(); - done(); - } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - // The failure block shouldn't be called - expect([sentTransactions count]).to.equal(1); - done(); - }]; + + waitUntil(^(DoneCallback done) { + [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { + VENFail(); + done(); + } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { + // The failure block shouldn't be called + expect([sentTransactions count]).to.equal(1); + done(); + }]; + }); }); - - it(@"should not initiate second payment if the first payment fails", ^AsyncBlock { - + + it(@"should not initiate second payment if the first payment fails", ^{ + VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; transactionService.note = @"hi"; - + VENTransactionTarget *target1 = [[VENTransactionTarget alloc] initWithHandle:@"peter@venmo.com" amount:30]; [transactionService addTransactionTarget:target1]; NSDictionary *expectedParameters1 = expectedParameters(transactionService, target1); - + //payment to target 2 should not be sent since the first payment fails VENTransactionTarget *target2 = [[VENTransactionTarget alloc] initWithHandle:@"das@venmo.com" amount:125]; [transactionService addTransactionTarget:target2]; - + [[[mockVENHTTP expect] andDo:stubFailureBlock] POST:@"payments" parameters:expectedParameters1 success:OCMOCK_ANY failure:OCMOCK_ANY]; - [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { - VENFail(); - done(); - } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - expect([sentTransactions count]).to.equal(0); - expect(response).toNot.beNil(); - expect(error).toNot.beNil(); - // Make sure no POSTs are made after the first one. - dispatch_after(3, dispatch_get_main_queue(), ^{ + waitUntil(^(DoneCallback done) { + [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { + VENFail(); done(); - }); - }]; + } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { + expect([sentTransactions count]).to.equal(0); + expect(response).toNot.beNil(); + expect(error).toNot.beNil(); + // Make sure no POSTs are made after the first one. + dispatch_after(3, dispatch_get_main_queue(), ^{ + done(); + }); + }]; + }); }); }); }); @@ -228,7 +237,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; expect(addedTarget).to.beTruthy(); expect([transactionService.targets count]).to.equal(1); }); - + it(@"it should not add a invalid target", ^{ id mockTarget = [OCMockObject niceMockForClass:[VENTransactionTarget class]]; [[[mockTarget stub] andReturnValue:@(NO)] isValid]; @@ -237,13 +246,13 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; expect(addedTarget).to.beFalsy(); expect([transactionService.targets count]).to.equal(0); }); - + it(@"it should not add duplicate targets", ^{ id mockTarget = [OCMockObject niceMockForClass:[VENTransactionTarget class]]; VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; id mockTransaction = [OCMockObject partialMockForObject:transactionService]; [[[mockTransaction stub] andReturnValue:@(YES)] containsDuplicateOfTarget:OCMOCK_ANY]; - + BOOL addedTarget = [mockTransaction addTransactionTarget:mockTarget]; expect(addedTarget).to.beFalsy(); expect(((VENCreateTransactionRequest *)mockTransaction).targets.count).to.equal(0); @@ -262,14 +271,14 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; ((VENCreateTransactionRequest *)mockTransaction).transactionType = VENTransactionTypePay; expect([((VENCreateTransactionRequest *)mockTransaction) readyToSend]).to.equal(YES); }); - + it(@"should return NO if there are 0 targets", ^{ VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; transactionService.note = @"Here is 10 Bucks"; transactionService.transactionType = VENTransactionTypePay; expect([transactionService readyToSend]).to.equal(NO); }); - + it(@"should return NO if transaction has no note", ^{ id object = [NSObject new]; NSOrderedSet *orderedSet = [[NSOrderedSet alloc] initWithObject:object]; @@ -279,7 +288,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; ((VENCreateTransactionRequest *)mockTransaction).transactionType = VENTransactionTypePay; expect([((VENCreateTransactionRequest *)mockTransaction) readyToSend]).to.equal(NO); }); - + it(@"should return NO if transactionType has not been set", ^{ id object = [NSObject new]; NSOrderedSet *orderedSet = [[NSOrderedSet alloc] initWithObject:object]; @@ -289,7 +298,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; ((VENCreateTransactionRequest *)mockTransaction).note = @"Here is 10 Bucks"; expect([((VENCreateTransactionRequest *)mockTransaction) readyToSend]).to.equal(NO); }); - + }); @@ -310,9 +319,9 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; @"audience" : @"friends"}; NSDictionary *postParameters = [transactionService dictionaryWithParametersForTarget:target]; expect(postParameters).to.equal(expectedPostParameters); - + }); - + it(@"should create a parameters dictionary for negative amounts", ^{ NSString *emailAddress = @"dasmer@venmo.com"; NSString *note = @"I want your two bucks"; @@ -329,10 +338,10 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; @"audience" : @"private"}; NSDictionary *postParameters = [transactionService dictionaryWithParametersForTarget:target]; expect(postParameters).to.equal(expectedPostParameters); - + }); - - + + it(@"should return nil if target type is unknown", ^{ NSString *emailAddress = @"dasmer"; NSString *note = @"I want your two bucks"; @@ -350,8 +359,8 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; expect(target.targetType).equal(VENTargetTypeUnknown); expect(postParameters).to.beNil(); }); - - + + it(@"should not include audience if audience is set to UserDefault", ^{ NSString *emailAddress = @"btest@example.com"; NSString *note = @"bla"; @@ -368,8 +377,8 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; NSDictionary *postParameters = [transactionService dictionaryWithParametersForTarget:target]; expect(postParameters).to.equal(expectedPostParameters); }); - - + + }); describe(@"containsDuplicateOfTarget", ^{ @@ -377,33 +386,33 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; NSString *handle = @"handle"; id mockTarget1 = [OCMockObject mockForClass:[VENTransactionTarget class]]; [[[mockTarget1 stub] andReturn:handle] handle]; - + id mockTarget2 = [OCMockObject mockForClass:[VENTransactionTarget class]]; [[[mockTarget2 stub] andReturn:@"bla"] handle]; - + VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; id mockTransaction = [OCMockObject partialMockForObject:transactionService]; NSMutableOrderedSet *targetSet = [[NSMutableOrderedSet alloc] initWithArray:@[mockTarget2, mockTarget1]]; [[[mockTransaction stub] andReturn:targetSet] targets]; - + id mockTargetParameter = [OCMockObject mockForClass:[VENTransactionTarget class]]; [[[mockTargetParameter stub] andReturn:handle] handle]; BOOL containsDuplicate = [mockTransaction containsDuplicateOfTarget:mockTargetParameter]; expect(containsDuplicate).to.beTruthy(); }); - + it(@"should return NO if the transaction doesn't have any targets with the same handle", ^{ id mockTarget1 = [OCMockObject mockForClass:[VENTransactionTarget class]]; [[[mockTarget1 stub] andReturn:@"foo"] handle]; - + id mockTarget2 = [OCMockObject mockForClass:[VENTransactionTarget class]]; [[[mockTarget2 stub] andReturn:@"bar"] handle]; - + VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; id mockTransaction = [OCMockObject partialMockForObject:transactionService]; NSMutableOrderedSet *targetSet = [[NSMutableOrderedSet alloc] initWithArray:@[mockTarget2, mockTarget1]]; [[[mockTransaction stub] andReturn:targetSet] targets]; - + id mockTargetParameter = [OCMockObject mockForClass:[VENTransactionTarget class]]; [[[mockTargetParameter stub] andReturn:@"baz"] handle]; BOOL containsDuplicate = [mockTransaction containsDuplicateOfTarget:mockTargetParameter]; diff --git a/VENCoreUnitTests/Models/Users/VENUserSpec.m b/VENCoreUnitTests/Models/Users/VENUserSpec.m index 266fcc4..906892d 100644 --- a/VENCoreUnitTests/Models/Users/VENUserSpec.m +++ b/VENCoreUnitTests/Models/Users/VENUserSpec.m @@ -71,21 +71,21 @@ describe(@"Initialization", ^{ - + it(@"should succesfully create an empty object from init", ^{ VENUser *usr = [[VENUser alloc] init]; expect(usr).toNot.beNil(); - + expect(usr.username).to.beNil(); expect(usr.firstName).to.beNil(); expect(usr.lastName).to.beNil(); expect(usr.profileImageUrl).to.beNil(); }); - + it(@"should return NO to canInitWithDictionary for an invalid dictionary", ^{ BOOL canInit = [VENUser canInitWithDictionary:invalidUserDictionary1]; expect(canInit).to.beFalsy(); - + canInit = [VENUser canInitWithDictionary:invalidUserDictionary2]; expect(canInit).to.beFalsy(); }); @@ -97,12 +97,12 @@ canInit = [VENUser canInitWithDictionary:nil]; expect(canInit).to.beFalsy(); }); - + it(@"should return YES to canInitWithDictionary for a valid dictionary", ^{ BOOL canInit = [VENUser canInitWithDictionary:validUserDictionary1]; expect(canInit).to.beTruthy(); }); - + it(@"should create a user with minimally a username and externalId for dictionaries that return YES to canInitWithDictionary",^{ VENUser *user1 = [[VENUser alloc] initWithDictionary:validUserDictionary1]; expect(user1.username).to.equal(@"PeterIsAZakin"); @@ -111,115 +111,115 @@ expect(user2.username).to.equal(@"PetefadsrIsAZakin"); expect(user2.externalId).to.equal(@"JLHDSfadJfsdFIOHh23ioHLH"); }); - + }); describe(@"Copying", ^{ - + it(@"should create a valid copy of any empty object", ^{ VENUser *usr = [[VENUser alloc] init]; - + VENUser *myOtherUser = [usr copy]; - + expect(myOtherUser).notTo.beNil(); expect(myOtherUser).to.beKindOf([usr class]); - + }); - + it(@"should create a valid copy of a valid user", ^{ VENUser *user = [[VENUser alloc] initWithDictionary:validUserDictionary1]; VENUser *newUser = [user copy]; - + expect(user).to.equal(newUser); }); }); describe(@"Equality", ^{ - + it(@"should correctly validate two equal objects", ^{ VENUser *user1 = [[VENUser alloc] initWithDictionary:validUserDictionary1]; VENUser *user2 = [user1 copy]; - + expect([user1 isEqual:user2]).to.beTruthy(); - + VENUser *user3 = [[VENUser alloc] initWithDictionary:validUserDictionary3]; - + expect([user1 isEqual:user3]).to.beTruthy(); }); - + it(@"should not indicate that two different users are the same", ^{ VENUser *user1 = [[VENUser alloc] initWithDictionary:validUserDictionary1]; VENUser *user2 = [[VENUser alloc] initWithDictionary:validUserDictionary2]; - + expect([user1 isEqual:user2]).to.beFalsy(); }); - + it(@"should behave transitively", ^{ VENUser *user1 = [[VENUser alloc] initWithDictionary:validUserDictionary1]; VENUser *user2 = [[VENUser alloc] initWithDictionary:validUserDictionary2]; - + expect([user1 isEqual:user2]).to.beFalsy(); expect([user2 isEqual:user1]).to.beFalsy(); - + user1 = [[VENUser alloc] initWithDictionary:validUserDictionary1]; user2 = [user1 copy]; - + expect([user1 isEqual:user2]).to.beTruthy(); expect([user2 isEqual:user1]).to.beTruthy(); }); - + it(@"should follow the rule that two users are equal ONLY if their external Ids are the same", ^{ VENUser *user = [[VENUser alloc] init]; VENUser *myOtherUser = [user copy]; - + expect(user).toNot.equal(myOtherUser); - + VENUser *invalidUser = [[VENUser alloc] initWithDictionary:invalidUserDictionary2]; VENUser *copiedInvalidUser = [invalidUser copy]; expect(invalidUser).toNot.equal(copiedInvalidUser); }); - + }); describe(@"Dictionary Representation", ^{ it(@"should consider dictionary representations of equal users to be equal", ^{ VENUser *user1 = [[VENUser alloc] initWithDictionary:validUserDictionary1]; NSDictionary *user1Dictionary = [user1 dictionaryRepresentation]; - + VENUser *user2 = [[VENUser alloc] initWithDictionary:user1Dictionary]; expect([user1 isEqual:user2]).to.beTruthy(); assertUsersAreFieldwiseEqual(user1, user2); - + }); - + }); describe(@"Fetching a User", ^{ - it(@"should retrieve a pre-canned Chris user and create a valid user", ^AsyncBlock{ - + it(@"should retrieve a pre-canned Chris user and create a valid user", ^{ NSString *externalId = @"1106387358711808333"; NSString *baseURLString = [VENTestUtilities baseURLStringForCore:[VENCore defaultCore]]; NSString *urlToStub = [NSString stringWithFormat:@"%@/%@/%@?", baseURLString, VENAPIPathUsers, externalId]; - + [VENTestUtilities stubNetworkGET:urlToStub withStatusCode:200 andResponseFilePath:@"fetchChrisUser"]; - - [VENUser fetchUserWithExternalId:externalId success:^(VENUser *user) { - - expect(user.externalId).to.equal(externalId); - done(); - } failure:^(NSError *error) { - VENFail(); - done(); - }]; - + waitUntil(^(DoneCallback done) { + [VENUser fetchUserWithExternalId:externalId success:^(VENUser *user) { + + expect(user.externalId).to.equal(externalId); + done(); + } failure:^(NSError *error) { + VENFail(); + done(); + }]; + }); + }); - it(@"should call failure when cannot find a user with that external Id", ^AsyncBlock{ + it(@"should call failure when cannot find a user with that external Id", ^{ NSString *externalId = @"1106387358711808339"; //invalid external id NSString *baseURLString = [VENTestUtilities baseURLStringForCore:[VENCore defaultCore]]; @@ -227,132 +227,148 @@ [VENTestUtilities stubNetworkGET:urlToStub withStatusCode:400 andResponseFilePath:@"fetchInvalidUser"]; - [VENUser fetchUserWithExternalId:externalId success:^(VENUser *user) { - VENFail(); - done(); - } failure:^(NSError *error) { - expect([error localizedDescription]).to.equal(@"Resource not found."); - done(); - }]; - + waitUntil(^(DoneCallback done) { + [VENUser fetchUserWithExternalId:externalId success:^(VENUser *user) { + VENFail(); + done(); + } failure:^(NSError *error) { + expect([error localizedDescription]).to.equal(@"Resource not found."); + done(); + }]; + }); }); - it(@"should call failure when not passed an external id", ^AsyncBlock{ - [VENUser fetchUserWithExternalId:nil success:^(VENUser *user) { - VENFail(); - done(); - } failure:^(NSError *error) { - expect(error).notTo.beNil(); - done(); - }]; + it(@"should call failure when not passed an external id", ^{ + waitUntil(^(DoneCallback done) { + [VENUser fetchUserWithExternalId:nil success:^(VENUser *user) { + VENFail(); + done(); + } failure:^(NSError *error) { + expect(error).notTo.beNil(); + done(); + }]; + }); }); - it(@"should call failure when passed an empty-string external id", ^AsyncBlock{ - [VENUser fetchUserWithExternalId:@"" success:^(VENUser *user) { - VENFail(); - done(); - } failure:^(NSError *error) { - expect(error).notTo.beNil(); - done(); - }]; + it(@"should call failure when passed an empty-string external id", ^{ + waitUntil(^(DoneCallback done) { + [VENUser fetchUserWithExternalId:@"" success:^(VENUser *user) { + VENFail(); + done(); + } failure:^(NSError *error) { + expect(error).notTo.beNil(); + done(); + }]; + }); }); }); describe(@"Fetching Friends", ^{ - it(@"should retrieve a pre-canned list of friends and create a valid array of friends", ^AsyncBlock{ + it(@"should retrieve a pre-canned list of friends and create a valid array of friends", ^{ NSString *externalId = @"110638735871180833"; NSString *baseURLString = [VENTestUtilities baseURLStringForCore:[VENCore defaultCore]]; NSString *urlToStub = [NSString stringWithFormat:@"%@/users/%@/friends?limit=1000", baseURLString, externalId]; [VENTestUtilities stubNetworkGET:urlToStub withStatusCode:200 andResponseFilePath:@"fetchFriends"]; - - [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { - expect([friendsArray count]).to.equal(5); - expect([friendsArray[0] class]).to.equal([VENUser class]); - expect([friendsArray[2] class]).to.equal([VENUser class]); - done(); - - } failure:^(NSError *error){ - VENFail(); - done(); - - }]; + + waitUntil(^(DoneCallback done) { + [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { + expect([friendsArray count]).to.equal(5); + expect([friendsArray[0] class]).to.equal([VENUser class]); + expect([friendsArray[2] class]).to.equal([VENUser class]); + done(); + + } failure:^(NSError *error){ + VENFail(); + done(); + }]; + }); }); - - it(@"should retrieve a pre-canned list of friends and deletes the NSNull key and value from the friend", ^AsyncBlock{ + + it(@"should retrieve a pre-canned list of friends and deletes the NSNull key and value from the friend", ^{ NSString *externalId = @"110638735871180833"; NSString *baseURLString = [VENTestUtilities baseURLStringForCore:[VENCore defaultCore]]; NSString *urlToStub = [NSString stringWithFormat:@"%@/users/%@/friends?limit=1000", baseURLString, externalId]; [VENTestUtilities stubNetworkGET:urlToStub withStatusCode:200 andResponseFilePath:@"fetchFriends"]; - [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { - for (id object in friendsArray) { - if ([object isKindOfClass:[VENUser class]]) { - VENUser *user = (VENUser *) object; - if ([user.username isEqualToString:@"great-friend"]) { - expect(user.profileImageUrl).to.beNil(); + waitUntil(^(DoneCallback done) { + [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { + for (id object in friendsArray) { + if ([object isKindOfClass:[VENUser class]]) { + VENUser *user = (VENUser *) object; + if ([user.username isEqualToString:@"great-friend"]) { + expect(user.profileImageUrl).to.beNil(); + } } } - } - done(); - } failure:^(NSError *error) { - VENFail(); - done(); - }]; + done(); + } failure:^(NSError *error) { + VENFail(); + done(); + }]; + }); }); - - it(@"should retrieve a pre-canned list of friends and the users should be in the same order as the JSON and their values should be consistent with the JSON values", ^AsyncBlock{ + + it(@"should retrieve a pre-canned list of friends and the users should be in the same order as the JSON and their values should be consistent with the JSON values", ^{ NSString *externalId = @"110638735871180833"; NSString *baseURLString = [VENTestUtilities baseURLStringForCore:[VENCore defaultCore]]; NSString *urlToStub = [NSString stringWithFormat:@"%@/users/%@/friends?limit=1000", baseURLString, externalId]; [VENTestUtilities stubNetworkGET:urlToStub withStatusCode:200 andResponseFilePath:@"fetchFriends"]; - [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { - if ([friendsArray[0] isKindOfClass:[VENUser class]]){ - VENUser *friend = (VENUser *) friendsArray[0]; - expect(friend.username).to.equal(@"kortina"); - expect(friend.about).to.equal(@"make a joyful sound, la da da da"); - } - done(); - } failure:^(NSError *error) { - VENFail(); - done(); - }]; + waitUntil(^(DoneCallback done) { + [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { + if ([friendsArray[0] isKindOfClass:[VENUser class]]){ + VENUser *friend = (VENUser *) friendsArray[0]; + expect(friend.username).to.equal(@"kortina"); + expect(friend.about).to.equal(@"make a joyful sound, la da da da"); + } + done(); + } failure:^(NSError *error) { + VENFail(); + done(); + }]; + }); }); - - it(@"should call failure when cannot find a user with that external Id", ^AsyncBlock{ + + it(@"should call failure when cannot find a user with that external Id", ^{ NSString *externalId = @"1106387358711808339"; //invalid external id NSString *baseURLString = [VENTestUtilities baseURLStringForCore:[VENCore defaultCore]]; NSString *urlToStub = [NSString stringWithFormat:@"%@/users/%@/friends?limit=1000", baseURLString, externalId]; [VENTestUtilities stubNetworkGET:urlToStub withStatusCode:400 andResponseFilePath:@"fetchInvalidFriends"]; - [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { - VENFail(); - done(); - } failure:^(NSError *error) { - expect([error localizedDescription]).to.equal(@"Resource not found."); - done(); - }]; + waitUntil(^(DoneCallback done) { + [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { + VENFail(); + done(); + } failure:^(NSError *error) { + expect([error localizedDescription]).to.equal(@"Resource not found."); + done(); + }]; + }); }); - it(@"should call failure when not passed an external id", ^AsyncBlock{ - [VENUser fetchFriendsWithExternalId:nil success:^(NSArray *friendsArray) { - VENFail(); - done(); - } failure:^(NSError *error) { - expect(error).notTo.beNil(); - done(); - }]; + it(@"should call failure when not passed an external id", ^{ + waitUntil(^(DoneCallback done) { + [VENUser fetchFriendsWithExternalId:nil success:^(NSArray *friendsArray) { + VENFail(); + done(); + } failure:^(NSError *error) { + expect(error).notTo.beNil(); + done(); + }]; + }); }); - it(@"should call failure when passed an empty-string external id", ^AsyncBlock{ - [VENUser fetchFriendsWithExternalId:@"" success:^(NSArray *friendsArray) { - VENFail(); - done(); - } failure:^(NSError *error) { - expect(error).notTo.beNil(); - done(); - }]; + it(@"should call failure when passed an empty-string external id", ^{ + waitUntil(^(DoneCallback done) { + [VENUser fetchFriendsWithExternalId:@"" success:^(NSArray *friendsArray) { + VENFail(); + done(); + } failure:^(NSError *error) { + expect(error).notTo.beNil(); + done(); + }]; + }); }); }); diff --git a/VENCoreUnitTests/Networking/VENHTTPSpec.m b/VENCoreUnitTests/Networking/VENHTTPSpec.m index ab74d81..f3bd1d8 100644 --- a/VENCoreUnitTests/Networking/VENHTTPSpec.m +++ b/VENCoreUnitTests/Networking/VENHTTPSpec.m @@ -3,7 +3,7 @@ #import "VENCore.h" #import "NSString+VENCore.h" -#import +@import CMDQueryStringSerialization; #define kVENHTTPTestProtocolScheme @"ven-http-test" #define kVENHTTPTestProtocolHost @"base.example.com" @@ -21,7 +21,7 @@ + (BOOL)canInitWithRequest:(NSURLRequest *)request BOOL hasCorrectHost = [request.URL.host isEqualToString:kVENHTTPTestProtocolHost]; BOOL hasCorrectPort = [request.URL.port isEqual:kVENHTTPTestProtocolPort]; BOOL hasCorrectBasePath = [request.URL.path rangeOfString:kVENHTTPTestProtocolBasePath].location != NSNotFound; - + return hasCorrectScheme && hasCorrectHost && hasCorrectPort && hasCorrectBasePath; } @@ -31,21 +31,21 @@ + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { - (void)startLoading { id client = self.client; - + NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.request.URL statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:@{@"Content-Type": @"application/json"}]; - + NSData *archivedRequest = [NSKeyedArchiver archivedDataWithRootObject:self.request]; NSString *base64ArchivedRequest = [archivedRequest base64EncodedStringWithOptions:0]; - + NSData *requestBodyData; if (self.request.HTTPBodyStream) { NSInputStream *inputStream = self.request.HTTPBodyStream; [inputStream open]; NSMutableData *mutableBodyData = [NSMutableData data]; - + while ([inputStream hasBytesAvailable]) { uint8_t buffer[128]; NSUInteger bytesRead = [inputStream read:buffer maxLength:128]; @@ -56,14 +56,14 @@ - (void)startLoading { } else { requestBodyData = self.request.HTTPBody; } - + NSDictionary *responseBody = @{ @"request": base64ArchivedRequest, @"requestBody": [[NSString alloc] initWithData:requestBodyData encoding:NSUTF8StringEncoding] }; - + [client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed]; - + [client URLProtocol:self didLoadData:[NSJSONSerialization dataWithJSONObject:responseBody options:NSJSONWritingPrettyPrinted error:NULL]]; - + [client URLProtocolDidFinishLoading:self]; } @@ -94,194 +94,223 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { describe(@"performing a request", ^{ __block VENHTTP *http; - + beforeEach(^{ http = [[VENHTTP alloc] initWithBaseURL:[VENHTTPTestProtocol testBaseURL]]; [http setProtocolClasses:@[[VENHTTPTestProtocol class]]]; }); - + describe(@"base URL", ^{ - it(@"sends requests using the specified URL scheme", ^AsyncBlock{ - [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - - expect(httpRequest.URL.scheme).to.equal(@"ven-http-test"); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + it(@"sends requests using the specified URL scheme", ^{ + waitUntil(^(DoneCallback done) { + [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + + expect(httpRequest.URL.scheme).to.equal(@"ven-http-test"); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); - - it(@"sends requests to the host at the base URL", ^AsyncBlock{ - [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - expect(httpRequest.URL.host).to.equal(@"base.example.com"); - - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + + + it(@"sends requests to the host at the base URL", ^{ + waitUntil(^(DoneCallback done) { + [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + expect(httpRequest.URL.host).to.equal(@"base.example.com"); + + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); - - it(@"appends the path to the base URL", ^AsyncBlock{ - [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - - expect(httpRequest.URL.path).to.equal(@"/base/path/200.json"); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + + it(@"appends the path to the base URL", ^{ + waitUntil(^(DoneCallback done) { + [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + + expect(httpRequest.URL.path).to.equal(@"/base/path/200.json"); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); }); - + describe(@"HTTP methods", ^{ - it(@"sends a GET request", ^AsyncBlock{ - [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - expect(httpRequest.URL.path).to.match(@"/200.json$"); - expect(httpRequest.HTTPMethod).to.equal(@"GET"); - expect(httpRequest.HTTPBody).to.beNil(); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + it(@"sends a GET request", ^{ + waitUntil(^(DoneCallback done) { + [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + expect(httpRequest.URL.path).to.match(@"/200.json$"); + expect(httpRequest.HTTPMethod).to.equal(@"GET"); + expect(httpRequest.HTTPBody).to.beNil(); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); - - it(@"sends a GET request with parameters", ^AsyncBlock{ - [http GET:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - expect(httpRequest.URL.path).to.match(@"/200.json$"); - expect(httpRequest.URL.query).to.equal(@"param=value"); - expect(httpRequest.HTTPMethod).to.equal(@"GET"); - expect(httpRequest.HTTPBody).to.beNil(); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + + it(@"sends a GET request with parameters", ^{ + waitUntil(^(DoneCallback done) { + [http GET:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + expect(httpRequest.URL.path).to.match(@"/200.json$"); + expect(httpRequest.URL.query).to.equal(@"param=value"); + expect(httpRequest.HTTPMethod).to.equal(@"GET"); + expect(httpRequest.HTTPBody).to.beNil(); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); - - it(@"sends a POST request", ^AsyncBlock{ - [http POST:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - expect(httpRequest.URL.path).to.match(@"/200.json$"); - expect(httpRequest.HTTPBody).to.beNil(); - expect(httpRequest.HTTPMethod).to.equal(@"POST"); - expect(httpRequest.URL.query).to.beNil(); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + + it(@"sends a POST request", ^{ + waitUntil(^(DoneCallback done) { + [http POST:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + expect(httpRequest.URL.path).to.match(@"/200.json$"); + expect(httpRequest.HTTPBody).to.beNil(); + expect(httpRequest.HTTPMethod).to.equal(@"POST"); + expect(httpRequest.URL.query).to.beNil(); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); - - it(@"sends a POST request with parameters", ^AsyncBlock{ - [http POST:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - NSString *httpRequestBody = [VENHTTPTestProtocol parseRequestBodyFromTestResponse:response]; - expect(httpRequest.URL.path).to.match(@"/200.json$"); - expect(httpRequestBody).to.equal(@"param=value"); - expect(httpRequest.HTTPMethod).to.equal(@"POST"); - expect(httpRequest.URL.query).to.beNil(); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + + it(@"sends a POST request with parameters", ^{ + waitUntil(^(DoneCallback done) { + [http POST:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + NSString *httpRequestBody = [VENHTTPTestProtocol parseRequestBodyFromTestResponse:response]; + expect(httpRequest.URL.path).to.match(@"/200.json$"); + expect(httpRequestBody).to.equal(@"param=value"); + expect(httpRequest.HTTPMethod).to.equal(@"POST"); + expect(httpRequest.URL.query).to.beNil(); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); - - it(@"sends a PUT request", ^AsyncBlock{ - [http PUT:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - expect(httpRequest.URL.path).to.match(@"200.json$"); - expect(httpRequest.HTTPBody).to.beNil(); - expect(httpRequest.HTTPMethod).to.equal(@"PUT"); - expect(httpRequest.URL.query).to.beNil(); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + + it(@"sends a PUT request", ^{ + waitUntil(^(DoneCallback done) { + [http PUT:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + expect(httpRequest.URL.path).to.match(@"200.json$"); + expect(httpRequest.HTTPBody).to.beNil(); + expect(httpRequest.HTTPMethod).to.equal(@"PUT"); + expect(httpRequest.URL.query).to.beNil(); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); - - it(@"sends a PUT request with parameters", ^AsyncBlock{ - [http PUT:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - NSString *httpRequestBody = [VENHTTPTestProtocol parseRequestBodyFromTestResponse:response]; - expect(httpRequest.URL.path).to.match(@"200.json$"); - expect(httpRequestBody).to.equal(@"param=value"); - expect(httpRequest.HTTPMethod).to.equal(@"PUT"); - expect(httpRequest.URL.query).to.beNil(); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + + it(@"sends a PUT request with parameters", ^{ + waitUntil(^(DoneCallback done) { + [http PUT:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + NSString *httpRequestBody = [VENHTTPTestProtocol parseRequestBodyFromTestResponse:response]; + expect(httpRequest.URL.path).to.match(@"200.json$"); + expect(httpRequestBody).to.equal(@"param=value"); + expect(httpRequest.HTTPMethod).to.equal(@"PUT"); + expect(httpRequest.URL.query).to.beNil(); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); - - - it(@"sends a DELETE request", ^AsyncBlock{ - [http DELETE:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - expect(httpRequest.URL.path).to.match(@"200.json$"); - expect(httpRequest.HTTPBody).to.beNil(); - expect(httpRequest.HTTPMethod).to.equal(@"DELETE"); - expect(httpRequest.URL.query).to.equal(nil); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + + + it(@"sends a DELETE request", ^{ + waitUntil(^(DoneCallback done) { + [http DELETE:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + expect(httpRequest.URL.path).to.match(@"200.json$"); + expect(httpRequest.HTTPBody).to.beNil(); + expect(httpRequest.HTTPMethod).to.equal(@"DELETE"); + expect(httpRequest.URL.query).to.equal(nil); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); - - it(@"sends a DELETE request with parameters", ^AsyncBlock{ - [http DELETE:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - - expect(httpRequest.URL.path).to.match(@"/200.json$"); - expect(httpRequest.URL.query).to.equal(@"param=value"); - expect(httpRequest.HTTPMethod).to.equal(@"DELETE"); - expect(httpRequest.HTTPBody).to.beNil(); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + + it(@"sends a DELETE request with parameters", ^{ + waitUntil(^(DoneCallback done) { + [http DELETE:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + + expect(httpRequest.URL.path).to.match(@"/200.json$"); + expect(httpRequest.URL.query).to.equal(@"param=value"); + expect(httpRequest.HTTPMethod).to.equal(@"DELETE"); + expect(httpRequest.HTTPBody).to.beNil(); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); }); - + describe(@"default headers", ^{ - it(@"include Accept", ^AsyncBlock{ - [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - NSDictionary *requestHeaders = httpRequest.allHTTPHeaderFields; - expect(requestHeaders[@"Accept"]).to.equal(@"application/json"); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + it(@"include Accept", ^{ + waitUntil(^(DoneCallback done) { + [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + NSDictionary *requestHeaders = httpRequest.allHTTPHeaderFields; + expect(requestHeaders[@"Accept"]).to.equal(@"application/json"); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); - - it(@"include User-Agent", ^AsyncBlock{ - [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - NSDictionary *requestHeaders = httpRequest.allHTTPHeaderFields; - expect(requestHeaders[@"User-Agent"]).to.contain(@"iOS"); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + + it(@"include User-Agent", ^{ + waitUntil(^(DoneCallback done) { + [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + NSDictionary *requestHeaders = httpRequest.allHTTPHeaderFields; + expect(requestHeaders[@"User-Agent"]).to.contain(@"iOS"); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); - - it(@"include Accept-Language", ^AsyncBlock{ - [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - NSDictionary *requestHeaders = httpRequest.allHTTPHeaderFields; - expect(requestHeaders[@"Accept-Language"]).to.equal(@"en-US"); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + + it(@"include Accept-Language", ^{ + waitUntil(^(DoneCallback done) { + [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + NSDictionary *requestHeaders = httpRequest.allHTTPHeaderFields; + expect(requestHeaders[@"Accept-Language"]).to.equal(@"en-US"); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); }); - + describe(@"parameters", ^{ __block NSDictionary *parameterDictionary; - + beforeEach(^{ parameterDictionary = @{@"stringParam": @"a value", @"numericParam": @42, @@ -289,33 +318,37 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { @"falseBoolParam": @NO }; }); - + describe(@"in GET requests", ^{ - it(@"transmits the parameters as URL encoded query parameters", ^AsyncBlock{ - [http GET:@"200.json" parameters:parameterDictionary success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - expect(httpRequest.URL.query).to.equal([CMDQueryStringSerialization queryStringWithDictionary:parameterDictionary]); - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + it(@"transmits the parameters as URL encoded query parameters", ^{ + waitUntil(^(DoneCallback done) { + [http GET:@"200.json" parameters:parameterDictionary success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + expect(httpRequest.URL.query).to.equal([CMDQueryStringSerialization queryStringWithDictionary:parameterDictionary]); + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); }); - + describe(@"in non-GET requests", ^{ - it(@"transmits the parameters as JSON", ^AsyncBlock{ - [http POST:@"200.json" parameters:parameterDictionary success:^(VENHTTPResponse *response) { - NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - NSString *httpRequestBody = [VENHTTPTestProtocol parseRequestBodyFromTestResponse:response]; - NSString *encodedParameters = [CMDQueryStringSerialization queryStringWithDictionary:parameterDictionary]; - - expect([httpRequest valueForHTTPHeaderField:@"Content-type"]).to.equal(@"application/x-www-form-urlencoded; charset=utf-8"); - expect(httpRequestBody).to.equal(encodedParameters); - - done(); - } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); - }]; + it(@"transmits the parameters as JSON", ^{ + waitUntil(^(DoneCallback done) { + [http POST:@"200.json" parameters:parameterDictionary success:^(VENHTTPResponse *response) { + NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; + NSString *httpRequestBody = [VENHTTPTestProtocol parseRequestBodyFromTestResponse:response]; + NSString *encodedParameters = [CMDQueryStringSerialization queryStringWithDictionary:parameterDictionary]; + + expect([httpRequest valueForHTTPHeaderField:@"Content-type"]).to.equal(@"application/x-www-form-urlencoded; charset=utf-8"); + expect(httpRequestBody).to.equal(encodedParameters); + + done(); + } failure:^(VENHTTPResponse *response, NSError *error) { + VENFail(); + }]; + }); }); }); }); diff --git a/VENCoreUnitTests/Utilities/EXPMatchers+Venmo.h b/VENCoreUnitTests/Utilities/EXPMatchers+Venmo.h index c148d37..6365c89 100644 --- a/VENCoreUnitTests/Utilities/EXPMatchers+Venmo.h +++ b/VENCoreUnitTests/Utilities/EXPMatchers+Venmo.h @@ -1,3 +1,5 @@ #import -EXPMatcherInterface(match, (id pattern)) \ No newline at end of file +EXPMatcherInterface(regexMatch, (id pattern)) + +#define regexMatch regexMatch \ No newline at end of file diff --git a/VENCoreUnitTests/Utilities/EXPMatchers+Venmo.m b/VENCoreUnitTests/Utilities/EXPMatchers+Venmo.m index 403bf48..15f9092 100644 --- a/VENCoreUnitTests/Utilities/EXPMatchers+Venmo.m +++ b/VENCoreUnitTests/Utilities/EXPMatchers+Venmo.m @@ -1,6 +1,6 @@ #import "EXPMatchers+Venmo.h" -EXPMatcherImplementationBegin(match, (id pattern)) +EXPMatcherImplementationBegin(regexMatch, (id pattern)) prerequisite(^BOOL{ return [actual isKindOfClass:[NSString class]] && ([pattern isKindOfClass:[NSString class]] || [pattern isKindOfClass:[NSRegularExpression class]]); diff --git a/VENCoreUnitTests/VENCoreUnitTests-Info.plist b/VENCoreUnitTests/VENCoreUnitTests-Info.plist index 3c4e571..169b6f7 100644 --- a/VENCoreUnitTests/VENCoreUnitTests-Info.plist +++ b/VENCoreUnitTests/VENCoreUnitTests-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.venmo.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType From 0406fda48de99d0b8c5b7eaa30324f84bb1ec43f Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 14:14:24 -0400 Subject: [PATCH 03/15] Correct header imports and disable bitcode --- VENCore.xcodeproj/project.pbxproj | 2 ++ VENCore/Categories/NSString+VENCore.h | 2 +- VENCore/Models/Transactions/VENCreateTransactionRequest.h | 2 +- VENCore/Models/Transactions/VENTransaction.h | 4 +--- VENCore/Models/Transactions/VENTransaction.m | 1 + VENCore/Models/Transactions/VENTransactionTarget.h | 2 +- VENCore/Models/Transactions/VENTransactionTarget.m | 1 + VENCore/Networking/VENHTTPResponse.h | 2 -- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/VENCore.xcodeproj/project.pbxproj b/VENCore.xcodeproj/project.pbxproj index b78dff8..deca9ea 100644 --- a/VENCore.xcodeproj/project.pbxproj +++ b/VENCore.xcodeproj/project.pbxproj @@ -789,6 +789,7 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; FRAMEWORK_SEARCH_PATHS = ( @@ -822,6 +823,7 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", diff --git a/VENCore/Categories/NSString+VENCore.h b/VENCore/Categories/NSString+VENCore.h index a18951e..8bfe2c2 100644 --- a/VENCore/Categories/NSString+VENCore.h +++ b/VENCore/Categories/NSString+VENCore.h @@ -1,6 +1,6 @@ @import Foundation; -#import "VENTransactionTarget.h" +#import @interface NSString (VENCore) diff --git a/VENCore/Models/Transactions/VENCreateTransactionRequest.h b/VENCore/Models/Transactions/VENCreateTransactionRequest.h index c0b9c7c..4b919f9 100644 --- a/VENCore/Models/Transactions/VENCreateTransactionRequest.h +++ b/VENCore/Models/Transactions/VENCreateTransactionRequest.h @@ -1,6 +1,6 @@ @import Foundation; -#import "VENTransaction.h" +#import @interface VENCreateTransactionRequest : NSObject diff --git a/VENCore/Models/Transactions/VENTransaction.h b/VENCore/Models/Transactions/VENTransaction.h index b3f1f21..65d09d7 100644 --- a/VENCore/Models/Transactions/VENTransaction.h +++ b/VENCore/Models/Transactions/VENTransaction.h @@ -1,8 +1,6 @@ @import Foundation; -#import "VENTransactionTarget.h" - -@class VENMutableTransaction, VENUser, VENHTTPResponse; +@class VENMutableTransaction, VENUser, VENHTTPResponse, VENTransactionTarget; typedef NS_ENUM(NSUInteger, VENTransactionType) { VENTransactionTypeUnknown, diff --git a/VENCore/Models/Transactions/VENTransaction.m b/VENCore/Models/Transactions/VENTransaction.m index 9f5fd92..e10d636 100644 --- a/VENCore/Models/Transactions/VENTransaction.m +++ b/VENCore/Models/Transactions/VENTransaction.m @@ -2,6 +2,7 @@ #import "VENCore.h" #import "VENTransactionPayloadKeys.h" #import "NSDictionary+VENCore.h" +#import "VENTransactionTarget.h" NSString *const VENErrorDomainTransaction = @"com.venmo.VENCore.ErrorDomain.VENTransaction"; NSString *const VENTransactionTypeStrings[] = {@"unknown", @"pay", @"charge"}; diff --git a/VENCore/Models/Transactions/VENTransactionTarget.h b/VENCore/Models/Transactions/VENTransactionTarget.h index 43352f7..bea7ad6 100644 --- a/VENCore/Models/Transactions/VENTransactionTarget.h +++ b/VENCore/Models/Transactions/VENTransactionTarget.h @@ -1,6 +1,6 @@ @import Foundation; -#import "VENUser.h" +@class VENUser; typedef NS_ENUM(NSUInteger, VENTargetType) { VENTargetTypeUnknown, diff --git a/VENCore/Models/Transactions/VENTransactionTarget.m b/VENCore/Models/Transactions/VENTransactionTarget.m index 9bd0dd0..1a5f659 100644 --- a/VENCore/Models/Transactions/VENTransactionTarget.m +++ b/VENCore/Models/Transactions/VENTransactionTarget.m @@ -3,6 +3,7 @@ #import "VENTransactionPayloadKeys.h" #import "NSString+VENCore.h" #import "NSDictionary+VENCore.h" +#import "VENUser.h" @import CoreGraphics; diff --git a/VENCore/Networking/VENHTTPResponse.h b/VENCore/Networking/VENHTTPResponse.h index 95cd6ca..462baf7 100644 --- a/VENCore/Networking/VENHTTPResponse.h +++ b/VENCore/Networking/VENHTTPResponse.h @@ -1,7 +1,5 @@ @import Foundation; -@class AFHTTPRequestOperation; - extern NSString *const VENErrorDomainHTTPResponse; typedef NS_ENUM(NSInteger, VEErrorCodeHTTPResponse) { From bc6a3e271664e59660fd0ead6447f1e3a1943bc5 Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 14:19:16 -0400 Subject: [PATCH 04/15] Update bundled dependencies --- Gemfile.lock | 63 +++++++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9af8eb1..bcd8101 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,59 +1,66 @@ GEM remote: https://rubygems.org/ specs: - activesupport (4.2.1) + activesupport (4.2.4) i18n (~> 0.7) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - claide (0.8.1) - clamp (0.6.3) - cocoapods (0.37.2) - activesupport (>= 3.2.15) - claide (~> 0.8.1) - cocoapods-core (= 0.37.2) - cocoapods-downloader (~> 0.9.0) + claide (0.9.1) + clamp (0.6.5) + cocoapods (0.39.0) + activesupport (>= 4.0.2) + claide (~> 0.9.1) + cocoapods-core (= 0.39.0) + cocoapods-downloader (~> 0.9.3) cocoapods-plugins (~> 0.4.2) - cocoapods-trunk (~> 0.6.1) - cocoapods-try (~> 0.4.5) + cocoapods-search (~> 0.1.0) + cocoapods-stats (~> 0.6.2) + cocoapods-trunk (~> 0.6.4) + cocoapods-try (~> 0.5.1) colored (~> 1.2) escape (~> 0.0.4) - molinillo (~> 0.2.3) - nap (~> 0.8) - xcodeproj (~> 0.24.2) - cocoapods-core (0.37.2) - activesupport (>= 3.2.15) + molinillo (~> 0.4.0) + nap (~> 1.0) + xcodeproj (~> 0.28.2) + cocoapods-core (0.39.0) + activesupport (>= 4.0.2) fuzzy_match (~> 2.0.4) - nap (~> 0.8.0) - cocoapods-downloader (0.9.0) + nap (~> 1.0) + cocoapods-downloader (0.9.3) cocoapods-plugins (0.4.2) nap - cocoapods-trunk (0.6.1) - nap (>= 0.8) + cocoapods-search (0.1.0) + cocoapods-stats (0.6.2) + cocoapods-trunk (0.6.4) + nap (>= 0.8, < 2.0) netrc (= 0.7.8) - cocoapods-try (0.4.5) + cocoapods-try (0.5.1) colored (1.2) escape (0.0.4) fuzzy_match (2.0.4) i18n (0.7.0) - json (1.8.2) - minitest (5.7.0) - molinillo (0.2.3) - nap (0.8.0) + json (1.8.3) + minitest (5.8.2) + molinillo (0.4.0) + nap (1.0.0) netrc (0.7.8) plist (3.1.0) rake (10.4.2) - slather (0.0.233) + rouge (1.10.1) + slather (1.3.0) clamp (~> 0.6) xcodeproj (~> 0.17) thread_safe (0.3.5) tzinfo (1.2.2) thread_safe (~> 0.1) - xcodeproj (0.24.2) + xcodeproj (0.28.2) activesupport (>= 3) + claide (~> 0.9.1) colored (~> 1.2) - xcpretty (0.1.10) + xcpretty (0.2.1) + rouge (~> 1.8) PLATFORMS ruby @@ -66,4 +73,4 @@ DEPENDENCIES xcpretty BUNDLED WITH - 1.10.1 + 1.10.6 From c120ea0f476d0c5cc126cce9d0dc14e853a188a5 Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 14:32:58 -0400 Subject: [PATCH 05/15] Add *.gcda files to gitignore. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4ad3cd0..9d18fc4 100644 --- a/.gitignore +++ b/.gitignore @@ -74,5 +74,6 @@ Temporary Items .apdisk *.gcno +*.gcda VENCore.xcworkspace From 6cc4182cd3e6ac5b01538d15de8a35128814e844 Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 14:33:23 -0400 Subject: [PATCH 06/15] Use Cocoapods to pull in all testing dependencies --- Podfile | 4 + Podfile.lock | 6 ++ VENCore.xcodeproj/project.pbxproj | 166 +++++++++++++++++++++--------- 3 files changed, 126 insertions(+), 50 deletions(-) diff --git a/Podfile b/Podfile index 2760eb7..095a350 100644 --- a/Podfile +++ b/Podfile @@ -4,6 +4,10 @@ platform :ios, '8.0' inhibit_all_warnings! +use_frameworks! + +podspec + target 'VENCoreUnitTests', :exclusive => true do pod 'Expecta' pod 'Nocilla' diff --git a/Podfile.lock b/Podfile.lock index 5544056..99d7862 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,11 +1,15 @@ PODS: + - CMDQueryStringSerialization (0.4.1): + - ISO8601 - Expecta (1.0.3) + - ISO8601 (0.3.0) - Nocilla (0.10.0) - OCHamcrest (4.3.0) - OCMock (2.2.4) - Specta (1.0.4) DEPENDENCIES: + - CMDQueryStringSerialization (~> 0.4) - Expecta - Nocilla - OCHamcrest @@ -13,7 +17,9 @@ DEPENDENCIES: - Specta SPEC CHECKSUMS: + CMDQueryStringSerialization: 4bb0a2f5e7d8d8678d911d88072274952cbef4e5 Expecta: 9d1bff6c8b0eeee73a166a2ee898892478927a15 + ISO8601: 8d8a22d5edf0554a1cf75bac028c76c1dc0ffaef Nocilla: ae0a2b05f3087b473624ac2b25903695df51246a OCHamcrest: cd63d27f48a266d4412c0b295b01b8f0940efa81 OCMock: a6a7dc0e3997fb9f35d99f72528698ebf60d64f2 diff --git a/VENCore.xcodeproj/project.pbxproj b/VENCore.xcodeproj/project.pbxproj index deca9ea..eaeddf7 100644 --- a/VENCore.xcodeproj/project.pbxproj +++ b/VENCore.xcodeproj/project.pbxproj @@ -7,8 +7,9 @@ objects = { /* Begin PBXBuildFile section */ - 26839E141BE11F82001651E8 /* CMDQueryStringSerialization.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E121BE11F82001651E8 /* CMDQueryStringSerialization.framework */; }; - 26839E151BE11F82001651E8 /* ISO8601.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E131BE11F82001651E8 /* ISO8601.framework */; }; + 253A086E6F0B79024116EF2D /* Pods.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5027E661B70FCF9BC067E6E7 /* Pods.framework */; }; + 26839E141BE11F82001651E8 /* CMDQueryStringSerialization.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E121BE11F82001651E8 /* CMDQueryStringSerialization.framework */; settings = {ATTRIBUTES = (Required, ); }; }; + 26839E151BE11F82001651E8 /* ISO8601.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E131BE11F82001651E8 /* ISO8601.framework */; settings = {ATTRIBUTES = (Required, ); }; }; 26839E161BE12057001651E8 /* NSString+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB8E3C018FDDB6300A22C6B /* NSString+VENCore.m */; }; 26839E171BE12057001651E8 /* NSDictionary+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EB418B9C18EB0E060003CBF5 /* NSDictionary+VENCore.m */; }; 26839E181BE12057001651E8 /* NSArray+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B2C2D05196ED75400D1B241 /* NSArray+VENCore.m */; }; @@ -39,6 +40,7 @@ 26839E311BE122B3001651E8 /* CMDQueryStringSerialization.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E121BE11F82001651E8 /* CMDQueryStringSerialization.framework */; }; 26839E321BE122B3001651E8 /* ISO8601.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E131BE11F82001651E8 /* ISO8601.framework */; }; 26839E331BE12947001651E8 /* VENCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E0A1BE11E83001651E8 /* VENCore.framework */; }; + 38167129E82A7A8679352060 /* Pods_VENCoreIntegrationTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CDDE8E3C8B8608E0C8651A1 /* Pods_VENCoreIntegrationTests.framework */; }; 3AE56FF21908A0610054B7EF /* VENCreateTransactionRequestSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AE56FF11908A0610054B7EF /* VENCreateTransactionRequestSpec.m */; }; 4796A38718FDD4C6005CABA6 /* fetchInvalidUser.json in Resources */ = {isa = PBXBuildFile; fileRef = 4796A38618FDD4C6005CABA6 /* fetchInvalidUser.json */; }; 4796D62118FC4B6D001461B1 /* VENTransactionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 4796D61C18FC4B6D001461B1 /* VENTransactionSpec.m */; }; @@ -47,8 +49,7 @@ 9B2C2CF9196C992000D1B241 /* fetchInvalidFriends.json in Resources */ = {isa = PBXBuildFile; fileRef = 9B2C2CF8196C992000D1B241 /* fetchInvalidFriends.json */; }; 9B2C2D09196EDC3000D1B241 /* NSArray+VENCoreSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B2C2D08196EDC3000D1B241 /* NSArray+VENCoreSpec.m */; }; 9BF60703196C333000F163E5 /* fetchFriends.json in Resources */ = {isa = PBXBuildFile; fileRef = 9BF60702196C333000F163E5 /* fetchFriends.json */; }; - E84803CCC64F49DB9C88AD75 /* libPods-VENCoreIntegrationTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 25B6CD691E644507A1045E0D /* libPods-VENCoreIntegrationTests.a */; }; - EAEAD5D239AE426196E78022 /* libPods-VENCoreUnitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4779F161125042D590B452A8 /* libPods-VENCoreUnitTests.a */; }; + B3A3543FF245E4B94CFAE159 /* Pods_VENCoreUnitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94B9CC68F8946B6E49546BE4 /* Pods_VENCoreUnitTests.framework */; }; EB00DB351906E647001836A8 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCB248518E9FBAF00807472 /* XCTest.framework */; }; EB00DB361906E647001836A8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCB247718E9FBAF00807472 /* Foundation.framework */; }; EB00DB371906E647001836A8 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCB248818E9FBAF00807472 /* UIKit.framework */; }; @@ -77,11 +78,6 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 1DC461A27E94407698BE1D38 /* libPods-VENCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VENCore.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 205F497EB245D3BA7F715DC0 /* Pods-VENCoreIntegrationTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCoreIntegrationTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VENCoreIntegrationTests/Pods-VENCoreIntegrationTests.debug.xcconfig"; sourceTree = ""; }; - 2217ED26197A5908221D4520 /* Pods-VENCoreUnitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCoreUnitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-VENCoreUnitTests/Pods-VENCoreUnitTests.release.xcconfig"; sourceTree = ""; }; - 2222D271DEDBF7804774C8FD /* Pods-VENCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCore.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VENCore/Pods-VENCore.debug.xcconfig"; sourceTree = ""; }; - 25B6CD691E644507A1045E0D /* libPods-VENCoreIntegrationTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VENCoreIntegrationTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 26839E0A1BE11E83001651E8 /* VENCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VENCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 26839E0E1BE11E83001651E8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 26839E121BE11F82001651E8 /* CMDQueryStringSerialization.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CMDQueryStringSerialization.framework; path = Carthage/Build/iOS/CMDQueryStringSerialization.framework; sourceTree = ""; }; @@ -89,27 +85,29 @@ 3AE56FEE190871DF0054B7EF /* VENCreateTransactionRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VENCreateTransactionRequest.h; sourceTree = ""; }; 3AE56FEF190871DF0054B7EF /* VENCreateTransactionRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENCreateTransactionRequest.m; sourceTree = ""; }; 3AE56FF11908A0610054B7EF /* VENCreateTransactionRequestSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENCreateTransactionRequestSpec.m; sourceTree = ""; }; - 4492F2DD60771C4F396F1086 /* Pods-VENCoreIntegrationTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCoreIntegrationTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-VENCoreIntegrationTests/Pods-VENCoreIntegrationTests.release.xcconfig"; sourceTree = ""; }; 47136D3A18FF001F00AD63CD /* VENTransactionPayloadKeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VENTransactionPayloadKeys.h; sourceTree = ""; }; - 4779F161125042D590B452A8 /* libPods-VENCoreUnitTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VENCoreUnitTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 4796A38618FDD4C6005CABA6 /* fetchInvalidUser.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = fetchInvalidUser.json; sourceTree = ""; }; 4796D61C18FC4B6D001461B1 /* VENTransactionSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENTransactionSpec.m; sourceTree = ""; }; 4796D61F18FC4B6D001461B1 /* VENUserSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENUserSpec.m; sourceTree = ""; }; 47BD36DF18FDBA4500DE4554 /* fetchChrisUser.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = fetchChrisUser.json; sourceTree = ""; }; - 96E55B3EDBC65A58DAC8CCD3 /* Pods-VENCoreUnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCoreUnitTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VENCoreUnitTests/Pods-VENCoreUnitTests.debug.xcconfig"; sourceTree = ""; }; + 5027E661B70FCF9BC067E6E7 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 575041DA39E107A80821B977 /* Pods-VENCoreIntegrationTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCoreIntegrationTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VENCoreIntegrationTests/Pods-VENCoreIntegrationTests.debug.xcconfig"; sourceTree = ""; }; + 8224C74786CBFD1C6FDE05EC /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; + 8CDDE8E3C8B8608E0C8651A1 /* Pods_VENCoreIntegrationTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VENCoreIntegrationTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8E4462F85B08E286CD5E765C /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; + 94B9CC68F8946B6E49546BE4 /* Pods_VENCoreUnitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VENCoreUnitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9B2C2CF8196C992000D1B241 /* fetchInvalidFriends.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = fetchInvalidFriends.json; sourceTree = ""; }; 9B2C2D04196ED75400D1B241 /* NSArray+VENCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSArray+VENCore.h"; path = "Categories/NSArray+VENCore.h"; sourceTree = ""; }; 9B2C2D05196ED75400D1B241 /* NSArray+VENCore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSArray+VENCore.m"; path = "Categories/NSArray+VENCore.m"; sourceTree = ""; }; 9B2C2D08196EDC3000D1B241 /* NSArray+VENCoreSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSArray+VENCoreSpec.m"; path = "Categories/NSArray+VENCoreSpec.m"; sourceTree = ""; }; 9BF60702196C333000F163E5 /* fetchFriends.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = fetchFriends.json; sourceTree = ""; }; - BB802D1BBF75489EBAC57A1E /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; C24E595318F84C67009670F7 /* VENTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VENTransaction.h; sourceTree = ""; }; C24E595418F84C67009670F7 /* VENTransaction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENTransaction.m; sourceTree = ""; }; C24E595618F84C67009670F7 /* VENUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VENUser.h; sourceTree = ""; }; C24E595718F84C67009670F7 /* VENUser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENUser.m; sourceTree = ""; }; C24E595E18F87FF2009670F7 /* VENMutableUserSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENMutableUserSpec.m; sourceTree = ""; }; C24E596018F885D7009670F7 /* VENUserPayloadKeys.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VENUserPayloadKeys.h; sourceTree = ""; }; - D6B916DA5438FEE030F90BD9 /* Pods-VENCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCore.release.xcconfig"; path = "Pods/Target Support Files/Pods-VENCore/Pods-VENCore.release.xcconfig"; sourceTree = ""; }; + CDAFEE420DB8EEC2AD7626E3 /* Pods-VENCoreIntegrationTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCoreIntegrationTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-VENCoreIntegrationTests/Pods-VENCoreIntegrationTests.release.xcconfig"; sourceTree = ""; }; EB00DB341906E647001836A8 /* VENCoreIntegrationTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VENCoreIntegrationTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; EB00DB3A1906E647001836A8 /* VENCoreIntegrationTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "VENCoreIntegrationTests-Info.plist"; sourceTree = ""; }; EB00DB3C1906E647001836A8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -159,6 +157,8 @@ EBF84D2918EA5ADE00C0E077 /* NSError+VENCore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSError+VENCore.m"; path = "Categories/NSError+VENCore.m"; sourceTree = ""; }; EBFB2F8E18F7228600612BD8 /* UIDevice+VENCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIDevice+VENCore.h"; path = "Categories/UIDevice+VENCore.h"; sourceTree = ""; }; EBFB2F8F18F7228600612BD8 /* UIDevice+VENCore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIDevice+VENCore.m"; path = "Categories/UIDevice+VENCore.m"; sourceTree = ""; }; + F7A7F72E226151CBCB374B75 /* Pods-VENCoreUnitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCoreUnitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-VENCoreUnitTests/Pods-VENCoreUnitTests.release.xcconfig"; sourceTree = ""; }; + FC666AF2922103E86E3822A9 /* Pods-VENCoreUnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENCoreUnitTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VENCoreUnitTests/Pods-VENCoreUnitTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -168,6 +168,7 @@ files = ( 26839E141BE11F82001651E8 /* CMDQueryStringSerialization.framework in Frameworks */, 26839E151BE11F82001651E8 /* ISO8601.framework in Frameworks */, + 253A086E6F0B79024116EF2D /* Pods.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -179,7 +180,7 @@ EB00DB351906E647001836A8 /* XCTest.framework in Frameworks */, EB00DB371906E647001836A8 /* UIKit.framework in Frameworks */, EB00DB361906E647001836A8 /* Foundation.framework in Frameworks */, - E84803CCC64F49DB9C88AD75 /* libPods-VENCoreIntegrationTests.a in Frameworks */, + 38167129E82A7A8679352060 /* Pods_VENCoreIntegrationTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -191,9 +192,9 @@ EBCB248618E9FBAF00807472 /* XCTest.framework in Frameworks */, EBCB248918E9FBAF00807472 /* UIKit.framework in Frameworks */, EBCB248718E9FBAF00807472 /* Foundation.framework in Frameworks */, - EAEAD5D239AE426196E78022 /* libPods-VENCoreUnitTests.a in Frameworks */, 26839E311BE122B3001651E8 /* CMDQueryStringSerialization.framework in Frameworks */, 26839E321BE122B3001651E8 /* ISO8601.framework in Frameworks */, + B3A3543FF245E4B94CFAE159 /* Pods_VENCoreUnitTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -239,19 +240,6 @@ path = API/users; sourceTree = ""; }; - 9E39190560B5191E34845983 /* Pods */ = { - isa = PBXGroup; - children = ( - 205F497EB245D3BA7F715DC0 /* Pods-VENCoreIntegrationTests.debug.xcconfig */, - 4492F2DD60771C4F396F1086 /* Pods-VENCoreIntegrationTests.release.xcconfig */, - 96E55B3EDBC65A58DAC8CCD3 /* Pods-VENCoreUnitTests.debug.xcconfig */, - 2217ED26197A5908221D4520 /* Pods-VENCoreUnitTests.release.xcconfig */, - 2222D271DEDBF7804774C8FD /* Pods-VENCore.debug.xcconfig */, - D6B916DA5438FEE030F90BD9 /* Pods-VENCore.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; C24E594F18F84C67009670F7 /* Models */ = { isa = PBXGroup; children = ( @@ -396,7 +384,7 @@ EB00DB381906E647001836A8 /* VENCoreIntegrationTests */, EBCB247618E9FBAF00807472 /* Frameworks */, EBCB247518E9FBAF00807472 /* Products */, - 9E39190560B5191E34845983 /* Pods */, + F8A2DD09E27C4CD154A3DC9E /* Pods */, ); sourceTree = ""; }; @@ -418,10 +406,9 @@ EBCB247718E9FBAF00807472 /* Foundation.framework */, EBCB248518E9FBAF00807472 /* XCTest.framework */, EBCB248818E9FBAF00807472 /* UIKit.framework */, - BB802D1BBF75489EBAC57A1E /* libPods.a */, - 1DC461A27E94407698BE1D38 /* libPods-VENCore.a */, - 25B6CD691E644507A1045E0D /* libPods-VENCoreIntegrationTests.a */, - 4779F161125042D590B452A8 /* libPods-VENCoreUnitTests.a */, + 5027E661B70FCF9BC067E6E7 /* Pods.framework */, + 8CDDE8E3C8B8608E0C8651A1 /* Pods_VENCoreIntegrationTests.framework */, + 94B9CC68F8946B6E49546BE4 /* Pods_VENCoreUnitTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -489,6 +476,19 @@ name = Categories; sourceTree = ""; }; + F8A2DD09E27C4CD154A3DC9E /* Pods */ = { + isa = PBXGroup; + children = ( + 8224C74786CBFD1C6FDE05EC /* Pods.debug.xcconfig */, + 8E4462F85B08E286CD5E765C /* Pods.release.xcconfig */, + 575041DA39E107A80821B977 /* Pods-VENCoreIntegrationTests.debug.xcconfig */, + CDAFEE420DB8EEC2AD7626E3 /* Pods-VENCoreIntegrationTests.release.xcconfig */, + FC666AF2922103E86E3822A9 /* Pods-VENCoreUnitTests.debug.xcconfig */, + F7A7F72E226151CBCB374B75 /* Pods-VENCoreUnitTests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -520,10 +520,12 @@ isa = PBXNativeTarget; buildConfigurationList = 26839E0F1BE11E83001651E8 /* Build configuration list for PBXNativeTarget "VENCore" */; buildPhases = ( + 53C1F0D862332294A0C29A3B /* Check Pods Manifest.lock */, 26839E051BE11E83001651E8 /* Sources */, 26839E061BE11E83001651E8 /* Frameworks */, 26839E071BE11E83001651E8 /* Headers */, 26839E081BE11E83001651E8 /* Resources */, + F47E1BEDA26CC484B0B8AD84 /* Copy Pods Resources */, ); buildRules = ( ); @@ -538,11 +540,12 @@ isa = PBXNativeTarget; buildConfigurationList = EB00DB451906E647001836A8 /* Build configuration list for PBXNativeTarget "VENCoreIntegrationTests" */; buildPhases = ( + DD973B13532392D523569F77 /* Check Pods Manifest.lock */, EB00DB301906E647001836A8 /* Sources */, EB00DB311906E647001836A8 /* Frameworks */, EB00DB321906E647001836A8 /* Resources */, - A75C89F4BED9494FA5602BF2 /* Copy Pods Resources */, - 421D01B16B2F3F04B8E23669 /* Embed Pods Frameworks */, + ADF11FCA85FC0FEBF31B3160 /* Embed Pods Frameworks */, + C1602999DDBEA67C92D29FF5 /* Copy Pods Resources */, ); buildRules = ( ); @@ -557,11 +560,12 @@ isa = PBXNativeTarget; buildConfigurationList = EBCB249A18E9FBAF00807472 /* Build configuration list for PBXNativeTarget "VENCoreUnitTests" */; buildPhases = ( + 00604B6FFE1699E15CE22860 /* Check Pods Manifest.lock */, EBCB248018E9FBAF00807472 /* Sources */, EBCB248118E9FBAF00807472 /* Frameworks */, EBCB248218E9FBAF00807472 /* Resources */, - 5817C2AA84924DC496210914 /* Copy Pods Resources */, - D1BADFD3CCE8F8FC6561D55A /* Embed Pods Frameworks */, + 097240ACB5AFD4B7454E5854 /* Embed Pods Frameworks */, + D089DE9801023D4017F04FF3 /* Copy Pods Resources */, ); buildRules = ( ); @@ -644,7 +648,52 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 421D01B16B2F3F04B8E23669 /* Embed Pods Frameworks */ = { + 00604B6FFE1699E15CE22860 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 097240ACB5AFD4B7454E5854 /* Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENCoreUnitTests/Pods-VENCoreUnitTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 53C1F0D862332294A0C29A3B /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + ADF11FCA85FC0FEBF31B3160 /* Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -659,7 +708,7 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENCoreIntegrationTests/Pods-VENCoreIntegrationTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 5817C2AA84924DC496210914 /* Copy Pods Resources */ = { + C1602999DDBEA67C92D29FF5 /* Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -671,10 +720,10 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENCoreUnitTests/Pods-VENCoreUnitTests-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENCoreIntegrationTests/Pods-VENCoreIntegrationTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - A75C89F4BED9494FA5602BF2 /* Copy Pods Resources */ = { + D089DE9801023D4017F04FF3 /* Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -686,22 +735,37 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENCoreIntegrationTests/Pods-VENCoreIntegrationTests-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENCoreUnitTests/Pods-VENCoreUnitTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - D1BADFD3CCE8F8FC6561D55A /* Embed Pods Frameworks */ = { + DD973B13532392D523569F77 /* Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Embed Pods Frameworks"; + name = "Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENCoreUnitTests/Pods-VENCoreUnitTests-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + F47E1BEDA26CC484B0B8AD84 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -780,6 +844,7 @@ /* Begin XCBuildConfiguration section */ 26839E101BE11E83001651E8 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 8224C74786CBFD1C6FDE05EC /* Pods.debug.xcconfig */; buildSettings = { CLANG_WARN_UNREACHABLE_CODE = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -813,6 +878,7 @@ }; 26839E111BE11E83001651E8 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 8E4462F85B08E286CD5E765C /* Pods.release.xcconfig */; buildSettings = { CLANG_WARN_UNREACHABLE_CODE = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -846,7 +912,7 @@ }; EB00DB431906E647001836A8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 205F497EB245D3BA7F715DC0 /* Pods-VENCoreIntegrationTests.debug.xcconfig */; + baseConfigurationReference = 575041DA39E107A80821B977 /* Pods-VENCoreIntegrationTests.debug.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", @@ -870,7 +936,7 @@ }; EB00DB441906E647001836A8 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4492F2DD60771C4F396F1086 /* Pods-VENCoreIntegrationTests.release.xcconfig */; + baseConfigurationReference = CDAFEE420DB8EEC2AD7626E3 /* Pods-VENCoreIntegrationTests.release.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", @@ -971,7 +1037,7 @@ }; EBCB249B18E9FBAF00807472 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 96E55B3EDBC65A58DAC8CCD3 /* Pods-VENCoreUnitTests.debug.xcconfig */; + baseConfigurationReference = FC666AF2922103E86E3822A9 /* Pods-VENCoreUnitTests.debug.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -992,7 +1058,7 @@ }; EBCB249C18E9FBAF00807472 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2217ED26197A5908221D4520 /* Pods-VENCoreUnitTests.release.xcconfig */; + baseConfigurationReference = F7A7F72E226151CBCB374B75 /* Pods-VENCoreUnitTests.release.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", From ed50c875e82efe477abc3b6e58178c04fafc2913 Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 15:56:30 -0400 Subject: [PATCH 07/15] Replace VENFail with failure --- VENCoreIntegrationTests/PaymentSandboxSpec.m | 16 +++++----- .../VENCoreIntegrationTests-Prefix.pch | 2 -- .../VENUserIntegrationSpec.m | 2 +- .../VENCreateTransactionRequestSpec.m | 10 +++---- VENCoreUnitTests/Models/Users/VENUserSpec.m | 20 ++++++------- VENCoreUnitTests/Networking/VENHTTPSpec.m | 30 +++++++++---------- VENCoreUnitTests/VENCoreUnitTests-Prefix.pch | 2 -- 7 files changed, 39 insertions(+), 43 deletions(-) diff --git a/VENCoreIntegrationTests/PaymentSandboxSpec.m b/VENCoreIntegrationTests/PaymentSandboxSpec.m index 5012dfa..aa2a4a1 100644 --- a/VENCoreIntegrationTests/PaymentSandboxSpec.m +++ b/VENCoreIntegrationTests/PaymentSandboxSpec.m @@ -33,7 +33,7 @@ expect(sentTransaction.status).to.equal(VENTransactionStatusSettled); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); @@ -50,7 +50,7 @@ expect(sentTransaction.status).to.equal(VENTransactionStatusSettled); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); @@ -68,7 +68,7 @@ expect(sentTransaction.status).to.equal(VENTransactionStatusSettled); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); @@ -96,7 +96,7 @@ expect(sentTransaction.status).to.equal(VENTransactionStatusFailed); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); @@ -124,7 +124,7 @@ expect(sentTransaction.status).to.equal(VENTransactionStatusPending); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; @@ -142,7 +142,7 @@ expect(sentTransaction.status).to.equal(VENTransactionStatusPending); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); @@ -171,7 +171,7 @@ expect(sentTransaction.status).to.equal(VENTransactionStatusSettled); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); @@ -200,7 +200,7 @@ expect(sentTransaction.status).to.equal(VENTransactionStatusPending); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); diff --git a/VENCoreIntegrationTests/VENCoreIntegrationTests-Prefix.pch b/VENCoreIntegrationTests/VENCoreIntegrationTests-Prefix.pch index c76f760..4e17c61 100644 --- a/VENCoreIntegrationTests/VENCoreIntegrationTests-Prefix.pch +++ b/VENCoreIntegrationTests/VENCoreIntegrationTests-Prefix.pch @@ -15,5 +15,3 @@ #import #import "VENTestUtilities.h" - -#define VENFail() expect(YES).to.equal(NO) \ No newline at end of file diff --git a/VENCoreIntegrationTests/VENUserIntegrationSpec.m b/VENCoreIntegrationTests/VENUserIntegrationSpec.m index e3c4baf..45063d0 100644 --- a/VENCoreIntegrationTests/VENUserIntegrationSpec.m +++ b/VENCoreIntegrationTests/VENUserIntegrationSpec.m @@ -20,7 +20,7 @@ expect(user.externalId).to.equal(externalId); done(); } failure:^(NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); diff --git a/VENCoreUnitTests/Models/Transactions/VENCreateTransactionRequestSpec.m b/VENCoreUnitTests/Models/Transactions/VENCreateTransactionRequestSpec.m index 4b7f9ce..9c2ade3 100644 --- a/VENCoreUnitTests/Models/Transactions/VENCreateTransactionRequestSpec.m +++ b/VENCoreUnitTests/Models/Transactions/VENCreateTransactionRequestSpec.m @@ -90,7 +90,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; expect([sentTransactions count]).to.equal(1); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); @@ -110,7 +110,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; waitUntil(^(DoneCallback done) { [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { - VENFail(); + failure(@"Failed to return correct response."); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { expect([sentTransactions count]).to.equal(0); @@ -150,7 +150,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; expect([sentTransactions count]).to.equal(2); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); @@ -181,7 +181,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; waitUntil(^(DoneCallback done) { [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { - VENFail(); + failure(@"Failed to return correct response."); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { // The failure block shouldn't be called @@ -211,7 +211,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; waitUntil(^(DoneCallback done) { [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { - VENFail(); + failure(@"Failed to return correct response."); done(); } failure:^(NSArray *sentTransactions, VENHTTPResponse *response, NSError *error) { expect([sentTransactions count]).to.equal(0); diff --git a/VENCoreUnitTests/Models/Users/VENUserSpec.m b/VENCoreUnitTests/Models/Users/VENUserSpec.m index 906892d..0c9d0b1 100644 --- a/VENCoreUnitTests/Models/Users/VENUserSpec.m +++ b/VENCoreUnitTests/Models/Users/VENUserSpec.m @@ -212,7 +212,7 @@ expect(user.externalId).to.equal(externalId); done(); } failure:^(NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); @@ -229,7 +229,7 @@ waitUntil(^(DoneCallback done) { [VENUser fetchUserWithExternalId:externalId success:^(VENUser *user) { - VENFail(); + failure(@"Failed to return correct response."); done(); } failure:^(NSError *error) { expect([error localizedDescription]).to.equal(@"Resource not found."); @@ -241,7 +241,7 @@ it(@"should call failure when not passed an external id", ^{ waitUntil(^(DoneCallback done) { [VENUser fetchUserWithExternalId:nil success:^(VENUser *user) { - VENFail(); + failure(@"Failed to return correct response."); done(); } failure:^(NSError *error) { expect(error).notTo.beNil(); @@ -253,7 +253,7 @@ it(@"should call failure when passed an empty-string external id", ^{ waitUntil(^(DoneCallback done) { [VENUser fetchUserWithExternalId:@"" success:^(VENUser *user) { - VENFail(); + failure(@"Failed to return correct response."); done(); } failure:^(NSError *error) { expect(error).notTo.beNil(); @@ -279,7 +279,7 @@ done(); } failure:^(NSError *error){ - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); @@ -303,7 +303,7 @@ } done(); } failure:^(NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); @@ -324,7 +324,7 @@ } done(); } failure:^(NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); done(); }]; }); @@ -338,7 +338,7 @@ waitUntil(^(DoneCallback done) { [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { - VENFail(); + failure(@"Failed to return correct response."); done(); } failure:^(NSError *error) { expect([error localizedDescription]).to.equal(@"Resource not found."); @@ -350,7 +350,7 @@ it(@"should call failure when not passed an external id", ^{ waitUntil(^(DoneCallback done) { [VENUser fetchFriendsWithExternalId:nil success:^(NSArray *friendsArray) { - VENFail(); + failure(@"Failed to return correct response."); done(); } failure:^(NSError *error) { expect(error).notTo.beNil(); @@ -362,7 +362,7 @@ it(@"should call failure when passed an empty-string external id", ^{ waitUntil(^(DoneCallback done) { [VENUser fetchFriendsWithExternalId:@"" success:^(NSArray *friendsArray) { - VENFail(); + failure(@"Failed to return correct response."); done(); } failure:^(NSError *error) { expect(error).notTo.beNil(); diff --git a/VENCoreUnitTests/Networking/VENHTTPSpec.m b/VENCoreUnitTests/Networking/VENHTTPSpec.m index f3bd1d8..8cc121c 100644 --- a/VENCoreUnitTests/Networking/VENHTTPSpec.m +++ b/VENCoreUnitTests/Networking/VENHTTPSpec.m @@ -109,7 +109,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(httpRequest.URL.scheme).to.equal(@"ven-http-test"); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -123,7 +123,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -136,7 +136,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(httpRequest.URL.path).to.equal(@"/base/path/200.json"); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -152,7 +152,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(httpRequest.HTTPBody).to.beNil(); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -167,7 +167,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(httpRequest.HTTPBody).to.beNil(); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -182,7 +182,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(httpRequest.URL.query).to.beNil(); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -198,7 +198,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(httpRequest.URL.query).to.beNil(); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -213,7 +213,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(httpRequest.URL.query).to.beNil(); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -229,7 +229,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(httpRequest.URL.query).to.beNil(); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -245,7 +245,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(httpRequest.URL.query).to.equal(nil); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -261,7 +261,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(httpRequest.HTTPBody).to.beNil(); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -276,7 +276,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(requestHeaders[@"Accept"]).to.equal(@"application/json"); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -289,7 +289,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(requestHeaders[@"User-Agent"]).to.contain(@"iOS"); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -302,7 +302,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect(requestHeaders[@"Accept-Language"]).to.equal(@"en-US"); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -346,7 +346,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); diff --git a/VENCoreUnitTests/VENCoreUnitTests-Prefix.pch b/VENCoreUnitTests/VENCoreUnitTests-Prefix.pch index fe0bb9a..317b789 100644 --- a/VENCoreUnitTests/VENCoreUnitTests-Prefix.pch +++ b/VENCoreUnitTests/VENCoreUnitTests-Prefix.pch @@ -17,5 +17,3 @@ #import "VENTestUtilities.h" #import "EXPMatchers+Venmo.h" - -#define VENFail() expect(YES).to.equal(NO) \ No newline at end of file From 62208f8eafb41ab80216bc3c78bec9cba6e817da Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 15:56:47 -0400 Subject: [PATCH 08/15] Remove test's dependency on CMDQueryStringComponents --- VENCoreUnitTests/Networking/VENHTTPSpec.m | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/VENCoreUnitTests/Networking/VENHTTPSpec.m b/VENCoreUnitTests/Networking/VENHTTPSpec.m index 8cc121c..a12a298 100644 --- a/VENCoreUnitTests/Networking/VENHTTPSpec.m +++ b/VENCoreUnitTests/Networking/VENHTTPSpec.m @@ -3,8 +3,6 @@ #import "VENCore.h" #import "NSString+VENCore.h" -@import CMDQueryStringSerialization; - #define kVENHTTPTestProtocolScheme @"ven-http-test" #define kVENHTTPTestProtocolHost @"base.example.com" #define kVENHTTPTestProtocolBasePath @"/base/path/" @@ -324,10 +322,10 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { waitUntil(^(DoneCallback done) { [http GET:@"200.json" parameters:parameterDictionary success:^(VENHTTPResponse *response) { NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - expect(httpRequest.URL.query).to.equal([CMDQueryStringSerialization queryStringWithDictionary:parameterDictionary]); + expect(httpRequest.URL.query).to.equal(@"falseBoolParam=0&numericParam=42&stringParam=a%20value&trueBoolParam=1"); done(); } failure:^(VENHTTPResponse *response, NSError *error) { - VENFail(); + failure(@"Failed to return correct response."); }]; }); }); @@ -339,10 +337,9 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { [http POST:@"200.json" parameters:parameterDictionary success:^(VENHTTPResponse *response) { NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; NSString *httpRequestBody = [VENHTTPTestProtocol parseRequestBodyFromTestResponse:response]; - NSString *encodedParameters = [CMDQueryStringSerialization queryStringWithDictionary:parameterDictionary]; - + expect([httpRequest valueForHTTPHeaderField:@"Content-type"]).to.equal(@"application/x-www-form-urlencoded; charset=utf-8"); - expect(httpRequestBody).to.equal(encodedParameters); + expect(httpRequestBody).to.equal(@"falseBoolParam=0&numericParam=42&stringParam=a%20value&trueBoolParam=1"); done(); } failure:^(VENHTTPResponse *response, NSError *error) { From 84a2529d3d7c22dbdbf806b3c5a154d0ea5d9dce Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 15:58:01 -0400 Subject: [PATCH 09/15] Random Xcode file touching MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Xcode likes to leave it's little 💩 all over our version controlled files. --- VENCore.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/VENCore.xcodeproj/project.pbxproj b/VENCore.xcodeproj/project.pbxproj index eaeddf7..1da490e 100644 --- a/VENCore.xcodeproj/project.pbxproj +++ b/VENCore.xcodeproj/project.pbxproj @@ -84,7 +84,7 @@ 26839E131BE11F82001651E8 /* ISO8601.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ISO8601.framework; path = Carthage/Build/iOS/ISO8601.framework; sourceTree = ""; }; 3AE56FEE190871DF0054B7EF /* VENCreateTransactionRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VENCreateTransactionRequest.h; sourceTree = ""; }; 3AE56FEF190871DF0054B7EF /* VENCreateTransactionRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENCreateTransactionRequest.m; sourceTree = ""; }; - 3AE56FF11908A0610054B7EF /* VENCreateTransactionRequestSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENCreateTransactionRequestSpec.m; sourceTree = ""; }; + 3AE56FF11908A0610054B7EF /* VENCreateTransactionRequestSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = VENCreateTransactionRequestSpec.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 47136D3A18FF001F00AD63CD /* VENTransactionPayloadKeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VENTransactionPayloadKeys.h; sourceTree = ""; }; 4796A38618FDD4C6005CABA6 /* fetchInvalidUser.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = fetchInvalidUser.json; sourceTree = ""; }; 4796D61C18FC4B6D001461B1 /* VENTransactionSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENTransactionSpec.m; sourceTree = ""; }; @@ -111,8 +111,8 @@ EB00DB341906E647001836A8 /* VENCoreIntegrationTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VENCoreIntegrationTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; EB00DB3A1906E647001836A8 /* VENCoreIntegrationTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "VENCoreIntegrationTests-Info.plist"; sourceTree = ""; }; EB00DB3C1906E647001836A8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - EB00DB3E1906E647001836A8 /* PaymentSandboxSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PaymentSandboxSpec.m; sourceTree = ""; }; - EB00DB401906E647001836A8 /* VENCoreIntegrationTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "VENCoreIntegrationTests-Prefix.pch"; sourceTree = ""; }; + EB00DB3E1906E647001836A8 /* PaymentSandboxSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = PaymentSandboxSpec.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + EB00DB401906E647001836A8 /* VENCoreIntegrationTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "VENCoreIntegrationTests-Prefix.pch"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; EB34431219071EA200B7791E /* paymentToUser.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = paymentToUser.json; path = API/payments/paymentToUser.json; sourceTree = ""; }; EB403ECA1953A1DA00F23593 /* EXPMatchers+Venmo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+Venmo.h"; path = "Utilities/EXPMatchers+Venmo.h"; sourceTree = ""; }; EB403ECB1953A1DA00F23593 /* EXPMatchers+Venmo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+Venmo.m"; path = "Utilities/EXPMatchers+Venmo.m"; sourceTree = ""; }; @@ -125,7 +125,7 @@ EB427E5618F8451B0070EDD9 /* VENTestUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTestUtilities.h; path = Utilities/VENTestUtilities.h; sourceTree = ""; }; EB427E5718F8451B0070EDD9 /* VENTestUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTestUtilities.m; path = Utilities/VENTestUtilities.m; sourceTree = ""; }; EB58F97C18F75B25008A6914 /* VENMutableTransactionSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENMutableTransactionSpec.m; sourceTree = ""; }; - EB6A5AD91906FC44003C067E /* VENUserIntegrationSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENUserIntegrationSpec.m; sourceTree = ""; }; + EB6A5AD91906FC44003C067E /* VENUserIntegrationSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = VENUserIntegrationSpec.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; EB74B2BD18E9FD7B00838A9D /* VENHTTP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENHTTP.h; path = Networking/VENHTTP.h; sourceTree = ""; }; EB74B2BE18E9FD7B00838A9D /* VENHTTP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENHTTP.m; path = Networking/VENHTTP.m; sourceTree = ""; }; EB9BF00718EA83B500416645 /* VENUserSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENUserSpec.m; sourceTree = ""; }; @@ -140,9 +140,9 @@ EBB8E3C018FDDB6300A22C6B /* NSString+VENCore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+VENCore.m"; path = "Categories/NSString+VENCore.m"; sourceTree = ""; }; EBBE7E0618EA017700E47338 /* VENHTTPResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENHTTPResponse.h; path = Networking/VENHTTPResponse.h; sourceTree = ""; }; EBBE7E0718EA017700E47338 /* VENHTTPResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENHTTPResponse.m; path = Networking/VENHTTPResponse.m; sourceTree = ""; }; - EBBE7E0918EA020500E47338 /* VENHTTPSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENHTTPSpec.m; path = Networking/VENHTTPSpec.m; sourceTree = ""; }; + EBBE7E0918EA020500E47338 /* VENHTTPSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = VENHTTPSpec.m; path = Networking/VENHTTPSpec.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; EBBE7E0C18EA022300E47338 /* VENHTTPResponseSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENHTTPResponseSpec.m; path = Networking/VENHTTPResponseSpec.m; sourceTree = ""; }; - EBBE7E1818EA2D7600E47338 /* VENCoreUnitTests-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "VENCoreUnitTests-Prefix.pch"; sourceTree = ""; }; + EBBE7E1818EA2D7600E47338 /* VENCoreUnitTests-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "VENCoreUnitTests-Prefix.pch"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; EBCB247718E9FBAF00807472 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; EBCB247B18E9FBAF00807472 /* VENCore-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "VENCore-Prefix.pch"; sourceTree = ""; }; EBCB247C18E9FBAF00807472 /* VENCore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VENCore.h; sourceTree = ""; }; From 0496529f7e704f2a61ba71d89545792489af7e38 Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 16:00:03 -0400 Subject: [PATCH 10/15] Prefer module imports --- VENCore/VENCore-Prefix.pch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VENCore/VENCore-Prefix.pch b/VENCore/VENCore-Prefix.pch index eb2007e..bcbc5b0 100644 --- a/VENCore/VENCore-Prefix.pch +++ b/VENCore/VENCore-Prefix.pch @@ -5,5 +5,5 @@ // #ifdef __OBJC__ - #import + @import Foundation; #endif From e2440dc6a18f0658a42f9b4ebebdb8d74d60f02f Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 19:32:19 -0400 Subject: [PATCH 11/15] Remove references in framework target to Cocoapods --- VENCore.xcodeproj/project.pbxproj | 34 ------------------------------- 1 file changed, 34 deletions(-) diff --git a/VENCore.xcodeproj/project.pbxproj b/VENCore.xcodeproj/project.pbxproj index 1da490e..b2e7cd0 100644 --- a/VENCore.xcodeproj/project.pbxproj +++ b/VENCore.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 253A086E6F0B79024116EF2D /* Pods.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5027E661B70FCF9BC067E6E7 /* Pods.framework */; }; 26839E141BE11F82001651E8 /* CMDQueryStringSerialization.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E121BE11F82001651E8 /* CMDQueryStringSerialization.framework */; settings = {ATTRIBUTES = (Required, ); }; }; 26839E151BE11F82001651E8 /* ISO8601.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26839E131BE11F82001651E8 /* ISO8601.framework */; settings = {ATTRIBUTES = (Required, ); }; }; 26839E161BE12057001651E8 /* NSString+VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB8E3C018FDDB6300A22C6B /* NSString+VENCore.m */; }; @@ -168,7 +167,6 @@ files = ( 26839E141BE11F82001651E8 /* CMDQueryStringSerialization.framework in Frameworks */, 26839E151BE11F82001651E8 /* ISO8601.framework in Frameworks */, - 253A086E6F0B79024116EF2D /* Pods.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -520,12 +518,10 @@ isa = PBXNativeTarget; buildConfigurationList = 26839E0F1BE11E83001651E8 /* Build configuration list for PBXNativeTarget "VENCore" */; buildPhases = ( - 53C1F0D862332294A0C29A3B /* Check Pods Manifest.lock */, 26839E051BE11E83001651E8 /* Sources */, 26839E061BE11E83001651E8 /* Frameworks */, 26839E071BE11E83001651E8 /* Headers */, 26839E081BE11E83001651E8 /* Resources */, - F47E1BEDA26CC484B0B8AD84 /* Copy Pods Resources */, ); buildRules = ( ); @@ -678,21 +674,6 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENCoreUnitTests/Pods-VENCoreUnitTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 53C1F0D862332294A0C29A3B /* Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; ADF11FCA85FC0FEBF31B3160 /* Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -753,21 +734,6 @@ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; - F47E1BEDA26CC484B0B8AD84 /* Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ From 3ed5bdba320b77857951dabc1653370e456744c4 Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 19:54:43 -0400 Subject: [PATCH 12/15] Update EXPMatchers+Venmo.h --- VENCoreUnitTests/Utilities/EXPMatchers+Venmo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VENCoreUnitTests/Utilities/EXPMatchers+Venmo.h b/VENCoreUnitTests/Utilities/EXPMatchers+Venmo.h index 6365c89..ec42746 100644 --- a/VENCoreUnitTests/Utilities/EXPMatchers+Venmo.h +++ b/VENCoreUnitTests/Utilities/EXPMatchers+Venmo.h @@ -2,4 +2,4 @@ EXPMatcherInterface(regexMatch, (id pattern)) -#define regexMatch regexMatch \ No newline at end of file +#define regexMatch regexMatch From db513052d6bcc65fff5d4fa518cf75f4b6678c5f Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 20:12:01 -0400 Subject: [PATCH 13/15] Make category headers public This could have been mitigated by using a private header module map but this seems like a bit more work than what we need here. --- VENCore.xcodeproj/project.pbxproj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/VENCore.xcodeproj/project.pbxproj b/VENCore.xcodeproj/project.pbxproj index b2e7cd0..0acb4f1 100644 --- a/VENCore.xcodeproj/project.pbxproj +++ b/VENCore.xcodeproj/project.pbxproj @@ -21,11 +21,11 @@ 26839E1F1BE12057001651E8 /* VENHTTP.m in Sources */ = {isa = PBXBuildFile; fileRef = EB74B2BE18E9FD7B00838A9D /* VENHTTP.m */; }; 26839E201BE12057001651E8 /* VENHTTPResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = EBBE7E0718EA017700E47338 /* VENHTTPResponse.m */; }; 26839E211BE12057001651E8 /* VENCore.m in Sources */ = {isa = PBXBuildFile; fileRef = EBCB247E18E9FBAF00807472 /* VENCore.m */; }; - 26839E221BE1206D001651E8 /* NSString+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EBB8E3BF18FDDB6300A22C6B /* NSString+VENCore.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 26839E231BE1206D001651E8 /* NSDictionary+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EB418B9B18EB0E060003CBF5 /* NSDictionary+VENCore.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 26839E241BE1206D001651E8 /* NSArray+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B2C2D04196ED75400D1B241 /* NSArray+VENCore.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 26839E251BE1206D001651E8 /* NSError+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF84D2818EA5ADE00C0E077 /* NSError+VENCore.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 26839E261BE1206D001651E8 /* UIDevice+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFB2F8E18F7228600612BD8 /* UIDevice+VENCore.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 26839E221BE1206D001651E8 /* NSString+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EBB8E3BF18FDDB6300A22C6B /* NSString+VENCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26839E231BE1206D001651E8 /* NSDictionary+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EB418B9B18EB0E060003CBF5 /* NSDictionary+VENCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26839E241BE1206D001651E8 /* NSArray+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B2C2D04196ED75400D1B241 /* NSArray+VENCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26839E251BE1206D001651E8 /* NSError+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF84D2818EA5ADE00C0E077 /* NSError+VENCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26839E261BE1206D001651E8 /* UIDevice+VENCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFB2F8E18F7228600612BD8 /* UIDevice+VENCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; 26839E271BE1206D001651E8 /* VENCreateTransactionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AE56FEE190871DF0054B7EF /* VENCreateTransactionRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; 26839E281BE1206D001651E8 /* VENTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = C24E595318F84C67009670F7 /* VENTransaction.h */; settings = {ATTRIBUTES = (Public, ); }; }; 26839E291BE1206D001651E8 /* VENTransactionTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = EBB8E3AF18FD86AB00A22C6B /* VENTransactionTarget.h */; settings = {ATTRIBUTES = (Public, ); }; }; From b966d48b2a69aaf9acf2b3324b47c2aad65c2cc9 Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 20:16:07 -0400 Subject: [PATCH 14/15] Remove unneeded whitespace --- .../VENCreateTransactionRequestSpec.m | 116 +++++++++--------- VENCoreUnitTests/Models/Users/VENUserSpec.m | 110 ++++++++--------- VENCoreUnitTests/Networking/VENHTTPSpec.m | 72 +++++------ 3 files changed, 149 insertions(+), 149 deletions(-) diff --git a/VENCoreUnitTests/Models/Transactions/VENCreateTransactionRequestSpec.m b/VENCoreUnitTests/Models/Transactions/VENCreateTransactionRequestSpec.m index 9c2ade3..a5c56b9 100644 --- a/VENCoreUnitTests/Models/Transactions/VENCreateTransactionRequestSpec.m +++ b/VENCoreUnitTests/Models/Transactions/VENCreateTransactionRequestSpec.m @@ -20,37 +20,37 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; SpecBegin(VENCreateTransactionRequest) describe(@"Sending Payments With Stubbed Responses", ^{ - + __block NSDictionary *emailPaymentObject; __block NSDictionary *userPaymentObject; __block id mockVENHTTP; __block VENCore *core; - + void(^stubSuccessBlockEmail)(NSInvocation *) = ^(NSInvocation *invocation) { void(^successBlock)(VENHTTPResponse *); [invocation getArgument:&successBlock atIndex:4]; - + VENHTTPResponse *response = [[VENHTTPResponse alloc] initWithStatusCode:200 responseObject:@{@"data":@{@"payment":emailPaymentObject}}]; successBlock(response); }; - + void(^stubSuccessBlockPhone)(NSInvocation *) = ^(NSInvocation *invocation) { void(^successBlock)(VENHTTPResponse *); [invocation getArgument:&successBlock atIndex:4]; - + VENHTTPResponse *response = [[VENHTTPResponse alloc] initWithStatusCode:200 responseObject:@{@"data":@{@"payment":userPaymentObject}}]; successBlock(response); }; - + void(^stubFailureBlock)(NSInvocation *) = ^(NSInvocation *invocation) { void(^failureBlock)(VENHTTPResponse *, NSError *); [invocation getArgument:&failureBlock atIndex:5]; - + VENHTTPResponse *response = [[VENHTTPResponse alloc] initWithStatusCode:400 responseObject:nil]; id mockError = [OCMockObject mockForClass:[NSError class]]; failureBlock(response, mockError); }; - + NSDictionary *(^expectedParameters)(VENCreateTransactionRequest *transactionService, VENTransactionTarget *target) = ^(VENCreateTransactionRequest *transactionService, VENTransactionTarget *target) { NSMutableDictionary *expectedParams = [[transactionService dictionaryWithParametersForTarget:target] mutableCopy]; @@ -58,7 +58,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; [expectedParams addEntriesFromDictionary:accessTokenParams]; return expectedParams; }; - + beforeEach(^{ NSDictionary *emailPaymentResponse = [VENTestUtilities objectFromJSONResource:@"paymentToEmail"]; emailPaymentObject = emailPaymentResponse[@"data"][@"payment"]; @@ -69,22 +69,22 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; core.httpClient = mockVENHTTP; [core setAccessToken:@"123"]; [VENCore setDefaultCore:core]; - + }); - + describe(@"sending a transaction with one target", ^{ it(@"should POST to the payments endpoint and call the success block when the POST succeeds", ^{ VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; VENTransactionTarget *target = [[VENTransactionTarget alloc] initWithHandle:@"peter@venmo.com" amount:30]; [transactionService addTransactionTarget:target]; transactionService.note = @"hi"; - + NSDictionary *expectedParams = expectedParameters(transactionService, target); [[[mockVENHTTP expect] andDo:stubSuccessBlockEmail] POST:@"payments" parameters:expectedParams success:OCMOCK_ANY failure:OCMOCK_ANY]; - + waitUntil(^(DoneCallback done) { [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { expect([sentTransactions count]).to.equal(1); @@ -95,19 +95,19 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; }]; }); }); - + it(@"should POST to the payments endpoint and call the failure block when the POST fails", ^{ VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; VENTransactionTarget *target = [[VENTransactionTarget alloc] initWithHandle:@"peter@venmo.com" amount:30]; [transactionService addTransactionTarget:target]; transactionService.note = @"hi"; - + NSDictionary *expectedParams = expectedParameters(transactionService, target); [[[mockVENHTTP expect] andDo:stubFailureBlock] POST:@"payments" parameters:expectedParams success:OCMOCK_ANY failure:OCMOCK_ANY]; - + waitUntil(^(DoneCallback done) { [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { failure(@"Failed to return correct response."); @@ -121,21 +121,21 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; }); }); }); - + describe(@"sending a transaction with two targets", ^{ it(@"should POST twice to the payments endpoint and call the success block twice when both transactions succeed", ^{ VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; transactionService.note = @"hi"; - + VENTransactionTarget *target1 = [[VENTransactionTarget alloc] initWithHandle:@"peter@venmo.com" amount:30]; [transactionService addTransactionTarget:target1]; - + VENTransactionTarget *target2 = [[VENTransactionTarget alloc] initWithHandle:@"ben@venmo.com" amount:420]; [transactionService addTransactionTarget:target2]; - + NSDictionary *expectedParameters1 = expectedParameters(transactionService, target1); NSDictionary *expectedParameters2 = expectedParameters(transactionService, target2); - + [[[mockVENHTTP expect] andDo:stubSuccessBlockEmail] POST:@"payments" parameters:expectedParameters1 success:OCMOCK_ANY @@ -144,7 +144,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; parameters:expectedParameters2 success:OCMOCK_ANY failure:OCMOCK_ANY]; - + waitUntil(^(DoneCallback done) { [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { expect([sentTransactions count]).to.equal(2); @@ -155,30 +155,30 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; }]; }); }); - + it(@"should call successBlock for successful payment and failureBlock for second payment which fails", ^{ VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; transactionService.note = @"hi"; - + VENTransactionTarget *target1 = [[VENTransactionTarget alloc] initWithHandle:@"peter@venmo.com" amount:30]; [transactionService addTransactionTarget:target1]; - + VENTransactionTarget *target2 = [[VENTransactionTarget alloc] initWithHandle:@"ben@venmo.com" amount:420]; [transactionService addTransactionTarget:target2]; - + NSDictionary *expectedParameters1 = expectedParameters(transactionService, target1); NSDictionary *expectedParameters2 = expectedParameters(transactionService, target2); - + [[[mockVENHTTP expect] andDo:stubSuccessBlockEmail] POST:@"payments" parameters:expectedParameters1 success:OCMOCK_ANY failure:OCMOCK_ANY]; - + [[[mockVENHTTP expect] andDo:stubFailureBlock] POST:@"payments" parameters:expectedParameters2 success:OCMOCK_ANY failure:OCMOCK_ANY]; - + waitUntil(^(DoneCallback done) { [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { failure(@"Failed to return correct response."); @@ -190,25 +190,25 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; }]; }); }); - + it(@"should not initiate second payment if the first payment fails", ^{ - + VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; transactionService.note = @"hi"; - + VENTransactionTarget *target1 = [[VENTransactionTarget alloc] initWithHandle:@"peter@venmo.com" amount:30]; [transactionService addTransactionTarget:target1]; NSDictionary *expectedParameters1 = expectedParameters(transactionService, target1); - + //payment to target 2 should not be sent since the first payment fails VENTransactionTarget *target2 = [[VENTransactionTarget alloc] initWithHandle:@"das@venmo.com" amount:125]; [transactionService addTransactionTarget:target2]; - + [[[mockVENHTTP expect] andDo:stubFailureBlock] POST:@"payments" parameters:expectedParameters1 success:OCMOCK_ANY failure:OCMOCK_ANY]; - + waitUntil(^(DoneCallback done) { [transactionService sendWithSuccess:^(NSArray *sentTransactions, VENHTTPResponse *response) { failure(@"Failed to return correct response."); @@ -237,7 +237,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; expect(addedTarget).to.beTruthy(); expect([transactionService.targets count]).to.equal(1); }); - + it(@"it should not add a invalid target", ^{ id mockTarget = [OCMockObject niceMockForClass:[VENTransactionTarget class]]; [[[mockTarget stub] andReturnValue:@(NO)] isValid]; @@ -246,13 +246,13 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; expect(addedTarget).to.beFalsy(); expect([transactionService.targets count]).to.equal(0); }); - + it(@"it should not add duplicate targets", ^{ id mockTarget = [OCMockObject niceMockForClass:[VENTransactionTarget class]]; VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; id mockTransaction = [OCMockObject partialMockForObject:transactionService]; [[[mockTransaction stub] andReturnValue:@(YES)] containsDuplicateOfTarget:OCMOCK_ANY]; - + BOOL addedTarget = [mockTransaction addTransactionTarget:mockTarget]; expect(addedTarget).to.beFalsy(); expect(((VENCreateTransactionRequest *)mockTransaction).targets.count).to.equal(0); @@ -271,14 +271,14 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; ((VENCreateTransactionRequest *)mockTransaction).transactionType = VENTransactionTypePay; expect([((VENCreateTransactionRequest *)mockTransaction) readyToSend]).to.equal(YES); }); - + it(@"should return NO if there are 0 targets", ^{ VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; transactionService.note = @"Here is 10 Bucks"; transactionService.transactionType = VENTransactionTypePay; expect([transactionService readyToSend]).to.equal(NO); }); - + it(@"should return NO if transaction has no note", ^{ id object = [NSObject new]; NSOrderedSet *orderedSet = [[NSOrderedSet alloc] initWithObject:object]; @@ -288,7 +288,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; ((VENCreateTransactionRequest *)mockTransaction).transactionType = VENTransactionTypePay; expect([((VENCreateTransactionRequest *)mockTransaction) readyToSend]).to.equal(NO); }); - + it(@"should return NO if transactionType has not been set", ^{ id object = [NSObject new]; NSOrderedSet *orderedSet = [[NSOrderedSet alloc] initWithObject:object]; @@ -298,7 +298,7 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; ((VENCreateTransactionRequest *)mockTransaction).note = @"Here is 10 Bucks"; expect([((VENCreateTransactionRequest *)mockTransaction) readyToSend]).to.equal(NO); }); - + }); @@ -319,9 +319,9 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; @"audience" : @"friends"}; NSDictionary *postParameters = [transactionService dictionaryWithParametersForTarget:target]; expect(postParameters).to.equal(expectedPostParameters); - + }); - + it(@"should create a parameters dictionary for negative amounts", ^{ NSString *emailAddress = @"dasmer@venmo.com"; NSString *note = @"I want your two bucks"; @@ -338,10 +338,10 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; @"audience" : @"private"}; NSDictionary *postParameters = [transactionService dictionaryWithParametersForTarget:target]; expect(postParameters).to.equal(expectedPostParameters); - + }); - - + + it(@"should return nil if target type is unknown", ^{ NSString *emailAddress = @"dasmer"; NSString *note = @"I want your two bucks"; @@ -359,8 +359,8 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; expect(target.targetType).equal(VENTargetTypeUnknown); expect(postParameters).to.beNil(); }); - - + + it(@"should not include audience if audience is set to UserDefault", ^{ NSString *emailAddress = @"btest@example.com"; NSString *note = @"bla"; @@ -377,8 +377,8 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; NSDictionary *postParameters = [transactionService dictionaryWithParametersForTarget:target]; expect(postParameters).to.equal(expectedPostParameters); }); - - + + }); describe(@"containsDuplicateOfTarget", ^{ @@ -386,33 +386,33 @@ - (BOOL)containsDuplicateOfTarget:(VENTransactionTarget *)target; NSString *handle = @"handle"; id mockTarget1 = [OCMockObject mockForClass:[VENTransactionTarget class]]; [[[mockTarget1 stub] andReturn:handle] handle]; - + id mockTarget2 = [OCMockObject mockForClass:[VENTransactionTarget class]]; [[[mockTarget2 stub] andReturn:@"bla"] handle]; - + VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; id mockTransaction = [OCMockObject partialMockForObject:transactionService]; NSMutableOrderedSet *targetSet = [[NSMutableOrderedSet alloc] initWithArray:@[mockTarget2, mockTarget1]]; [[[mockTransaction stub] andReturn:targetSet] targets]; - + id mockTargetParameter = [OCMockObject mockForClass:[VENTransactionTarget class]]; [[[mockTargetParameter stub] andReturn:handle] handle]; BOOL containsDuplicate = [mockTransaction containsDuplicateOfTarget:mockTargetParameter]; expect(containsDuplicate).to.beTruthy(); }); - + it(@"should return NO if the transaction doesn't have any targets with the same handle", ^{ id mockTarget1 = [OCMockObject mockForClass:[VENTransactionTarget class]]; [[[mockTarget1 stub] andReturn:@"foo"] handle]; - + id mockTarget2 = [OCMockObject mockForClass:[VENTransactionTarget class]]; [[[mockTarget2 stub] andReturn:@"bar"] handle]; - + VENCreateTransactionRequest *transactionService = [[VENCreateTransactionRequest alloc] init]; id mockTransaction = [OCMockObject partialMockForObject:transactionService]; NSMutableOrderedSet *targetSet = [[NSMutableOrderedSet alloc] initWithArray:@[mockTarget2, mockTarget1]]; [[[mockTransaction stub] andReturn:targetSet] targets]; - + id mockTargetParameter = [OCMockObject mockForClass:[VENTransactionTarget class]]; [[[mockTargetParameter stub] andReturn:@"baz"] handle]; BOOL containsDuplicate = [mockTransaction containsDuplicateOfTarget:mockTargetParameter]; diff --git a/VENCoreUnitTests/Models/Users/VENUserSpec.m b/VENCoreUnitTests/Models/Users/VENUserSpec.m index 0c9d0b1..2c862f1 100644 --- a/VENCoreUnitTests/Models/Users/VENUserSpec.m +++ b/VENCoreUnitTests/Models/Users/VENUserSpec.m @@ -57,7 +57,7 @@ beforeAll(^{ VENCore *core = [[VENCore alloc] init]; [VENCore setDefaultCore:core]; - + [[LSNocilla sharedInstance] start]; }); @@ -71,38 +71,38 @@ describe(@"Initialization", ^{ - + it(@"should succesfully create an empty object from init", ^{ VENUser *usr = [[VENUser alloc] init]; expect(usr).toNot.beNil(); - + expect(usr.username).to.beNil(); expect(usr.firstName).to.beNil(); expect(usr.lastName).to.beNil(); expect(usr.profileImageUrl).to.beNil(); }); - + it(@"should return NO to canInitWithDictionary for an invalid dictionary", ^{ BOOL canInit = [VENUser canInitWithDictionary:invalidUserDictionary1]; expect(canInit).to.beFalsy(); - + canInit = [VENUser canInitWithDictionary:invalidUserDictionary2]; expect(canInit).to.beFalsy(); }); - + it(@"should return NO to a nil or empty dictionary", ^{ BOOL canInit = [VENUser canInitWithDictionary:@{}]; expect(canInit).to.beFalsy(); - + canInit = [VENUser canInitWithDictionary:nil]; expect(canInit).to.beFalsy(); }); - + it(@"should return YES to canInitWithDictionary for a valid dictionary", ^{ BOOL canInit = [VENUser canInitWithDictionary:validUserDictionary1]; expect(canInit).to.beTruthy(); }); - + it(@"should create a user with minimally a username and externalId for dictionaries that return YES to canInitWithDictionary",^{ VENUser *user1 = [[VENUser alloc] initWithDictionary:validUserDictionary1]; expect(user1.username).to.equal(@"PeterIsAZakin"); @@ -111,104 +111,104 @@ expect(user2.username).to.equal(@"PetefadsrIsAZakin"); expect(user2.externalId).to.equal(@"JLHDSfadJfsdFIOHh23ioHLH"); }); - + }); describe(@"Copying", ^{ - + it(@"should create a valid copy of any empty object", ^{ VENUser *usr = [[VENUser alloc] init]; - + VENUser *myOtherUser = [usr copy]; - + expect(myOtherUser).notTo.beNil(); expect(myOtherUser).to.beKindOf([usr class]); - + }); - + it(@"should create a valid copy of a valid user", ^{ VENUser *user = [[VENUser alloc] initWithDictionary:validUserDictionary1]; VENUser *newUser = [user copy]; - + expect(user).to.equal(newUser); }); }); describe(@"Equality", ^{ - + it(@"should correctly validate two equal objects", ^{ VENUser *user1 = [[VENUser alloc] initWithDictionary:validUserDictionary1]; VENUser *user2 = [user1 copy]; - + expect([user1 isEqual:user2]).to.beTruthy(); - + VENUser *user3 = [[VENUser alloc] initWithDictionary:validUserDictionary3]; - + expect([user1 isEqual:user3]).to.beTruthy(); }); - + it(@"should not indicate that two different users are the same", ^{ VENUser *user1 = [[VENUser alloc] initWithDictionary:validUserDictionary1]; VENUser *user2 = [[VENUser alloc] initWithDictionary:validUserDictionary2]; - + expect([user1 isEqual:user2]).to.beFalsy(); }); - + it(@"should behave transitively", ^{ VENUser *user1 = [[VENUser alloc] initWithDictionary:validUserDictionary1]; VENUser *user2 = [[VENUser alloc] initWithDictionary:validUserDictionary2]; - + expect([user1 isEqual:user2]).to.beFalsy(); expect([user2 isEqual:user1]).to.beFalsy(); - + user1 = [[VENUser alloc] initWithDictionary:validUserDictionary1]; user2 = [user1 copy]; - + expect([user1 isEqual:user2]).to.beTruthy(); expect([user2 isEqual:user1]).to.beTruthy(); }); - + it(@"should follow the rule that two users are equal ONLY if their external Ids are the same", ^{ VENUser *user = [[VENUser alloc] init]; VENUser *myOtherUser = [user copy]; - + expect(user).toNot.equal(myOtherUser); - + VENUser *invalidUser = [[VENUser alloc] initWithDictionary:invalidUserDictionary2]; VENUser *copiedInvalidUser = [invalidUser copy]; - + expect(invalidUser).toNot.equal(copiedInvalidUser); }); - + }); describe(@"Dictionary Representation", ^{ it(@"should consider dictionary representations of equal users to be equal", ^{ VENUser *user1 = [[VENUser alloc] initWithDictionary:validUserDictionary1]; NSDictionary *user1Dictionary = [user1 dictionaryRepresentation]; - + VENUser *user2 = [[VENUser alloc] initWithDictionary:user1Dictionary]; expect([user1 isEqual:user2]).to.beTruthy(); assertUsersAreFieldwiseEqual(user1, user2); - + }); - + }); describe(@"Fetching a User", ^{ it(@"should retrieve a pre-canned Chris user and create a valid user", ^{ NSString *externalId = @"1106387358711808333"; - + NSString *baseURLString = [VENTestUtilities baseURLStringForCore:[VENCore defaultCore]]; NSString *urlToStub = [NSString stringWithFormat:@"%@/%@/%@?", baseURLString, VENAPIPathUsers, externalId]; - + [VENTestUtilities stubNetworkGET:urlToStub withStatusCode:200 andResponseFilePath:@"fetchChrisUser"]; waitUntil(^(DoneCallback done) { [VENUser fetchUserWithExternalId:externalId success:^(VENUser *user) { - + expect(user.externalId).to.equal(externalId); done(); } failure:^(NSError *error) { @@ -216,17 +216,17 @@ done(); }]; }); - + }); - + it(@"should call failure when cannot find a user with that external Id", ^{ NSString *externalId = @"1106387358711808339"; //invalid external id - + NSString *baseURLString = [VENTestUtilities baseURLStringForCore:[VENCore defaultCore]]; NSString *urlToStub = [NSString stringWithFormat:@"%@/%@/%@?", baseURLString, VENAPIPathUsers, externalId]; - + [VENTestUtilities stubNetworkGET:urlToStub withStatusCode:400 andResponseFilePath:@"fetchInvalidUser"]; - + waitUntil(^(DoneCallback done) { [VENUser fetchUserWithExternalId:externalId success:^(VENUser *user) { failure(@"Failed to return correct response."); @@ -237,7 +237,7 @@ }]; }); }); - + it(@"should call failure when not passed an external id", ^{ waitUntil(^(DoneCallback done) { [VENUser fetchUserWithExternalId:nil success:^(VENUser *user) { @@ -249,7 +249,7 @@ }]; }); }); - + it(@"should call failure when passed an empty-string external id", ^{ waitUntil(^(DoneCallback done) { [VENUser fetchUserWithExternalId:@"" success:^(VENUser *user) { @@ -261,7 +261,7 @@ }]; }); }); - + }); describe(@"Fetching Friends", ^{ @@ -270,27 +270,27 @@ NSString *baseURLString = [VENTestUtilities baseURLStringForCore:[VENCore defaultCore]]; NSString *urlToStub = [NSString stringWithFormat:@"%@/users/%@/friends?limit=1000", baseURLString, externalId]; [VENTestUtilities stubNetworkGET:urlToStub withStatusCode:200 andResponseFilePath:@"fetchFriends"]; - + waitUntil(^(DoneCallback done) { [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { expect([friendsArray count]).to.equal(5); expect([friendsArray[0] class]).to.equal([VENUser class]); expect([friendsArray[2] class]).to.equal([VENUser class]); done(); - + } failure:^(NSError *error){ failure(@"Failed to return correct response."); done(); }]; }); }); - + it(@"should retrieve a pre-canned list of friends and deletes the NSNull key and value from the friend", ^{ NSString *externalId = @"110638735871180833"; NSString *baseURLString = [VENTestUtilities baseURLStringForCore:[VENCore defaultCore]]; NSString *urlToStub = [NSString stringWithFormat:@"%@/users/%@/friends?limit=1000", baseURLString, externalId]; [VENTestUtilities stubNetworkGET:urlToStub withStatusCode:200 andResponseFilePath:@"fetchFriends"]; - + waitUntil(^(DoneCallback done) { [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { for (id object in friendsArray) { @@ -308,13 +308,13 @@ }]; }); }); - + it(@"should retrieve a pre-canned list of friends and the users should be in the same order as the JSON and their values should be consistent with the JSON values", ^{ NSString *externalId = @"110638735871180833"; NSString *baseURLString = [VENTestUtilities baseURLStringForCore:[VENCore defaultCore]]; NSString *urlToStub = [NSString stringWithFormat:@"%@/users/%@/friends?limit=1000", baseURLString, externalId]; [VENTestUtilities stubNetworkGET:urlToStub withStatusCode:200 andResponseFilePath:@"fetchFriends"]; - + waitUntil(^(DoneCallback done) { [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { if ([friendsArray[0] isKindOfClass:[VENUser class]]){ @@ -329,13 +329,13 @@ }]; }); }); - + it(@"should call failure when cannot find a user with that external Id", ^{ NSString *externalId = @"1106387358711808339"; //invalid external id NSString *baseURLString = [VENTestUtilities baseURLStringForCore:[VENCore defaultCore]]; NSString *urlToStub = [NSString stringWithFormat:@"%@/users/%@/friends?limit=1000", baseURLString, externalId]; [VENTestUtilities stubNetworkGET:urlToStub withStatusCode:400 andResponseFilePath:@"fetchInvalidFriends"]; - + waitUntil(^(DoneCallback done) { [VENUser fetchFriendsWithExternalId:externalId success:^(NSArray *friendsArray) { failure(@"Failed to return correct response."); @@ -346,7 +346,7 @@ }]; }); }); - + it(@"should call failure when not passed an external id", ^{ waitUntil(^(DoneCallback done) { [VENUser fetchFriendsWithExternalId:nil success:^(NSArray *friendsArray) { @@ -358,7 +358,7 @@ }]; }); }); - + it(@"should call failure when passed an empty-string external id", ^{ waitUntil(^(DoneCallback done) { [VENUser fetchFriendsWithExternalId:@"" success:^(NSArray *friendsArray) { diff --git a/VENCoreUnitTests/Networking/VENHTTPSpec.m b/VENCoreUnitTests/Networking/VENHTTPSpec.m index a12a298..666aa0a 100644 --- a/VENCoreUnitTests/Networking/VENHTTPSpec.m +++ b/VENCoreUnitTests/Networking/VENHTTPSpec.m @@ -19,7 +19,7 @@ + (BOOL)canInitWithRequest:(NSURLRequest *)request BOOL hasCorrectHost = [request.URL.host isEqualToString:kVENHTTPTestProtocolHost]; BOOL hasCorrectPort = [request.URL.port isEqual:kVENHTTPTestProtocolPort]; BOOL hasCorrectBasePath = [request.URL.path rangeOfString:kVENHTTPTestProtocolBasePath].location != NSNotFound; - + return hasCorrectScheme && hasCorrectHost && hasCorrectPort && hasCorrectBasePath; } @@ -29,21 +29,21 @@ + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { - (void)startLoading { id client = self.client; - + NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.request.URL statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:@{@"Content-Type": @"application/json"}]; - + NSData *archivedRequest = [NSKeyedArchiver archivedDataWithRootObject:self.request]; NSString *base64ArchivedRequest = [archivedRequest base64EncodedStringWithOptions:0]; - + NSData *requestBodyData; if (self.request.HTTPBodyStream) { NSInputStream *inputStream = self.request.HTTPBodyStream; [inputStream open]; NSMutableData *mutableBodyData = [NSMutableData data]; - + while ([inputStream hasBytesAvailable]) { uint8_t buffer[128]; NSUInteger bytesRead = [inputStream read:buffer maxLength:128]; @@ -54,14 +54,14 @@ - (void)startLoading { } else { requestBodyData = self.request.HTTPBody; } - + NSDictionary *responseBody = @{ @"request": base64ArchivedRequest, @"requestBody": [[NSString alloc] initWithData:requestBodyData encoding:NSUTF8StringEncoding] }; - + [client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed]; - + [client URLProtocol:self didLoadData:[NSJSONSerialization dataWithJSONObject:responseBody options:NSJSONWritingPrettyPrinted error:NULL]]; - + [client URLProtocolDidFinishLoading:self]; } @@ -92,18 +92,18 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { describe(@"performing a request", ^{ __block VENHTTP *http; - + beforeEach(^{ http = [[VENHTTP alloc] initWithBaseURL:[VENHTTPTestProtocol testBaseURL]]; [http setProtocolClasses:@[[VENHTTPTestProtocol class]]]; }); - + describe(@"base URL", ^{ it(@"sends requests using the specified URL scheme", ^{ waitUntil(^(DoneCallback done) { [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - + expect(httpRequest.URL.scheme).to.equal(@"ven-http-test"); done(); } failure:^(VENHTTPResponse *response, NSError *error) { @@ -111,26 +111,26 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }]; }); }); - - + + it(@"sends requests to the host at the base URL", ^{ waitUntil(^(DoneCallback done) { [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; expect(httpRequest.URL.host).to.equal(@"base.example.com"); - + done(); } failure:^(VENHTTPResponse *response, NSError *error) { failure(@"Failed to return correct response."); }]; }); }); - + it(@"appends the path to the base URL", ^{ waitUntil(^(DoneCallback done) { [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - + expect(httpRequest.URL.path).to.equal(@"/base/path/200.json"); done(); } failure:^(VENHTTPResponse *response, NSError *error) { @@ -139,7 +139,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }); }); }); - + describe(@"HTTP methods", ^{ it(@"sends a GET request", ^{ waitUntil(^(DoneCallback done) { @@ -154,7 +154,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }]; }); }); - + it(@"sends a GET request with parameters", ^{ waitUntil(^(DoneCallback done) { [http GET:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { @@ -169,7 +169,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }]; }); }); - + it(@"sends a POST request", ^{ waitUntil(^(DoneCallback done) { [http POST:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { @@ -184,7 +184,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }]; }); }); - + it(@"sends a POST request with parameters", ^{ waitUntil(^(DoneCallback done) { [http POST:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { @@ -200,7 +200,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }]; }); }); - + it(@"sends a PUT request", ^{ waitUntil(^(DoneCallback done) { [http PUT:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { @@ -215,7 +215,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }]; }); }); - + it(@"sends a PUT request with parameters", ^{ waitUntil(^(DoneCallback done) { [http PUT:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { @@ -231,8 +231,8 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }]; }); }); - - + + it(@"sends a DELETE request", ^{ waitUntil(^(DoneCallback done) { [http DELETE:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { @@ -247,12 +247,12 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }]; }); }); - + it(@"sends a DELETE request with parameters", ^{ waitUntil(^(DoneCallback done) { [http DELETE:@"200.json" parameters:@{@"param": @"value"} success:^(VENHTTPResponse *response) { NSURLRequest *httpRequest = [VENHTTPTestProtocol parseRequestFromTestResponse:response]; - + expect(httpRequest.URL.path).to.match(@"/200.json$"); expect(httpRequest.URL.query).to.equal(@"param=value"); expect(httpRequest.HTTPMethod).to.equal(@"DELETE"); @@ -264,7 +264,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }); }); }); - + describe(@"default headers", ^{ it(@"include Accept", ^{ waitUntil(^(DoneCallback done) { @@ -278,7 +278,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }]; }); }); - + it(@"include User-Agent", ^{ waitUntil(^(DoneCallback done) { [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { @@ -291,7 +291,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }]; }); }); - + it(@"include Accept-Language", ^{ waitUntil(^(DoneCallback done) { [http GET:@"200.json" parameters:nil success:^(VENHTTPResponse *response) { @@ -305,10 +305,10 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }); }); }); - + describe(@"parameters", ^{ __block NSDictionary *parameterDictionary; - + beforeEach(^{ parameterDictionary = @{@"stringParam": @"a value", @"numericParam": @42, @@ -316,7 +316,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { @"falseBoolParam": @NO }; }); - + describe(@"in GET requests", ^{ it(@"transmits the parameters as URL encoded query parameters", ^{ waitUntil(^(DoneCallback done) { @@ -330,7 +330,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }); }); }); - + describe(@"in non-GET requests", ^{ it(@"transmits the parameters as JSON", ^{ waitUntil(^(DoneCallback done) { @@ -340,7 +340,7 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { expect([httpRequest valueForHTTPHeaderField:@"Content-type"]).to.equal(@"application/x-www-form-urlencoded; charset=utf-8"); expect(httpRequestBody).to.equal(@"falseBoolParam=0&numericParam=42&stringParam=a%20value&trueBoolParam=1"); - + done(); } failure:^(VENHTTPResponse *response, NSError *error) { failure(@"Failed to return correct response."); @@ -351,4 +351,4 @@ + (NSString *)parseRequestBodyFromTestResponse:(VENHTTPResponse *)response { }); }); -SpecEnd \ No newline at end of file +SpecEnd From ffeaf8d4204a555cb95858839378f36d0c5cc69e Mon Sep 17 00:00:00 2001 From: Eli Perkins Date: Wed, 28 Oct 2015 20:24:18 -0400 Subject: [PATCH 15/15] Add formerly private headers to the umbrella header --- VENCore/VENCore.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/VENCore/VENCore.h b/VENCore/VENCore.h index 3007512..33dfc3b 100644 --- a/VENCore/VENCore.h +++ b/VENCore/VENCore.h @@ -6,6 +6,11 @@ #import #import #import +#import +#import +#import +#import +#import extern NSString *const VENErrorDomainCore;