Index: /main/waeup.kofa/trunk/docs/source/userdocs/students/browser.rst
===================================================================
--- /main/waeup.kofa/trunk/docs/source/userdocs/students/browser.rst	(revision 13045)
+++ /main/waeup.kofa/trunk/docs/source/userdocs/students/browser.rst	(revision 13046)
@@ -73,4 +73,8 @@
   All messages sent via Kofa contact forms are private. They are neither stored in the database nor in any logfile. The emails are also not forwarded to any other email address. Thus senders and recipients can be sure that nobody else is eavesdropping and the correspondence is kept secret.
 
+.. seealso::
+
+  :ref:`Clearance Handling Doctests <test_handle_clearance>`
+
 
 .. _transferring_students:
@@ -89,4 +93,5 @@
 The old study course container(s) can still be accessed via links on the current study course display page. But, they can neither be edited, removed, exported or reimported.
 
+
 Batch Transferring Students
 ---------------------------
@@ -94,4 +99,5 @@
 Sometimes students of an entire study programme have to be transferred to another programme. This can be done with the :py:class:`StudentStudyCourseProcessor<waeup.kofa.students.batching.StudentStudyCourseProcessor>`. The import file must contain the following columns: `student_id` (or any other locator), `certificate`, `current_session`, `current_level` and `entry_mode`. Do not import `entry_session`. A transfer is automatically initialized if the `entry_mode` value is ``transfer``.
 
+
 Reverting Previous Transfers
 ----------------------------
@@ -99,4 +105,5 @@
 Previous transfers can be reverted by opening the previous study course and clicking the 'Reactivate this study course (revert previous transfer)' button. This is a complete rollback of the last transfer. The current study mode will be irrevocably deleted and replaced by the previous study course. The second last study course will become the previous study course.
 
+
 .. _payment_tickets:
 
@@ -108,4 +115,5 @@
 There are three different add form pages to add `StudentOnlinePayment` instances (= payment tickets). They all create objects of the same type, only their attributes are set differently.
 
+
 Current Session Payment Tickets
 -------------------------------
@@ -117,4 +125,5 @@
   Kofa always determines the total amount, including any fees charged by the school and its service providers. This is the amount which is authorized by students and finally submitted to one of the payment gateways. No fees can be added once the payment ticket is created. Payment tickets do not store any information about charged fees.
 
+
 Ticket Redemption
 -----------------
@@ -125,4 +134,5 @@
 Until May 2015 also school fee payments had produced access codes, which enabled students to start the next session. Since software revision 12889, Kofa bypasses SFE access code creation and starts the next session automatically.
 
+
 Previous Session Payment Tickets
 --------------------------------
@@ -130,4 +140,5 @@
 Previous session payments are additional payments which do not induce further actions in Kofa. Their sole purpose is to enable students to pay for services in previous sessions which they missed to pay. The add form for previous session payments allows the student to select the payment category, session and level by him/herself.
 
+
 Balance Payment Tickets
 -----------------------
@@ -135,4 +146,6 @@
 Balance payments have been introduced to correct previously made payments. In some cases, students select the wrong payment category, or other things may have happened which led students pay less than expected. This can be balanced by paying a differential amount. Therefore, the add form for balance payments allows to freely choose the total amount to be paid. It also asks for the category, the session and the level the payment is meant for. Like previous session payments, balance payments do not induce further actions in Kofa. Both can be omitted in customized versions of Kofa if these features are not needed.
 
+.. _course_registration:
+
 Course Registration
 ===================
@@ -142,16 +155,35 @@
 1. :py:meth:`StudentStudyLevel.addCertCourseTickets<waeup.kofa.students.studylevel.StudentStudyLevel.addCertCourseTickets>` is called which iterates over the certificate courses of the certificate container object in the academic section and creates course tickets if the `level` attribute matches. `title`, `fcode`, `dcode`, `credits`, `passmark` and `semester` are copied from the course object which is attached to the certificate course; `mandatory` is taken from the certificate course itself. Finally, `automatic` is set to ``True`` and `carry_over` to ``False.``
 
-2. The portal can be configured such that failed courses are automatically carried over from one session to the next. Failed course tickets from the previous level, i.e. tickets with a score below the passmark, are collected and 'copied' into the current study level container. The attributes `automatic` and `carry_over` are set to ``True``.
-
-In most cases, such an automatically created course list is not perfect or even ready for submission to the course adviser. The list has to be edited according to the student's needs. Students can select further courses, which they desire to attend, and can create additional course tickets, as long as total credits do not exceed 50 (value customizable). Course tickets can also be removed. Whereas officers can remove any ticket from the list, students can remove only optional (non-mandatory) course tickets (condition customizable).
+2. The portal can be configured (`IConfigurationContainer.carry_over`) such that failed courses are automatically carried over from one session to the next. Failed course tickets from the previous level, i.e. tickets with a score below the passmark, are collected and 'copied' into the current study level container. The attributes `automatic` and `carry_over` are set to ``True``.
+
+In most cases such an automatically created course list is not perfect or even ready for submission to the course adviser. The list must be edited according to the student's needs. Students can select further courses, which they desire to attend, and can create additional course tickets, as long as total credits do not exceed 50 (value customizable). Course tickets can also be removed. Whereas officers can remove any ticket from the list, students can remove only optional (non-mandatory) course tickets (condition customizable).
 
 The edit form page provides a 'Register course list' button which submits the course list to the course adviser for validation. Course advisers can't edit the registered/submitted course list, but they can validate or reject it by pressing the same-named link buttons. After pressing the 'Reject courses' button, Kofa redirects to the ContactStudentForm which can be used to inform the student about the reason of rejection. In contrast to clearance rejection, the message, which is being sent to the student by email, is neither stored in the database nor in the logfiles.
 
