Index: /main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_browser.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_browser.py	(revision 7109)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_browser.py	(revision 7110)
@@ -362,6 +362,13 @@
         self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
         self.browser.open(self.edit_clearance_student_path)
+        # No birth certificate has been uploaded yet
+        # Browsing the link shows a placerholder image
+        self.browser.open('birth_certificate.jpg')
+        self.assertEqual(
+            self.browser.headers['content-type'], 'image/jpeg')
+        self.assertEqual(len(self.browser.contents), PH_LEN)
         # Create a pseudo image file and select it to be uploaded in form
         # as birth certificate
+        self.browser.open(self.edit_clearance_student_path)
         pseudo_image = StringIO('I pretend to be a graphics file')
         ctrl = self.browser.getControl(name='birth_certificate')
@@ -371,5 +378,6 @@
         self.browser.getControl("Save (no upload)").click() # submit form
         self.assertFalse(
-            '<a target="image" href="birth_certificate.jpg">' in self.browser.contents)
+            '<a target="image" href="birth_certificate.jpg">'
+            in self.browser.contents)
         # ... but the Upload submit button does
         pseudo_image = StringIO('I pretend to be a graphics file')
@@ -397,4 +405,27 @@
         self.assertTrue(
             'Uploaded file is too big' in self.browser.contents)
+        # File names must meet several conditions
+        pseudo_image = StringIO('I pretend to be a graphics file')
+        ctrl = self.browser.getControl(name='birth_certificate')
+        file_ctrl = ctrl.mech_control
+        file_ctrl.add_file(pseudo_image, filename='my.photo.jpg')
+        self.browser.getControl("Upload").click()
+        self.assertTrue('File name contains more than one dot'
+            in self.browser.contents)
+        ctrl = self.browser.getControl(name='birth_certificate')
+        file_ctrl = ctrl.mech_control
+        file_ctrl.add_file(pseudo_image, filename='myphoto')
+        self.browser.getControl("Upload").click()
+        self.assertTrue('File name has no extension' in self.browser.contents)
+        ctrl = self.browser.getControl(name='birth_certificate')
+        file_ctrl = ctrl.mech_control
+        file_ctrl.add_file(pseudo_image, filename='myphoto.bmp')
+        self.browser.getControl("Upload").click()
+        self.assertTrue('.jpg file extension expected' in self.browser.contents)
+        # Managers can delete files
+        self.browser.getControl("Delete").click()
+        self.assertTrue(
+            'File birth_certificate.jpg deleted'
+            in self.browser.contents)
 
     def test_manage_course_lists(self):
@@ -406,5 +437,6 @@
         self.browser.getLink("Manage").click()
         self.assertTrue('Manage study course' in self.browser.contents)
-        # Before we can select a level, the certificate must be selected and saved
+        # Before we can select a level, the certificate must
+        # be selected and saved
         self.browser.getControl(name="form.certificate").value = ['CERT1']
         self.browser.getControl(name="form.current_session").value = ['2004']
@@ -422,5 +454,6 @@
         self.assertMatches('...This level exists...', self.browser.contents)
         self.browser.getControl("Remove selected").click()
-        self.assertMatches('...No study level selected...', self.browser.contents)
+        self.assertMatches(
+            '...No study level selected...', self.browser.contents)
         self.browser.getControl(name="val_id").value = ['100']
         self.browser.getControl("Remove selected").click()
@@ -433,5 +466,6 @@
         # Managers can view and manage course lists
         self.browser.getLink("100").click()
-        self.assertMatches('...: Study Level 100 (Year 1)...', self.browser.contents)
+        self.assertMatches(
+            '...: Study Level 100 (Year 1)...', self.browser.contents)
         self.browser.getLink("Manage").click()
         self.browser.getControl(name="form.level_session").value = ['2002']
@@ -476,5 +510,6 @@
         self.browser.getControl(name="transition").value = ['clear']
         self.browser.getControl("Save").click()
-        self.browser.getControl(name="transition").value = ['pay_first_school_fee']
+        self.browser.getControl(
+            name="transition").value = ['pay_first_school_fee']
         self.browser.getControl("Save").click()
         self.browser.getControl(name="transition").value = ['reset6']
Index: /main/waeup.sirp/trunk/src/waeup/sirp/students/viewlets.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/students/viewlets.py	(revision 7109)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/students/viewlets.py	(revision 7110)
@@ -92,10 +92,4 @@
     link = 'index'
     text = u'Base Data'
-
-    @property
-    def alt(self):
-        """Alternative text for icon.
-        """
-        return self.text
 
     @property
