-
Notifications
You must be signed in to change notification settings - Fork 11
/
client_spec.py
83 lines (55 loc) · 2.63 KB
/
client_spec.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
from restfulie import Restfulie
import time
def search(what):
description = Restfulie.at("http://localhost:3000/products/opensearch.xml").accepts('application/opensearchdescription+xml').get().resource()
items = description.use("application/xml").search(searchTerms = what, startPage = 1)
return items
MY_ORDER = {"order": {"address": "R. Vergueiro 3185, Sao Paulo, Brazil"}}
def should_be_able_to_search_items():
items = search("20")
assert len(items.resource().product) == 2
def should_be_able_to_create_an_empty_order():
response = search("20")
response = response.resource().links().order.follow().post(**MY_ORDER)
assert response.resource().address == MY_ORDER['order']['address']
def should_be_able_to_add_an_item_to_an_order():
results = search("20")
product = results.resource().product[0]
selected = {'order': {'product': product.id, 'quantity': 1}}
result = results.resource().links().order.follow().post(**MY_ORDER).resource()
result = result.link('self').follow().put(**selected).resource()
assert result.price == product.price
def should_be_able_to_pay():
results = search("20")
product = results.resource().product[0]
selected = {'order': {'product': product.id, 'quantity': 1}}
result = results.resource().links().order.follow().post(**MY_ORDER).resource()
result = result.link('self').follow().put(**selected).resource()
result = pay(result)
print result
assert result.state == "processing_payment"
def pay(result):
card = {'payment': {'card_holder': "guilherme silveira", 'card_number': 4444, 'value': result.price}}
result = result.links().payment.follow().post(**card).resource()
return result
def wait_payment_success(attempts, result):
results = search("20")
for product in results.resource().product:
order = {'order': {'state': 'paid'}}
response = results.resource().links().order.follow().post(**order)
return response.resource()
if result.state == "unpaid" and attempts > 0:
print("Ugh! Payment rejected! Get some credits my boy... I am trying it again.")
result = pay(result)
wait_payment_success(attempts-1, result)
else:
return result
def should_try_and_pay_for_it():
results = search("20")
product = results.resource().product[0]
selected = {'order': {'product': product.id, 'quantity': 1}}
result = results.resource().links().order.follow().post(**MY_ORDER).resource()
result = result.link('self').follow().put(**selected).resource()
result = pay(result)
result = wait_payment_success(1, result)
assert result.state == "preparing"