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

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

Fix tests.

File size: 3.6 KB
RevLine 
[5978]1Course referrers
2****************
[4488]3
[5978]4Courses are referred to by certificate courses.
[4488]5
6:Test-Layer: functional
7
[5978]8We can be sure, that when removing courses or referrers of them,
[4488]9other data will be handled in a way we expect. That is,
10
[5978]11* when we remove a course, we want all referrers to it be removed as
[4488]12  well
13
[5978]14* when we remove a referrer of a course, nothing else should be
15  touched but only this very referrer.
[4488]16
17
[5978]18As correct deletion of referrer needs support of catalogs (we lookup
19catalogs to find referrers), we need a fully blown ZODB here,
[4921]20including an instance of :class:`waeup.sirp.app.University`, as this is our
[4488]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
[4921]27    >>> from waeup.sirp.app import University
[4488]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'
[4749]40    >>> root['app']['faculties'].addFaculty(faculty)
41    >>> fac = root['app']['faculties']['FAC']
[4488]42
43    >>> dept = createObject('waeup.Department')
44    >>> dept.code = 'DEPT'
[4749]45    >>> root['app']['faculties']['FAC'].addDepartment(dept)
[4488]46
47    >>> course = createObject('waeup.Course')
48    >>> course.code = 'CRS1'
49    >>> fac['DEPT'].courses.addCourse(course)
[6217]50    'Course added.'
[4488]51
52Now let's add another department, which will also hold a course:
53
54    >>> dept2 = createObject('waeup.Department')
55    >>> dept2.code = 'DEPT2'
[4749]56    >>> root['app']['faculties']['FAC'].addDepartment(dept2)
[4488]57
58    >>> course = createObject('waeup.Course')
59    >>> course.code = 'CRS2'
60    >>> fac['DEPT2'].courses.addCourse(course)
[6217]61    'Course added.'
[4488]62
[5978]63Finally, we add a certificate with referrers (certificate courses) to
[4488]64the created courses:
65
66    >>> cert = createObject('waeup.Certificate')
67    >>> cert.code = 'CERT'
68    >>> fac['DEPT'].certificates.addCertificate(cert)
[6217]69    'Certificate added.'
[4488]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
[5978]82So, we have three referrers in our certificate of two different
[4488]83courses stored somewhere in the application:
84
85    >>> list(fac['DEPT'].certificates['CERT'])
86    [u'CRS1_100', u'CRS2_100', u'CRS2_200']
87
[5978]88Both, the courses themselves and the referrers of them, are the same
[4488]89(not only equal):
90
[4749]91    >>> a = root['app']['faculties']['FAC']['DEPT']
[4488]92    >>> b1 = a.courses['CRS1']
93    >>> b2 = a.certificates['CERT']['CRS1_100'].course
94    >>> b1 is b2
95    True
96
[5978]97If we remove the course, also the select item in the certificate course
[4488]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
[4749]106    >>> del root['app']['faculties']['FAC']['DEPT'].courses['CRS1']
[4488]107    >>> list(a.certificates['CERT'])
108    [u'CRS2_100', u'CRS2_200']
109
110    >>> list(a.courses)
111    []
112
[5978]113If we remove a referrer of a course, this will not touch the course
114nor other referrers:
[4488]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.