from waeup.custom.testing import FunctionalLayer
from waeup.sirp.students.tests.test_browser import StudentsFullSetup
from waeup.custom.configuration import SessionConfiguration

class StudentUITests(StudentsFullSetup):
    # Tests for customized student class views and pages

    layer = FunctionalLayer

    def test_manage_payments(self):
        # Add missing configuration data
        self.app['configuration']['2004'].gown_fee = 150
        self.app['configuration']['2004'].transfer_fee = 90
        self.app['configuration']['2004'].clearance_fee = 120
        self.app['configuration']['2004'].maint_fee = 180

        # Managers can add online payment tickets
        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
        self.browser.open(self.payments_student_path)
        self.browser.getControl("Add online payment ticket").click()
        self.browser.getControl("Create ticket").click()
        self.assertMatches('...Amount could not be determined...',
                           self.browser.contents)
        self.browser.open(self.manage_student_path)
        self.browser.getControl(name="transition").value = ['admit']
        self.browser.getControl("Save").click()
        self.browser.getControl(name="transition").value = ['start_clearance']
        self.browser.getControl("Save").click()
        self.browser.getControl(name="transition").value = ['request_clearance']
        self.browser.getControl("Save").click()
        self.browser.getControl(name="transition").value = ['clear']
        self.browser.getControl("Save").click()
        self.browser.open(self.payments_student_path + '/addop')
        self.browser.getControl("Create ticket").click()
        self.assertMatches('...ticket created...',
                           self.browser.contents)
        self.browser.open(self.manage_student_path)
        self.browser.getControl(
            name="transition").value = ['pay_first_school_fee']
        self.browser.getControl("Save").click()
        self.browser.getControl(name="transition").value = ['reset6']
        self.browser.getControl("Save").click()
        self.browser.open(self.payments_student_path + '/addop')
        self.browser.getControl("Create ticket").click()
        self.assertMatches('...This payment ticket already exists...',
                           self.browser.contents)
        # Remove all payments so that we can add a school fee payment again
        for payment in self.student['payments'].keys():
            del self.student['payments'][payment]
        self.browser.open(self.payments_student_path + '/addop')
        self.browser.getControl("Create ticket").click()
        self.assertMatches('...ticket created...',
                           self.browser.contents)
        self.browser.open(self.payments_student_path + '/addop')
        self.browser.getControl(name="form.p_category").value = ['gown']
        self.browser.getControl("Create ticket").click()
        self.browser.open(self.payments_student_path + '/addop')
        self.browser.getControl(name="form.p_category").value = ['transfer']
        self.browser.getControl("Create ticket").click()
        self.browser.open(self.payments_student_path + '/addop')
        self.browser.getControl(
            name="form.p_category").value = ['bed_allocation']
        self.browser.getControl("Create ticket").click()
        self.browser.open(self.payments_student_path + '/addop')
        self.browser.getControl(
            name="form.p_category").value = ['hostel_maintenance']
        self.browser.getControl("Create ticket").click()
        self.browser.open(self.payments_student_path + '/addop')
        self.browser.getControl(name="form.p_category").value = ['clearance']
        self.browser.getControl("Create ticket").click()
        self.certificate.study_mode = 'ug_pt'
        self.browser.open(self.payments_student_path + '/addop')
        self.browser.getControl(name="form.p_category").value = ['schoolfee']
        self.browser.getControl("Create ticket").click()
        self.assertMatches('...Amount could not be determined...',
                           self.browser.contents)

        # If the session configuration doesn't exist and error message will
        # be shown
        del self.app['configuration']['2004']
        self.browser.open(self.payments_student_path)
        self.browser.getControl("Add online payment ticket").click()
        self.browser.getControl("Create ticket").click()
        self.assertMatches('...Session configuration object is not...',
                           self.browser.contents)


