public final class Adyenv6coreConstants extends GeneratedAdyenv6coreConstants {
	public static final String EXTENSIONNAME = "adyenv6core";

	public static final String PLUGIN_NAME = "adyen-hybris";
	public static final String PLUGIN_VERSION = "10.2.1";
	public static final String PAYMENT_PROVIDER = "Adyen";
	public static final String PAYMENT_METHOD ="paymentMethod";

	final public static String PAYMENT_METHOD_CC = "adyen_cc";
	final public static String PAYMENT_METHOD_EPS = "eps";
	final public static String PAYMENT_METHOD_IDEAL = "ideal";
	final public static String PAYMENT_METHOD_ONECLICK = "adyen_oneclick_";
	final public static String PAYMENT_METHOD_BOLETO = "boleto";
	final public static String PAYMENT_METHOD_PIX = "pix";
	final public static String PAYMENT_METHOD_SEPA_DIRECTDEBIT = "sepadirectdebit";
	final public static String PAYMENT_METHOD_BOLETO_SANTANDER = "boletobancario_santander";
	final public static String PAYMENT_METHOD_MULTIBANCO = "multibanco";
	final public static String PAYMENT_METHOD_POS = "pos";
	final public static String PAYMENT_METHOD_PAYPAL = "paypal";
	final public static String PAYMENT_METHOD_SCHEME = "scheme";
	final public static String PAYMENT_METHOD_APPLEPAY = "applepay";
	final public static String PAYMENT_METHOD_AMAZONPAY = "amazonpay";
	final public static String PAYMENT_METHOD_BCMC = "bcmc";
	final public static String PAYMENT_METHOD_BCMC_MOBILE = "bcmc_mobile";


	public static final String PROCESS_EVENT_ADYEN_CAPTURED = "AdyenCaptured";
	public static final String PROCESS_EVENT_ADYEN_PAYMENT_RESULT = "AdyenPaymentResult";
	public static final String PROCESS_EVENT_ADYEN_REFUNDED = "AdyenRefunded";

	public static final String KLARNA = "klarna";
	public static final String RATEPAY = "ratepay";
	public static final String AFTERPAY = "afterpay_default";
	public static final String AFTERPAY_TOUCH = "afterpaytouch";
	public static final String PAYBRIGHT = "paybright";
	public static final String COUNTRY_CODE_SWEDEN = "SE";
	public static final String COUNTRY_CODE_DENMARK = "DK";
	public static final String COUNTRY_CODE_FINLAND = "FI";
	public static final String COUNTRY_CODE_NORWAY = "NO";
	public static final String KLARNA_SLICE = "klarna_account";
	//Prefix for Oney methods like facilpay_3x or facilpay_4x
	public static final String PAYMENT_METHOD_FACILPAY_PREFIX = "facilypay";
	public static final String CARD_TYPE_DEBIT = "debit";
	public static final String AFFIRM = "affirm";
	public static final String CLEARPAY = "clearpay";
	public static final String GIFT_CARD = "giftcard";

	private Adyenv6coreConstants() {
		//empty to avoid instantiating this constant class
	}

	// implement here constants used by this extension

	public static final String PLATFORM_LOGO_CODE = "adyenv6corePlatformLogo";

	public static final List<String> OPENINVOICE_METHODS_API = Collections.unmodifiableList(new ArrayList<String>() {{
		add(KLARNA);
		add(RATEPAY);
		add(KLARNA_SLICE);
		add(AFFIRM);
		add(CLEARPAY);
		add(AFTERPAY);
		add(AFTERPAY_TOUCH);
		add(PAYBRIGHT);
	}});


	public static final List<String> OPENINVOICE_METHODS_ALLOW_SOCIAL_SECURITY_NUMBER = Collections.unmodifiableList(new ArrayList<String>() {{
		add(COUNTRY_CODE_SWEDEN);
		add(COUNTRY_CODE_DENMARK);
		add(COUNTRY_CODE_FINLAND);
		add(COUNTRY_CODE_NORWAY);
	}});

