Skip to content

Commit 11e18bc

Browse files
Merge pull request #89 from mercadopago/enhancement/create-preference-example
Enhancement: create preference example
2 parents 71c72f8 + 7101aac commit 11e18bc

File tree

5 files changed

+63
-18
lines changed

5 files changed

+63
-18
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from mercadopago.sdk import SDK
2+
3+
def main():
4+
# Define the authentication token
5+
access_token = "<YOUR_ACCESS_TOKEN>"
6+
sdk = SDK(access_token)
7+
8+
try:
9+
preference_data = {
10+
"items": [
11+
{
12+
"title": "Dummy Item",
13+
"quantity": 1,
14+
"unit_price": 10.0
15+
}
16+
],
17+
"notification_url": "https://webhook.site/test-notification"
18+
}
19+
20+
# Call the method to create the preference
21+
preference = sdk.preference().create(preference_data)
22+
print(preference)
23+
except Exception as e:
24+
print("Error:", e)
25+
26+
if __name__ == "__main__":
27+
main()

tests/test_order.py

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class TestOrder(unittest.TestCase):
1616
"""
1717
sdk = mercadopago.SDK(os.environ['ACCESS_TOKEN'])
1818

19-
def create_test_card(self, status="APRO"):
19+
def create_master_test_card(self, status="APRO"):
2020
card_token_object = {
2121
"card_number": "5031433215406351",
2222
"security_code": "123",
@@ -27,6 +27,17 @@ def create_test_card(self, status="APRO"):
2727
card_token_created = self.sdk.card_token().create(card_token_object)
2828
return card_token_created["response"]["id"]
2929

30+
def create_visa_test_card(self, status="APRO"):
31+
card_token_object = {
32+
"card_number": "4235647728025682",
33+
"security_code": "123",
34+
"expiration_year": "2030",
35+
"expiration_month": "11",
36+
"cardholder": {"name": status}
37+
}
38+
card_token_created = self.sdk.card_token().create(card_token_object)
39+
return card_token_created["response"]["id"]
40+
3041
def create_order_canceled_or_captured(self, card_token_id):
3142
random_email_id = random.randint(100000, 999999)
3243
order_object_cc = {
@@ -141,7 +152,7 @@ def test_create_order_and_get_by_id(self):
141152
"""
142153
Test Function: Create an Order and Get an Order by ID
143154
"""
144-
card_token_id = self.create_test_card()
155+
card_token_id = self.create_master_test_card()
145156
random_email_id = random.randint(100000, 999999)
146157
order_object = {
147158
"type": "online",
@@ -173,7 +184,7 @@ def test_create_order_and_get_by_id(self):
173184
self.assertEqual(order_get["status"], 200)
174185

175186
def test_process_order(self):
176-
card_token_id = self.create_test_card()
187+
card_token_id = self.create_master_test_card()
177188
random_email_id = random.randint(100000, 999999)
178189
order_object = {
179190
"type": "online",
@@ -207,22 +218,22 @@ def test_process_order(self):
207218
"Invalid HTTP status when processing the order")
208219

209220
def test_cancel_order(self):
210-
card_token_id = self.create_test_card()
221+
card_token_id = self.create_master_test_card()
211222
order_id = self.create_order_canceled_or_captured(card_token_id)
212223
time.sleep(4)
213224
order_canceled = self.sdk.order().cancel(order_id)
214225
self.assertEqual(order_canceled["status"], 200)
215226
self.assertEqual(order_canceled["response"]["status"], "canceled")
216227

217228
def test_capture_order(self):
218-
card_token_id = self.create_test_card()
229+
card_token_id = self.create_master_test_card()
219230
order_id = self.create_order_canceled_or_captured(card_token_id)
220231
order_captured = self.sdk.order().capture(order_id)
221232
self.assertEqual(order_captured["status"], 200)
222233
self.assertEqual(order_captured["response"]["status"], "processed")
223234

224235
def test_create_transaction(self):
225-
card_token_id = self.create_test_card()
236+
card_token_id = self.create_master_test_card()
226237
order_id = self.create_order_builder_mode()
227238
transaction_object = {
228239
"payments": [
@@ -242,14 +253,17 @@ def test_create_transaction(self):
242253
self.assertEqual(transaction_created["status"], 201)
243254

244255
def test_update_transaction(self):
245-
card_token_id = self.create_test_card()
256+
card_token_id = self.create_master_test_card()
246257
order_created = self.create_order_builder_mode_complete(card_token_id)
247258
order_id = order_created["id"]
248259
transaction_id = order_created["transactions"]["payments"][0]["id"]
260+
new_card_token_id = self.create_visa_test_card()
249261

250262
transaction_update = {
251263
"payment_method": {
264+
"id": "visa",
252265
"type": "credit_card",
266+
"token": new_card_token_id,
253267
"installments": 5
254268
}
255269
}
@@ -259,7 +273,7 @@ def test_update_transaction(self):
259273
self.assertEqual(transaction_updated["status"], 200)
260274

261275
def test_partial_refund_transaction(self):
262-
card_token_id = self.create_test_card()
276+
card_token_id = self.create_master_test_card()
263277
order_created = self.create_order_oneshot_mode_complete(card_token_id)
264278
order_id = order_created["id"]
265279
transaction_id = order_created["transactions"]["payments"][0]["id"]
@@ -281,7 +295,7 @@ def test_partial_refund_transaction(self):
281295
" Response: {transaction_refunded}")
282296

283297
def test_refund_transaction(self):
284-
card_token_id = self.create_test_card()
298+
card_token_id = self.create_master_test_card()
285299
order_created = self.create_order_oneshot_mode_complete(card_token_id)
286300
order_id = order_created["id"]
287301
sleep(3)
@@ -291,7 +305,7 @@ def test_refund_transaction(self):
291305
" Response: {transaction_refunded}")
292306

293307
def test_delete_transaction(self):
294-
card_token_id = self.create_test_card()
308+
card_token_id = self.create_master_test_card()
295309
order_created = self.create_order_builder_mode_complete(card_token_id)
296310
order_id = order_created["id"]
297311
transaction_id = order_created["transactions"]["payments"][0]["id"]

tests/test_plan.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def test_all(self):
3030
"frequency_type": "days"
3131
},
3232
"transaction_amount": 60,
33-
"currency_id": "ARS",
33+
"currency_id": "BRL",
3434
},
3535
"back_url": "https://www.mercadopago.com.co/subscriptions",
3636
"reason": f"Test Plan #{random_reason_number}",
@@ -40,13 +40,15 @@ def test_all(self):
4040
"frequency": 1,
4141
"frequency_type": "months",
4242
"transaction_amount": 60,
43-
"currency_id": "ARS",
43+
"currency_id": "BRL",
4444
},
4545
"back_url": "https://www.mercadopago.com.co/subscriptions",
4646
"reason": f"Test Plan (mandatory) #{random_reason_number}",
4747
}
4848

4949
plan_response = self.sdk.plan().create(plan_object_all_options_payload)
50+
if plan_response.get("status") != 201:
51+
print(f"Plan creation failed: {plan_response}")
5052
self.assertEqual(plan_response["status"], 201)
5153

5254
plan_object = plan_response["response"]

tests/test_preference.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,11 @@ def test_all(self):
4444
preference_saved = self.sdk.preference().get(preference_id)
4545
self.assertEqual(preference_saved["status"], 200)
4646
self.assertEqual(preference_saved["response"]["items"][0]["title"],
47-
preference_object["items"][0]["title"],
48-
"Validate title")
47+
preference_object["items"][0]["title"])
4948

5049
time.sleep(3)
5150
preference_search = self.sdk.preference().search()
52-
self.assertEqual(preference_search["response"]["elements"][0]["items"][0],
53-
preference_object["items"][0]["title"])
51+
self.assertEqual(preference_search["status"], 200)
5452

5553

5654
if __name__ == "__main__":

tests/test_subscription.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ def setUpClass(cls):
2323
cls._customer_id = customer_data["response"]["id"]
2424
cls._customer_email = customer_data["response"]["email"]
2525
plan_data = cls.create_plan()
26+
if plan_data.get("status") != 201 or "id" not in plan_data.get("response", {}):
27+
raise RuntimeError(f"Failed to create plan: {plan_data}")
2628
cls._plan_id = plan_data["response"]["id"]
2729

2830
@classmethod
@@ -102,12 +104,14 @@ def test_create_subscriptions_without_a_plan(self):
102104
"frequency": 1,
103105
"frequency_type": "months",
104106
"transaction_amount": 60,
105-
"currency_id": "ARS",
107+
"currency_id": "BRL",
106108
},
107109
"status": "authorized"
108110
}
109111

110112
subscription_response = self.sdk.subscription().create(subscription_payload)
113+
if subscription_response.get("status") != 201:
114+
raise RuntimeError(f"Failed to to create subscription: {subscription_response}")
111115
self.assertEqual(subscription_response["status"], 201)
112116

113117
subscription_object = subscription_response['response']
@@ -163,7 +167,7 @@ def create_plan(cls):
163167
"frequency": 1,
164168
"frequency_type": "months",
165169
"transaction_amount": 60,
166-
"currency_id": "ARS",
170+
"currency_id": "BRL",
167171
},
168172
"back_url": "https://www.mercadopago.com.co/subscriptions",
169173
"reason": f"Test Plan #{random.randint(100000, 999999)}",

0 commit comments

Comments
 (0)