| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Tests for PaymentRequest::complete(). | 5 // Tests for PaymentRequest::complete(). |
| 6 | 6 |
| 7 #include "bindings/core/v8/V8BindingForTesting.h" | 7 #include "bindings/core/v8/V8BindingForTesting.h" |
| 8 #include "modules/payments/PaymentRequest.h" | 8 #include "modules/payments/PaymentRequest.h" |
| 9 #include "modules/payments/PaymentTestHelper.h" | 9 #include "modules/payments/PaymentTestHelper.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 | 11 |
| 12 namespace blink { | 12 namespace blink { |
| 13 namespace { | 13 namespace { |
| 14 | 14 |
| 15 TEST(CompleteTest, CannotCallCompleteTwice) { | 15 TEST(CompleteTest, CannotCallCompleteTwice) { |
| 16 V8TestingScope scope; | 16 V8TestingScope scope; |
| 17 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); | 17 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); |
| 18 makePaymentRequestOriginSecure(scope.document()); | 18 makePaymentRequestOriginSecure(scope.document()); |
| 19 PaymentRequest* request = PaymentRequest::create( | 19 PaymentRequest* request = PaymentRequest::create( |
| 20 scope.getExecutionContext(), buildPaymentMethodDataForTest(), | 20 scope.getExecutionContext(), buildPaymentMethodDataForTest(), |
| 21 buildPaymentDetailsForTest(), scope.getExceptionState()); | 21 buildPaymentDetailsInitForTest(), scope.getExceptionState()); |
| 22 EXPECT_FALSE(scope.getExceptionState().hadException()); | 22 EXPECT_FALSE(scope.getExceptionState().hadException()); |
| 23 request->show(scope.getScriptState()); | 23 request->show(scope.getScriptState()); |
| 24 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) | 24 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) |
| 25 ->OnPaymentResponse(buildPaymentResponseForTest()); | 25 ->OnPaymentResponse(buildPaymentResponseForTest()); |
| 26 request->complete(scope.getScriptState(), PaymentCompleter::Fail); | 26 request->complete(scope.getScriptState(), PaymentCompleter::Fail); |
| 27 | 27 |
| 28 request->complete(scope.getScriptState(), PaymentCompleter::Success) | 28 request->complete(scope.getScriptState(), PaymentCompleter::Success) |
| 29 .then(funcs.expectNoCall(), funcs.expectCall()); | 29 .then(funcs.expectNoCall(), funcs.expectCall()); |
| 30 } | 30 } |
| 31 | 31 |
| 32 TEST(CompleteTest, RejectCompletePromiseOnError) { | 32 TEST(CompleteTest, RejectCompletePromiseOnError) { |
| 33 V8TestingScope scope; | 33 V8TestingScope scope; |
| 34 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); | 34 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); |
| 35 makePaymentRequestOriginSecure(scope.document()); | 35 makePaymentRequestOriginSecure(scope.document()); |
| 36 PaymentRequest* request = PaymentRequest::create( | 36 PaymentRequest* request = PaymentRequest::create( |
| 37 scope.getExecutionContext(), buildPaymentMethodDataForTest(), | 37 scope.getExecutionContext(), buildPaymentMethodDataForTest(), |
| 38 buildPaymentDetailsForTest(), scope.getExceptionState()); | 38 buildPaymentDetailsInitForTest(), scope.getExceptionState()); |
| 39 EXPECT_FALSE(scope.getExceptionState().hadException()); | 39 EXPECT_FALSE(scope.getExceptionState().hadException()); |
| 40 request->show(scope.getScriptState()); | 40 request->show(scope.getScriptState()); |
| 41 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) | 41 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) |
| 42 ->OnPaymentResponse(buildPaymentResponseForTest()); | 42 ->OnPaymentResponse(buildPaymentResponseForTest()); |
| 43 | 43 |
| 44 String errorMessage; | 44 String errorMessage; |
| 45 request->complete(scope.getScriptState(), PaymentCompleter::Success) | 45 request->complete(scope.getScriptState(), PaymentCompleter::Success) |
| 46 .then(funcs.expectNoCall(), funcs.expectCall(&errorMessage)); | 46 .then(funcs.expectNoCall(), funcs.expectCall(&errorMessage)); |
| 47 | 47 |
| 48 static_cast<payments::mojom::blink::PaymentRequestClient*>(request)->OnError( | 48 static_cast<payments::mojom::blink::PaymentRequestClient*>(request)->OnError( |
| 49 payments::mojom::blink::PaymentErrorReason::UNKNOWN); | 49 payments::mojom::blink::PaymentErrorReason::UNKNOWN); |
| 50 | 50 |
| 51 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate()); | 51 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate()); |
| 52 EXPECT_EQ("UnknownError: Request failed", errorMessage); | 52 EXPECT_EQ("UnknownError: Request failed", errorMessage); |
| 53 } | 53 } |
| 54 | 54 |
| 55 // If user cancels the transaction during processing, the complete() promise | 55 // If user cancels the transaction during processing, the complete() promise |
| 56 // should be rejected. | 56 // should be rejected. |
| 57 TEST(CompleteTest, RejectCompletePromiseAfterError) { | 57 TEST(CompleteTest, RejectCompletePromiseAfterError) { |
| 58 V8TestingScope scope; | 58 V8TestingScope scope; |
| 59 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); | 59 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); |
| 60 makePaymentRequestOriginSecure(scope.document()); | 60 makePaymentRequestOriginSecure(scope.document()); |
| 61 PaymentRequest* request = PaymentRequest::create( | 61 PaymentRequest* request = PaymentRequest::create( |
| 62 scope.getExecutionContext(), buildPaymentMethodDataForTest(), | 62 scope.getExecutionContext(), buildPaymentMethodDataForTest(), |
| 63 buildPaymentDetailsForTest(), scope.getExceptionState()); | 63 buildPaymentDetailsInitForTest(), scope.getExceptionState()); |
| 64 EXPECT_FALSE(scope.getExceptionState().hadException()); | 64 EXPECT_FALSE(scope.getExceptionState().hadException()); |
| 65 request->show(scope.getScriptState()); | 65 request->show(scope.getScriptState()); |
| 66 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) | 66 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) |
| 67 ->OnPaymentResponse(buildPaymentResponseForTest()); | 67 ->OnPaymentResponse(buildPaymentResponseForTest()); |
| 68 static_cast<payments::mojom::blink::PaymentRequestClient*>(request)->OnError( | 68 static_cast<payments::mojom::blink::PaymentRequestClient*>(request)->OnError( |
| 69 payments::mojom::blink::PaymentErrorReason::USER_CANCEL); | 69 payments::mojom::blink::PaymentErrorReason::USER_CANCEL); |
| 70 | 70 |
| 71 request->complete(scope.getScriptState(), PaymentCompleter::Success) | 71 request->complete(scope.getScriptState(), PaymentCompleter::Success) |
| 72 .then(funcs.expectNoCall(), funcs.expectCall()); | 72 .then(funcs.expectNoCall(), funcs.expectCall()); |
| 73 } | 73 } |
| 74 | 74 |
| 75 TEST(CompleteTest, ResolvePromiseOnComplete) { | 75 TEST(CompleteTest, ResolvePromiseOnComplete) { |
| 76 V8TestingScope scope; | 76 V8TestingScope scope; |
| 77 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); | 77 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); |
| 78 makePaymentRequestOriginSecure(scope.document()); | 78 makePaymentRequestOriginSecure(scope.document()); |
| 79 PaymentRequest* request = PaymentRequest::create( | 79 PaymentRequest* request = PaymentRequest::create( |
| 80 scope.getExecutionContext(), buildPaymentMethodDataForTest(), | 80 scope.getExecutionContext(), buildPaymentMethodDataForTest(), |
| 81 buildPaymentDetailsForTest(), scope.getExceptionState()); | 81 buildPaymentDetailsInitForTest(), scope.getExceptionState()); |
| 82 EXPECT_FALSE(scope.getExceptionState().hadException()); | 82 EXPECT_FALSE(scope.getExceptionState().hadException()); |
| 83 request->show(scope.getScriptState()); | 83 request->show(scope.getScriptState()); |
| 84 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) | 84 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) |
| 85 ->OnPaymentResponse(buildPaymentResponseForTest()); | 85 ->OnPaymentResponse(buildPaymentResponseForTest()); |
| 86 | 86 |
| 87 request->complete(scope.getScriptState(), PaymentCompleter::Success) | 87 request->complete(scope.getScriptState(), PaymentCompleter::Success) |
| 88 .then(funcs.expectCall(), funcs.expectNoCall()); | 88 .then(funcs.expectCall(), funcs.expectNoCall()); |
| 89 | 89 |
| 90 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) | 90 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) |
| 91 ->OnComplete(); | 91 ->OnComplete(); |
| 92 } | 92 } |
| 93 | 93 |
| 94 TEST(CompleteTest, RejectCompletePromiseOnUpdateDetailsFailure) { | 94 TEST(CompleteTest, RejectCompletePromiseOnUpdateDetailsFailure) { |
| 95 V8TestingScope scope; | 95 V8TestingScope scope; |
| 96 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); | 96 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); |
| 97 makePaymentRequestOriginSecure(scope.document()); | 97 makePaymentRequestOriginSecure(scope.document()); |
| 98 PaymentRequest* request = PaymentRequest::create( | 98 PaymentRequest* request = PaymentRequest::create( |
| 99 scope.getExecutionContext(), buildPaymentMethodDataForTest(), | 99 scope.getExecutionContext(), buildPaymentMethodDataForTest(), |
| 100 buildPaymentDetailsForTest(), scope.getExceptionState()); | 100 buildPaymentDetailsInitForTest(), scope.getExceptionState()); |
| 101 EXPECT_FALSE(scope.getExceptionState().hadException()); | 101 EXPECT_FALSE(scope.getExceptionState().hadException()); |
| 102 request->show(scope.getScriptState()) | 102 request->show(scope.getScriptState()) |
| 103 .then(funcs.expectCall(), funcs.expectNoCall()); | 103 .then(funcs.expectCall(), funcs.expectNoCall()); |
| 104 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) | 104 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) |
| 105 ->OnPaymentResponse(buildPaymentResponseForTest()); | 105 ->OnPaymentResponse(buildPaymentResponseForTest()); |
| 106 | 106 |
| 107 String errorMessage; | 107 String errorMessage; |
| 108 request->complete(scope.getScriptState(), PaymentCompleter::Success) | 108 request->complete(scope.getScriptState(), PaymentCompleter::Success) |
| 109 .then(funcs.expectNoCall(), funcs.expectCall(&errorMessage)); | 109 .then(funcs.expectNoCall(), funcs.expectCall(&errorMessage)); |
| 110 | 110 |
| 111 request->onUpdatePaymentDetailsFailure("oops"); | 111 request->onUpdatePaymentDetailsFailure("oops"); |
| 112 | 112 |
| 113 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate()); | 113 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate()); |
| 114 EXPECT_EQ("AbortError: oops", errorMessage); | 114 EXPECT_EQ("AbortError: oops", errorMessage); |
| 115 } | 115 } |
| 116 | 116 |
| 117 TEST(CompleteTest, RejectCompletePromiseAfterTimeout) { | 117 TEST(CompleteTest, RejectCompletePromiseAfterTimeout) { |
| 118 V8TestingScope scope; | 118 V8TestingScope scope; |
| 119 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); | 119 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); |
| 120 makePaymentRequestOriginSecure(scope.document()); | 120 makePaymentRequestOriginSecure(scope.document()); |
| 121 PaymentRequest* request = PaymentRequest::create( | 121 PaymentRequest* request = PaymentRequest::create( |
| 122 scope.getExecutionContext(), buildPaymentMethodDataForTest(), | 122 scope.getExecutionContext(), buildPaymentMethodDataForTest(), |
| 123 buildPaymentDetailsForTest(), scope.getExceptionState()); | 123 buildPaymentDetailsInitForTest(), scope.getExceptionState()); |
| 124 EXPECT_FALSE(scope.getExceptionState().hadException()); | 124 EXPECT_FALSE(scope.getExceptionState().hadException()); |
| 125 request->show(scope.getScriptState()) | 125 request->show(scope.getScriptState()) |
| 126 .then(funcs.expectCall(), funcs.expectNoCall()); | 126 .then(funcs.expectCall(), funcs.expectNoCall()); |
| 127 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) | 127 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) |
| 128 ->OnPaymentResponse(buildPaymentResponseForTest()); | 128 ->OnPaymentResponse(buildPaymentResponseForTest()); |
| 129 request->onCompleteTimeoutForTesting(); | 129 request->onCompleteTimeoutForTesting(); |
| 130 | 130 |
| 131 String errorMessage; | 131 String errorMessage; |
| 132 request->complete(scope.getScriptState(), PaymentCompleter::Success) | 132 request->complete(scope.getScriptState(), PaymentCompleter::Success) |
| 133 .then(funcs.expectNoCall(), funcs.expectCall(&errorMessage)); | 133 .then(funcs.expectNoCall(), funcs.expectCall(&errorMessage)); |
| 134 | 134 |
| 135 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate()); | 135 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate()); |
| 136 EXPECT_EQ( | 136 EXPECT_EQ( |
| 137 "InvalidStateError: Timed out after 60 seconds, complete() called too " | 137 "InvalidStateError: Timed out after 60 seconds, complete() called too " |
| 138 "late", | 138 "late", |
| 139 errorMessage); | 139 errorMessage); |
| 140 } | 140 } |
| 141 | 141 |
| 142 } // namespace | 142 } // namespace |
| 143 } // namespace blink | 143 } // namespace blink |
| OLD | NEW |