# -*- coding: utf-8 -*-
import grok
from waeup.kofa.testing import FunctionalTestCase
from hurry.workflow.interfaces import IWorkflowState
from zope.component import getUtility, createObject
from waeup.kofa.students.interfaces import IStudentsUtils
from waeup.kofa.students.tests.test_browser import StudentsFullSetup
from waeup.fceokene.testing import FunctionalLayer

class BedAllocationTests(StudentsFullSetup):

    layer = FunctionalLayer

    def test_getAccommodationDetails(self):
        students_utils = getUtility(IStudentsUtils)
        acc_details  = students_utils.getAccommodationDetails(self.student)
        self.assertEqual(acc_details['bt'], 'ugft_male_fr')
        self.student['studycourse'].current_level = 200
        self.certificate.study_mode = 'ug_pt'
        acc_details  = students_utils.getAccommodationDetails(self.student)
        self.assertEqual(acc_details['bt'], 'regular_male_re')
        self.student['studycourse'].current_level = 300
        acc_details  = students_utils.getAccommodationDetails(self.student)
        self.assertEqual(acc_details['bt'], 'regular_male_fi')
        self.student['studycourse'].current_level = 400
        acc_details  = students_utils.getAccommodationDetails(self.student)
        self.assertEqual(acc_details['bt'], 'regular_male_fi')
        self.student['studycourse'].current_level = 500
        acc_details  = students_utils.getAccommodationDetails(self.student)
        self.assertEqual(acc_details['bt'], 'regular_male_fi')
        return

    def test_maxCreditsExceeded(self):
        students_utils = getUtility(IStudentsUtils)
        studylevel = grok.Container()
        studylevel.total_credits = 40
        course = grok.Model()
        course.credits = 18
        max_credits = students_utils.maxCreditsExceeded(studylevel, course)
        self.assertEqual(max_credits, 0)
        course.credits = 19
        max_credits = students_utils.maxCreditsExceeded(studylevel, course)
        self.assertEqual(max_credits, 58)
        return

    def test_set_payment_details(self):
        self.certificate.end_level = 300
        self.student['studycourse'].current_verdict = 'B'
        self.student['studycourse'].current_level = 300
        configuration = createObject('waeup.SessionConfiguration')
        configuration.academic_session = 2005
        self.app['configuration'].addSessionConfiguration(configuration)
        self.app['configuration']['2005'].penalty_nce_ft = 99.0
        self.student['studycourse'].certificate.study_mode = 'nce_ft'
        utils = getUtility(IStudentsUtils)
        error, payment = utils.setPaymentDetails('schoolfee',self.student)
        IWorkflowState(self.student).setState('returning')
        error, payment = utils.setPaymentDetails('schoolfee',self.student)
        self.assertEqual(payment.amount_auth, 12224.0) # 11975 + 150 + 99
        self.student['studycourse'].previous_verdict = 'O'
        error, payment = utils.setPaymentDetails('schoolfee',self.student)
        self.assertEqual(payment.amount_auth, 12125.0) # 11975 + 150
        return
