import datetime
from zope.component import queryUtility
from zope.interface.verify import verifyObject, verifyClass
from waeup.kofa.interfaces import ICSVExporter
from waeup.kofa.schoolgrades import ResultEntry
from waeup.kofa.students.tests.test_batching import StudentImportExportSetup

from kofacustom.nigeria.utils.utils import NigeriaKofaUtils
from kofacustom.nigeria.students.export import NigeriaStudentsExporter
from kofacustom.nigeria.testing import FunctionalLayer


class NigeriaStudentsExporterTest(StudentImportExportSetup):

    layer = FunctionalLayer

    def setUp(self):
        super(NigeriaStudentsExporterTest, self).setUp()
        self.setup_for_export()
        result_entry = ResultEntry(
            NigeriaKofaUtils.EXAM_SUBJECTS_DICT.keys()[0],
            NigeriaKofaUtils.EXAM_GRADES[0][0]
            )
        self.student.alr_results = [
            result_entry]
        self.student.fst_sit_results = [
            result_entry]
        self.student.scd_sit_results = [
            result_entry]
        return

    def test_ifaces(self):
        # make sure we fullfill interface contracts
        obj = NigeriaStudentsExporter()
        verifyObject(ICSVExporter, obj)
        verifyClass(ICSVExporter, NigeriaStudentsExporter)
        return


    def test_export_all(self):
        # we can really export students
        # set values we can expect in export file
        self.setup_student(self.student)
        exporter = NigeriaStudentsExporter()
        exporter.export_all(self.app, self.outfile)
        result = open(self.outfile, 'rb').read()
        self.assertMatches(
            'adm_code,alr_date,alr_fname,alr_no,alr_results,clearance_locked,'
            'clr_code,date_of_birth,def_adm,disabled,email,emp2_end,'
            'emp2_position,emp2_reason,emp2_start,emp_end,emp_position,'
            'emp_reason,emp_start,employer,employer2,firstname,former_matric,'
            'fst_sit_date,fst_sit_fname,fst_sit_no,fst_sit_results,'
            'fst_sit_type,hq2_degree,hq2_disc,hq2_matric_no,hq2_school,'
            'hq2_session,hq2_type,hq_degree,hq_disc,hq_fname,hq_matric_no,'
            'hq_school,hq_session,hq_type,is_staff,lastname,lga,'
            'marit_stat,matric_number,middlename,nationality,'
            'next_kin_address,next_kin_name,next_kin_phone,next_kin_relation,'
            'nysc_lga,nysc_location,nysc_year,officer_comment,'
            'perm_address,personal_updated,phone,reg_number,'
            'religion,scd_sit_date,scd_sit_fname,scd_sit_no,'
            'scd_sit_results,scd_sit_type,sex,student_id,'
            'suspended,suspended_comment,password,state,history,certcode,is_postgrad,'
            'current_level,current_session\r\nmy adm code,,,,'
            '"[(\'visual_art\', \'A1\')]",0,my clr code,1981-02-04#,,,'
            'anna@sample.com,,,,,,,,,,,Anna,,,,,"[(\'visual_art\', \'A1\')]"'
            ',,,,,,,,,,,,,,,,Tester,,,234,M.,NG,,,,,,,,,'
            '"Studentroad 21\nLagos 123456\n",,+234-123-12345#,123,,,,,'
            '"[(\'visual_art\', \'A1\')]",,f,A111111,0,,,created,'
            '[u\'2012-11-06 13:16:41 WAT - Record created by system\'],'
            'CERT1,0,200,2012\r\n',
            result
            )
        return


