# -*- coding: utf-8 -*-
from hurry.workflow.interfaces import IWorkflowState
from zope.component import getUtility, createObject
from waeup.kofa.testing import FunctionalTestCase
from waeup.kofa.university.faculty import Faculty
from waeup.kofa.university.department import Department
from waeup.kofa.students.student import Student
from waeup.kofa.students.interfaces import IStudentsUtils
from waeup.kofa.students.tests.test_browser import StudentsFullSetup
from kofacustom.coewarri.testing import FunctionalLayer

class StudentsUtilsTests(StudentsFullSetup):

    layer = FunctionalLayer

    def test_set_payment_details(self):
        self.student['studycourse'].entry_mode = 'ug_ft'
        self.student.nationality = u'NG'
        self.student.lga = 'ebonyi_ukaba'
        self.student['studycourse'].current_session = 2016
        self.student['studycourse'].entry_session = 2016
        utils = getUtility(IStudentsUtils)

        configuration = createObject('waeup.SessionConfiguration')
        configuration.academic_session = 2016
        self.app['configuration'].addSessionConfiguration(configuration)
        self.app['configuration']['2016'].clearance_fee_1 = 10300.0
        self.app['configuration']['2016'].clearance_fee_2 = 20300.0

        error, payment = utils.setPaymentDetails('schoolfee',self.student)
        self.assertEqual(payment.p_level, 100)
        self.assertEqual(payment.p_session, 2016)
        self.assertEqual(payment.amount_auth, 85950.0)
        self.assertEqual(payment.p_item, u'CERT1')
        self.assertEqual(error, None)

        error, payment = utils.setPaymentDetails('schoolfee_1',self.student)
        self.assertEqual(payment.p_level, 100)
        self.assertEqual(payment.p_session, 2016)
        self.assertEqual(payment.amount_auth, 43100.0)
        self.assertEqual(payment.p_item, u'CERT1')
        self.assertEqual(error, None)

        error, payment = utils.setPaymentDetails('schoolfee_2',self.student)
        self.assertEqual(payment.p_level, 100)
        self.assertEqual(payment.p_session, 2016)
        self.assertEqual(payment.amount_auth, 43100.0)
        self.assertEqual(payment.p_item, u'CERT1')
        self.assertEqual(error, None)

        error, payment = utils.setPaymentDetails('clearance',self.student)
        self.assertEqual(payment.amount_auth, 25300.0)
        self.assertEqual(payment.p_item, u'CERT1')

        self.student.lga = 'delta_burutu'
        error, payment = utils.setPaymentDetails('schoolfee',self.student)
        self.assertEqual(payment.amount_auth, 75950.0)
        error, payment = utils.setPaymentDetails('clearance',self.student)
        self.assertEqual(payment.amount_auth, 20300.0)

        self.student['studycourse'].entry_mode = 'nce_ft'
        error, payment = utils.setPaymentDetails('clearance',self.student)
        self.assertEqual(payment.amount_auth, 10300.0)
        return

    def test_warnCreditsOOR(self):
        self.student['studycourse'].entry_mode = 'ug_ft'
        studylevel = createObject(u'waeup.StudentStudyLevel')
        studylevel.level = 100
        studylevel.level_session = 2005
        self.student['studycourse'].addStudentStudyLevel(
            self.certificate, studylevel)
        studylevel['COURSE1'].credits = 48
        utils = getUtility(IStudentsUtils)
        error = utils.warnCreditsOOR(self.student['studycourse']['100'])
        self.assertFalse(error)
        studylevel['COURSE1'].credits = 49
        error = utils.warnCreditsOOR(studylevel)
        self.assertEqual(error, 'Maximum credits exceeded.')
        studylevel.level = 400
        error = utils.warnCreditsOOR(studylevel)
        self.assertFalse(error)
        return