	public static final List<String> PAYMENT_METHODS_ALLOW_SOCIAL_SECURITY_NUMBER = Collections.unmodifiableList(new ArrayList<String>() {{
		add(RATEPAY);
		add(PAYMENT_METHOD_BOLETO);
		add(PAYMENT_METHOD_PIX);
	}});

	public static final List<String> ISSUER_PAYMENT_METHODS = Collections.unmodifiableList(new ArrayList<String>() {{
		add(PAYMENT_METHOD_IDEAL);
		add(PAYMENT_METHOD_EPS);
	}});
} public class PosPaymentResponseConverter implements Converter<SaleToPOIResponse, PaymentsResponse> {
    @Override
    public PaymentsResponse convert(SaleToPOIResponse saleToPOIResponse) {
        String pspReference = null;
        Map<String, String> additionalData = null;
        String additionalResponse = null;

        if (saleToPOIResponse != null && saleToPOIResponse.getPaymentResponse() != null) {
            pspReference = saleToPOIResponse.getPaymentResponse()
                                            .getPaymentResult()
                                            .getPaymentAcquirerData()
                                            .getAcquirerTransactionID()
                                            .getTransactionID();

            additionalResponse = saleToPOIResponse.getPaymentResponse()
                                                  .getResponse()
                                                  .getAdditionalResponse();

        } else if (saleToPOIResponse != null && saleToPOIResponse.getTransactionStatusResponse() != null) {
            pspReference = saleToPOIResponse.getTransactionStatusResponse()
                                            .getRepeatedMessageResponse()
                                            .getRepeatedResponseMessageBody()
                                            .getPaymentResponse()
                                            .getPaymentResult()
                                            .getPaymentAcquirerData()
                                            .getAcquirerTransactionID()
                                            .getTransactionID();

            additionalResponse = saleToPOIResponse.getTransactionStatusResponse()
                                                  .getRepeatedMessageResponse()
                                                  .getRepeatedResponseMessageBody()
                                                  .getPaymentResponse()
                                                  .getResponse()
                                                  .getAdditionalResponse();
        }
        if (additionalResponse != null) {
            additionalData = parseAdditionalResponse(additionalResponse);
        }
        PaymentsResponse paymentsResponse = new PaymentsResponse();
        paymentsResponse.setPspReference(pspReference);
        paymentsResponse.setAdditionalData(additionalData);

        return paymentsResponse;
    }

    /*
     * Parse base64 encoded additionalResponse and return as a name/value map
     */
    private Map<String, String> parseAdditionalResponse(String additionalResponse) {
        Map<String, String> additionalData = new HashMap<>();
        if (StringUtils.isNotEmpty(additionalResponse)) {
            String decodedAdditionalResponse = new String(Base64.getDecoder().decode(additionalResponse), StandardCharsets.UTF_8);
            Gson gson = new Gson();
            additionalData = gson.fromJson(decodedAdditionalResponse, PaymentsResponse.class).getAdditionalData();
        }
        return additionalData;
    }
} public class AdyenNonAuthorizedPaymentException extends Exception {
    private PaymentResult paymentResult;
    private PaymentsResponse paymentsResponse;
    private TerminalAPIResponse terminalApiResponse;
    private PaymentsDetailsResponse paymentsDetailsResponse;

    public AdyenNonAuthorizedPaymentException(PaymentResult paymentResult) {
        this.paymentResult = paymentResult;
    }

    public AdyenNonAuthorizedPaymentException(PaymentsResponse paymentsResponse) {
        this.paymentsResponse = paymentsResponse;
    }

    public AdyenNonAuthorizedPaymentException(TerminalAPIResponse terminalApiResponse) {
        this.terminalApiResponse = terminalApiResponse;
    }

    public AdyenNonAuthorizedPaymentException(PaymentsDetailsResponse paymentsDetailsResponse) {
        this.paymentsDetailsResponse = paymentsDetailsResponse;
    }

    public AdyenNonAuthorizedPaymentException(String message) {
        super(message);
    }

    public PaymentResult getPaymentResult() {
        return paymentResult;
    }

    public void setPaymentResult(PaymentResult paymentResult) {
        this.paymentResult = paymentResult;
    }

    public PaymentsResponse getPaymentsResponse() {
        return paymentsResponse;
    }

    public void setPaymentsResponse(PaymentsResponse paymentsResponse) {
        this.paymentsResponse = paymentsResponse;
    }

    public TerminalAPIResponse getTerminalApiResponse() {
        return terminalApiResponse;
    }

    public void setTerminalApiResponse(TerminalAPIResponse terminalApiResponse) {
        this.terminalApiResponse = terminalApiResponse;
    }

    public PaymentsDetailsResponse getPaymentsDetailsResponse() {
        return paymentsDetailsResponse;
    }

    public void setPaymentsDetailsResponse(PaymentsDetailsResponse paymentsDetailsResponse) {
        this.paymentsDetailsResponse = paymentsDetailsResponse;
    }
} public class AdyenPaymentServiceFactory {
    private PaymentMethodConverter paymentMethodConverter;
    private AdyenRequestFactory adyenRequestFactory;

    public AdyenPaymentService createFromBaseStore(final BaseStoreModel baseStoreModel) {
        DefaultAdyenPaymentService adyenPaymentService = new DefaultAdyenPaymentService(baseStoreModel);
        adyenPaymentService.setPaymentMethodConverter(paymentMethodConverter);
        adyenPaymentService.setAdyenRequestFactory(adyenRequestFactory);
        return adyenPaymentService;
    }

    public PaymentMethodConverter getPaymentMethodConverter() {
        return paymentMethodConverter;
    }

    public void setPaymentMethodConverter(PaymentMethodConverter paymentMethodConverter) {
        this.paymentMethodConverter = paymentMethodConverter;
    }

    public AdyenRequestFactory getAdyenRequestFactory() {
        return adyenRequestFactory;
    }

    public void setAdyenRequestFactory(AdyenRequestFactory adyenRequestFactory) {
        this.adyenRequestFactory = adyenRequestFactory;
    }
} public class OrderRepository extends AbstractRepository {
    private static final Logger LOG = Logger.getLogger(OrderRepository.class);

    public OrderModel getOrderModel(String code) {
        final Map queryParams = new HashMap();
        queryParams.put("code", code);

        //Adding "{versionID} IS NULL" to get the original order regardless of modification history
        final FlexibleSearchQuery selectOrderQuery = new FlexibleSearchQuery(
                "SELECT {pk} FROM {" + OrderModel._TYPECODE + "}"
                        + " WHERE {" + OrderModel.CODE + "} = ?code"
                        + " AND {versionID} IS NULL",
                queryParams
        );

        LOG.debug("Finding order with code: " + code);

        return (OrderModel) getOneOrNull(selectOrderQuery);
    }
} public interface AdyenBusinessProcessService {
    /**
     * Trigger order-process event
     */
    void triggerOrderProcessEvent(OrderModel orderModel, String event);

    /**
     * Trigger return-process event
     */
    void triggerReturnProcessEvent(OrderModel orderModel, String event);
} public interface AdyenOrderService {
    void updateOrderFromPaymentsResponse(OrderModel order, PaymentsResponse paymentsResponse);

    /**
     * Updates order's metadata using the API Payment response
     * Covers fraud, avs, cc authorisation data
     */
    void updateOrderFromPaymentResult(OrderModel order, PaymentResult paymentResult);

    FraudReportModel createFraudReportFromPaymentsResponse(PaymentsResponse paymentsResponse);

    /**
     * Creates FraudReportModel from PaymentResult
     * @return FraudReportModel|null
     */
    FraudReportModel createFraudReportFromPaymentResult(PaymentResult paymentResult);

    /**
     * Store FraudReportModel
     */
    void storeFraudReport(FraudReportModel fraudReport);

    void storeFraudReportFromPaymentsResponse(OrderModel order, PaymentsResponse paymentsResponse);

    /**
     * Create FraudReportModel from PaymentResult and assigns it to order
     */
    void storeFraudReportFromPaymentResult(OrderModel order, PaymentResult paymentResult);
} public interface AdyenPaymentService {
    /**
     * Performs authorization request via Adyen API
     */
    PaymentResult authorise(CartData cartData, HttpServletRequest request, CustomerModel customerModel) throws Exception;

    ConnectedTerminalsResponse getConnectedTerminals() throws IOException, ApiException ;

    PaymentsResponse authorisePayment(CartData cartData, RequestInfo requestInfo, CustomerModel customerModel) throws Exception;

    PaymentsResponse componentPayment(CartData cartData, PaymentMethodDetails paymentMethodDetails, RequestInfo requestInfo, CustomerModel customerModel) throws Exception;

    PaymentsDetailsResponse authorise3DSPayment(Map<String, String> details) throws Exception;

    /**
     * Performs Capture request via Adyen API
     */
    ModificationResult capture(BigDecimal amount, Currency currency, String authReference, String merchantReference) throws Exception;

    /**
     * Performs cancelOrRefund request via Adyen API
     */
    ModificationResult cancelOrRefund(String authReference, String merchantReference) throws Exception;

    /**
     * Performs refund request via Adyen API
     */
    ModificationResult refund(BigDecimal amount, Currency currency, String authReference, String merchantReference) throws Exception;

    /**
     * Get payment methods using /paymentMethods - Checkout API
     */
    List<PaymentMethod> getPaymentMethods(BigDecimal amount, String currency, String countryCode, String shopperLocale, String shopperReference) throws IOException, ApiException;

    PaymentMethodsResponse getPaymentMethodsResponse(BigDecimal amount, String currency, String countryCode, String shopperLocale, String shopperReference) throws IOException, ApiException;

    /**
     * @deprecated use getPaymentMethods including shopperReference instead {@link #getPaymentMethods(BigDecimal amount, String currency, String countryCode, String shopperLocale, String shopperReference)
     */
    @Deprecated
    List<com.adyen.model.hpp.PaymentMethod> getPaymentMethods(BigDecimal amount, String currency, String countryCode, String shopperLocale) throws HTTPClientException, SignatureException, IOException;

    /**
     * Retrieve stored cards from recurring contracts via Adyen API
     * @deprecated use getPaymentMethodsResponse instead {@link #getPaymentMethodsResponse(BigDecimal amount, String currency, String countryCode, String shopperLocale, String shopperReference)} ()
     */
    @Deprecated
    List<RecurringDetail> getStoredCards(String customerId) throws IOException, ApiException;

    /**
     * Disables a recurring contract via Adyen API
     */
    boolean disableStoredCard(String customerId, String recurringReference) throws IOException, ApiException;

    /**
     * Retrieves payment response from /payments/details for redirect methods like klarna
     */
    PaymentsDetailsResponse getPaymentDetailsFromPayload(Map<String, String> details, String paymentData) throws Exception;

    /**
     * Retrieves payment response from /payments/details
     */
    PaymentsDetailsResponse getPaymentDetailsFromPayload( HashMap<String, String> details) throws Exception;

    /**
     * Returns the Device Fingerprint url
     */
    String getDeviceFingerprintUrl();

    /**
     * Send POS Payment Request using Adyen Terminal API
     */
    TerminalAPIResponse sendSyncPosPaymentRequest(CartData cartData, CustomerModel customer, String serviceId) throws Exception;
    /**
     * Send POS Status Request using Adyen Terminal API
     */
    TerminalAPIResponse sendSyncPosStatusRequest(CartData cartData, String serviceId) throws Exception;
} public interface AdyenTransactionService {
    /**
     * Get TX entry by type and status
     */
    static PaymentTransactionEntryModel getTransactionEntry(PaymentTransactionModel paymentTransactionModel, PaymentTransactionType paymentTransactionType, TransactionStatus transactionStatus) {
        PaymentTransactionEntryModel result = paymentTransactionModel.getEntries().stream()
                .filter(
                        entry -> paymentTransactionType.equals(entry.getType())
                                && transactionStatus.name().equals(entry.getTransactionStatus())
                )
                .findFirst()
                .orElse(null);

        return result;
    }

    /**
     * Get TX entry by type, status and details
     */
    static PaymentTransactionEntryModel getTransactionEntry(PaymentTransactionModel paymentTransactionModel,
                                                            PaymentTransactionType paymentTransactionType,
                                                            TransactionStatus transactionStatus,
                                                            TransactionStatusDetails transactionStatusDetails) {
        PaymentTransactionEntryModel result = paymentTransactionModel.getEntries().stream()
                .filter(
                        entry -> paymentTransactionType.equals(entry.getType())
                                && transactionStatus.name().equals(entry.getTransactionStatus())
                                && transactionStatusDetails.name().equals(entry.getTransactionStatusDetails())
                )
                .findFirst()
                .orElse(null);

        return result;
    }

    /**
     * Creates a PaymentTransactionEntryModel with type=CAPTURE from NotificationItemModel
     */
    PaymentTransactionEntryModel createCapturedTransactionFromNotification(PaymentTransactionModel paymentTransaction, NotificationItemModel notificationItemModel);

    /**
     * Creates a PaymentTransactionEntryModel with type=REFUND_FOLLOW_ON from NotificationItemModel
     */
    PaymentTransactionEntryModel createRefundedTransactionFromNotification(PaymentTransactionModel paymentTransaction, NotificationItemModel notificationItemModel);

    /**
     * Stores the authorization transactions for an order
     */
    PaymentTransactionModel authorizeOrderModel(AbstractOrderModel abstractOrderModel, String merchantTransactionCode, String pspReference);

    /**
     * Store failed authorization transaction entry
     */
    PaymentTransactionModel storeFailedAuthorizationFromNotification(NotificationItemModel notificationItemModel, AbstractOrderModel abstractOrderModel);

    /**
     * Creates a PaymentTransactionEntryModel with type=CANCEL
     */
    PaymentTransactionEntryModel createCancellationTransaction(PaymentTransactionModel paymentTransaction, String merchantCode, String pspReference);

    /**
     * Creates a PaymentTransactionModel
     */
    PaymentTransactionModel createPaymentTransactionFromResultCode(AbstractOrderModel abstractOrderModel, String merchantTransactionCode, String pspReference, PaymentsResponse.ResultCodeEnum resultCodeEnum);

    /**
     * Stores the authorization transactions for an order
     */
    PaymentTransactionModel authorizeOrderModel(AbstractOrderModel abstractOrderModel, String merchantTransactionCode, String pspReference, BigDecimal paymentAmount);
} final public static String PAYMENT_METHOD_EPS = "eps"; public static final String MODEL_ISSUER_LISTS = "issuerLists"; public static final String MODEL_SELECTED_PAYMENT_METHOD = "selectedPaymentMethod"; public static final String SESSION_PENDING_ORDER_CODE = "adyen_pending_order_code";
import com.adyen.model.checkout.InputDetail;
import com.adyen.model.checkout.Item;
import com.adyen.model.checkout.PaymentMethod;
import com.adyen.model.checkout.PaymentMethodsResponse;
import com.adyen.model.checkout.PaymentsDetailsResponse;
import com.adyen.model.checkout.PaymentsResponse;
import com.adyen.model.nexo.DocumentQualifierType;
import com.adyen.model.nexo.ErrorConditionType;
import com.adyen.model.nexo.OutputContent;
import com.adyen.model.nexo.OutputText;
import com.adyen.model.nexo.PaymentReceipt;
import com.adyen.model.nexo.PaymentResponse;
import com.adyen.model.nexo.RepeatedMessageResponse;
import com.adyen.model.nexo.RepeatedResponseMessageBody;
import com.adyen.model.nexo.Response;
import com.adyen.model.nexo.ResultType;
import com.adyen.model.nexo.SaleToPOIResponse;
import com.adyen.model.nexo.TransactionStatusResponse;
import com.adyen.model.terminal.TerminalAPIResponse;
import com.adyen.service.exception.ApiException;
import com.adyen.v6.constants.Adyenv6coreConstants;
import com.adyen.v6.converters.PosPaymentResponseConverter;
import com.adyen.v6.enums.RecurringContractMode;
import com.adyen.v6.exceptions.AdyenNonAuthorizedPaymentException;
import com.adyen.v6.factory.AdyenPaymentServiceFactory;
import com.adyen.v6.repository.OrderRepository;
import com.adyen.v6.service.AdyenBusinessProcessService;
import com.adyen.v6.service.AdyenOrderService;
import com.adyen.v6.service.AdyenPaymentService;
import com.adyen.v6.service.AdyenTransactionService;
import de.hybris.bootstrap.annotations.UnitTest;
import de.hybris.platform.commercefacades.order.CheckoutFacade;
import de.hybris.platform.commercefacades.order.data.CartData;
import de.hybris.platform.commercefacades.order.data.OrderData;
import de.hybris.platform.commercefacades.product.data.PriceData;
import de.hybris.platform.commercefacades.user.converters.populator.AddressPopulator;
import de.hybris.platform.commercefacades.user.data.AddressData;
import de.hybris.platform.commercefacades.user.data.CountryData;
import de.hybris.platform.commerceservices.strategies.CheckoutCustomerStrategy;
import de.hybris.platform.converters.Populator;
import de.hybris.platform.core.enums.OrderStatus;
import de.hybris.platform.core.model.c2l.CountryModel;
import de.hybris.platform.core.model.order.CartModel;
import de.hybris.platform.core.model.order.OrderModel;
import de.hybris.platform.core.model.order.delivery.DeliveryModeModel;
import de.hybris.platform.core.model.user.AddressModel;
import de.hybris.platform.core.model.user.CustomerModel;
import de.hybris.platform.core.model.user.UserModel;
import de.hybris.platform.order.CalculationService;
import de.hybris.platform.order.CartFactory;
import de.hybris.platform.order.CartService;
import de.hybris.platform.order.InvalidCartException;
import de.hybris.platform.payment.model.PaymentTransactionModel;
import de.hybris.platform.servicelayer.dto.converter.ConversionException;
import de.hybris.platform.servicelayer.dto.converter.Converter;
import de.hybris.platform.servicelayer.i18n.CommonI18NService;
import de.hybris.platform.servicelayer.model.ModelService;
import de.hybris.platform.servicelayer.session.SessionService;
import de.hybris.platform.store.BaseStoreModel;
import de.hybris.platform.store.services.BaseStoreService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.ui.ExtendedModelMap;
import org.springframework.ui.Model;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.security.SignatureException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import static com.adyen.constants.ApiConstants.ThreeDS2Property.CHALLENGE_RESULT;
import static com.adyen.constants.ApiConstants.ThreeDS2Property.FINGERPRINT_RESULT;
import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_EPS;
import static com.adyen.v6.facades.DefaultAdyenCheckoutFacade.MODEL_ISSUER_LISTS;
import static com.adyen.v6.facades.DefaultAdyenCheckoutFacade.MODEL_SELECTED_PAYMENT_METHOD;
import static com.adyen.v6.facades.DefaultAdyenCheckoutFacade.SESSION_PENDING_ORDER_CODE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyMap;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/*
 *                       ######
 *                       ######
 * ############    ####( ######  #####. ######  ############   ############
 * #############  #####( ######  #####. ######  #############  #############
 *        ######  #####( ######  #####. ######  #####  ######  #####  ######
 * ###### ######  #####( ######  #####. ######  #####  #####   #####  ######
 * ###### ######  #####( ######  #####. ######  #####          #####  ######
 * #############  #############  #############  #############  #####  ######
 *  ############   ############  #############   ############  #####  ######
 *                                      ######
 *                               #############
 *                               ############
 *
 * Adyen Hybris Extension
 *
 * Copyright (c) 2020 Adyen B.V.
 * This file is open source and available under the MIT license.
 * See the LICENSE file for more info.
 */

package com.adyen.v6.facades;




@UnitTest
@RunWith(MockitoJUnitRunner.class)
public class AdyenCheckoutFacadeTest {

    private static final String DELIVERY_MODE = "deliveryMode";
    private static final String EXCEPTION = "exception";
    private static final String MERCHANT_REFERENCE = "merchantReference";
    private static final String PAYMENT_METHOD = "paymentMethod";
    private static final String PENDING_ORDER_CODE = "pendingOrder";
    private static final String RESULT = "result";
    private static final String SERVICE_ID = "serviceId";
    private static final String URL = "url";

    @InjectMocks
    DefaultAdyenCheckoutFacade adyenCheckoutFacade = new DefaultAdyenCheckoutFacade();

    @Mock
    AdyenPaymentServiceFactory adyenPaymentServiceFactory;