import sys, os sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))) from comparator.aligner import align_records def test_align_by_key(): cobol = [{"CUST-ID": "C001", "AMT": 100}, {"CUST-ID": "C002", "AMT": 200}] spark = [{"CUST-ID": "C002", "AMT": 200}, {"CUST-ID": "C001", "AMT": 100}] result = align_records(cobol, spark, key_field="CUST-ID") assert len(result) == 2 assert all(s == "MATCHED" for _, _, s in result) def test_missing_in_spark(): cobol = [{"CUST-ID": "C001"}, {"CUST-ID": "C002"}] spark = [{"CUST-ID": "C001"}] result = align_records(cobol, spark, key_field="CUST-ID") statuses = [s for _, _, s in result] assert "MISSING_IN_SPARK" in statuses def test_extra_in_spark(): cobol = [{"CUST-ID": "C001"}] spark = [{"CUST-ID": "C001"}, {"CUST-ID": "C002"}] result = align_records(cobol, spark, key_field="CUST-ID") statuses = [s for _, _, s in result] assert "EXTRA_IN_SPARK" in statuses def test_empty_inputs(): assert align_records([], [], "key") == [] def test_duplicate_keys(): cobol = [{"ID": "K1", "V": 1}, {"ID": "K1", "V": 2}] java = [{"ID": "K1", "V": 1}, {"ID": "K1", "V": 2}] result = align_records(cobol, java, key_field="ID") assert len(result) == 2 def test_align_none_key(): cobol = [{"ID": None, "V": 1}] java = [{"ID": None, "V": 1}] result = align_records(cobol, java, key_field="ID") assert len(result) == 1