     //  MARK: - PersonNameComponents -
     //
     static func createPersonName() -> PersonNameComponents {
-        var personName        = PersonNameComponents.init()
+        var personName        = PersonNameComponents()
         personName.givenName  = firstName
         personName.familyName = lastName
         return personName

    //  MARK: - CNPostalAddress -
    //
    static func createPostalAddress() -> CNPostalAddress {
        let postalAddress        = CNMutablePostalAddress.init()
        postalAddress.street     = address1
        postalAddress.postalCode = zip
        postalAddress.country    = country

    //  MARK: - PassKit -
    //
    static func createContact(with postalAddress: CNPostalAddress) -> PKContact {
        let contact           = PKContact()
        contact.name          = createPersonName()
        contact.emailAddress  = emailAddress
        contact.phoneNumber   = CNPhoneNumber(stringValue: phone)
        contact.postalAddress = postalAddress
        return contact
    }
    
    static func createPaymentMethod() -> PKPaymentMethod {
        return MockPaymentMethod(displayName: "AMEX", network: .amex, type: .credit)
    }
    
    static func createShippingMethod() -> PKShippingMethod {
        let shippingMethod        = PKShippingMethod(label: "Free Shipping", amount: 0)
        shippingMethod.identifier = "unique_id"
        return shippingMethod
    }
    
    static func createPaymentToken() -> PKPaymentToken {
        return MockPaymentToken(paymentMethod: Models.createPaymentMethod() as! MockPaymentMethod)
    }
    
    static func createPayment() -> PKPayment {
        return MockPayment(
            token: createPaymentToken() as! MockPaymentToken,
            billingContact: createContact(with: createPostalAddress()),
            shippingContact: createContact(with: createPostalAddress()),
            shippingMethod: createShippingMethod())
    }
    
    static func createSummaryItems() -> [PKPaymentSummaryItem] {
        var summaryItems = [PKPaymentSummaryItem]()
        summaryItems.append(PKPaymentSummaryItem(label: "SubTotal", amount: NSDecimalNumber(value: 1.00)))
        summaryItems.append(PKPaymentSummaryItem(label: "Tax",      amount: NSDecimalNumber(value: 1.00)))
        summaryItems.append(PKPaymentSummaryItem(label: "Shipping", amount: NSDecimalNumber(value: 1.00)))
        summaryItems.append(PKPaymentSummaryItem(label: "Total",    amount: NSDecimalNumber(value: 3.00)))
        return summaryItems
    }
    
    static func createShippingMethods() -> [PKShippingMethod] {
        var shippingMethods = [PKShippingMethod]()
        
        shippingMethods.append(
            PKShippingMethod(
                label: "Free",
                amount: NSDecimalNumber(value: 0.0),
                identifier: "Free",
                detail: "10-15 Days"))
        
        shippingMethods.append(
            PKShippingMethod(
                label: "Standard",
                amount: NSDecimalNumber(value: 5.0),
                identifier: "Standard",
                detail: "10-15 Days"))
        
        shippingMethods.append(
            PKShippingMethod(
                label: "Express",
                amount: NSDecimalNumber(value: 10.0),
                identifier: "Express",
                detail: "10-15 Days"))
        
        return shippingMethods
    }
    
    static func createPaymentSession(requiringShippingAddressFields: Bool, usingNonDefault controllerType: PaymentAuthorizationControlling.Type?) -> PaymentSession {
        
        if let controllerType = controllerType {
            return PaymentSession(
                merchantId: merchantId,
                countryCode: countryCode,
                currencyCode: currencyCode,
                requiringShippingAddressFields: requiringShippingAddressFields,
                summaryItems: createSummaryItems(),
                shippingMethods: createShippingMethods(),
                controllerType: controllerType)
        } else {
            return PaymentSession(
                merchantId: merchantId,
                countryCode: countryCode,
                currencyCode: currencyCode,
                requiringShippingAddressFields: requiringShippingAddressFields,
                summaryItems: createSummaryItems(),
                shippingMethods: createShippingMethods())
        }
    }
}
