defmodule PaymentGatewayAppTest do use ExUnit.Case, async: true describe "start_payment/4" do test "successfully initiates a payment" do {:ok, payment} = PaymentGatewayApp.start_payment(50.0, "USD", "user_abc") assert is_map(payment) assert payment.amount == 50.0 assert payment.currency == "USD" assert payment.user_id == "user_abc" assert is_binary(payment.id) end test "successfully initiates a payment with description" do {:ok, payment} = PaymentGatewayApp.start_payment(75.0, "USD", "user_def", description: "Test Payment") assert is_map(payment) assert payment.amount == 75.0 assert payment.description == "Test Payment" end test "returns error for invalid input" do {:error, _reason} = PaymentGatewayApp.start_payment(-10, "USD", "user_abc") end end describe "get_payment_status/1" do test "retrieves payment status" do {:ok, status} = PaymentGatewayApp.get_payment_status("pay_test") assert is_map(status) assert status.id == "pay_test" assert is_binary(status.status) end test "returns error for invalid payment_id" do {:error, _reason} = PaymentGatewayApp.get_payment_status("") end end end