source: main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_webservices.py @ 10036

Last change on this file since 10036 was 10036, checked in by Henrik Bettermann, 12 years ago

Add web service method which gets the course tickets registered by a student in a certain session.

File size: 3.8 KB
Line 
1# Tests for webservices
2import xmlrpclib
3from zope.app.testing.xmlrpc import ServerProxy
4from zope.component import createObject
5from zope.component.hooks import setSite
6from zope.testbrowser.testing import Browser
7from waeup.kofa.app import University
8from waeup.kofa.testing import FunctionalLayer, FunctionalTestCase
9from waeup.kofa.students.tests.test_browser import StudentsFullSetup
10from waeup.kofa.students.studylevel import StudentStudyLevel, CourseTicket
11
12class XMLRPCTests(StudentsFullSetup):
13    # check XMLRPC services for university portal
14
15    layer = FunctionalLayer
16
17    def setup_student(self, student):
18        study_level = StudentStudyLevel()
19        study_level.level_session = 2012
20        study_level.level_verdict = "A"
21        study_level.level = 100
22        student['studycourse'].addStudentStudyLevel(
23            self.certificate, study_level)
24
25        ticket = CourseTicket()
26        ticket.automatic = True
27        ticket.carry_over = True
28        ticket.code = u'CRS1'
29        ticket.title = u'Course 1'
30        ticket.fcode = u'FAC1'
31        ticket.dcode = u'DEP1'
32        ticket.credits = 100
33        ticket.passmark = 100
34        ticket.semester = 2
35        study_level[ticket.code] = ticket
36
37    def test_get_student_id_no_match(self):
38        # w/o any students we get none
39        server = ServerProxy('http://mgr:mgrpw@localhost/app')
40        result = server.get_student_id('Nonsense')
41        self.assertTrue(result is None)
42        return
43
44    def test_get_student_id_regno_exists(self):
45        # we can get the id of an existing student with matching reg_no
46        server = ServerProxy('http://mgr:mgrpw@localhost/app')
47        result = server.get_student_id('123')
48        self.assertEqual(result, 'K1000000')
49        self.assertEqual(self.student_id, result)
50        return
51
52    def test_get_student_id_block_unauthorized(self):
53        # requests from unauthorized users are blocked
54        # no username nor password
55        server = ServerProxy('http://localhost/app')
56        self.assertRaises(
57            xmlrpclib.ProtocolError, server.get_student_id, '123')
58        # wrong password
59        server = ServerProxy('http://mgr:WRONGPW@localhost/app')
60        self.assertRaises(
61            xmlrpclib.ProtocolError, server.get_student_id, '123')
62        # wrong username
63        server = ServerProxy('http://WRONGUSER:mgrpw@localhost/app')
64        self.assertRaises(
65            xmlrpclib.ProtocolError, server.get_student_id, '123')
66        return
67
68    REQUEST_XML="""\
69<?xml version="1.0"?>
70<methodCall>
71<methodName>get_student_id</methodName>
72<params>
73<param>
74<value><string>123</string></value>
75</param>
76</params>
77</methodCall>"""
78
79    RESPONSE_XML="""\
80<?xml version='1.0'?>
81<methodResponse>
82<params>
83<param>
84<value><string>K1000000</string></value>
85</param>
86</params>
87</methodResponse>
88"""
89
90    def test_XMLRPC_post(self):
91        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
92        self.browser.addHeader('Content-Length', len(self.REQUEST_XML))
93        self.browser.post('http://localhost/app', self.REQUEST_XML,
94            'text/xml; charset=utf-8')
95        self.assertEqual(self.browser.contents, self.RESPONSE_XML)
96
97    def test_get_courses_by_session(self):
98        server = ServerProxy('http://mgr:mgrpw@localhost/app')
99        result = server.get_courses_by_session('K1000000')
100        self.assertEqual(result, None)
101        self.setup_student(self.student)
102        result = server.get_courses_by_session('K1000000', '2010')
103        self.assertEqual(result, None)
104        result = server.get_courses_by_session('K1000000', '2012')
105        self.assertEqual(result,
106            {'100|CRS1': 'Course 1', '100|COURSE1': 'Unnamed Course'})
107        result = server.get_courses_by_session('K1000000')
108        self.assertEqual(result,
109            {'100|CRS1': 'Course 1', '100|COURSE1': 'Unnamed Course'})
110        return
Note: See TracBrowser for help on using the repository browser.