TIF_E41253310/scripts/tests/test_f1601.py

90 lines
3.9 KiB
Python

import pandas as pd
# Fungsi konversi dari import_data.py (yang sudah diperbaiki)
JAWABAN_MAPPING = {
'F8': {1: 'Bekerja (full time/part time)', 2: 'Belum memungkinkan bekerja', 3: 'Wiraswasta', 4: 'Melanjutkan Pendidikan', 5: 'Tidak kerja tetapi sedang mencari kerja'},
'F1601': {0: 'Tidak sesuai', 1: 'Pekerjaan saya sekarang sudah sesuai dengan pendidikan saya'},
'F1602': {0: 'Pekerjaan saya sudah sesuai', 1: 'Saya belum mendapatkan pekerjaan yang lebih sesuai'},
'F1603': {0: 'Pekerjaan saya sudah sesuai', 1: 'Di pekerjaan ini saya memeroleh prospek karir yang baik'},
'F1604': {0: 'Pekerjaan saya sudah sesuai', 1: 'Saya lebih suka bekerja di area pekerjaan yang tidak ada hubungannya dengan pendidikan saya'},
'F1605': {0: 'Pekerjaan saya sudah sesuai', 1: 'Saya dipromosikan ke posisi yang kurang berhubungan dengan pendidikan saya dibanding posisi sebelumnya'},
'F1606': {0: 'Pekerjaan saya sudah sesuai', 1: 'Saya dapat memeroleh pendapatan yang lebih tinggi di pekerjaan ini'},
'F1607': {0: 'Pekerjaan saya sudah sesuai', 1: 'Pekerjaan saya saat ini lebih aman/terjamin/secure'},
'F1608': {0: 'Pekerjaan saya sudah sesuai', 1: 'Pekerjaan saya saat ini lebih menarik'},
'F1609': {0: 'Pekerjaan saya sudah sesuai', 1: 'Pekerjaan saya saat ini lebih memungkinkan saya mengambil pekerjaan'},
'F1610': {0: 'Pekerjaan saya sudah sesuai', 1: 'Pekerjaan saya saat ini lokasinya lebih dekat dari rumah saya'},
'F1611': {0: 'Pekerjaan saya sudah sesuai', 1: 'Pekerjaan saya saat ini dapat lebih menjamin kebutuhan keluarga saya'},
'F1612': {0: 'Pekerjaan saya sudah sesuai', 1: 'Pada awal meniti karir ini, saya harus menerima pekerjaan yang tidak berhubungan dengan pendidikan saya'},
'F1613': {0: 'Pekerjaan saya sudah sesuai', 1: 'Lainnya'},
}
YA_TIDAK = {0: 'Tidak', 1: 'Ya'}
def konversi_jawaban(field_code, nilai):
if pd.isna(nilai) or nilai == '':
return None
if isinstance(nilai, str) and nilai.strip() in ['', 'nan', 'None']:
return None
original_nilai = nilai
if isinstance(nilai, str):
try:
nilai = int(nilai)
except ValueError:
pass
if isinstance(nilai, float):
if nilai != int(nilai):
return None
nilai = int(nilai)
nilai_key = int(nilai) if isinstance(nilai, (int, float)) else nilai
# F1601-F1613 gunakan JAWABAN_MAPPING
if field_code in ['F1601', 'F1602', 'F1603', 'F1604', 'F1605', 'F1606',
'F1607', 'F1608', 'F1609', 'F1610', 'F1611', 'F1612', 'F1613']:
if field_code in JAWABAN_MAPPING:
return JAWABAN_MAPPING[field_code].get(nilai_key)
return YA_TIDAK.get(nilai_key)
if isinstance(original_nilai, (int, float)):
return original_nilai
return original_nilai
# TEST
print("=" * 70)
print("TEST F1601-F1613 (TEKS LENGKAP)")
print("=" * 70)
test_cases = [
('F1601', 0, 'Tidak sesuai'),
('F1601', 1, 'Pekerjaan saya sekarang sudah sesuai'),
('F1602', 0, 'Pekerjaan saya sudah sesuai'),
('F1602', 1, 'Saya belum mendapatkan pekerjaan yang lebih sesuai'),
('F1603', 0, 'Pekerjaan saya sudah sesuai'),
('F1603', 1, 'Di pekerjaan ini saya memeroleh prospek karir yang baik'),
('F1604', 0, 'Pekerjaan saya sudah sesuai'),
('F1604', 1, 'Saya lebih suka bekerja di area pekerjaan yang tidak ada hubungannya'),
('F1613', 0, 'Pekerjaan saya sudah sesuai'),
('F1613', 1, 'Lainnya'),
]
all_passed = True
for field_code, nilai, expected_text in test_cases:
result = konversi_jawaban(field_code, nilai)
expected = expected_text.split('...')[0] # Ambil partial match
is_correct = result and expected.lower() in result.lower()
status = '[OK]' if is_correct else '[FAIL]'
if not is_correct:
all_passed = False
print(f"{status} {field_code}={nilai}")
print(f" Result: {result}")
print()
print("=" * 70)
if all_passed:
print("SEMUA TEST LULUS!")
else:
print("ADA TEST YANG GAGAL!")
print("=" * 70)