Merge lp:~alecu/pay-ui/increase-coverage into lp:pay-ui

Proposed by Alejandro J. Cura
Status: Merged
Approved by: dobey
Approved revision: 95
Merged at revision: 95
Proposed branch: lp:~alecu/pay-ui/increase-coverage
Merge into: lp:pay-ui
Diff against target: 187 lines (+88/-34)
2 files modified
tests/autopilot/pay_ui/tests/mock_server.py (+61/-28)
tests/autopilot/pay_ui/tests/test_pay_ui.py (+27/-6)
To merge this branch: bzr merge lp:~alecu/pay-ui/increase-coverage
Reviewer Review Type Date Requested Status
dobey (community) Approve
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+246020@code.launchpad.net

Commit message

More tests for web interactions for paypal and credit cards

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
dobey (dobey) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'tests/autopilot/pay_ui/tests/mock_server.py'
2--- tests/autopilot/pay_ui/tests/mock_server.py 2015-01-07 03:46:02 +0000
3+++ tests/autopilot/pay_ui/tests/mock_server.py 2015-01-09 22:39:35 +0000
4@@ -15,16 +15,25 @@
5 # along with this program. If not, see <http://www.gnu.org/licenses/>.
6
7 import json
8-import time
9+import socket
10 import threading
11 from http.server import BaseHTTPRequestHandler, HTTPServer
12
13
14-clickable_html = """
15-<html>
16- <body bgcolor="red" onClick="window.location.assign('/click/succeeded')">
17- <h1>please add your credit card</h1>
18- <a href="/click/succeeded">next</a>
19+html_success = """
20+<html>
21+ <body bgcolor="green" onClick="window.location.assign('/click/succeeded')">
22+ <h1>Placeholder for web interaction</h1>
23+ <p>Click anywhere to proceed</p>
24+ </body>
25+</html>"
26+"""
27+
28+html_cancel = """
29+<html>
30+ <body bgcolor="red" onClick="window.location.assign('/click/cancelled')">
31+ <h1>Placeholder for web interaction</h1>
32+ <p>Click anywhere to cancel</p>
33 </body>
34 </html>"
35 """
36@@ -45,35 +54,51 @@
37 self.end_headers()
38 self.wfile.write(bytes(json.dumps(self.server.payment_types), 'UTF-8'))
39
40+ def interaction_html(self):
41+ return html_cancel if self.server.interaction_cancel else html_success
42+
43+ def response_cc_interaction(self, fail=False):
44+ if fail:
45+ self.send_response(404)
46+ else:
47+ self.send_response(200)
48+ self.send_header("Content-type", "text/html")
49+ self.end_headers()
50+ self.wfile.write(bytes(self.interaction_html(), 'UTF-8'))
51+
52 def response_payment_add(self, fail=False):
53 if fail:
54 self.send_response(404)
55 else:
56 self.send_response(200)
57- self.server.payment_types[1]["choices"].append({
58- "currencies": ["USD"],
59- "id": 1999,
60- "requires_interaction": False,
61- "preferred": False,
62- "description": "Yet another payment method"
63- })
64+ if not self.server.interaction_cancel:
65+ self.server.payment_types[1]["choices"].append({
66+ "currencies": ["USD"],
67+ "id": 1999,
68+ "requires_interaction": False,
69+ "preferred": False,
70+ "description": "Yet another payment method"
71+ })
72 self.send_header("Content-type", "text/html")
73 self.end_headers()
74- self.wfile.write(bytes(clickable_html, 'UTF-8'))
75+ self.wfile.write(bytes(self.interaction_html(), 'UTF-8'))
76
77- def response_buy_item(self, fail=False, interaction=False):
78- state = "Complete" if not interaction else "InProgress"
79+ def response_buy_item(self):
80 response = {
81- "state": state,
82+ "state": "Complete",
83 }
84- if interaction:
85- response["redirect_to"] = "http://redirect.url"
86- if fail:
87+ if self.server.buy_cc_interaction:
88+ response["state"] = "InProgress"
89+ response["redirect_to"] = self.server.buy_cc_interaction
90+ if self.server.fail:
91 response = {}
92 self.send_response(200)
93 self.send_header("Content-type", "application/json")
94 self.end_headers()
95- self.wfile.write(bytes(json.dumps(response), 'UTF-8'))
96+ try:
97+ self.wfile.write(bytes(json.dumps(response), 'UTF-8'))
98+ except socket.error:
99+ pass
100
101 def response_update_credentials(self, fail=False):
102 response = {
103@@ -119,21 +144,20 @@
104 """Respond to a POST request."""
105 #content = self.rfile.read(int(self.headers.get('content-length')))
106 #structure = json.loads(content.decode('utf-8'))
107- self.do_GET()
108+ if self.path.find("purchases/") != -1:
109+ self.response_buy_item()
110
111 def do_GET(self):
112 """Respond to a GET request."""
113 fail = self.path.find("/fail/") != -1
114 if self.path.find("paymentmethods/add/") != -1:
115- #self.send_response(301)
116- #self.send_header('Location','/click/succeeded')
117- #self.end_headers()
118- self.response_payment_add(fail)
119+ self.response_payment_add()
120 elif self.path.find("paymentmethods/") != -1:
121 self.response_payment_types(fail)
122+ elif self.path.find("creditcard_interaction/") != -1:
123+ self.response_cc_interaction()
124 elif self.path.find("purchases/") != -1:
125- interaction = self.path.find("/interaction/") != -1
126- self.response_buy_item(fail=fail, interaction=interaction)
127+ self.response_buy_item()
128 elif self.path.find("creds/") != -1 or self.path.find("wallet/") != -1:
129 self.response_update_credentials(fail)
130 elif self.path.find("iteminfo/") != -1:
131@@ -201,6 +225,15 @@
132 server_thread = threading.Thread(target=self.server.serve_forever)
133 server_thread.start()
134 self.server.payment_types = initial_payment_types()
135+ self.server.fail = False
136+ self.server.buy_cc_interaction = None
137+ self.server.interaction_cancel = False
138+
139+ def set_purchase_needs_cc_interaction(self):
140+ self.server.buy_cc_interaction = self.url("creditcard_interaction/")
141+
142+ def set_interaction_result_cancelled(self):
143+ self.server.interaction_cancel = True
144
145 def url(self, tail=""):
146 return self.base_url + tail
147
148=== modified file 'tests/autopilot/pay_ui/tests/test_pay_ui.py'
149--- tests/autopilot/pay_ui/tests/test_pay_ui.py 2015-01-07 03:46:02 +0000
150+++ tests/autopilot/pay_ui/tests/test_pay_ui.py 2015-01-09 22:39:35 +0000
151@@ -68,9 +68,30 @@
152 self.tap('buyButton')
153 self.assertThat(self.app_returncode(), Equals(0))
154
155- def test_add_credit_card(self):
156- page_checkout = self.main_view.select_single(objectName="paymentTypes")
157- self.assertThat(page_checkout.get_option_count(), Equals(3))
158- self.tap('addCreditCardLabel')
159- self.tap('webView')
160- self.assertThat(page_checkout.get_option_count, Eventually(Equals(4)))
161+ def test_add_credit_card_completed(self):
162+ payment_types = self.main_view.select_single(objectName="paymentTypes")
163+ self.assertThat(payment_types.get_option_count(), Equals(3))
164+ self.tap('addCreditCardLabel')
165+ self.tap('webView')
166+ self.assertThat(payment_types.get_option_count, Eventually(Equals(4)))
167+
168+ def test_add_credit_card_cancelled(self):
169+ self.mock_server.set_interaction_result_cancelled()
170+ payment_types = self.main_view.select_single(objectName="paymentTypes")
171+ self.assertThat(payment_types.get_option_count(), Equals(3))
172+ self.tap('addCreditCardLabel')
173+ self.tap('webView')
174+ self.assertThat(payment_types.get_option_count, Eventually(Equals(3)))
175+
176+ def test_purchase_with_web_interaction_completed(self):
177+ self.mock_server.set_purchase_needs_cc_interaction()
178+ self.tap('buyButton')
179+ self.tap('webView')
180+ self.assertThat(self.app_returncode(), Equals(0))
181+
182+ def test_purchase_with_web_interaction_cancelled(self):
183+ self.mock_server.set_purchase_needs_cc_interaction()
184+ self.mock_server.set_interaction_result_cancelled()
185+ self.tap('buyButton')
186+ self.tap('webView')
187+ self.assertThat(self.app_returncode(), Equals(1))

Subscribers

People subscribed via source and target branches