defmodule DaProductApp.SwitchTest do use ExUnit.Case, async: true alias DaProductApp.Switch.MessageHandler alias DaProductApp.Switch.Router alias DaProductApp.Switch.Connectors.Fallback describe "MessageHandler" do test "creates response message" do request = %ISO8583.Message{ message_type_indicator: "0200", data_elements: %{ 2 => "4111111111111111", 3 => "000000", 4 => "100000", 7 => "1225120000", 11 => "123456" } } response = MessageHandler.create_response(request, "00") assert response.message_type_indicator == "1200" assert Map.get(response.data_elements, 39) == "00" assert Map.get(response.data_elements, 2) == "4111111111111111" end end describe "Router" do test "routes Visa cards to Visa connector" do message = %ISO8583.Message{ message_type_indicator: "0200", data_elements: %{ 2 => "4111111111111111", # Visa card 3 => "000000" } } # This will route to Visa but since we don't have real connections, # it will fall back to error handling response = Router.route(message) assert response.message_type_indicator == "1200" assert Map.has_key?(response.data_elements, 39) end end describe "Fallback Connector" do test "handles unknown card types" do message = %ISO8583.Message{ message_type_indicator: "0200", data_elements: %{ 2 => "9999999999999999", # Unknown card 3 => "000000", 7 => "1225120000", 11 => "123456" } } response = Fallback.handle(message) assert response.message_type_indicator == "1200" assert Map.get(response.data_elements, 39) == "14" # Invalid card end end end