<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="/js-test-resources/ui-helper.js"></script>
<script src="/resources/js-test-pre.js"></script>
<script src="/resources/payment-request.js"></script>
</head>
<body>
<script>

description("Test that ApplePayPaymentAuthorizationResults with non-empty errors are considered non-final results, regardless of result status or error codes.");

window.jsTestIsAsync = true;

function validRequest()
{
    return {
        countryCode: 'US',
        currencyCode: 'USD',
        supportedNetworks: ['visa', 'masterCard'],
        merchantCapabilities: ['supports3DS'],
        total: { label: 'Your Label', amount: '10.00' },
    }
}

activateThen(() => {
    var session = new ApplePaySession(2, validRequest());
    var results = null;
    if (window.ApplePayError) {
        var unknownError = new ApplePayError("unknown");
        results = [
            { status: ApplePaySession.STATUS_SUCCESS, errors: [unknownError] },
            { status: ApplePaySession.STATUS_FAILURE, errors: [unknownError] },
            { status: ApplePaySession.STATUS_SUCCESS, errors: [] },
        ];
    } else {
        results = [
            ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,
            ApplePaySession.STATUS_INVALID_SHIPPING_CONTACT,
            ApplePaySession.STATUS_SUCCESS,
        ];
    }
    session.onpaymentauthorized = (event) => {
        session.completePayment(results.splice(0, 1)[0]);
        if (results.length)
            internals.mockPaymentCoordinator.acceptPayment();
        else {
            testPassed("did not crash");
            finishJSTest();
        }
    };
    
    session.begin();
    internals.mockPaymentCoordinator.acceptPayment();
});
</script>
<script src="/resources/js-test-post.js"></script>
</body>
</html>
