// // BUYApplePayAdditionsTest.m // Mobile Buy SDK // // Created by Shopify. // Copyright (c) 2015 Shopify Inc. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // @import AddressBook; @import PassKit; @import UIKit; @import XCTest; #import <Buy/Buy.h> #import "BUYAddress+Additions.h" #import "BUYCheckout_Private.h" #import "NSDecimalNumber+BUYAdditions.h" #import "NSDateFormatter+BUYAdditions.h" #import "BUYPKContact.h" #import "BUYNSPersonNameComponents.h" #import "BUYCNPostalAddress.h" @interface BUYApplePayAdditionsTest : XCTestCase @end @implementation BUYApplePayAdditionsTest { BUYCheckout *_checkout; } - (void)setUp { _checkout = [[BUYCheckout alloc] initWithCart:nil]; } #pragma mark - BUYCheckout Apple Pay additions - (void)testSummaryItemsWithEmptyCheckout { NSArray *summaryItems = [_checkout buy_summaryItems]; XCTAssertEqual(2, [summaryItems count]); XCTAssertEqualObjects(@"SUBTOTAL", [summaryItems[0] label]); XCTAssertEqualObjects([NSDecimalNumber zero], [summaryItems[0] amount]); XCTAssertEqualObjects(@"TOTAL", [summaryItems[1] label]); XCTAssertEqualObjects([NSDecimalNumber zero], [summaryItems[1] amount]); } - (void)testFullSummaryItems { _checkout.subtotalPrice = [NSDecimalNumber one]; _checkout.shippingRate = [[BUYShippingRate alloc] initWithDictionary:@{ @"price" : @"2.00" }]; _checkout.totalTax = [NSDecimalNumber decimalNumberWithString:@"1.00"]; _checkout.paymentDue = [NSDecimalNumber decimalNumberWithString:@"4.00"]; NSArray *summaryItems = [_checkout buy_summaryItems]; XCTAssertEqual(4, [summaryItems count]); XCTAssertEqualObjects(@"SUBTOTAL", [summaryItems[0] label]); XCTAssertEqualObjects([NSDecimalNumber one], [summaryItems[0] amount]); XCTAssertEqualObjects(@"SHIPPING", [summaryItems[1] label]); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"2.00"], [summaryItems[1] amount]); XCTAssertEqualObjects(@"TAXES", [summaryItems[2] label]); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"1.00"], [summaryItems[2] amount]); XCTAssertEqualObjects(@"TOTAL", [summaryItems[3] label]); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"4.00"], [summaryItems[3] amount]); } - (void)testSummaryItemsWithShippingRate { _checkout.subtotalPrice = [NSDecimalNumber one]; _checkout.shippingRate = [[BUYShippingRate alloc] initWithDictionary:@{ @"price" : @"2.00" }]; _checkout.paymentDue = [NSDecimalNumber decimalNumberWithString:@"3.00"]; NSArray *summaryItems = [_checkout buy_summaryItems]; XCTAssertEqual(3, [summaryItems count]); XCTAssertEqualObjects(@"SUBTOTAL", [summaryItems[0] label]); XCTAssertEqualObjects([NSDecimalNumber one], [summaryItems[0] amount]); XCTAssertEqualObjects(@"SHIPPING", [summaryItems[1] label]); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"2.00"], [summaryItems[1] amount]); XCTAssertEqualObjects(@"TOTAL", [summaryItems[2] label]); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"3.00"], [summaryItems[2] amount]); } - (void)testSummaryItemsWithFreeShippingAndTaxesShouldNotShowShippingOrTaxes { _checkout.subtotalPrice = [NSDecimalNumber one]; _checkout.shippingRate = [[BUYShippingRate alloc] initWithDictionary:@{ @"price" : @"0.00" }]; _checkout.totalTax = [NSDecimalNumber zero]; _checkout.paymentDue = [NSDecimalNumber decimalNumberWithString:@"3.00"]; NSArray *summaryItems = [_checkout buy_summaryItems]; XCTAssertEqual(2, [summaryItems count]); XCTAssertEqualObjects(@"SUBTOTAL", [summaryItems[0] label]); XCTAssertEqualObjects([NSDecimalNumber one], [summaryItems[0] amount]); XCTAssertEqualObjects(@"TOTAL", [summaryItems[1] label]); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"3.00"], [summaryItems[1] amount]); } - (void)testSummaryItemsWithZeroDiscount { _checkout.subtotalPrice = [NSDecimalNumber one]; _checkout.shippingRate = [[BUYShippingRate alloc] initWithDictionary:@{ @"price" : @"0.00" }]; _checkout.totalTax = [NSDecimalNumber zero]; _checkout.paymentDue = [NSDecimalNumber decimalNumberWithString:@"3.00"]; BUYDiscount *discount = [[BUYDiscount alloc] init]; discount.code = @"BANANA"; discount.amount = [NSDecimalNumber zero]; discount.applicable = YES; _checkout.discount = discount; NSArray *summaryItems = [_checkout buy_summaryItems]; XCTAssertEqual(2, [summaryItems count]); XCTAssertEqualObjects(@"SUBTOTAL", [summaryItems[0] label]); XCTAssertEqualObjects([NSDecimalNumber one], [summaryItems[0] amount]); XCTAssertEqualObjects(@"TOTAL", [summaryItems[1] label]); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"3.00"], [summaryItems[1] amount]); } - (void)testSummaryItemsWithNonZeroDiscount { _checkout.subtotalPrice = [NSDecimalNumber one]; _checkout.shippingRate = [[BUYShippingRate alloc] initWithDictionary:@{ @"price" : @"0.00" }]; _checkout.totalTax = [NSDecimalNumber zero]; _checkout.paymentDue = [NSDecimalNumber decimalNumberWithString:@"2.00"]; BUYDiscount *discount = [[BUYDiscount alloc] init]; discount.code = @"BANANA"; discount.amount = [NSDecimalNumber one]; discount.applicable = YES; _checkout.discount = discount; NSArray *summaryItems = [_checkout buy_summaryItems]; XCTAssertEqual(4, [summaryItems count]); XCTAssertEqualObjects(@"CART TOTAL", [summaryItems[0] label]); XCTAssertEqualObjects([NSDecimalNumber zero], [summaryItems[0] amount]); XCTAssertEqualObjects(@"DISCOUNT (BANANA)", [summaryItems[1] label]); XCTAssertEqualObjects([[NSDecimalNumber one] buy_decimalNumberAsNegative], [summaryItems[1] amount]); XCTAssertEqualObjects(@"SUBTOTAL", [summaryItems[2] label]); XCTAssertEqualObjects([NSDecimalNumber one], [summaryItems[2] amount]); XCTAssertEqualObjects(@"TOTAL", [summaryItems[3] label]); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"2.00"], [summaryItems[3] amount]); } - (void)testSummaryItemsWithNonZeroCodelessDiscount { _checkout.subtotalPrice = [NSDecimalNumber one]; _checkout.shippingRate = [[BUYShippingRate alloc] initWithDictionary:@{ @"price" : @"0.00" }]; _checkout.totalTax = [NSDecimalNumber zero]; _checkout.paymentDue = [NSDecimalNumber decimalNumberWithString:@"2.00"]; BUYDiscount *discount = [[BUYDiscount alloc] init]; discount.code = @""; discount.amount = [NSDecimalNumber one]; discount.applicable = YES; _checkout.discount = discount; NSArray *summaryItems = [_checkout buy_summaryItems]; XCTAssertEqual(4, [summaryItems count]); XCTAssertEqualObjects(@"CART TOTAL", [summaryItems[0] label]); XCTAssertEqualObjects([NSDecimalNumber zero], [summaryItems[0] amount]); XCTAssertEqualObjects(@"DISCOUNT", [summaryItems[1] label]); XCTAssertEqualObjects([[NSDecimalNumber one] buy_decimalNumberAsNegative], [summaryItems[1] amount]); XCTAssertEqualObjects(@"SUBTOTAL", [summaryItems[2] label]); XCTAssertEqualObjects([NSDecimalNumber one], [summaryItems[2] amount]); XCTAssertEqualObjects(@"TOTAL", [summaryItems[3] label]); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"2.00"], [summaryItems[3] amount]); } - (void)testSummaryItemsWithGiftCard { _checkout.subtotalPrice = [NSDecimalNumber decimalNumberWithString:@"12.00"]; _checkout.shippingRate = [[BUYShippingRate alloc] initWithDictionary:@{ @"price" : @"0.00" }]; _checkout.totalTax = [NSDecimalNumber zero]; _checkout.paymentDue = [NSDecimalNumber decimalNumberWithString:@"2.00"]; BUYDiscount *discount = [[BUYDiscount alloc] init]; discount.code = @""; discount.amount = [NSDecimalNumber one]; discount.applicable = YES; _checkout.discount = discount; BUYGiftCard *giftCard = [[BUYGiftCard alloc] initWithDictionary:@{ @"amount_used" : [NSDecimalNumber decimalNumberWithString:@"10.00"], @"balance" : [NSDecimalNumber decimalNumberWithString:@"10.00"], @"last_characters" : @"1234" }]; _checkout.giftCards = @[giftCard]; NSArray *summaryItems = [_checkout buy_summaryItems]; XCTAssertEqual(5, [summaryItems count]); XCTAssertEqualObjects(@"CART TOTAL", [summaryItems[0] label]); XCTAssertEqualObjects([NSDecimalNumber zero], [summaryItems[0] amount]); XCTAssertEqualObjects(@"DISCOUNT", [summaryItems[1] label]); XCTAssertEqualObjects([[NSDecimalNumber one] buy_decimalNumberAsNegative], [summaryItems[1] amount]); XCTAssertEqualObjects(@"SUBTOTAL", [summaryItems[2] label]); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"12.00"], [summaryItems[2] amount]); XCTAssertEqualObjects(@"GIFT CARD (•••• 1234)", [summaryItems[3] label]); XCTAssertEqualObjects([[NSDecimalNumber decimalNumberWithString:@"10.00"] buy_decimalNumberAsNegative], [summaryItems[3] amount]); XCTAssertEqualObjects(@"TOTAL", [summaryItems[4] label]); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"2.00"], [summaryItems[4] amount]); } #pragma mark - BUYShippingRate Apple Pay additions - (void)testConvertShippingRatesToShippingMethods { // Create fake dates from now. We need to remove the hours, minutes and seconds // so it's at GMT as this is what Shopify provides NSInteger day = 60*60*24; NSDate *firstDate = [self dateWithoutTime:[NSDate dateWithTimeIntervalSinceNow:day]]; NSDate *lastDate = [self dateWithoutTime:[NSDate dateWithTimeIntervalSinceNow:day]]; NSDateFormatter *dateFormatter = [NSDateFormatter dateFormatterForShippingRates]; BUYShippingRate *rate1 = [[BUYShippingRate alloc] initWithDictionary:@{@"price" : @"5.00", @"id" : @"1234", @"title" : @"Banana", @"delivery_range" : @[[dateFormatter stringFromDate:firstDate], [dateFormatter stringFromDate:lastDate]]}]; firstDate = [self dateWithoutTime:[NSDate dateWithTimeIntervalSinceNow:day * 3]]; lastDate = [self dateWithoutTime:[NSDate dateWithTimeIntervalSinceNow:day * 5]]; BUYShippingRate *rate2 = [[BUYShippingRate alloc] initWithDictionary:@{@"price" : @"3.00", @"id" : @"5678", @"title" : @"Dinosaur", @"delivery_range" : @[[dateFormatter stringFromDate:firstDate], [dateFormatter stringFromDate:lastDate]]}]; firstDate = [self dateWithoutTime:[NSDate dateWithTimeIntervalSinceNow:day * 10]]; lastDate = [self dateWithoutTime:[NSDate dateWithTimeIntervalSinceNow:day * 12]]; BUYShippingRate *rate3 = [[BUYShippingRate alloc] initWithDictionary:@{@"price" : @"19.00", @"id" : @"1357", @"title" : @"Bulldozer", @"delivery_range" : @[[dateFormatter stringFromDate:firstDate], [dateFormatter stringFromDate:lastDate]]}]; NSArray *shippingMethods = [BUYShippingRate buy_convertShippingRatesToShippingMethods:@[rate1, rate2, rate3]]; XCTAssertEqual(3, [shippingMethods count]); PKShippingMethod *method1 = shippingMethods[0]; XCTAssertEqualObjects(@"1234", method1.identifier); XCTAssertEqualObjects(@"Banana", method1.label); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"5.00"], method1.amount); XCTAssertEqualObjects(@"1 day", method1.detail); PKShippingMethod *method2 = shippingMethods[1]; XCTAssertEqualObjects(@"5678", method2.identifier); XCTAssertEqualObjects(@"Dinosaur", method2.label); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"3.00"], method2.amount); XCTAssertEqualObjects(@"3-5 days", method2.detail); PKShippingMethod *method3 = shippingMethods[2]; XCTAssertEqualObjects(@"1357", method3.identifier); XCTAssertEqualObjects(@"Bulldozer", method3.label); XCTAssertEqualObjects([NSDecimalNumber decimalNumberWithString:@"19.00"], method3.amount); XCTAssertEqualObjects(@"10-12 days", method3.detail); } -(NSDate *)dateWithoutTime:(NSDate *)date { NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond fromDate:date]; [dateComponents setHour:00]; [dateComponents setMinute:00]; [dateComponents setSecond:00]; [dateComponents setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; return [[NSCalendar currentCalendar] dateFromComponents:dateComponents]; } - (void)testConvertShippingRatesToShippingMethodsWithEmptyArray { NSArray *shippingMethods = [BUYShippingRate buy_convertShippingRatesToShippingMethods:@[]]; XCTAssertEqual(0, [shippingMethods count]); } #pragma mark - BUYAddress Apple Pay additions - (void)testEmailFromRecord { ABRecordRef person = ABPersonCreate(); CFErrorRef error = NULL; ABRecordSetValue(person, kABPersonFirstNameProperty, CFSTR("Bob"), &error); ABRecordSetValue(person, kABPersonLastNameProperty, CFSTR("Banana"), &error); ABMutableMultiValueRef emails = ABMultiValueCreateMutable(kABStringPropertyType); ABMultiValueAddValueAndLabel(emails, CFSTR("bob@banana.com"), CFSTR("work"), nil); ABMultiValueAddValueAndLabel(emails, CFSTR("dino@banana.com"), CFSTR("home"), nil); ABRecordSetValue(person, kABPersonEmailProperty, emails, &error); CFRelease(emails); XCTAssertEqualObjects(@"bob@banana.com", [BUYAddress buy_emailFromRecord:person]); CFRelease(person); } - (void)testEmailFromRecordWithoutAnEmail { ABRecordRef person = ABPersonCreate(); CFErrorRef error = NULL; ABRecordSetValue(person, kABPersonFirstNameProperty, CFSTR("Bob"), &error); ABRecordSetValue(person, kABPersonLastNameProperty, CFSTR("Banana"), &error); XCTAssertNil([BUYAddress buy_emailFromRecord:person]); CFRelease(person); } - (void)testAddressFromRecord { BUYAddress *newAddress = [self buyAddressWithTestRecordFullDetails:YES]; XCTAssertNotNil(newAddress); XCTAssertEqualObjects(@"Bob", newAddress.firstName); XCTAssertEqualObjects(@"Banana", newAddress.lastName); XCTAssertEqualObjects(@"150 Elgin Street", newAddress.address1); XCTAssertEqualObjects(@"Ottawa", newAddress.city); XCTAssertEqualObjects(@"Ontario", newAddress.province); XCTAssertEqualObjects(@"K1N5T5", newAddress.zip); XCTAssertNil(newAddress.country); XCTAssertEqualObjects(@"CA", newAddress.countryCode); XCTAssertEqualObjects(@"1-888-746-7439", newAddress.phone); } - (BUYAddress*)buyAddressWithTestRecordFullDetails:(BOOL)fullDetails { ABRecordRef person = ABPersonCreate(); CFErrorRef error = NULL; if (fullDetails) { ABRecordSetValue(person, kABPersonFirstNameProperty, CFSTR("Bob"), &error); ABRecordSetValue(person, kABPersonLastNameProperty, CFSTR("Banana"), &error); } ABMutableMultiValueRef addresses = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType); CFMutableDictionaryRef address = CFDictionaryCreateMutable(kCFAllocatorDefault, 10, nil, nil); if (fullDetails) { CFDictionarySetValue(address, kABPersonAddressStreetKey, CFSTR("150 Elgin Street")); } CFDictionarySetValue(address, kABPersonAddressCityKey, CFSTR("Ottawa")); CFDictionarySetValue(address, kABPersonAddressStateKey, CFSTR("Ontario")); CFDictionarySetValue(address, kABPersonAddressZIPKey, CFSTR("K1N5T5")); CFDictionarySetValue(address, kABPersonAddressCountryKey, CFSTR("Canada")); CFDictionarySetValue(address, kABPersonAddressCountryCodeKey, CFSTR("CA")); if (fullDetails) { ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType); ABMultiValueAddValueAndLabel(phoneNumberMultiValue, @"1-888-746-7439", kABPersonPhoneMobileLabel, NULL); ABRecordSetValue(person, kABPersonPhoneProperty, phoneNumberMultiValue, nil); } ABMultiValueAddValueAndLabel(addresses, address, CFSTR("Shipping"), nil); CFRelease(address); ABRecordSetValue(person, kABPersonAddressProperty, addresses, &error); CFRelease(addresses); BUYAddress *newAddress = [BUYAddress buy_addressFromRecord:person]; CFRelease(person); return newAddress; } - (void)testAddressFromRecordWithoutNameOrStreetOrPhone { BUYAddress *newAddress = [self buyAddressWithTestRecordFullDetails:NO]; XCTAssertNotNil(newAddress); XCTAssertEqualObjects(BUYPartialAddressPlaceholder, newAddress.address1); XCTAssertEqualObjects(@"Ottawa", newAddress.city); XCTAssertEqualObjects(@"Ontario", newAddress.province); XCTAssertEqualObjects(@"K1N5T5", newAddress.zip); XCTAssertNil(newAddress.country); XCTAssertEqualObjects(@"CA", newAddress.countryCode); XCTAssertEqualObjects(BUYPartialAddressPlaceholder, newAddress.phone); } - (void)testAddressFromContact { BUYAddress *newAddress = [self buyAddressWithTestContactFullDetails:YES]; XCTAssertNotNil(newAddress); XCTAssertEqualObjects(@"Bob", newAddress.firstName); XCTAssertEqualObjects(@"Banana", newAddress.lastName); XCTAssertEqualObjects(@"150 Elgin Street", newAddress.address1); XCTAssertEqualObjects(@"Ottawa", newAddress.city); XCTAssertEqualObjects(@"Ontario", newAddress.province); XCTAssertEqualObjects(@"K1N5T5", newAddress.zip); XCTAssertNil(newAddress.country); XCTAssertEqualObjects(@"CA", newAddress.countryCode); } - (BUYAddress*)buyAddressWithTestContactFullDetails:(BOOL)fullDetails { BUYPKContact *contact = [[BUYPKContact alloc ] init]; BUYCNPostalAddress *postalAddress = [[BUYCNPostalAddress alloc] init]; if (fullDetails) { BUYNSPersonNameComponents *personNameComponents = [[BUYNSPersonNameComponents alloc] init]; [personNameComponents setGivenName:@"Bob"]; [personNameComponents setFamilyName:@"Banana"]; [contact setName:personNameComponents]; CNPhoneNumber *phoneNumber = [CNPhoneNumber phoneNumberWithStringValue:@"1-888-746-7439"]; [contact setPhoneNumber:phoneNumber]; [postalAddress setStreet:@"150 Elgin Street"]; } [postalAddress setCity:@"Ottawa"]; [postalAddress setState:@"Ontario"]; [postalAddress setPostalCode:@"K1N5T5"]; [postalAddress setCountry:@"Canada"]; [postalAddress setISOCountryCode:@"CA"]; [contact setPostalAddress:postalAddress]; return [BUYAddress buy_addressFromContact:contact]; } - (void)testCompareAddressWithContactWithNameOrStreetOrPhone { BUYAddress *addressFromRecord = [self buyAddressWithTestRecordFullDetails:YES]; BUYAddress *addressFromContact = [self buyAddressWithTestContactFullDetails:YES]; [self compareAddressFromRecord:addressFromRecord withAddressFromContact:addressFromContact]; } - (void)testCompareAddressWithContactWithoutNameOrStreetOrPhone { BUYAddress *addressFromRecord = [self buyAddressWithTestRecordFullDetails:NO]; BUYAddress *addressFromContact = [self buyAddressWithTestContactFullDetails:NO]; [self compareAddressFromRecord:addressFromRecord withAddressFromContact:addressFromContact]; } - (void)compareAddressFromRecord:(BUYAddress*)addressFromRecord withAddressFromContact:(BUYAddress*)addressFromContact { XCTAssertNotNil(addressFromRecord); XCTAssertNotNil(addressFromContact); XCTAssertEqualObjects(addressFromRecord.firstName, addressFromContact.firstName); XCTAssertEqualObjects(addressFromRecord.lastName, addressFromContact.lastName); XCTAssertEqualObjects(addressFromRecord.address1, addressFromContact.address1); XCTAssertEqualObjects(addressFromRecord.address2, addressFromContact.address2); XCTAssertEqualObjects(addressFromRecord.city, addressFromContact.city); XCTAssertEqualObjects(addressFromRecord.province, addressFromContact.province); XCTAssertEqualObjects(addressFromRecord.zip, addressFromContact.zip); XCTAssertEqualObjects(addressFromRecord.country, addressFromContact.country); XCTAssertEqualObjects(addressFromRecord.phone, addressFromContact.phone); XCTAssertEqualObjects(addressFromRecord.countryCode, addressFromContact.countryCode); } - (void)testUseShopNameInPaymentSummary { NSString *shopName = @"My Shop"; NSArray *summaryItems = [_checkout buy_summaryItemsWithShopName:shopName]; XCTAssertEqual(2, [summaryItems count]); XCTAssertEqualObjects(@"SUBTOTAL", [summaryItems[0] label]); XCTAssertEqualObjects([NSDecimalNumber zero], [summaryItems[0] amount]); XCTAssertEqualObjects(shopName, [summaryItems[1] label]); XCTAssertEqualObjects([NSDecimalNumber zero], [summaryItems[1] amount]); } @end