Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(313)

Unified Diff: third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp

Issue 1938853002: More thorough tests for PaymentRequest (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gn-output-dir
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/modules/payments/PaymentRequest.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp
index da50d216323f4809dd14e9e74d33247981940f51..054a480f0d786d806b1eba85aa291363cb9263c2 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp
@@ -13,13 +13,13 @@
#include "modules/payments/PaymentItem.h"
#include "modules/payments/ShippingOption.h"
#include "platform/heap/HeapAllocator.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "wtf/OwnPtr.h"
+#include <utility>
namespace blink {
-namespace {
-
class PaymentRequestTest : public testing::Test {
public:
PaymentRequestTest()
@@ -102,8 +102,10 @@ TEST_F(PaymentRequestTest, NullShippingOptionWhenNoOptionsAvailable)
{
PaymentDetails details;
details.setItems(HeapVector<PaymentItem>(1, buildPaymentItemForTest()));
+ PaymentOptions options;
+ options.setRequestShipping(true);
- PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), details, getExceptionState());
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), details, options, getExceptionState());
EXPECT_TRUE(request->shippingOption().isNull());
}
@@ -113,13 +115,28 @@ TEST_F(PaymentRequestTest, NullShippingOptionWhenMultipleOptionsAvailable)
PaymentDetails details;
details.setItems(HeapVector<PaymentItem>(1, buildPaymentItemForTest()));
details.setShippingOptions(HeapVector<ShippingOption>(2, buildShippingOptionForTest()));
+ PaymentOptions options;
+ options.setRequestShipping(true);
- PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), details, getExceptionState());
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), details, options, getExceptionState());
EXPECT_TRUE(request->shippingOption().isNull());
}
-TEST_F(PaymentRequestTest, SelectSingleAvailableShippingOption)
+TEST_F(PaymentRequestTest, SelectSingleAvailableShippingOptionWhenShippingRequested)
+{
+ PaymentDetails details;
+ details.setItems(HeapVector<PaymentItem>(1, buildPaymentItemForTest()));
+ details.setShippingOptions(HeapVector<ShippingOption>(1, buildShippingOptionForTest(PaymentTestDataId, PaymentTestOverwriteValue, "standard")));
+ PaymentOptions options;
+ options.setRequestShipping(true);
+
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), details, options, getExceptionState());
+
+ EXPECT_EQ("standard", request->shippingOption());
+}
+
+TEST_F(PaymentRequestTest, DontSelectSingleAvailableShippingOptionByDefault)
{
PaymentDetails details;
details.setItems(HeapVector<PaymentItem>(1, buildPaymentItemForTest()));
@@ -127,7 +144,20 @@ TEST_F(PaymentRequestTest, SelectSingleAvailableShippingOption)
PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), details, getExceptionState());
- EXPECT_EQ("standard", request->shippingOption());
+ EXPECT_TRUE(request->shippingOption().isNull());
+}
+
+TEST_F(PaymentRequestTest, DontSelectSingleAvailableShippingOptionWhenShippingNotRequested)
+{
+ PaymentDetails details;
+ details.setItems(HeapVector<PaymentItem>(1, buildPaymentItemForTest()));
+ details.setShippingOptions(HeapVector<ShippingOption>(1, buildShippingOptionForTest()));
+ PaymentOptions options;
+ options.setRequestShipping(false);
+
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), details, options, getExceptionState());
+
+ EXPECT_TRUE(request->shippingOption().isNull());
}
TEST_F(PaymentRequestTest, AbortWithoutShowShouldThrow)
@@ -139,5 +169,155 @@ TEST_F(PaymentRequestTest, AbortWithoutShowShouldThrow)
EXPECT_TRUE(getExceptionState().hadException());
}
-} // namespace
+class MockFunction : public ScriptFunction {
Marijn Kruisselbrink 2016/05/02 18:17:41 Something as generically named as MockFunction sho
please use gerrit instead 2016/05/02 21:19:45 Done.
+public:
+ static v8::Local<v8::Function> noExpectations(ScriptState* scriptState)
+ {
+ MockFunction* self = new MockFunction(scriptState);
+ return self->bindToV8Function();
+ }
+
+ static v8::Local<v8::Function> expectCall(ScriptState* scriptState)
+ {
+ MockFunction* self = new MockFunction(scriptState);
+ EXPECT_CALL(*self, call(testing::_));
+ return self->bindToV8Function();
+ }
+
+ static v8::Local<v8::Function> expectNoCall(ScriptState* scriptState)
+ {
+ MockFunction* self = new MockFunction(scriptState);
+ EXPECT_CALL(*self, call(testing::_)).Times(0);
+ return self->bindToV8Function();
+ }
+
+private:
+ explicit MockFunction(ScriptState* scriptState)
+ : ScriptFunction(scriptState)
+ {
+ ON_CALL(*this, call(testing::_)).WillByDefault(testing::ReturnArg<0>());
+ }
+
+ MOCK_METHOD1(call, ScriptValue(ScriptValue));
+};
+
+TEST_F(PaymentRequestTest, CanAbortAfterShow)
+{
+ ScriptState::Scope scope(getScriptState());
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
+ EXPECT_FALSE(getExceptionState().hadException());
+
+ request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::noExpectations(getScriptState()));
+ request->abort(getExceptionState());
+
+ EXPECT_FALSE(getExceptionState().hadException());
+}
+
+TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidShippingAddress)
+{
+ ScriptState::Scope scope(getScriptState());
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
+ EXPECT_FALSE(getExceptionState().hadException());
+
+ request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectCall(getScriptState()));
+
+ ((mojom::blink::PaymentRequestClient*)request)->OnShippingAddressChange(mojom::blink::ShippingAddress::New());
Marijn Kruisselbrink 2016/05/02 18:17:41 C-style casts are against the style-guide. In this
please use gerrit instead 2016/05/02 21:19:45 Woops, spending too much time in Java :-) Done.
+}
+
+TEST_F(PaymentRequestTest, DontRejectShowPromiseForValidShippingAddress)
+{
+ ScriptState::Scope scope(getScriptState());
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
+ EXPECT_FALSE(getExceptionState().hadException());
+ mojom::blink::ShippingAddressPtr shippingAddress = mojom::blink::ShippingAddress::New();
+ shippingAddress->region_code = "US";
+ shippingAddress->language_code = "en";
+ shippingAddress->script_code = "Latn";
+
+ request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectNoCall(getScriptState()));
+
+ ((mojom::blink::PaymentRequestClient*)request)->OnShippingAddressChange(std::move(shippingAddress));
+}
+
+TEST_F(PaymentRequestTest, ResolveShowPromiseWithoutShippingAddressInResponse)
+{
+ ScriptState::Scope scope(getScriptState());
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
+ EXPECT_FALSE(getExceptionState().hadException());
+
+ request->show(getScriptState()).then(MockFunction::expectCall(getScriptState()), MockFunction::expectNoCall(getScriptState()));
+
+ ((mojom::blink::PaymentRequestClient*)request)->OnPaymentResponse(mojom::blink::PaymentResponse::New());
+}
+
+TEST_F(PaymentRequestTest, OnShippingOptionChange)
+{
+ ScriptState::Scope scope(getScriptState());
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
+ EXPECT_FALSE(getExceptionState().hadException());
+
+ request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectNoCall(getScriptState()));
+
+ ((mojom::blink::PaymentRequestClient*)request)->OnShippingOptionChange("standardShipping");
+}
+
+TEST_F(PaymentRequestTest, CannotCallShowTwice)
+{
+ ScriptState::Scope scope(getScriptState());
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
+ EXPECT_FALSE(getExceptionState().hadException());
+ request->show(getScriptState());
+
+ request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectCall(getScriptState()));
+}
+
+TEST_F(PaymentRequestTest, CannotCallCompleteTwice)
+{
+ ScriptState::Scope scope(getScriptState());
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
+ EXPECT_FALSE(getExceptionState().hadException());
+ request->show(getScriptState());
+ ((mojom::blink::PaymentRequestClient*)request)->OnPaymentResponse(mojom::blink::PaymentResponse::New());
+ request->complete(getScriptState(), false);
+
+ request->complete(getScriptState(), true).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectCall(getScriptState()));
+}
+
+TEST_F(PaymentRequestTest, RejectShowPromiseOnError)
+{
+ ScriptState::Scope scope(getScriptState());
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
+ EXPECT_FALSE(getExceptionState().hadException());
+
+ request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectCall(getScriptState()));
+
+ ((mojom::blink::PaymentRequestClient*)request)->OnError();
+}
+
+TEST_F(PaymentRequestTest, RejectCompletePromiseOnError)
+{
+ ScriptState::Scope scope(getScriptState());
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
+ EXPECT_FALSE(getExceptionState().hadException());
+ request->show(getScriptState());
+ ((mojom::blink::PaymentRequestClient*)request)->OnPaymentResponse(mojom::blink::PaymentResponse::New());
+
+ request->complete(getScriptState(), true).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectCall(getScriptState()));
+
+ ((mojom::blink::PaymentRequestClient*)request)->OnError();
+}
+
+TEST_F(PaymentRequestTest, ResolvePromiseOnComplete)
+{
+ ScriptState::Scope scope(getScriptState());
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
+ EXPECT_FALSE(getExceptionState().hadException());
+ request->show(getScriptState());
+ ((mojom::blink::PaymentRequestClient*)request)->OnPaymentResponse(mojom::blink::PaymentResponse::New());
+
+ request->complete(getScriptState(), true).then(MockFunction::expectCall(getScriptState()), MockFunction::expectNoCall(getScriptState()));
+
+ ((mojom::blink::PaymentRequestClient*)request)->OnComplete();
+}
+
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/modules/payments/PaymentRequest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698