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.document(), buildPaymentMethodDataForTest(), | 20 scope.getScriptState(), buildPaymentMethodDataForTest(), |
21 buildPaymentDetailsForTest(), scope.getExceptionState()); | 21 buildPaymentDetailsForTest(), scope.getExceptionState()); |
22 EXPECT_FALSE(scope.getExceptionState().hadException()); | 22 EXPECT_FALSE(scope.getExceptionState().hadException()); |
23 request->show(scope.getScriptState()); | 23 request->show(); |
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(PaymentCompleter::Fail); |
27 | 27 |
28 request->complete(scope.getScriptState(), PaymentCompleter::Success) | 28 request->complete(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.document(), buildPaymentMethodDataForTest(), | 37 scope.getScriptState(), buildPaymentMethodDataForTest(), |
38 buildPaymentDetailsForTest(), scope.getExceptionState()); | 38 buildPaymentDetailsForTest(), scope.getExceptionState()); |
39 EXPECT_FALSE(scope.getExceptionState().hadException()); | 39 EXPECT_FALSE(scope.getExceptionState().hadException()); |
40 request->show(scope.getScriptState()); | 40 request->show(); |
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(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.document(), buildPaymentMethodDataForTest(), | 62 scope.getScriptState(), buildPaymentMethodDataForTest(), |
63 buildPaymentDetailsForTest(), scope.getExceptionState()); | 63 buildPaymentDetailsForTest(), scope.getExceptionState()); |
64 EXPECT_FALSE(scope.getExceptionState().hadException()); | 64 EXPECT_FALSE(scope.getExceptionState().hadException()); |
65 request->show(scope.getScriptState()); | 65 request->show(); |
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(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.document(), buildPaymentMethodDataForTest(), | 80 scope.getScriptState(), buildPaymentMethodDataForTest(), |
81 buildPaymentDetailsForTest(), scope.getExceptionState()); | 81 buildPaymentDetailsForTest(), scope.getExceptionState()); |
82 EXPECT_FALSE(scope.getExceptionState().hadException()); | 82 EXPECT_FALSE(scope.getExceptionState().hadException()); |
83 request->show(scope.getScriptState()); | 83 request->show(); |
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(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.document(), buildPaymentMethodDataForTest(), | 99 scope.getScriptState(), buildPaymentMethodDataForTest(), |
100 buildPaymentDetailsForTest(), scope.getExceptionState()); | 100 buildPaymentDetailsForTest(), scope.getExceptionState()); |
101 EXPECT_FALSE(scope.getExceptionState().hadException()); | 101 EXPECT_FALSE(scope.getExceptionState().hadException()); |
102 request->show(scope.getScriptState()) | 102 request->show().then(funcs.expectCall(), funcs.expectNoCall()); |
103 .then(funcs.expectCall(), funcs.expectNoCall()); | |
104 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) | 103 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) |
105 ->OnPaymentResponse(buildPaymentResponseForTest()); | 104 ->OnPaymentResponse(buildPaymentResponseForTest()); |
106 | 105 |
107 String errorMessage; | 106 String errorMessage; |
108 request->complete(scope.getScriptState(), PaymentCompleter::Success) | 107 request->complete(PaymentCompleter::Success) |
109 .then(funcs.expectNoCall(), funcs.expectCall(&errorMessage)); | 108 .then(funcs.expectNoCall(), funcs.expectCall(&errorMessage)); |
110 | 109 |
111 request->onUpdatePaymentDetailsFailure("oops"); | 110 request->onUpdatePaymentDetailsFailure("oops"); |
112 | 111 |
113 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate()); | 112 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate()); |
114 EXPECT_EQ("AbortError: oops", errorMessage); | 113 EXPECT_EQ("AbortError: oops", errorMessage); |
115 } | 114 } |
116 | 115 |
117 TEST(CompleteTest, RejectCompletePromiseAfterTimeout) { | 116 TEST(CompleteTest, RejectCompletePromiseAfterTimeout) { |
118 V8TestingScope scope; | 117 V8TestingScope scope; |
119 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); | 118 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); |
120 makePaymentRequestOriginSecure(scope.document()); | 119 makePaymentRequestOriginSecure(scope.document()); |
121 PaymentRequest* request = PaymentRequest::create( | 120 PaymentRequest* request = PaymentRequest::create( |
122 scope.document(), buildPaymentMethodDataForTest(), | 121 scope.getScriptState(), buildPaymentMethodDataForTest(), |
123 buildPaymentDetailsForTest(), scope.getExceptionState()); | 122 buildPaymentDetailsForTest(), scope.getExceptionState()); |
124 EXPECT_FALSE(scope.getExceptionState().hadException()); | 123 EXPECT_FALSE(scope.getExceptionState().hadException()); |
125 request->show(scope.getScriptState()) | 124 request->show().then(funcs.expectCall(), funcs.expectNoCall()); |
126 .then(funcs.expectCall(), funcs.expectNoCall()); | |
127 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) | 125 static_cast<payments::mojom::blink::PaymentRequestClient*>(request) |
128 ->OnPaymentResponse(buildPaymentResponseForTest()); | 126 ->OnPaymentResponse(buildPaymentResponseForTest()); |
129 request->onCompleteTimeoutForTesting(); | 127 request->onCompleteTimeoutForTesting(); |
130 | 128 |
131 String errorMessage; | 129 String errorMessage; |
132 request->complete(scope.getScriptState(), PaymentCompleter::Success) | 130 request->complete(PaymentCompleter::Success) |
133 .then(funcs.expectNoCall(), funcs.expectCall(&errorMessage)); | 131 .then(funcs.expectNoCall(), funcs.expectCall(&errorMessage)); |
134 | 132 |
135 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate()); | 133 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate()); |
136 EXPECT_EQ( | 134 EXPECT_EQ( |
137 "InvalidStateError: Timed out after 60 seconds, complete() called too " | 135 "InvalidStateError: Timed out after 60 seconds, complete() called too " |
138 "late", | 136 "late", |
139 errorMessage); | 137 errorMessage); |
140 } | 138 } |
141 | 139 |
142 } // namespace | 140 } // namespace |
143 } // namespace blink | 141 } // namespace blink |
OLD | NEW |