# -*- coding: utf-8 -*-
import unittest
import grok
from zope.component import getUtility, queryUtility, createObject
from zope.catalog.interfaces import ICatalog
from waeup.kofa.students.interfaces import IStudentsUtils
from waeup.kofa.students.utils import formatted_text
from waeup.kofa.students.tests.test_browser import StudentsFullSetup
class FormatterTests(unittest.TestCase):
def test_formatted_text(self):
# we can format strings, unicode and things convertable to unicode.
result1 = formatted_text('sample')
result2 = formatted_text('ümlaut')
result3 = formatted_text(3)
result4 = formatted_text(u'unicöde')
result5 = formatted_text(u'sample', color='red')
self.assertTrue(isinstance(result1, unicode))
self.assertEqual(
result1, u'sample')
self.assertEqual(
result2, u'ümlaut')
self.assertEqual(
result3, u'3')
self.assertEqual(
result4, u'unicöde')
self.assertEqual(
result5, u'sample')
return
class StudentsUtilsTests(StudentsFullSetup):
def test_setReturningData(self):
utils = getUtility(IStudentsUtils)
self.student['studycourse'].current_level = 600
utils.setReturningData(self.student)
# The new level exceeds the certificates end_level.
# In this case current_level remains unchanged and no error is raised.
self.assertEqual(self.student['studycourse'].current_level, 600)
def test_setMatricNumber(self):
site = grok.getSite()
utils = getUtility(IStudentsUtils)
# Matric number can't be set twice.
msg, mnumber = utils.setMatricNumber(self.student)
self.assertEqual(msg, 'Matriculation number already set.')
self.assertEqual(mnumber, None)
self.assertEqual(self.student.matric_number, '234')
self.student.matric_number = None
# Matric number can't be set if next_matric_integer is 0.
msg, mnumber = utils.setMatricNumber(self.student)
self.assertEqual(msg, 'Matriculation number cannot be set.')
self.assertEqual(mnumber, None)
site['configuration'].next_matric_integer = 1
# Now all requirements are met and matric number can be set.
msg, mnumber = utils.setMatricNumber(self.student)
self.assertEqual(msg, None)
self.assertEqual(mnumber, '1')
self.assertEqual(self.student.matric_number, '1')
self.assertEqual(site['configuration'].next_matric_integer, 2)
# Student can be found in catalog with new matric number.
cat = queryUtility(ICatalog, name='students_catalog')
results = list(cat.searchResults(matric_number=('1', '1')))
self.assertEqual(self.student,results[0])
# Add another student.
another_student = createObject('waeup.Student')
another_student.matric_number = u'2'
self.app['students'].addStudent(another_student)
# Matric number can't be assigned twice.
self.student.matric_number = None
msg, mnumber = utils.setMatricNumber(self.student)
self.assertEqual(msg, 'Matriculation number 2 exists.')
self.assertEqual(mnumber, None)
self.assertEqual(self.student.matric_number, None)
# Certificate must be set.
self.student.matric_number = None
another_student.matric_number = u'999'
self.student['studycourse'].certificate = None
msg, mnumber = utils.setMatricNumber(self.student)
self.assertEqual(msg, 'No certificate assigned.')
return
def test_set_payment_details(self):
self.app['configuration']['2004'].gown_fee = 150.0
self.app['configuration']['2004'].transcript_fee = 90.0
self.app['configuration']['2004'].late_registration_fee = 180.0
utils = getUtility(IStudentsUtils)
error, payment = utils.setPaymentDetails(
'combi',self.student, None, None,
['gown', 'transcript', 'late_registration'])
self.assertEqual(payment.p_level, 100)
self.assertEqual(payment.p_session, 2004)
self.assertEqual(payment.amount_auth, 420.0)
self.assertEqual(payment.p_item,
u'Gown Hire Fee + Transcript Fee + Late Course Registration Fee')
self.assertEqual(payment.p_combi,
['gown', 'transcript', 'late_registration'])
return