on xenial help sign in
Check purchase state to determine if purchase was cancelled and hide progress.
commit89081af23c99a1dc1164355a9ae4b2920757a55a authorRodney Dawes <rodney.dawes@canonical.com> dateMon 15 Sep 2014, 17:32 (12 years ago) parentbd05eec
6 files changed+54−1
plugins/Ubuntu/Payments/Payments.cpp+10 plugins/Ubuntu/Payments/Payments.h+1 qml/Dash/Previews/PreviewPayments.qml+4 tests/mocks/Ubuntu/Payments/MockPayments.cpp+3−1 tests/mocks/Ubuntu/Payments/MockPayments.h+1 tests/qmltests/Dash/Previews/tst_PreviewPayments.qml+35
plugins/Ubuntu/Payments/Payments.cpp+10
@@ -29,6 +29,7 @@ static void observer(PayPackage* /* package */, const char* itemid, PayPackageIt
2929 // http://qt-project.org/doc/qt-5/threads-qobject.html#signals-and-slots-across-threads
3030
3131 Payments *self = static_cast<Payments*>(user_data);
32+ static bool _purchasing = false;
3233
3334 // If the item ID is different, ignore it.
3435 if (itemid != self->storeItemId()) {
@@ -41,6 +42,15 @@ static void observer(PayPackage* /* package */, const char* itemid, PayPackageIt
4142 case PAY_PACKAGE_ITEM_STATUS_PURCHASED:
4243 Q_EMIT self->purchaseCompleted();
4344 break;
45+ case PAY_PACKAGE_ITEM_STATUS_PURCHASING:
46+ _purchasing = true;
47+ break;
48+ case PAY_PACKAGE_ITEM_STATUS_NOT_PURCHASED:
49+ if (_purchasing) {
50+ _purchasing = false;
51+ Q_EMIT self->purchaseCancelled();
52+ }
53+ break;
4454 default:
4555 break;
4656 }
plugins/Ubuntu/Payments/Payments.h+1
@@ -53,6 +53,7 @@ Q_SIGNALS:
5353
5454 void purchaseError(const QString &error);
5555 void purchaseCompleted();
56+ void purchaseCancelled();
5657
5758private:
5859 QString m_currency;
qml/Dash/Previews/PreviewPayments.qml+4
@@ -63,6 +63,10 @@ PreviewWidget {
6363 paymentButton.opacity = 1;
6464 root.triggered(widgetId, "purchaseError", source);
6565 }
66+ onPurchaseCancelled: {
67+ paymentButton.opacity = 1;
68+ root.triggered(widgetId, "purchaseCancelled", source);
69+ }
6670 }
6771 }
6872
tests/mocks/Ubuntu/Payments/MockPayments.cpp+3−1
@@ -84,7 +84,9 @@ void MockPayments::start()
8484
8585void MockPayments::process()
8686{
87− if (m_store_item_id == "com.example.invalid") {
87+ if (m_store_item_id == "com.example.cancel") {
88+ Q_EMIT purchaseCancelled();
89+ } else if (m_store_item_id == "com.example.invalid") {
8890 Q_EMIT purchaseError("Purchase failed.");
8991 } else {
9092 Q_EMIT purchaseCompleted();
tests/mocks/Ubuntu/Payments/MockPayments.h+1
@@ -51,6 +51,7 @@ Q_SIGNALS:
5151
5252 void purchaseError(const QString &error);
5353 void purchaseCompleted();
54+ void purchaseCancelled();
5455
5556private:
5657 QString m_currency;
tests/qmltests/Dash/Previews/tst_PreviewPayments.qml+35
@@ -33,6 +33,10 @@ Rectangle {
3333 "source": { "price" : 0.99, "currency": "USD", "store_item_id": "com.example.invalid" }
3434 }
3535
36+ property var jsonPurchaseCancel: {
37+ "source": { "price" : 0.99, "currency": "USD", "store_item_id": "com.example.cancel" }
38+ }
39+
3640 SignalSpy {
3741 id: spy
3842 target: previewPayments
@@ -160,5 +164,36 @@ Rectangle {
160164 compare(args[1], "purchaseError");
161165 compare(args[2], jsonPurchaseError["source"]);
162166 }
167+
168+ function test_purchase_cancelled() {
169+ // The mock Payments triggers cancellation when com.example.cancel
170+ // is passed to it as store_item_id. Exercise it here
171+ previewPayments.widgetData = jsonPurchaseCancel;
172+
173+ var button = findChild(previewPayments, "paymentButton");
174+ var progress = findChild(previewPayments, "loadingBar");
175+ verify(button, "Button not found.");
176+ verify(progress, "Progress not found.");
177+
178+ mouseClick(button, button.width / 2, button.height / 2);
179+
180+ tryCompare(progress, "visible", true);
181+ tryCompare(progress, "opacity", 1);
182+ tryCompare(button, "visible", false);
183+ tryCompare(button, "opacity", 0);
184+
185+ paymentClient.process();
186+ spy.wait();
187+
188+ var args = spy.signalArguments[0];
189+ compare(args[0], "previewPayments");
190+ compare(args[1], "purchaseCancelled");
191+ compare(args[2], jsonPurchaseCancel["source"]);
192+
193+ tryCompare(progress, "visible", false);
194+ tryCompare(progress, "opacity", 0);
195+ tryCompare(button, "visible", true);
196+ tryCompare(button, "opacity", 1);
197+ }
163198 }
164199}