source: main/waeup.sirp/trunk/src/waeup/sirp/university/courserefs.txt @ 6230

Last change on this file since 6230 was 6217, checked in by Henrik Bettermann, 13 years ago

Fix tests.

File size: 3.6 KB
Line 
1Course referrers
2****************
3
4Courses are referred to by certificate courses.
5
6:Test-Layer: functional
7
8We can be sure, that when removing courses or referrers of them,
9other data will be handled in a way we expect. That is,
10
11* when we remove a course, we want all referrers to it be removed as
12  well
13
14* when we remove a referrer of a course, nothing else should be
15  touched but only this very referrer.
16
17
18As correct deletion of referrer needs support of catalogs (we lookup
19catalogs to find referrers), we need a fully blown ZODB here,
20including an instance of :class:`waeup.sirp.app.University`, as this is our
21`ISite` object where the catalogs are stored.
22
23We create a complete university tree, starting with a
24:class:`University` instance and going down to courses, certificats
25and course certificates:
26
27    >>> from waeup.sirp.app import University
28    >>> root = getRootFolder()
29    >>> root['app'] = University()
30
31We have to set the site, to enable proper working of catalogs and
32`IObjectRemoved` handlers:
33
34    >>> from zope.app.component.hooks import setSite
35    >>> setSite(root['app'])
36
37    >>> from zope.component import createObject
38    >>> faculty = createObject('waeup.Faculty')
39    >>> faculty.code = 'FAC'
40    >>> root['app']['faculties'].addFaculty(faculty)
41    >>> fac = root['app']['faculties']['FAC']
42
43    >>> dept = createObject('waeup.Department')
44    >>> dept.code = 'DEPT'
45    >>> root['app']['faculties']['FAC'].addDepartment(dept)
46
47    >>> course = createObject('waeup.Course')
48    >>> course.code = 'CRS1'
49    >>> fac['DEPT'].courses.addCourse(course)
50    'Course added.'
51
52Now let's add another department, which will also hold a course:
53
54    >>> dept2 = createObject('waeup.Department')
55    >>> dept2.code = 'DEPT2'
56    >>> root['app']['faculties']['FAC'].addDepartment(dept2)
57
58    >>> course = createObject('waeup.Course')
59    >>> course.code = 'CRS2'
60    >>> fac['DEPT2'].courses.addCourse(course)
61    'Course added.'
62
63Finally, we add a certificate with referrers (certificate courses) to
64the created courses:
65
66    >>> cert = createObject('waeup.Certificate')
67    >>> cert.code = 'CERT'
68    >>> fac['DEPT'].certificates.addCertificate(cert)
69    'Certificate added.'
70
71    >>> fac['DEPT'].certificates['CERT'].addCourseRef(
72    ...   fac['DEPT'].courses['CRS1'])
73
74    >>> fac['DEPT'].certificates['CERT'].addCourseRef(
75    ...   fac['DEPT2'].courses['CRS2'])
76
77We add the latter course again, but this time for the second level:
78
79    >>> fac['DEPT'].certificates['CERT'].addCourseRef(
80    ...   fac['DEPT2'].courses['CRS2'], level=200)
81
82So, we have three referrers in our certificate of two different
83courses stored somewhere in the application:
84
85    >>> list(fac['DEPT'].certificates['CERT'])
86    [u'CRS1_100', u'CRS2_100', u'CRS2_200']
87
88Both, the courses themselves and the referrers of them, are the same
89(not only equal):
90
91    >>> a = root['app']['faculties']['FAC']['DEPT']
92    >>> b1 = a.courses['CRS1']
93    >>> b2 = a.certificates['CERT']['CRS1_100'].course
94    >>> b1 is b2
95    True
96
97If we remove the course, also the select item in the certificate course
98will be gone:
99
100    >>> list(a.certificates['CERT'])
101    [u'CRS1_100', u'CRS2_100', u'CRS2_200']
102
103    >>> list(a.courses)
104    [u'CRS1']
105
106    >>> del root['app']['faculties']['FAC']['DEPT'].courses['CRS1']
107    >>> list(a.certificates['CERT'])
108    [u'CRS2_100', u'CRS2_200']
109
110    >>> list(a.courses)
111    []
112
113If we remove a referrer of a course, this will not touch the course
114nor other referrers:
115
116    >>> del fac['DEPT'].certificates['CERT']['CRS2_200']
117    >>> list(a.certificates['CERT'])
118    [u'CRS2_100']
119
120    >>> list(fac['DEPT2'].courses)
121    [u'CRS2']
Note: See TracBrowser for help on using the repository browser.