diff --git a/mercadopago/examples/preference/create_preference.py b/mercadopago/examples/preference/create_preference.py new file mode 100644 index 0000000..590d71a --- /dev/null +++ b/mercadopago/examples/preference/create_preference.py @@ -0,0 +1,27 @@ +from mercadopago.sdk import SDK + +def main(): + # Define the authentication token + access_token = "" + sdk = SDK(access_token) + + try: + preference_data = { + "items": [ + { + "title": "Dummy Item", + "quantity": 1, + "unit_price": 10.0 + } + ], + "notification_url": "https://webhook.site/test-notification" + } + + # Call the method to create the preference + preference = sdk.preference().create(preference_data) + print(preference) + except Exception as e: + print("Error:", e) + +if __name__ == "__main__": + main() diff --git a/tests/test_order.py b/tests/test_order.py index 0b4c0d5..53d7d77 100644 --- a/tests/test_order.py +++ b/tests/test_order.py @@ -16,7 +16,7 @@ class TestOrder(unittest.TestCase): """ sdk = mercadopago.SDK(os.environ['ACCESS_TOKEN']) - def create_test_card(self, status="APRO"): + def create_master_test_card(self, status="APRO"): card_token_object = { "card_number": "5031433215406351", "security_code": "123", @@ -27,6 +27,17 @@ def create_test_card(self, status="APRO"): card_token_created = self.sdk.card_token().create(card_token_object) return card_token_created["response"]["id"] + def create_visa_test_card(self, status="APRO"): + card_token_object = { + "card_number": "4235647728025682", + "security_code": "123", + "expiration_year": "2030", + "expiration_month": "11", + "cardholder": {"name": status} + } + card_token_created = self.sdk.card_token().create(card_token_object) + return card_token_created["response"]["id"] + def create_order_canceled_or_captured(self, card_token_id): random_email_id = random.randint(100000, 999999) order_object_cc = { @@ -141,7 +152,7 @@ def test_create_order_and_get_by_id(self): """ Test Function: Create an Order and Get an Order by ID """ - card_token_id = self.create_test_card() + card_token_id = self.create_master_test_card() random_email_id = random.randint(100000, 999999) order_object = { "type": "online", @@ -173,7 +184,7 @@ def test_create_order_and_get_by_id(self): self.assertEqual(order_get["status"], 200) def test_process_order(self): - card_token_id = self.create_test_card() + card_token_id = self.create_master_test_card() random_email_id = random.randint(100000, 999999) order_object = { "type": "online", @@ -207,7 +218,7 @@ def test_process_order(self): "Invalid HTTP status when processing the order") def test_cancel_order(self): - card_token_id = self.create_test_card() + card_token_id = self.create_master_test_card() order_id = self.create_order_canceled_or_captured(card_token_id) time.sleep(4) order_canceled = self.sdk.order().cancel(order_id) @@ -215,14 +226,14 @@ def test_cancel_order(self): self.assertEqual(order_canceled["response"]["status"], "canceled") def test_capture_order(self): - card_token_id = self.create_test_card() + card_token_id = self.create_master_test_card() order_id = self.create_order_canceled_or_captured(card_token_id) order_captured = self.sdk.order().capture(order_id) self.assertEqual(order_captured["status"], 200) self.assertEqual(order_captured["response"]["status"], "processed") def test_create_transaction(self): - card_token_id = self.create_test_card() + card_token_id = self.create_master_test_card() order_id = self.create_order_builder_mode() transaction_object = { "payments": [ @@ -242,14 +253,17 @@ def test_create_transaction(self): self.assertEqual(transaction_created["status"], 201) def test_update_transaction(self): - card_token_id = self.create_test_card() + card_token_id = self.create_master_test_card() order_created = self.create_order_builder_mode_complete(card_token_id) order_id = order_created["id"] transaction_id = order_created["transactions"]["payments"][0]["id"] + new_card_token_id = self.create_visa_test_card() transaction_update = { "payment_method": { + "id": "visa", "type": "credit_card", + "token": new_card_token_id, "installments": 5 } } @@ -259,7 +273,7 @@ def test_update_transaction(self): self.assertEqual(transaction_updated["status"], 200) def test_partial_refund_transaction(self): - card_token_id = self.create_test_card() + card_token_id = self.create_master_test_card() order_created = self.create_order_oneshot_mode_complete(card_token_id) order_id = order_created["id"] transaction_id = order_created["transactions"]["payments"][0]["id"] @@ -281,7 +295,7 @@ def test_partial_refund_transaction(self): " Response: {transaction_refunded}") def test_refund_transaction(self): - card_token_id = self.create_test_card() + card_token_id = self.create_master_test_card() order_created = self.create_order_oneshot_mode_complete(card_token_id) order_id = order_created["id"] sleep(3) @@ -291,7 +305,7 @@ def test_refund_transaction(self): " Response: {transaction_refunded}") def test_delete_transaction(self): - card_token_id = self.create_test_card() + card_token_id = self.create_master_test_card() order_created = self.create_order_builder_mode_complete(card_token_id) order_id = order_created["id"] transaction_id = order_created["transactions"]["payments"][0]["id"] diff --git a/tests/test_plan.py b/tests/test_plan.py index 6e3081d..873b3d9 100644 --- a/tests/test_plan.py +++ b/tests/test_plan.py @@ -30,7 +30,7 @@ def test_all(self): "frequency_type": "days" }, "transaction_amount": 60, - "currency_id": "ARS", + "currency_id": "BRL", }, "back_url": "https://www.mercadopago.com.co/subscriptions", "reason": f"Test Plan #{random_reason_number}", @@ -40,13 +40,15 @@ def test_all(self): "frequency": 1, "frequency_type": "months", "transaction_amount": 60, - "currency_id": "ARS", + "currency_id": "BRL", }, "back_url": "https://www.mercadopago.com.co/subscriptions", "reason": f"Test Plan (mandatory) #{random_reason_number}", } plan_response = self.sdk.plan().create(plan_object_all_options_payload) + if plan_response.get("status") != 201: + print(f"Plan creation failed: {plan_response}") self.assertEqual(plan_response["status"], 201) plan_object = plan_response["response"] diff --git a/tests/test_preference.py b/tests/test_preference.py index c4d1662..0b8d72d 100644 --- a/tests/test_preference.py +++ b/tests/test_preference.py @@ -44,13 +44,11 @@ def test_all(self): preference_saved = self.sdk.preference().get(preference_id) self.assertEqual(preference_saved["status"], 200) self.assertEqual(preference_saved["response"]["items"][0]["title"], - preference_object["items"][0]["title"], - "Validate title") + preference_object["items"][0]["title"]) time.sleep(3) preference_search = self.sdk.preference().search() - self.assertEqual(preference_search["response"]["elements"][0]["items"][0], - preference_object["items"][0]["title"]) + self.assertEqual(preference_search["status"], 200) if __name__ == "__main__": diff --git a/tests/test_subscription.py b/tests/test_subscription.py index f72a0fb..f4d7f70 100644 --- a/tests/test_subscription.py +++ b/tests/test_subscription.py @@ -23,6 +23,8 @@ def setUpClass(cls): cls._customer_id = customer_data["response"]["id"] cls._customer_email = customer_data["response"]["email"] plan_data = cls.create_plan() + if plan_data.get("status") != 201 or "id" not in plan_data.get("response", {}): + raise RuntimeError(f"Failed to create plan: {plan_data}") cls._plan_id = plan_data["response"]["id"] @classmethod @@ -102,12 +104,14 @@ def test_create_subscriptions_without_a_plan(self): "frequency": 1, "frequency_type": "months", "transaction_amount": 60, - "currency_id": "ARS", + "currency_id": "BRL", }, "status": "authorized" } subscription_response = self.sdk.subscription().create(subscription_payload) + if subscription_response.get("status") != 201: + raise RuntimeError(f"Failed to to create subscription: {subscription_response}") self.assertEqual(subscription_response["status"], 201) subscription_object = subscription_response['response'] @@ -163,7 +167,7 @@ def create_plan(cls): "frequency": 1, "frequency_type": "months", "transaction_amount": 60, - "currency_id": "ARS", + "currency_id": "BRL", }, "back_url": "https://www.mercadopago.com.co/subscriptions", "reason": f"Test Plan #{random.randint(100000, 999999)}",