-Editing Scores by Lecturers
-===========================
+.. seealso::
+
+  :ref:`Course List Validation Doctests <test_handle_courses>`
+
+
+.. _batch_editing_scores:
+
+Batch Editing Scores by Lecturers
+=================================
+
+Lecturer cannot access student data directly. They don't have access to the student section. Instead, lecturers go to their course in the academic section and view or export lists of students who attended the course, either in a previous or in the current session. They do also see an 'Update scores' link button which opens the `EditScoresPage` if score editing is enabled for that department (`IDepartment.score_editing_disabled`) and `IConfigurationContainer.current_academic_session` has been set on the portal's configuration page. The page lists all students, who are attending the course in the current academic session. If score editing is allowed, the score can be entered at the end of the student line. Score editing is allowed if the student's current session corresponds with the current academic session and the student is in state 'courses validated', see method :py:meth:`CourseTicket.editable_by_lecturer<waeup.kofa.students.studylevel.CourseTicket.editable_by_lecturer>`
+
+.. seealso::
+
+  :ref:`Batch Editing Scores Doctests <test_batch_editing_scores>`
+
+
+.. _requesting_new_password:
 
 Requesting New Password
 =======================
 
+
+.. bed_tickets:
+
 Bed Tickets
 ===========
Index: /main/waeup.kofa/trunk/docs/source/userdocs/testing.rst
===================================================================
--- /main/waeup.kofa/trunk/docs/source/userdocs/testing.rst	(revision 13045)
+++ /main/waeup.kofa/trunk/docs/source/userdocs/testing.rst	(revision 13046)
@@ -171,4 +171,5 @@
 `browser.contents` (is the HTML content of the opened page).
 
+
 .. _test_suspended_officer:
 
@@ -188,3 +189,37 @@
 <officers>`.
 
-Further tests will follow soon.
+
+.. _test_handle_clearance:
+
+Handle Clearance by Clearance Officer
+-------------------------------------
+
+This test can be found in
+`waeup.kofa.students.tests.test_browser.OfficerUITests`:
+
+.. literalinclude:: ../../../src/waeup/kofa/students/tests/test_browser.py
+   :pyobject: test_handle_clearance_by_co
+
+
+.. _test_handle_courses:
+
+Handle Course List Validation by Course Adviser
+-----------------------------------------------
+
+This test can be found in
+`waeup.kofa.students.tests.test_browser.OfficerUITests`:
+
+.. literalinclude:: ../../../src/waeup/kofa/students/tests/test_browser.py
+   :pyobject: test_handle_courses_by_ca
+
+
+.. _test_batch_editing_scores:
+
+Batch Editing Scores by Lecturers
+---------------------------------
+
+This test can be found in
+`waeup.kofa.students.tests.test_browser.OfficerUITests`:
+
+.. literalinclude:: ../../../src/waeup/kofa/students/tests/test_browser.py
+   :pyobject: test_handle_courses_by_lecturer
Index: /main/waeup.kofa/trunk/src/waeup/kofa/permissions.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/permissions.py	(revision 13045)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/permissions.py	(revision 13046)
@@ -355,5 +355,5 @@
     """The local Lecturer role can be assigned at course level.
     The role allows to view all data and to list or export all student
-    ata within course the local role is assigned. Lecturers can't access
+    data within the course the local role is assigned. Lecturers can't access
     student data directly but they can edit the scores in course tickets.
     """
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 13045)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 13046)
@@ -309,8 +309,12 @@
     @property
     def removable_by_student(self):
+        """True if student is allowed to remove the ticket.
+        """
         return not self.mandatory
 
     @property
     def editable_by_lecturer(self):
+        """True if lecturer is allowed to edit the ticket.
+        """
         try:
             cas = grok.getSite()[
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 13045)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 13046)
@@ -1623,5 +1623,4 @@
 
     def test_handle_courses_by_ca(self):
-        # Create course adviser
         self.app['users'].addUser('mrsadvise', 'mrsadvisesecret')
         self.app['users']['mrsadvise'].email = 'mradvise@foo.ng'
@@ -1751,5 +1750,4 @@
 
     def test_handle_courses_by_lecturer(self):
-        # Create course lecturer
         self.app['users'].addUser('mrslecturer', 'mrslecturersecret')
         self.app['users']['mrslecturer'].email = 'mrslecturer@foo.ng'
