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 |